@tiangong-lca/cli 0.1.3 → 0.1.6

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 (54) hide show
  1. package/README.md +47 -11
  2. package/dist/src/cli.d.ts +4 -0
  3. package/dist/src/cli.js +264 -7
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/lib/auth-identity-receipt.d.ts +2 -2
  6. package/dist/src/lib/auth-identity-receipt.js +20 -12
  7. package/dist/src/lib/auth-identity-receipt.js.map +1 -1
  8. package/dist/src/lib/batch/types.js.map +1 -1
  9. package/dist/src/lib/dataset-bilingual.js.map +1 -1
  10. package/dist/src/lib/dataset-curation-queue.js.map +1 -1
  11. package/dist/src/lib/dataset-local.js.map +1 -1
  12. package/dist/src/lib/dataset-maintenance-apply.js.map +1 -1
  13. package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -1
  14. package/dist/src/lib/dataset-maintenance-contract.js.map +1 -1
  15. package/dist/src/lib/dataset-maintenance-verify.js.map +1 -1
  16. package/dist/src/lib/dataset-save-draft-run.js.map +1 -1
  17. package/dist/src/lib/env.d.ts +8 -0
  18. package/dist/src/lib/env.js +36 -3
  19. package/dist/src/lib/env.js.map +1 -1
  20. package/dist/src/lib/flow-fetch-rows.js.map +1 -1
  21. package/dist/src/lib/flow-read.js.map +1 -1
  22. package/dist/src/lib/identity-preflight.js.map +1 -1
  23. package/dist/src/lib/lca-release.d.ts +1 -1
  24. package/dist/src/lib/lca-release.js +3 -4
  25. package/dist/src/lib/lca-release.js.map +1 -1
  26. package/dist/src/lib/lifecyclemodel-resulting-process.js +6 -2
  27. package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -1
  28. package/dist/src/lib/oauth-loopback.d.ts +52 -0
  29. package/dist/src/lib/oauth-loopback.js +229 -0
  30. package/dist/src/lib/oauth-loopback.js.map +1 -0
  31. package/dist/src/lib/oauth-pkce.d.ts +63 -0
  32. package/dist/src/lib/oauth-pkce.js +268 -0
  33. package/dist/src/lib/oauth-pkce.js.map +1 -0
  34. package/dist/src/lib/process-dedup-review.js.map +1 -1
  35. package/dist/src/lib/process-flow-build-plan.js.map +1 -1
  36. package/dist/src/lib/process-refresh-references.js +2 -2
  37. package/dist/src/lib/process-refresh-references.js.map +1 -1
  38. package/dist/src/lib/process-scope-statistics.js +8 -3
  39. package/dist/src/lib/process-scope-statistics.js.map +1 -1
  40. package/dist/src/lib/process-verify-rows.js.map +1 -1
  41. package/dist/src/lib/publish.js.map +1 -1
  42. package/dist/src/lib/state-lock.js +10 -4
  43. package/dist/src/lib/state-lock.js.map +1 -1
  44. package/dist/src/lib/supabase-client.d.ts +13 -1
  45. package/dist/src/lib/supabase-client.js +64 -3
  46. package/dist/src/lib/supabase-client.js.map +1 -1
  47. package/dist/src/lib/supabase-json-ordered-write.js +7 -3
  48. package/dist/src/lib/supabase-json-ordered-write.js.map +1 -1
  49. package/dist/src/lib/supabase-rest.js.map +1 -1
  50. package/dist/src/lib/supabase-session.d.ts +63 -8
  51. package/dist/src/lib/supabase-session.js +315 -21
  52. package/dist/src/lib/supabase-session.js.map +1 -1
  53. package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
  54. package/package.json +8 -7
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/lib/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { CliError } from './errors.js';\nimport { writeJsonArtifact } from './artifacts.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport {\n syncLifecyclemodelBundleRecord,\n type LifecyclemodelPublishMetadata,\n} from './lifecyclemodel-bundle-save.js';\nimport {\n summarizeProcessPayloadValidation,\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport { syncStateAwareProcessRecord } from './process-save-draft.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport { getRuntimeRuleset } from './runtime-rulesets.js';\nimport {\n hasSupabaseRestRuntime,\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedTable,\n type SupabaseJsonOrderedWriteMode,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_MAX_ATTEMPTS = 5;\nconst DEFAULT_RETRY_DELAY_SECONDS = 2.0;\nconst DEFAULT_DATASET_VERSION = '01.01.000';\nconst PUBLISH_VERIFICATION_RULESET_ID = 'publish-run/default';\nconst PUBLISH_VERIFICATION_RULESET_VERSION = '1';\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensure_list(value: unknown): unknown[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction first_non_empty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nfunction to_positive_integer(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? Number.parseInt(value, 10)\n : Number.NaN;\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError('Publish request expected a positive integer value.', {\n code: 'PUBLISH_INVALID_INTEGER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_non_negative_number(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new CliError('Publish request expected a non-negative number value.', {\n code: 'PUBLISH_INVALID_NUMBER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_boolean(value: unknown, defaultValue: boolean): boolean {\n return value === undefined ? defaultValue : Boolean(value);\n}\n\nfunction resolve_path(baseDir: string, value: string): string {\n return path.resolve(baseDir, value);\n}\n\nfunction load_json_object(filePath: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PUBLISH_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction default_out_dir(baseDir: string, commit: boolean, now: Date = new Date()): string {\n const runId = buildRunId({\n namespace: 'publish',\n operation: commit ? 'commit' : 'dry_run',\n now,\n });\n return resolveRunLayout(path.join(baseDir, 'artifacts'), 'publish', runId).runRoot;\n}\n\nfunction serialize_error(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nexport type PublishDatasetEntry =\n | string\n | {\n file?: string;\n path?: string;\n json_ordered?: JsonObject;\n jsonOrdered?: JsonObject;\n payload?: JsonObject;\n [key: string]: unknown;\n };\n\nexport type PublishProcessBuildRunEntry =\n | string\n | {\n run_id?: string;\n run_root?: string;\n exports_dir?: string;\n [key: string]: unknown;\n };\n\nexport type PublishCollectedOrigin = {\n source: 'bundle' | 'input';\n base_dir: string;\n bundle_path: string | null;\n};\n\nexport type PublishCollectedDatasetEntry = {\n entry: PublishDatasetEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedProcessBuildRunEntry = {\n entry: PublishProcessBuildRunEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedRelationEntry = {\n entry: unknown;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishRequest = {\n inputs: {\n bundle_paths: string[];\n lifecyclemodels: PublishDatasetEntry[];\n processes: PublishDatasetEntry[];\n sources: PublishDatasetEntry[];\n relations: unknown[];\n process_build_runs: PublishProcessBuildRunEntry[];\n };\n publish: {\n commit: boolean;\n publish_lifecyclemodels: boolean;\n publish_processes: boolean;\n publish_sources: boolean;\n publish_relations: boolean;\n publish_process_build_runs: boolean;\n relation_mode: 'local_manifest_only';\n max_attempts: number;\n retry_delay_seconds: number;\n process_build_forward_args: string[];\n };\n out_dir: string;\n};\n\nexport type PublishCollectedInputs = {\n bundle_paths: string[];\n lifecyclemodels: PublishCollectedDatasetEntry[];\n processes: PublishCollectedDatasetEntry[];\n sources: PublishCollectedDatasetEntry[];\n relations: PublishCollectedRelationEntry[];\n process_build_runs: PublishCollectedProcessBuildRunEntry[];\n};\n\nexport type DatasetPublishExecutorArgs = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string;\n version: string;\n payload: JsonObject;\n metadata?: LifecyclemodelPublishMetadata | null;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n publish: PublishRequest['publish'];\n};\n\nexport type ProcessBuildRunPublishExecutorArgs = {\n run_id: string;\n entry: PublishProcessBuildRunEntry;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n publish: PublishRequest['publish'];\n};\n\nexport type PublishExecutors = {\n lifecyclemodels?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n processes?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n sources?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n process_build_runs?: (args: ProcessBuildRunPublishExecutorArgs) => Promise<unknown> | unknown;\n};\n\nexport type PublishDatasetReport = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string | null;\n version: string | null;\n status:\n | 'prepared'\n | 'executed'\n | 'deferred_no_executor'\n | 'deferred_projection_payload'\n | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n reason?: string;\n validation?: ProcessPayloadValidationResult;\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishProcessBuildRunReport = {\n run_id: string;\n status: 'prepared' | 'executed' | 'deferred_no_executor' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishRelationManifest = {\n generated_at_utc: string;\n relation_mode: 'local_manifest_only';\n status: 'prepared_local_relation_manifest';\n relations: unknown[];\n};\n\nexport type PublishVerificationFinding = {\n code: string;\n severity: 'warning' | 'blocker';\n message: string;\n table: 'lifecyclemodels' | 'processes' | 'sources' | 'process_build_runs';\n id: string | null;\n version: string | null;\n path?: string;\n bundle_path?: string | null;\n};\n\nexport type PublishVerificationReport = {\n schema_version: 1;\n generated_at_utc: string;\n command: 'publish run';\n status: 'passed' | 'blocked';\n ruleset_id: string;\n ruleset_version: string;\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n commit: boolean;\n findings: PublishVerificationFinding[];\n blockers: PublishVerificationFinding[];\n next_action: 'ready_for_commit_or_publish' | 'fix_blockers';\n counts: {\n findings: number;\n blockers: number;\n failed: number;\n deferred: number;\n executed: number;\n };\n};\n\nexport type PublishReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n commit: boolean;\n status: 'completed' | 'completed_with_failures';\n counts: {\n bundle_paths: number;\n lifecyclemodels: number;\n processes: number;\n sources: number;\n relations: number;\n process_build_runs: number;\n executed: number;\n deferred: number;\n failed: number;\n };\n files: {\n normalized_request: string;\n collected_inputs: string;\n relation_manifest: string;\n verification_report: string;\n publish_report: string;\n };\n verification: PublishVerificationReport;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n process_build_runs: PublishProcessBuildRunReport[];\n relations: PublishRelationManifest;\n};\n\nexport type RunPublishOptions = {\n inputPath: string;\n rawRequest?: unknown;\n outDir?: string | null;\n commit?: boolean | null;\n executors?: PublishExecutors;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype PreparedPublishDatasetReport = PublishDatasetReport & {\n id: string;\n version: string;\n};\n\ntype NormalizePublishRequestOptions = {\n requestPath: string;\n outDirOverride?: string;\n commitOverride?: boolean;\n now?: Date;\n};\n\ntype PublishRequestOptions = {\n commit: boolean;\n executor:\n | PublishExecutors['lifecyclemodels']\n | PublishExecutors['processes']\n | PublishExecutors['sources']\n | undefined;\n publish: PublishRequest['publish'];\n};\n\ntype ProcessPublishRequestOptions = PublishRequestOptions & {\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype LoadedLifecyclemodelPublishEntry = {\n payload: JsonObject;\n metadata: LifecyclemodelPublishMetadata | null;\n};\n\nfunction extract_lifecyclemodel_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.lifeCycleModelDataSet) ? payload.lifeCycleModelDataSet : payload;\n const lifeCycleModelInformation = isRecord(root.lifeCycleModelInformation)\n ? root.lifeCycleModelInformation\n : {};\n const dataSetInformation = isRecord(lifeCycleModelInformation.dataSetInformation)\n ? lifeCycleModelInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(payload['@id'], payload.id, dataSetInformation['common:UUID']);\n const version = first_non_empty(\n payload['@version'],\n payload.version,\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Lifecycle model payload missing @id/id.', {\n code: 'PUBLISH_LIFECYCLEMODEL_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction extract_process_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError(\n 'Process payload missing processInformation.dataSetInformation.common:UUID.',\n {\n code: 'PUBLISH_PROCESS_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n return [datasetId, version];\n}\n\nfunction extract_source_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : payload;\n const sourceInformation = isRecord(root.sourceInformation) ? root.sourceInformation : {};\n const dataSetInformation = isRecord(sourceInformation.dataSetInformation)\n ? sourceInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Source payload missing sourceInformation.dataSetInformation.common:UUID.', {\n code: 'PUBLISH_SOURCE_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction load_dataset_entry(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n const source = load_dataset_entry_source(entry, baseDir);\n if (isRecord(source)) {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload'] as const) {\n const candidate = source[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n }\n\n return source;\n}\n\nfunction load_dataset_entry_source(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n if (isRecord(entry)) {\n const fileValue = first_non_empty(entry.file, entry.path);\n if (fileValue) {\n return load_json_object(resolve_path(baseDir, fileValue));\n }\n return entry;\n }\n\n if (typeof entry === 'string' && entry.trim()) {\n return load_json_object(resolve_path(baseDir, entry));\n }\n\n throw new CliError('Unsupported dataset entry in publish request.', {\n code: 'PUBLISH_UNSUPPORTED_DATASET_ENTRY',\n exitCode: 2,\n details: entry,\n });\n}\n\nfunction load_lifecyclemodel_publish_entry(\n entry: PublishDatasetEntry,\n baseDir: string,\n): LoadedLifecyclemodelPublishEntry {\n const source = load_dataset_entry_source(entry, baseDir);\n const payload = load_dataset_entry(entry, baseDir);\n const metadata: LifecyclemodelPublishMetadata = {};\n const jsonTg = isRecord(source.json_tg)\n ? source.json_tg\n : isRecord(source.jsonTg)\n ? source.jsonTg\n : null;\n if (jsonTg) {\n metadata.json_tg = jsonTg;\n }\n\n const processMutations = source.processMutations ?? source.process_mutations;\n if (Array.isArray(processMutations)) {\n metadata.processMutations = processMutations as JsonObject[];\n }\n\n const ruleVerification =\n typeof source.ruleVerification === 'boolean'\n ? source.ruleVerification\n : typeof source.rule_verification === 'boolean'\n ? source.rule_verification\n : undefined;\n if (typeof ruleVerification === 'boolean') {\n metadata.ruleVerification = ruleVerification;\n }\n\n return {\n payload,\n metadata: Object.keys(metadata).length > 0 ? metadata : null,\n };\n}\n\nfunction push_collected_entries<T>(\n target: Array<{ entry: T; origin: PublishCollectedOrigin }>,\n entries: unknown[],\n origin: PublishCollectedOrigin,\n): void {\n for (const entry of entries) {\n target.push({ entry: entry as T, origin });\n }\n}\n\nexport function normalizePublishRequest(\n raw: unknown,\n options: NormalizePublishRequestOptions,\n): PublishRequest {\n if (!isRecord(raw)) {\n throw new CliError('Publish request must be a JSON object.', {\n code: 'PUBLISH_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const requestDir = path.dirname(options.requestPath);\n const inputs = isRecord(raw.inputs) ? raw.inputs : {};\n const publish = isRecord(raw.publish) ? raw.publish : {};\n const commit =\n options.commitOverride === undefined\n ? to_boolean(publish.commit, false)\n : options.commitOverride;\n const outDirValue = first_non_empty(options.outDirOverride, raw.out_dir, raw.output_dir);\n const outDir = outDirValue\n ? resolve_path(requestDir, outDirValue)\n : default_out_dir(requestDir, commit, options.now);\n const relationMode = first_non_empty(publish.relation_mode, 'local_manifest_only');\n\n if (relationMode !== 'local_manifest_only') {\n throw new CliError(\"publish.relation_mode only supports 'local_manifest_only'.\", {\n code: 'PUBLISH_UNSUPPORTED_RELATION_MODE',\n exitCode: 2,\n details: relationMode,\n });\n }\n\n return {\n inputs: {\n bundle_paths: ensure_list(inputs.bundle_paths)\n .map((value) => String(value).trim())\n .filter(Boolean)\n .map((value) => resolve_path(requestDir, value)),\n lifecyclemodels: ensure_list(inputs.lifecyclemodels) as PublishDatasetEntry[],\n processes: ensure_list(inputs.processes) as PublishDatasetEntry[],\n sources: ensure_list(inputs.sources) as PublishDatasetEntry[],\n relations: ensure_list(inputs.relations),\n process_build_runs: ensure_list(inputs.process_build_runs) as PublishProcessBuildRunEntry[],\n },\n publish: {\n commit,\n publish_lifecyclemodels: to_boolean(publish.publish_lifecyclemodels, true),\n publish_processes: to_boolean(publish.publish_processes, true),\n publish_sources: to_boolean(publish.publish_sources, true),\n publish_relations: to_boolean(publish.publish_relations, true),\n publish_process_build_runs: to_boolean(publish.publish_process_build_runs, true),\n relation_mode: 'local_manifest_only',\n max_attempts: to_positive_integer(publish.max_attempts, DEFAULT_MAX_ATTEMPTS),\n retry_delay_seconds: to_non_negative_number(\n publish.retry_delay_seconds,\n DEFAULT_RETRY_DELAY_SECONDS,\n ),\n process_build_forward_args: ensure_list(publish.process_build_forward_args)\n .map((value) => String(value).trim())\n .filter(Boolean),\n },\n out_dir: outDir,\n };\n}\n\nexport function collectPublishInputs(\n normalized: PublishRequest,\n requestBaseDir: string,\n): PublishCollectedInputs {\n const collected: PublishCollectedInputs = {\n bundle_paths: [...normalized.inputs.bundle_paths],\n lifecyclemodels: [],\n processes: [],\n sources: [],\n relations: [],\n process_build_runs: [],\n };\n\n for (const bundlePath of normalized.inputs.bundle_paths) {\n const bundle = load_json_object(bundlePath);\n const origin: PublishCollectedOrigin = {\n source: 'bundle',\n base_dir: path.dirname(bundlePath),\n bundle_path: bundlePath,\n };\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n ensure_list(bundle.lifecyclemodels),\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n [...ensure_list(bundle.projected_processes), ...ensure_list(bundle.processes)],\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n ensure_list(bundle.sources),\n origin,\n );\n push_collected_entries(\n collected.relations,\n [...ensure_list(bundle.resulting_process_relations), ...ensure_list(bundle.relations)],\n origin,\n );\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n ensure_list(bundle.process_build_runs),\n origin,\n );\n }\n\n const directOrigin: PublishCollectedOrigin = {\n source: 'input',\n base_dir: requestBaseDir,\n bundle_path: null,\n };\n\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n normalized.inputs.lifecyclemodels,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n normalized.inputs.processes,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n normalized.inputs.sources,\n directOrigin,\n );\n push_collected_entries(collected.relations, normalized.inputs.relations, directOrigin);\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n normalized.inputs.process_build_runs,\n directOrigin,\n );\n\n return collected;\n}\n\nasync function maybe_execute_dataset(\n report: PreparedPublishDatasetReport,\n payload: JsonObject,\n options: PublishRequestOptions & {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n metadata?: LifecyclemodelPublishMetadata | null;\n },\n): Promise<PublishDatasetReport> {\n if (!options.commit) {\n return report;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n return report;\n }\n\n try {\n report.execution = await options.executor({\n table: options.table,\n id: report.id,\n version: report.version,\n payload,\n metadata: options.metadata,\n source: report.source,\n bundle_path: report.bundle_path,\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n return report;\n}\n\nasync function publish_lifecyclemodels(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const loaded = load_lifecyclemodel_publish_entry(item.entry, item.origin.base_dir);\n const payload = loaded.payload;\n const [datasetId, version] = extract_lifecyclemodel_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'lifecyclemodels',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'lifecyclemodels',\n executor: options.executor,\n metadata: loaded.metadata,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_processes(\n entries: PublishCollectedDatasetEntry[],\n options: ProcessPublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n const validate = options.validateProcessPayloadImpl ?? validateProcessPayload;\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n try {\n const [datasetId, version] = extract_process_identity(payload);\n const validation = validate(payload);\n if (!validation.ok) {\n reports.push({\n table: 'processes',\n id: datasetId,\n version,\n status: 'failed',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n error: {\n message: summarizeProcessPayloadValidation(validation),\n },\n });\n continue;\n }\n\n const report: PreparedPublishDatasetReport = {\n table: 'processes',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'processes',\n executor: options.executor,\n }),\n );\n } catch (error) {\n const report: PublishDatasetReport = {\n table: 'processes',\n id: first_non_empty(payload['@id'], payload.id),\n version: first_non_empty(payload['@version'], payload.version, DEFAULT_DATASET_VERSION),\n status: 'deferred_projection_payload',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n reason:\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'\n ? 'Payload is not a canonical processDataSet wrapper; keep it in the publish bundle until a projection-to-process adapter exists.'\n : serialize_error(error).message,\n };\n reports.push(report);\n }\n }\n return reports;\n}\n\nasync function publish_sources(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n const [datasetId, version] = extract_source_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'sources',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'sources',\n executor: options.executor,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_process_build_runs(\n entries: PublishCollectedProcessBuildRunEntry[],\n options: {\n commit: boolean;\n executor: PublishExecutors['process_build_runs'];\n publish: PublishRequest['publish'];\n },\n): Promise<PublishProcessBuildRunReport[]> {\n const reports: PublishProcessBuildRunReport[] = [];\n for (const item of entries) {\n const runId =\n typeof item.entry === 'string' ? item.entry.trim() : first_non_empty(item.entry.run_id);\n\n if (!runId) {\n throw new CliError('process_build_run entry missing run_id.', {\n code: 'PUBLISH_PROCESS_BUILD_RUN_ID_MISSING',\n exitCode: 2,\n details: item.entry,\n });\n }\n\n const report: PublishProcessBuildRunReport = {\n run_id: runId,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n };\n\n if (!options.commit) {\n reports.push(report);\n continue;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n reports.push(report);\n continue;\n }\n\n try {\n report.execution = await options.executor({\n run_id: runId,\n entry: item.entry,\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n reports.push(report);\n }\n return reports;\n}\n\nfunction build_relation_manifest(\n relations: PublishCollectedRelationEntry[],\n publish: PublishRequest['publish'],\n now: Date,\n): PublishRelationManifest {\n return {\n generated_at_utc: now.toISOString(),\n relation_mode: publish.relation_mode,\n status: 'prepared_local_relation_manifest',\n relations: publish.publish_relations ? relations.map((item) => item.entry) : [],\n };\n}\n\nfunction table_write_mode_for_publish(): SupabaseJsonOrderedWriteMode {\n return 'upsert_current_version';\n}\n\nfunction build_default_dataset_executor(options: {\n table: SupabaseJsonOrderedTable;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n}) {\n return async (args: DatasetPublishExecutorArgs): Promise<unknown> => {\n if (options.table === 'processes') {\n return syncStateAwareProcessRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'tiangong-lca publish run',\n source: args.source,\n bundle_path: args.bundle_path,\n },\n });\n }\n\n if (options.table === 'lifecyclemodels') {\n return syncLifecyclemodelBundleRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n metadata: args.metadata ?? null,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: options.table,\n id: args.id,\n version: args.version,\n payload: args.payload,\n writeMode: table_write_mode_for_publish(),\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n };\n}\n\nfunction resolve_dataset_executors(options: RunPublishOptions): PublishExecutors {\n const explicit = options.executors ?? {};\n const env = options.env;\n const fetchImpl = options.fetchImpl;\n\n if (!env || !fetchImpl || !hasSupabaseRestRuntime(env)) {\n return explicit;\n }\n\n return {\n lifecyclemodels:\n explicit.lifecyclemodels ??\n build_default_dataset_executor({\n table: 'lifecyclemodels',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n processes:\n explicit.processes ??\n build_default_dataset_executor({\n table: 'processes',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n sources:\n explicit.sources ??\n build_default_dataset_executor({\n table: 'sources',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n process_build_runs: explicit.process_build_runs,\n };\n}\n\nfunction dataset_failure_finding(\n report: PublishDatasetReport,\n fallbackCode: string,\n): PublishVerificationFinding {\n const validationIssue = report.validation?.ok === false ? report.validation.issues[0] : null;\n return {\n code: validationIssue?.code ?? fallbackCode,\n severity: 'blocker',\n message:\n validationIssue?.message ??\n report.error?.message ??\n report.reason ??\n 'Publish dataset failed.',\n table: report.table,\n id: report.id,\n version: report.version,\n ...(validationIssue?.path ? { path: validationIssue.path } : {}),\n ...(report.bundle_path !== undefined ? { bundle_path: report.bundle_path } : {}),\n };\n}\n\nfunction process_build_run_failure_finding(\n report: PublishProcessBuildRunReport,\n): PublishVerificationFinding {\n return {\n code: 'process_build_run_publish_failed',\n severity: 'blocker',\n message: report.error?.message ?? 'Process build run publish failed.',\n table: 'process_build_runs',\n id: report.run_id,\n version: null,\n bundle_path: report.bundle_path,\n };\n}\n\nfunction build_publish_verification_report(options: {\n now: Date;\n commit: boolean;\n failed: number;\n deferred: number;\n executed: number;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n processBuildRuns: PublishProcessBuildRunReport[];\n}): PublishVerificationReport {\n const ruleset = getRuntimeRuleset('publish-run/default');\n const datasetFindings = [\n ...options.lifecyclemodels,\n ...options.processes,\n ...options.sources,\n ].flatMap((report) =>\n report.status === 'failed'\n ? [dataset_failure_finding(report, `${report.table}_publish_failed`)]\n : [],\n );\n const processBuildRunFindings = options.processBuildRuns.flatMap((report) =>\n report.status === 'failed' ? [process_build_run_failure_finding(report)] : [],\n );\n const blockers = [...datasetFindings, ...processBuildRunFindings];\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n command: 'publish run',\n status: blockers.length > 0 ? 'blocked' : 'passed',\n ruleset_id: PUBLISH_VERIFICATION_RULESET_ID,\n ruleset_version: PUBLISH_VERIFICATION_RULESET_VERSION,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n commit: options.commit,\n findings: blockers,\n blockers,\n next_action: blockers.length > 0 ? 'fix_blockers' : 'ready_for_commit_or_publish',\n counts: {\n findings: blockers.length,\n blockers: blockers.length,\n failed: options.failed,\n deferred: options.deferred,\n executed: options.executed,\n },\n };\n}\n\nexport async function runPublish(options: RunPublishOptions): Promise<PublishReport> {\n const requestPath = path.resolve(options.inputPath);\n const requestDir = path.dirname(requestPath);\n const raw = options.rawRequest ?? readJsonInput(requestPath);\n const normalized = normalizePublishRequest(raw, {\n requestPath,\n outDirOverride: options.outDir ?? undefined,\n commitOverride: options.commit ?? undefined,\n now: options.now,\n });\n const collected = collectPublishInputs(normalized, requestDir);\n const now = options.now ?? new Date();\n const outDir = normalized.out_dir;\n const executors = resolve_dataset_executors(options);\n\n const files = {\n normalized_request: path.join(outDir, 'normalized-request.json'),\n collected_inputs: path.join(outDir, 'collected-inputs.json'),\n relation_manifest: path.join(outDir, 'relation-manifest.json'),\n verification_report: path.join(outDir, 'verification-report.json'),\n publish_report: path.join(outDir, 'publish-report.json'),\n };\n\n writeJsonArtifact(files.normalized_request, normalized);\n writeJsonArtifact(files.collected_inputs, collected);\n\n const lifecyclemodels = normalized.publish.publish_lifecyclemodels\n ? await publish_lifecyclemodels(collected.lifecyclemodels, {\n commit: normalized.publish.commit,\n executor: executors.lifecyclemodels,\n publish: normalized.publish,\n })\n : [];\n const processes = normalized.publish.publish_processes\n ? await publish_processes(collected.processes, {\n commit: normalized.publish.commit,\n executor: executors.processes,\n publish: normalized.publish,\n validateProcessPayloadImpl: options.validateProcessPayloadImpl,\n })\n : [];\n const sources = normalized.publish.publish_sources\n ? await publish_sources(collected.sources, {\n commit: normalized.publish.commit,\n executor: executors.sources,\n publish: normalized.publish,\n })\n : [];\n const processBuildRuns = normalized.publish.publish_process_build_runs\n ? await publish_process_build_runs(collected.process_build_runs, {\n commit: normalized.publish.commit,\n executor: executors.process_build_runs,\n publish: normalized.publish,\n })\n : [];\n const relations = build_relation_manifest(collected.relations, normalized.publish, now);\n\n writeJsonArtifact(files.relation_manifest, relations);\n\n const publishEntries = [...lifecyclemodels, ...processes, ...sources, ...processBuildRuns];\n const failed = publishEntries.filter((item) => item.status === 'failed').length;\n const executed = publishEntries.filter((item) => item.status === 'executed').length;\n const deferred = publishEntries.filter((item) => item.status.startsWith('deferred')).length;\n const verification = build_publish_verification_report({\n now,\n commit: normalized.publish.commit,\n failed,\n deferred,\n executed,\n lifecyclemodels,\n processes,\n sources,\n processBuildRuns,\n });\n\n const report: PublishReport = {\n generated_at_utc: now.toISOString(),\n request_path: requestPath,\n out_dir: outDir,\n commit: normalized.publish.commit,\n status: failed > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n bundle_paths: collected.bundle_paths.length,\n lifecyclemodels: lifecyclemodels.length,\n processes: processes.length,\n sources: sources.length,\n relations: relations.relations.length,\n process_build_runs: processBuildRuns.length,\n executed,\n deferred,\n failed,\n },\n files,\n verification,\n lifecyclemodels,\n processes,\n sources,\n process_build_runs: processBuildRuns,\n relations,\n };\n\n writeJsonArtifact(files.verification_report, verification);\n writeJsonArtifact(files.publish_report, report);\n return report;\n}\n\nexport const __testInternals = {\n build_publish_verification_report,\n};\n"]}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/lib/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { CliError } from './errors.js';\nimport { writeJsonArtifact } from './artifacts.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport {\n syncLifecyclemodelBundleRecord,\n type LifecyclemodelPublishMetadata,\n} from './lifecyclemodel-bundle-save.js';\nimport {\n summarizeProcessPayloadValidation,\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport { syncStateAwareProcessRecord } from './process-save-draft.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport { getRuntimeRuleset } from './runtime-rulesets.js';\nimport {\n hasSupabaseRestRuntime,\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedTable,\n type SupabaseJsonOrderedWriteMode,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_MAX_ATTEMPTS = 5;\nconst DEFAULT_RETRY_DELAY_SECONDS = 2.0;\nconst DEFAULT_DATASET_VERSION = '01.01.000';\nconst PUBLISH_VERIFICATION_RULESET_ID = 'publish-run/default';\nconst PUBLISH_VERIFICATION_RULESET_VERSION = '1';\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensure_list(value: unknown): unknown[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction first_non_empty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nfunction to_positive_integer(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? Number.parseInt(value, 10)\n : Number.NaN;\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError('Publish request expected a positive integer value.', {\n code: 'PUBLISH_INVALID_INTEGER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_non_negative_number(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new CliError('Publish request expected a non-negative number value.', {\n code: 'PUBLISH_INVALID_NUMBER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_boolean(value: unknown, defaultValue: boolean): boolean {\n return value === undefined ? defaultValue : Boolean(value);\n}\n\nfunction resolve_path(baseDir: string, value: string): string {\n return path.resolve(baseDir, value);\n}\n\nfunction load_json_object(filePath: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PUBLISH_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction default_out_dir(baseDir: string, commit: boolean, now: Date = new Date()): string {\n const runId = buildRunId({\n namespace: 'publish',\n operation: commit ? 'commit' : 'dry_run',\n now,\n });\n return resolveRunLayout(path.join(baseDir, 'artifacts'), 'publish', runId).runRoot;\n}\n\nfunction serialize_error(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nexport type PublishDatasetEntry =\n | string\n | {\n file?: string;\n path?: string;\n json_ordered?: JsonObject;\n jsonOrdered?: JsonObject;\n payload?: JsonObject;\n [key: string]: unknown;\n };\n\nexport type PublishProcessBuildRunEntry =\n | string\n | {\n run_id?: string;\n run_root?: string;\n exports_dir?: string;\n [key: string]: unknown;\n };\n\nexport type PublishCollectedOrigin = {\n source: 'bundle' | 'input';\n base_dir: string;\n bundle_path: string | null;\n};\n\nexport type PublishCollectedDatasetEntry = {\n entry: PublishDatasetEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedProcessBuildRunEntry = {\n entry: PublishProcessBuildRunEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedRelationEntry = {\n entry: unknown;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishRequest = {\n inputs: {\n bundle_paths: string[];\n lifecyclemodels: PublishDatasetEntry[];\n processes: PublishDatasetEntry[];\n sources: PublishDatasetEntry[];\n relations: unknown[];\n process_build_runs: PublishProcessBuildRunEntry[];\n };\n publish: {\n commit: boolean;\n publish_lifecyclemodels: boolean;\n publish_processes: boolean;\n publish_sources: boolean;\n publish_relations: boolean;\n publish_process_build_runs: boolean;\n relation_mode: 'local_manifest_only';\n max_attempts: number;\n retry_delay_seconds: number;\n process_build_forward_args: string[];\n };\n out_dir: string;\n};\n\nexport type PublishCollectedInputs = {\n bundle_paths: string[];\n lifecyclemodels: PublishCollectedDatasetEntry[];\n processes: PublishCollectedDatasetEntry[];\n sources: PublishCollectedDatasetEntry[];\n relations: PublishCollectedRelationEntry[];\n process_build_runs: PublishCollectedProcessBuildRunEntry[];\n};\n\nexport type DatasetPublishExecutorArgs = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string;\n version: string;\n payload: JsonObject;\n metadata?: LifecyclemodelPublishMetadata | null;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n publish: PublishRequest['publish'];\n};\n\nexport type ProcessBuildRunPublishExecutorArgs = {\n run_id: string;\n entry: PublishProcessBuildRunEntry;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n publish: PublishRequest['publish'];\n};\n\nexport type PublishExecutors = {\n lifecyclemodels?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n processes?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n sources?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n process_build_runs?: (args: ProcessBuildRunPublishExecutorArgs) => Promise<unknown> | unknown;\n};\n\nexport type PublishDatasetReport = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string | null;\n version: string | null;\n status:\n 'prepared' | 'executed' | 'deferred_no_executor' | 'deferred_projection_payload' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n reason?: string;\n validation?: ProcessPayloadValidationResult;\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishProcessBuildRunReport = {\n run_id: string;\n status: 'prepared' | 'executed' | 'deferred_no_executor' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishRelationManifest = {\n generated_at_utc: string;\n relation_mode: 'local_manifest_only';\n status: 'prepared_local_relation_manifest';\n relations: unknown[];\n};\n\nexport type PublishVerificationFinding = {\n code: string;\n severity: 'warning' | 'blocker';\n message: string;\n table: 'lifecyclemodels' | 'processes' | 'sources' | 'process_build_runs';\n id: string | null;\n version: string | null;\n path?: string;\n bundle_path?: string | null;\n};\n\nexport type PublishVerificationReport = {\n schema_version: 1;\n generated_at_utc: string;\n command: 'publish run';\n status: 'passed' | 'blocked';\n ruleset_id: string;\n ruleset_version: string;\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n commit: boolean;\n findings: PublishVerificationFinding[];\n blockers: PublishVerificationFinding[];\n next_action: 'ready_for_commit_or_publish' | 'fix_blockers';\n counts: {\n findings: number;\n blockers: number;\n failed: number;\n deferred: number;\n executed: number;\n };\n};\n\nexport type PublishReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n commit: boolean;\n status: 'completed' | 'completed_with_failures';\n counts: {\n bundle_paths: number;\n lifecyclemodels: number;\n processes: number;\n sources: number;\n relations: number;\n process_build_runs: number;\n executed: number;\n deferred: number;\n failed: number;\n };\n files: {\n normalized_request: string;\n collected_inputs: string;\n relation_manifest: string;\n verification_report: string;\n publish_report: string;\n };\n verification: PublishVerificationReport;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n process_build_runs: PublishProcessBuildRunReport[];\n relations: PublishRelationManifest;\n};\n\nexport type RunPublishOptions = {\n inputPath: string;\n rawRequest?: unknown;\n outDir?: string | null;\n commit?: boolean | null;\n executors?: PublishExecutors;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype PreparedPublishDatasetReport = PublishDatasetReport & {\n id: string;\n version: string;\n};\n\ntype NormalizePublishRequestOptions = {\n requestPath: string;\n outDirOverride?: string;\n commitOverride?: boolean;\n now?: Date;\n};\n\ntype PublishRequestOptions = {\n commit: boolean;\n executor:\n | PublishExecutors['lifecyclemodels']\n | PublishExecutors['processes']\n | PublishExecutors['sources']\n | undefined;\n publish: PublishRequest['publish'];\n};\n\ntype ProcessPublishRequestOptions = PublishRequestOptions & {\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype LoadedLifecyclemodelPublishEntry = {\n payload: JsonObject;\n metadata: LifecyclemodelPublishMetadata | null;\n};\n\nfunction extract_lifecyclemodel_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.lifeCycleModelDataSet) ? payload.lifeCycleModelDataSet : payload;\n const lifeCycleModelInformation = isRecord(root.lifeCycleModelInformation)\n ? root.lifeCycleModelInformation\n : {};\n const dataSetInformation = isRecord(lifeCycleModelInformation.dataSetInformation)\n ? lifeCycleModelInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(payload['@id'], payload.id, dataSetInformation['common:UUID']);\n const version = first_non_empty(\n payload['@version'],\n payload.version,\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Lifecycle model payload missing @id/id.', {\n code: 'PUBLISH_LIFECYCLEMODEL_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction extract_process_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError(\n 'Process payload missing processInformation.dataSetInformation.common:UUID.',\n {\n code: 'PUBLISH_PROCESS_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n return [datasetId, version];\n}\n\nfunction extract_source_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : payload;\n const sourceInformation = isRecord(root.sourceInformation) ? root.sourceInformation : {};\n const dataSetInformation = isRecord(sourceInformation.dataSetInformation)\n ? sourceInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Source payload missing sourceInformation.dataSetInformation.common:UUID.', {\n code: 'PUBLISH_SOURCE_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction load_dataset_entry(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n const source = load_dataset_entry_source(entry, baseDir);\n if (isRecord(source)) {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload'] as const) {\n const candidate = source[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n }\n\n return source;\n}\n\nfunction load_dataset_entry_source(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n if (isRecord(entry)) {\n const fileValue = first_non_empty(entry.file, entry.path);\n if (fileValue) {\n return load_json_object(resolve_path(baseDir, fileValue));\n }\n return entry;\n }\n\n if (typeof entry === 'string' && entry.trim()) {\n return load_json_object(resolve_path(baseDir, entry));\n }\n\n throw new CliError('Unsupported dataset entry in publish request.', {\n code: 'PUBLISH_UNSUPPORTED_DATASET_ENTRY',\n exitCode: 2,\n details: entry,\n });\n}\n\nfunction load_lifecyclemodel_publish_entry(\n entry: PublishDatasetEntry,\n baseDir: string,\n): LoadedLifecyclemodelPublishEntry {\n const source = load_dataset_entry_source(entry, baseDir);\n const payload = load_dataset_entry(entry, baseDir);\n const metadata: LifecyclemodelPublishMetadata = {};\n const jsonTg = isRecord(source.json_tg)\n ? source.json_tg\n : isRecord(source.jsonTg)\n ? source.jsonTg\n : null;\n if (jsonTg) {\n metadata.json_tg = jsonTg;\n }\n\n const processMutations = source.processMutations ?? source.process_mutations;\n if (Array.isArray(processMutations)) {\n metadata.processMutations = processMutations as JsonObject[];\n }\n\n const ruleVerification =\n typeof source.ruleVerification === 'boolean'\n ? source.ruleVerification\n : typeof source.rule_verification === 'boolean'\n ? source.rule_verification\n : undefined;\n if (typeof ruleVerification === 'boolean') {\n metadata.ruleVerification = ruleVerification;\n }\n\n return {\n payload,\n metadata: Object.keys(metadata).length > 0 ? metadata : null,\n };\n}\n\nfunction push_collected_entries<T>(\n target: Array<{ entry: T; origin: PublishCollectedOrigin }>,\n entries: unknown[],\n origin: PublishCollectedOrigin,\n): void {\n for (const entry of entries) {\n target.push({ entry: entry as T, origin });\n }\n}\n\nexport function normalizePublishRequest(\n raw: unknown,\n options: NormalizePublishRequestOptions,\n): PublishRequest {\n if (!isRecord(raw)) {\n throw new CliError('Publish request must be a JSON object.', {\n code: 'PUBLISH_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const requestDir = path.dirname(options.requestPath);\n const inputs = isRecord(raw.inputs) ? raw.inputs : {};\n const publish = isRecord(raw.publish) ? raw.publish : {};\n const commit =\n options.commitOverride === undefined\n ? to_boolean(publish.commit, false)\n : options.commitOverride;\n const outDirValue = first_non_empty(options.outDirOverride, raw.out_dir, raw.output_dir);\n const outDir = outDirValue\n ? resolve_path(requestDir, outDirValue)\n : default_out_dir(requestDir, commit, options.now);\n const relationMode = first_non_empty(publish.relation_mode, 'local_manifest_only');\n\n if (relationMode !== 'local_manifest_only') {\n throw new CliError(\"publish.relation_mode only supports 'local_manifest_only'.\", {\n code: 'PUBLISH_UNSUPPORTED_RELATION_MODE',\n exitCode: 2,\n details: relationMode,\n });\n }\n\n return {\n inputs: {\n bundle_paths: ensure_list(inputs.bundle_paths)\n .map((value) => String(value).trim())\n .filter(Boolean)\n .map((value) => resolve_path(requestDir, value)),\n lifecyclemodels: ensure_list(inputs.lifecyclemodels) as PublishDatasetEntry[],\n processes: ensure_list(inputs.processes) as PublishDatasetEntry[],\n sources: ensure_list(inputs.sources) as PublishDatasetEntry[],\n relations: ensure_list(inputs.relations),\n process_build_runs: ensure_list(inputs.process_build_runs) as PublishProcessBuildRunEntry[],\n },\n publish: {\n commit,\n publish_lifecyclemodels: to_boolean(publish.publish_lifecyclemodels, true),\n publish_processes: to_boolean(publish.publish_processes, true),\n publish_sources: to_boolean(publish.publish_sources, true),\n publish_relations: to_boolean(publish.publish_relations, true),\n publish_process_build_runs: to_boolean(publish.publish_process_build_runs, true),\n relation_mode: 'local_manifest_only',\n max_attempts: to_positive_integer(publish.max_attempts, DEFAULT_MAX_ATTEMPTS),\n retry_delay_seconds: to_non_negative_number(\n publish.retry_delay_seconds,\n DEFAULT_RETRY_DELAY_SECONDS,\n ),\n process_build_forward_args: ensure_list(publish.process_build_forward_args)\n .map((value) => String(value).trim())\n .filter(Boolean),\n },\n out_dir: outDir,\n };\n}\n\nexport function collectPublishInputs(\n normalized: PublishRequest,\n requestBaseDir: string,\n): PublishCollectedInputs {\n const collected: PublishCollectedInputs = {\n bundle_paths: [...normalized.inputs.bundle_paths],\n lifecyclemodels: [],\n processes: [],\n sources: [],\n relations: [],\n process_build_runs: [],\n };\n\n for (const bundlePath of normalized.inputs.bundle_paths) {\n const bundle = load_json_object(bundlePath);\n const origin: PublishCollectedOrigin = {\n source: 'bundle',\n base_dir: path.dirname(bundlePath),\n bundle_path: bundlePath,\n };\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n ensure_list(bundle.lifecyclemodels),\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n [...ensure_list(bundle.projected_processes), ...ensure_list(bundle.processes)],\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n ensure_list(bundle.sources),\n origin,\n );\n push_collected_entries(\n collected.relations,\n [...ensure_list(bundle.resulting_process_relations), ...ensure_list(bundle.relations)],\n origin,\n );\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n ensure_list(bundle.process_build_runs),\n origin,\n );\n }\n\n const directOrigin: PublishCollectedOrigin = {\n source: 'input',\n base_dir: requestBaseDir,\n bundle_path: null,\n };\n\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n normalized.inputs.lifecyclemodels,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n normalized.inputs.processes,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n normalized.inputs.sources,\n directOrigin,\n );\n push_collected_entries(collected.relations, normalized.inputs.relations, directOrigin);\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n normalized.inputs.process_build_runs,\n directOrigin,\n );\n\n return collected;\n}\n\nasync function maybe_execute_dataset(\n report: PreparedPublishDatasetReport,\n payload: JsonObject,\n options: PublishRequestOptions & {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n metadata?: LifecyclemodelPublishMetadata | null;\n },\n): Promise<PublishDatasetReport> {\n if (!options.commit) {\n return report;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n return report;\n }\n\n try {\n report.execution = await options.executor({\n table: options.table,\n id: report.id,\n version: report.version,\n payload,\n metadata: options.metadata,\n source: report.source,\n bundle_path: report.bundle_path,\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n return report;\n}\n\nasync function publish_lifecyclemodels(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const loaded = load_lifecyclemodel_publish_entry(item.entry, item.origin.base_dir);\n const payload = loaded.payload;\n const [datasetId, version] = extract_lifecyclemodel_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'lifecyclemodels',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'lifecyclemodels',\n executor: options.executor,\n metadata: loaded.metadata,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_processes(\n entries: PublishCollectedDatasetEntry[],\n options: ProcessPublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n const validate = options.validateProcessPayloadImpl ?? validateProcessPayload;\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n try {\n const [datasetId, version] = extract_process_identity(payload);\n const validation = validate(payload);\n if (!validation.ok) {\n reports.push({\n table: 'processes',\n id: datasetId,\n version,\n status: 'failed',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n error: {\n message: summarizeProcessPayloadValidation(validation),\n },\n });\n continue;\n }\n\n const report: PreparedPublishDatasetReport = {\n table: 'processes',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'processes',\n executor: options.executor,\n }),\n );\n } catch (error) {\n const report: PublishDatasetReport = {\n table: 'processes',\n id: first_non_empty(payload['@id'], payload.id),\n version: first_non_empty(payload['@version'], payload.version, DEFAULT_DATASET_VERSION),\n status: 'deferred_projection_payload',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n reason:\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'\n ? 'Payload is not a canonical processDataSet wrapper; keep it in the publish bundle until a projection-to-process adapter exists.'\n : serialize_error(error).message,\n };\n reports.push(report);\n }\n }\n return reports;\n}\n\nasync function publish_sources(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n const [datasetId, version] = extract_source_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'sources',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'sources',\n executor: options.executor,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_process_build_runs(\n entries: PublishCollectedProcessBuildRunEntry[],\n options: {\n commit: boolean;\n executor: PublishExecutors['process_build_runs'];\n publish: PublishRequest['publish'];\n },\n): Promise<PublishProcessBuildRunReport[]> {\n const reports: PublishProcessBuildRunReport[] = [];\n for (const item of entries) {\n const runId =\n typeof item.entry === 'string' ? item.entry.trim() : first_non_empty(item.entry.run_id);\n\n if (!runId) {\n throw new CliError('process_build_run entry missing run_id.', {\n code: 'PUBLISH_PROCESS_BUILD_RUN_ID_MISSING',\n exitCode: 2,\n details: item.entry,\n });\n }\n\n const report: PublishProcessBuildRunReport = {\n run_id: runId,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n };\n\n if (!options.commit) {\n reports.push(report);\n continue;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n reports.push(report);\n continue;\n }\n\n try {\n report.execution = await options.executor({\n run_id: runId,\n entry: item.entry,\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n reports.push(report);\n }\n return reports;\n}\n\nfunction build_relation_manifest(\n relations: PublishCollectedRelationEntry[],\n publish: PublishRequest['publish'],\n now: Date,\n): PublishRelationManifest {\n return {\n generated_at_utc: now.toISOString(),\n relation_mode: publish.relation_mode,\n status: 'prepared_local_relation_manifest',\n relations: publish.publish_relations ? relations.map((item) => item.entry) : [],\n };\n}\n\nfunction table_write_mode_for_publish(): SupabaseJsonOrderedWriteMode {\n return 'upsert_current_version';\n}\n\nfunction build_default_dataset_executor(options: {\n table: SupabaseJsonOrderedTable;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n}) {\n return async (args: DatasetPublishExecutorArgs): Promise<unknown> => {\n if (options.table === 'processes') {\n return syncStateAwareProcessRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'tiangong-lca publish run',\n source: args.source,\n bundle_path: args.bundle_path,\n },\n });\n }\n\n if (options.table === 'lifecyclemodels') {\n return syncLifecyclemodelBundleRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n metadata: args.metadata ?? null,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: options.table,\n id: args.id,\n version: args.version,\n payload: args.payload,\n writeMode: table_write_mode_for_publish(),\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n };\n}\n\nfunction resolve_dataset_executors(options: RunPublishOptions): PublishExecutors {\n const explicit = options.executors ?? {};\n const env = options.env;\n const fetchImpl = options.fetchImpl;\n\n if (!env || !fetchImpl || !hasSupabaseRestRuntime(env)) {\n return explicit;\n }\n\n return {\n lifecyclemodels:\n explicit.lifecyclemodels ??\n build_default_dataset_executor({\n table: 'lifecyclemodels',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n processes:\n explicit.processes ??\n build_default_dataset_executor({\n table: 'processes',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n sources:\n explicit.sources ??\n build_default_dataset_executor({\n table: 'sources',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n process_build_runs: explicit.process_build_runs,\n };\n}\n\nfunction dataset_failure_finding(\n report: PublishDatasetReport,\n fallbackCode: string,\n): PublishVerificationFinding {\n const validationIssue = report.validation?.ok === false ? report.validation.issues[0] : null;\n return {\n code: validationIssue?.code ?? fallbackCode,\n severity: 'blocker',\n message:\n validationIssue?.message ??\n report.error?.message ??\n report.reason ??\n 'Publish dataset failed.',\n table: report.table,\n id: report.id,\n version: report.version,\n ...(validationIssue?.path ? { path: validationIssue.path } : {}),\n ...(report.bundle_path !== undefined ? { bundle_path: report.bundle_path } : {}),\n };\n}\n\nfunction process_build_run_failure_finding(\n report: PublishProcessBuildRunReport,\n): PublishVerificationFinding {\n return {\n code: 'process_build_run_publish_failed',\n severity: 'blocker',\n message: report.error?.message ?? 'Process build run publish failed.',\n table: 'process_build_runs',\n id: report.run_id,\n version: null,\n bundle_path: report.bundle_path,\n };\n}\n\nfunction build_publish_verification_report(options: {\n now: Date;\n commit: boolean;\n failed: number;\n deferred: number;\n executed: number;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n processBuildRuns: PublishProcessBuildRunReport[];\n}): PublishVerificationReport {\n const ruleset = getRuntimeRuleset('publish-run/default');\n const datasetFindings = [\n ...options.lifecyclemodels,\n ...options.processes,\n ...options.sources,\n ].flatMap((report) =>\n report.status === 'failed'\n ? [dataset_failure_finding(report, `${report.table}_publish_failed`)]\n : [],\n );\n const processBuildRunFindings = options.processBuildRuns.flatMap((report) =>\n report.status === 'failed' ? [process_build_run_failure_finding(report)] : [],\n );\n const blockers = [...datasetFindings, ...processBuildRunFindings];\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n command: 'publish run',\n status: blockers.length > 0 ? 'blocked' : 'passed',\n ruleset_id: PUBLISH_VERIFICATION_RULESET_ID,\n ruleset_version: PUBLISH_VERIFICATION_RULESET_VERSION,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n commit: options.commit,\n findings: blockers,\n blockers,\n next_action: blockers.length > 0 ? 'fix_blockers' : 'ready_for_commit_or_publish',\n counts: {\n findings: blockers.length,\n blockers: blockers.length,\n failed: options.failed,\n deferred: options.deferred,\n executed: options.executed,\n },\n };\n}\n\nexport async function runPublish(options: RunPublishOptions): Promise<PublishReport> {\n const requestPath = path.resolve(options.inputPath);\n const requestDir = path.dirname(requestPath);\n const raw = options.rawRequest ?? readJsonInput(requestPath);\n const normalized = normalizePublishRequest(raw, {\n requestPath,\n outDirOverride: options.outDir ?? undefined,\n commitOverride: options.commit ?? undefined,\n now: options.now,\n });\n const collected = collectPublishInputs(normalized, requestDir);\n const now = options.now ?? new Date();\n const outDir = normalized.out_dir;\n const executors = resolve_dataset_executors(options);\n\n const files = {\n normalized_request: path.join(outDir, 'normalized-request.json'),\n collected_inputs: path.join(outDir, 'collected-inputs.json'),\n relation_manifest: path.join(outDir, 'relation-manifest.json'),\n verification_report: path.join(outDir, 'verification-report.json'),\n publish_report: path.join(outDir, 'publish-report.json'),\n };\n\n writeJsonArtifact(files.normalized_request, normalized);\n writeJsonArtifact(files.collected_inputs, collected);\n\n const lifecyclemodels = normalized.publish.publish_lifecyclemodels\n ? await publish_lifecyclemodels(collected.lifecyclemodels, {\n commit: normalized.publish.commit,\n executor: executors.lifecyclemodels,\n publish: normalized.publish,\n })\n : [];\n const processes = normalized.publish.publish_processes\n ? await publish_processes(collected.processes, {\n commit: normalized.publish.commit,\n executor: executors.processes,\n publish: normalized.publish,\n validateProcessPayloadImpl: options.validateProcessPayloadImpl,\n })\n : [];\n const sources = normalized.publish.publish_sources\n ? await publish_sources(collected.sources, {\n commit: normalized.publish.commit,\n executor: executors.sources,\n publish: normalized.publish,\n })\n : [];\n const processBuildRuns = normalized.publish.publish_process_build_runs\n ? await publish_process_build_runs(collected.process_build_runs, {\n commit: normalized.publish.commit,\n executor: executors.process_build_runs,\n publish: normalized.publish,\n })\n : [];\n const relations = build_relation_manifest(collected.relations, normalized.publish, now);\n\n writeJsonArtifact(files.relation_manifest, relations);\n\n const publishEntries = [...lifecyclemodels, ...processes, ...sources, ...processBuildRuns];\n const failed = publishEntries.filter((item) => item.status === 'failed').length;\n const executed = publishEntries.filter((item) => item.status === 'executed').length;\n const deferred = publishEntries.filter((item) => item.status.startsWith('deferred')).length;\n const verification = build_publish_verification_report({\n now,\n commit: normalized.publish.commit,\n failed,\n deferred,\n executed,\n lifecyclemodels,\n processes,\n sources,\n processBuildRuns,\n });\n\n const report: PublishReport = {\n generated_at_utc: now.toISOString(),\n request_path: requestPath,\n out_dir: outDir,\n commit: normalized.publish.commit,\n status: failed > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n bundle_paths: collected.bundle_paths.length,\n lifecyclemodels: lifecyclemodels.length,\n processes: processes.length,\n sources: sources.length,\n relations: relations.relations.length,\n process_build_runs: processBuildRuns.length,\n executed,\n deferred,\n failed,\n },\n files,\n verification,\n lifecyclemodels,\n processes,\n sources,\n process_build_runs: processBuildRuns,\n relations,\n };\n\n writeJsonArtifact(files.verification_report, verification);\n writeJsonArtifact(files.publish_report, report);\n return report;\n}\n\nexport const __testInternals = {\n build_publish_verification_report,\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { closeSync, existsSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync, } from 'node:fs';
1
+ import { closeSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
2
2
  import os from 'node:os';
3
3
  import path from 'node:path';
4
4
  import { CliError } from './errors.js';
@@ -65,10 +65,16 @@ export function lockPathForState(statePath) {
65
65
  return `${statePath}.lock`;
66
66
  }
67
67
  export function readStateLockMetadata(lockPath) {
68
- if (!existsSync(lockPath)) {
69
- return null;
68
+ let text;
69
+ try {
70
+ text = readFileSync(lockPath, 'utf8').trim();
71
+ }
72
+ catch (error) {
73
+ if (isErrnoException(error, 'ENOENT')) {
74
+ return null;
75
+ }
76
+ throw error;
70
77
  }
71
- const text = readFileSync(lockPath, 'utf8').trim();
72
78
  if (!text) {
73
79
  return null;
74
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"state-lock.js","sourceRoot":"","sources":["../../../src/lib/state-lock.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n closeSync,\n existsSync,\n mkdirSync,\n openSync,\n readFileSync,\n unlinkSync,\n writeFileSync,\n} from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { CliError } from './errors.js';\n\nexport type StateLockMetadata = {\n ownerPid: number;\n ownerHost: string;\n reason: string;\n updatedAt: string;\n};\n\nexport type StateLockOptions = {\n reason: string;\n metadata?: Record<string, string | number | boolean | null>;\n stalePolicy?: 'local-pid' | 'same-host-pid' | 'never';\n timeoutMs?: number;\n pollMs?: number;\n sleep?: (ms: number) => Promise<void>;\n pid?: number;\n host?: string;\n now?: Date;\n};\n\ntype LocalLockOwner = {\n depth: number;\n fd: number;\n};\n\nconst LOCAL_LOCK_OWNERS = new Map<string, LocalLockOwner>();\nconst DEFAULT_TIMEOUT_MS = 300_000;\nconst DEFAULT_POLL_MS = 200;\nconst MAX_NODE_TIMER_DELAY_MS = 2_147_483_647;\n\nfunction sleepMs(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction isErrnoException(error: unknown, code: string): boolean {\n return Boolean(\n error &&\n typeof error === 'object' &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === code,\n );\n}\n\nfunction normalizeLockTimings(options: StateLockOptions): { timeoutMs: number; pollMs: number } {\n for (const [label, value] of [\n ['timeoutMs', options.timeoutMs],\n ['pollMs', options.pollMs],\n ] as const) {\n if (value === undefined) continue;\n if (!Number.isSafeInteger(value)) {\n throw new RangeError(`State lock ${label} must be a finite safe integer.`);\n }\n if (value > MAX_NODE_TIMER_DELAY_MS) {\n throw new RangeError(\n `State lock ${label} exceeds the maximum supported timer delay (${MAX_NODE_TIMER_DELAY_MS} ms).`,\n );\n }\n }\n return {\n timeoutMs: Math.max(options.timeoutMs ?? DEFAULT_TIMEOUT_MS, 0),\n pollMs: Math.max(options.pollMs ?? DEFAULT_POLL_MS, 10),\n };\n}\n\nfunction writeLockMetadata(fileDescriptor: number, metadata: StateLockMetadata): void {\n writeFileSync(fileDescriptor, `${JSON.stringify(metadata, null, 2)}\\n`, 'utf8');\n}\n\nfunction releaseLocalLockOwner(lockKey: string): void {\n const owner = LOCAL_LOCK_OWNERS.get(lockKey);\n if (owner && owner.depth > 1) {\n owner.depth -= 1;\n return;\n }\n\n LOCAL_LOCK_OWNERS.delete(lockKey);\n}\n\nexport class StateLockTimeoutError extends CliError {\n constructor(\n lockPath: string,\n reason: string,\n waitedMs: number,\n owner: Record<string, unknown> | null,\n ) {\n super(`Timed out after ${waitedMs}ms acquiring state lock: ${lockPath}`, {\n code: 'STATE_LOCK_TIMEOUT',\n exitCode: 1,\n details: {\n lockPath,\n reason,\n waitedMs,\n owner,\n },\n });\n }\n}\n\nexport function lockPathForState(statePath: string): string {\n return `${statePath}.lock`;\n}\n\nexport function readStateLockMetadata(lockPath: string): Record<string, unknown> | null {\n if (!existsSync(lockPath)) {\n return null;\n }\n\n const text = readFileSync(lockPath, 'utf8').trim();\n if (!text) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(text);\n return parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : null;\n } catch {\n return { raw: text };\n }\n}\n\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return !isErrnoException(error, 'ESRCH');\n }\n}\n\nexport async function withStateFileLock<T>(\n statePath: string,\n options: StateLockOptions,\n task: () => Promise<T> | T,\n): Promise<T> {\n const { timeoutMs, pollMs } = normalizeLockTimings(options);\n const lockPath = lockPathForState(statePath);\n const lockKey = path.resolve(lockPath);\n const localOwner = LOCAL_LOCK_OWNERS.get(lockKey);\n\n if (localOwner) {\n localOwner.depth += 1;\n try {\n return await task();\n } finally {\n releaseLocalLockOwner(lockKey);\n }\n }\n\n mkdirSync(path.dirname(lockPath), { recursive: true });\n const startedAt = Date.now();\n const sleep = options.sleep ?? sleepMs;\n\n while (true) {\n try {\n const fileDescriptor = openSync(lockPath, 'wx');\n const metadata: StateLockMetadata = {\n ...options.metadata,\n ownerPid: options.pid ?? process.pid,\n ownerHost: options.host ?? os.hostname(),\n reason: options.reason,\n updatedAt: (options.now ?? new Date()).toISOString(),\n };\n writeLockMetadata(fileDescriptor, metadata);\n LOCAL_LOCK_OWNERS.set(lockKey, {\n depth: 1,\n fd: fileDescriptor,\n });\n\n try {\n return await task();\n } finally {\n releaseLocalLockOwner(lockKey);\n closeSync(fileDescriptor);\n try {\n unlinkSync(lockPath);\n } catch (error) {\n if (!isErrnoException(error, 'ENOENT')) {\n process.stderr.write(`Failed to remove state lock file: ${lockPath}\\n`);\n }\n }\n }\n } catch (error) {\n if (!isErrnoException(error, 'EEXIST')) {\n throw error;\n }\n\n const metadata = readStateLockMetadata(lockPath);\n const ownerPid = metadata?.ownerPid;\n const stalePolicy = options.stalePolicy ?? 'local-pid';\n const ownerHost = metadata?.ownerHost;\n const currentHost = options.host ?? os.hostname();\n const staleOwner =\n stalePolicy !== 'never' &&\n typeof ownerPid === 'number' &&\n !isProcessAlive(ownerPid) &&\n (stalePolicy === 'local-pid' || ownerHost === currentHost);\n if (staleOwner) {\n try {\n unlinkSync(lockPath);\n continue;\n } catch (unlinkError) {\n if (!isErrnoException(unlinkError, 'ENOENT')) {\n throw unlinkError;\n }\n }\n }\n\n const waitedMs = Date.now() - startedAt;\n if (timeoutMs === 0 || waitedMs >= timeoutMs) {\n throw new StateLockTimeoutError(lockPath, options.reason, waitedMs, metadata);\n }\n\n await sleep(pollMs);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"state-lock.js","sourceRoot":"","sources":["../../../src/lib/state-lock.ts"],"names":[],"mappings":"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","sourcesContent":["import { closeSync, mkdirSync, openSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { CliError } from './errors.js';\n\nexport type StateLockMetadata = {\n ownerPid: number;\n ownerHost: string;\n reason: string;\n updatedAt: string;\n};\n\nexport type StateLockOptions = {\n reason: string;\n metadata?: Record<string, string | number | boolean | null>;\n stalePolicy?: 'local-pid' | 'same-host-pid' | 'never';\n timeoutMs?: number;\n pollMs?: number;\n sleep?: (ms: number) => Promise<void>;\n pid?: number;\n host?: string;\n now?: Date;\n};\n\ntype LocalLockOwner = {\n depth: number;\n fd: number;\n};\n\nconst LOCAL_LOCK_OWNERS = new Map<string, LocalLockOwner>();\nconst DEFAULT_TIMEOUT_MS = 300_000;\nconst DEFAULT_POLL_MS = 200;\nconst MAX_NODE_TIMER_DELAY_MS = 2_147_483_647;\n\nfunction sleepMs(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction isErrnoException(error: unknown, code: string): boolean {\n return Boolean(\n error &&\n typeof error === 'object' &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === code,\n );\n}\n\nfunction normalizeLockTimings(options: StateLockOptions): { timeoutMs: number; pollMs: number } {\n for (const [label, value] of [\n ['timeoutMs', options.timeoutMs],\n ['pollMs', options.pollMs],\n ] as const) {\n if (value === undefined) continue;\n if (!Number.isSafeInteger(value)) {\n throw new RangeError(`State lock ${label} must be a finite safe integer.`);\n }\n if (value > MAX_NODE_TIMER_DELAY_MS) {\n throw new RangeError(\n `State lock ${label} exceeds the maximum supported timer delay (${MAX_NODE_TIMER_DELAY_MS} ms).`,\n );\n }\n }\n return {\n timeoutMs: Math.max(options.timeoutMs ?? DEFAULT_TIMEOUT_MS, 0),\n pollMs: Math.max(options.pollMs ?? DEFAULT_POLL_MS, 10),\n };\n}\n\nfunction writeLockMetadata(fileDescriptor: number, metadata: StateLockMetadata): void {\n writeFileSync(fileDescriptor, `${JSON.stringify(metadata, null, 2)}\\n`, 'utf8');\n}\n\nfunction releaseLocalLockOwner(lockKey: string): void {\n const owner = LOCAL_LOCK_OWNERS.get(lockKey);\n if (owner && owner.depth > 1) {\n owner.depth -= 1;\n return;\n }\n\n LOCAL_LOCK_OWNERS.delete(lockKey);\n}\n\nexport class StateLockTimeoutError extends CliError {\n constructor(\n lockPath: string,\n reason: string,\n waitedMs: number,\n owner: Record<string, unknown> | null,\n ) {\n super(`Timed out after ${waitedMs}ms acquiring state lock: ${lockPath}`, {\n code: 'STATE_LOCK_TIMEOUT',\n exitCode: 1,\n details: {\n lockPath,\n reason,\n waitedMs,\n owner,\n },\n });\n }\n}\n\nexport function lockPathForState(statePath: string): string {\n return `${statePath}.lock`;\n}\n\nexport function readStateLockMetadata(lockPath: string): Record<string, unknown> | null {\n let text: string;\n try {\n text = readFileSync(lockPath, 'utf8').trim();\n } catch (error) {\n if (isErrnoException(error, 'ENOENT')) {\n return null;\n }\n throw error;\n }\n if (!text) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(text);\n return parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : null;\n } catch {\n return { raw: text };\n }\n}\n\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return !isErrnoException(error, 'ESRCH');\n }\n}\n\nexport async function withStateFileLock<T>(\n statePath: string,\n options: StateLockOptions,\n task: () => Promise<T> | T,\n): Promise<T> {\n const { timeoutMs, pollMs } = normalizeLockTimings(options);\n const lockPath = lockPathForState(statePath);\n const lockKey = path.resolve(lockPath);\n const localOwner = LOCAL_LOCK_OWNERS.get(lockKey);\n\n if (localOwner) {\n localOwner.depth += 1;\n try {\n return await task();\n } finally {\n releaseLocalLockOwner(lockKey);\n }\n }\n\n mkdirSync(path.dirname(lockPath), { recursive: true });\n const startedAt = Date.now();\n const sleep = options.sleep ?? sleepMs;\n\n while (true) {\n try {\n const fileDescriptor = openSync(lockPath, 'wx');\n const metadata: StateLockMetadata = {\n ...options.metadata,\n ownerPid: options.pid ?? process.pid,\n ownerHost: options.host ?? os.hostname(),\n reason: options.reason,\n updatedAt: (options.now ?? new Date()).toISOString(),\n };\n writeLockMetadata(fileDescriptor, metadata);\n LOCAL_LOCK_OWNERS.set(lockKey, {\n depth: 1,\n fd: fileDescriptor,\n });\n\n try {\n return await task();\n } finally {\n releaseLocalLockOwner(lockKey);\n closeSync(fileDescriptor);\n try {\n unlinkSync(lockPath);\n } catch (error) {\n if (!isErrnoException(error, 'ENOENT')) {\n process.stderr.write(`Failed to remove state lock file: ${lockPath}\\n`);\n }\n }\n }\n } catch (error) {\n if (!isErrnoException(error, 'EEXIST')) {\n throw error;\n }\n\n const metadata = readStateLockMetadata(lockPath);\n const ownerPid = metadata?.ownerPid;\n const stalePolicy = options.stalePolicy ?? 'local-pid';\n const ownerHost = metadata?.ownerHost;\n const currentHost = options.host ?? os.hostname();\n const staleOwner =\n stalePolicy !== 'never' &&\n typeof ownerPid === 'number' &&\n !isProcessAlive(ownerPid) &&\n (stalePolicy === 'local-pid' || ownerHost === currentHost);\n if (staleOwner) {\n try {\n unlinkSync(lockPath);\n continue;\n } catch (unlinkError) {\n if (!isErrnoException(unlinkError, 'ENOENT')) {\n throw unlinkError;\n }\n }\n }\n\n const waitedMs = Date.now() - startedAt;\n if (timeoutMs === 0 || waitedMs >= timeoutMs) {\n throw new StateLockTimeoutError(lockPath, options.reason, waitedMs, metadata);\n }\n\n await sleep(pollMs);\n }\n }\n}\n"]}
@@ -1,8 +1,13 @@
1
1
  import { type PostgrestError } from '@supabase/supabase-js';
2
2
  import type { FetchLike } from './http.js';
3
+ export type SupabaseAuthMode = 'oauth' | 'access_token' | 'legacy_user_api_key';
3
4
  export type SupabaseRestRuntime = {
4
5
  apiBaseUrl: string;
5
- userApiKey: string;
6
+ authMode: SupabaseAuthMode;
7
+ userApiKey: string | null;
8
+ oauthClientId: string | null;
9
+ oauthRedirectUri: string | null;
10
+ accessToken: string | null;
6
11
  publishableKey: string;
7
12
  sessionFile: string | null;
8
13
  disableSessionCache: boolean;
@@ -16,6 +21,12 @@ export type SupabaseDataRuntime = {
16
21
  };
17
22
  declare function trimToken(value: unknown): string;
18
23
  declare function parseBooleanEnv(value: unknown): boolean;
24
+ declare function resolveSupabaseAuthMode(options: {
25
+ configuredMode: string;
26
+ oauthClientId: string;
27
+ accessToken: string;
28
+ userApiKey: string;
29
+ }): SupabaseAuthMode | null;
19
30
  export declare function requireSupabaseRestRuntime(env: NodeJS.ProcessEnv): SupabaseRestRuntime;
20
31
  export declare function deriveSupabaseProjectBaseUrl(apiBaseUrl: string): string;
21
32
  export declare function deriveSupabaseRestBaseUrl(apiBaseUrl: string): string;
@@ -42,6 +53,7 @@ export declare function createSupabaseDataClient(runtime: SupabaseDataRuntime, f
42
53
  export declare const __testInternals: {
43
54
  postgrestInvalidJsonDetails: typeof postgrestInvalidJsonDetails;
44
55
  parseBooleanEnv: typeof parseBooleanEnv;
56
+ resolveSupabaseAuthMode: typeof resolveSupabaseAuthMode;
45
57
  trimToken: typeof trimToken;
46
58
  };
47
59
  export {};
@@ -1,5 +1,7 @@
1
1
  import { createClient } from '@supabase/supabase-js';
2
2
  import { CliError } from './errors.js';
3
+ import { DEFAULT_OAUTH_REDIRECT_URI, requireOAuthLoopbackRedirectUri } from './oauth-loopback.js';
4
+ import { requireOAuthClientId } from './oauth-pkce.js';
3
5
  import { isDataApiAuthRefreshReplaySafe } from './supabase-data-api-replay.js';
4
6
  function trimToken(value) {
5
7
  return typeof value === 'string' ? value.trim() : '';
@@ -18,19 +20,50 @@ function parseBooleanEnv(value) {
18
20
  return false;
19
21
  }
20
22
  }
23
+ function resolveSupabaseAuthMode(options) {
24
+ const configuredMode = options.configuredMode.trim().toLowerCase();
25
+ if (configuredMode) {
26
+ switch (configuredMode) {
27
+ case 'oauth':
28
+ return 'oauth';
29
+ case 'access-token':
30
+ return 'access_token';
31
+ case 'legacy-user-api-key':
32
+ return 'legacy_user_api_key';
33
+ default:
34
+ throw new CliError('TIANGONG_LCA_AUTH_MODE must be oauth, access-token, or legacy-user-api-key.', { code: 'SUPABASE_AUTH_MODE_INVALID', exitCode: 2 });
35
+ }
36
+ }
37
+ if (options.accessToken)
38
+ return 'access_token';
39
+ if (options.oauthClientId)
40
+ return 'oauth';
41
+ if (options.userApiKey)
42
+ return 'legacy_user_api_key';
43
+ return null;
44
+ }
21
45
  export function requireSupabaseRestRuntime(env) {
22
46
  const apiBaseUrl = trimToken(env.TIANGONG_LCA_API_BASE_URL);
23
47
  const userApiKey = trimToken(env.TIANGONG_LCA_API_KEY);
48
+ const oauthClientId = trimToken(env.TIANGONG_LCA_OAUTH_CLIENT_ID);
49
+ const accessToken = trimToken(env.TIANGONG_LCA_ACCESS_TOKEN);
50
+ const configuredAuthMode = trimToken(env.TIANGONG_LCA_AUTH_MODE);
24
51
  const publishableKey = trimToken(env.TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY);
25
52
  const sessionFile = trimToken(env.TIANGONG_LCA_SESSION_FILE) || null;
26
53
  const disableSessionCache = parseBooleanEnv(env.TIANGONG_LCA_DISABLE_SESSION_CACHE);
27
54
  const forceReauth = parseBooleanEnv(env.TIANGONG_LCA_FORCE_REAUTH);
28
55
  const missing = [];
56
+ const authMode = resolveSupabaseAuthMode({
57
+ configuredMode: configuredAuthMode,
58
+ oauthClientId,
59
+ accessToken,
60
+ userApiKey,
61
+ });
29
62
  if (!apiBaseUrl) {
30
63
  missing.push('TIANGONG_LCA_API_BASE_URL');
31
64
  }
32
- if (!userApiKey) {
33
- missing.push('TIANGONG_LCA_API_KEY');
65
+ if (!authMode) {
66
+ missing.push('TIANGONG_LCA_OAUTH_CLIENT_ID or TIANGONG_LCA_ACCESS_TOKEN or TIANGONG_LCA_API_KEY');
34
67
  }
35
68
  if (!publishableKey) {
36
69
  missing.push('TIANGONG_LCA_SUPABASE_PUBLISHABLE_KEY');
@@ -42,9 +75,36 @@ export function requireSupabaseRestRuntime(env) {
42
75
  details: { missing },
43
76
  });
44
77
  }
78
+ const resolvedAuthMode = authMode;
79
+ if (resolvedAuthMode === 'oauth' && !oauthClientId) {
80
+ throw new CliError('OAuth auth mode requires TIANGONG_LCA_OAUTH_CLIENT_ID.', {
81
+ code: 'SUPABASE_OAUTH_CLIENT_ID_REQUIRED',
82
+ exitCode: 2,
83
+ });
84
+ }
85
+ if (resolvedAuthMode === 'access_token' && !accessToken) {
86
+ throw new CliError('Access-token auth mode requires TIANGONG_LCA_ACCESS_TOKEN.', {
87
+ code: 'SUPABASE_ACCESS_TOKEN_REQUIRED',
88
+ exitCode: 2,
89
+ });
90
+ }
91
+ if (resolvedAuthMode === 'legacy_user_api_key' && !userApiKey) {
92
+ throw new CliError('Legacy auth mode requires TIANGONG_LCA_API_KEY.', {
93
+ code: 'SUPABASE_LEGACY_API_KEY_REQUIRED',
94
+ exitCode: 2,
95
+ });
96
+ }
97
+ const normalizedOAuthClientId = resolvedAuthMode === 'oauth' ? requireOAuthClientId(oauthClientId) : null;
98
+ const normalizedOAuthRedirectUri = resolvedAuthMode === 'oauth'
99
+ ? requireOAuthLoopbackRedirectUri(trimToken(env.TIANGONG_LCA_OAUTH_REDIRECT_URI) || DEFAULT_OAUTH_REDIRECT_URI).redirectUri
100
+ : null;
45
101
  return {
46
102
  apiBaseUrl,
47
- userApiKey,
103
+ authMode: resolvedAuthMode,
104
+ userApiKey: resolvedAuthMode === 'legacy_user_api_key' ? userApiKey : null,
105
+ oauthClientId: normalizedOAuthClientId,
106
+ oauthRedirectUri: normalizedOAuthRedirectUri,
107
+ accessToken: resolvedAuthMode === 'access_token' ? accessToken : null,
48
108
  publishableKey,
49
109
  sessionFile,
50
110
  disableSessionCache,
@@ -290,6 +350,7 @@ export function createSupabaseDataClient(runtime, fetchImpl, timeoutMs) {
290
350
  export const __testInternals = {
291
351
  postgrestInvalidJsonDetails,
292
352
  parseBooleanEnv,
353
+ resolveSupabaseAuthMode,
293
354
  trimToken,
294
355
  };
295
356
  //# sourceMappingURL=supabase-client.js.map