@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":"supabase-session.js","sourceRoot":"","sources":["../../../src/lib/supabase-session.ts"],"names":[],"mappings":"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","sourcesContent":["import { chmodSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { createClient, type Session } from '@supabase/supabase-js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { withStateFileLock } from './state-lock.js';\nimport {\n createSupabaseFetch,\n deriveSupabaseProjectBaseUrl,\n type SupabaseDataRuntime,\n type SupabaseRestRuntime,\n} from './supabase-client.js';\nimport {\n fingerprintSecret,\n fingerprintUserApiKey,\n requireUserApiKeyCredentials,\n} from './user-api-key.js';\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst SESSION_REFRESH_WINDOW_SECONDS = 300;\n\nexport type CachedSupabaseSessionRecord = {\n schema_version: 1;\n supabase_url: string;\n publishable_key_fingerprint: string;\n user_api_key_fingerprint: string;\n user_email: string;\n access_token: string;\n refresh_token: string;\n expires_at: number | null;\n updated_at_utc: string;\n};\n\nexport type ResolvedSupabaseUserSession = {\n accessToken: string;\n refreshToken: string;\n expiresAt: number | null;\n userEmail: string;\n projectBaseUrl: string;\n sessionFile: string | null;\n source: 'memory' | 'cache' | 'refresh' | 'signin';\n};\n\ntype RuntimeIdentity = {\n projectBaseUrl: string;\n publishableKeyFingerprint: string;\n userApiKeyFingerprint: string;\n sessionFilePath: string | null;\n memoKey: string;\n};\n\nconst SESSION_MEMORY_CACHE = new Map<string, CachedSupabaseSessionRecord>();\nconst SESSION_OPERATION_CHAINS = new Map<string, Promise<void>>();\n\nfunction trimToken(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction nowSeconds(now: Date): number {\n return Math.floor(now.getTime() / 1000);\n}\n\nfunction computeExpiresAt(session: Session, now: Date): number | null {\n if (typeof session.expires_at === 'number' && Number.isFinite(session.expires_at)) {\n return Math.floor(session.expires_at);\n }\n\n if (typeof session.expires_in === 'number' && Number.isFinite(session.expires_in)) {\n return nowSeconds(now) + Math.max(Math.floor(session.expires_in), 0);\n }\n\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction parseCachedSessionRecord(value: unknown): CachedSupabaseSessionRecord | null {\n if (!isRecord(value)) {\n return null;\n }\n\n if (value.schema_version !== 1) {\n return null;\n }\n\n const supabaseUrl = trimToken(value.supabase_url);\n const publishableKeyFingerprint = trimToken(value.publishable_key_fingerprint);\n const userApiKeyFingerprint = trimToken(value.user_api_key_fingerprint);\n const userEmail = trimToken(value.user_email);\n const accessToken = trimToken(value.access_token);\n const refreshToken = trimToken(value.refresh_token);\n const updatedAtUtc = trimToken(value.updated_at_utc);\n const expiresAt =\n typeof value.expires_at === 'number' && Number.isFinite(value.expires_at)\n ? Math.floor(value.expires_at)\n : value.expires_at === null\n ? null\n : NaN;\n\n if (\n !supabaseUrl ||\n !publishableKeyFingerprint ||\n !userApiKeyFingerprint ||\n !userEmail ||\n !accessToken ||\n !refreshToken ||\n !updatedAtUtc ||\n Number.isNaN(expiresAt)\n ) {\n return null;\n }\n\n return {\n schema_version: 1,\n supabase_url: supabaseUrl,\n publishable_key_fingerprint: publishableKeyFingerprint,\n user_api_key_fingerprint: userApiKeyFingerprint,\n user_email: userEmail,\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_at: expiresAt,\n updated_at_utc: updatedAtUtc,\n };\n}\n\nfunction resolveDefaultSessionFilePath(options: {\n platform: NodeJS.Platform;\n homeDir: string;\n xdgStateHome: string | null;\n localAppData: string | null;\n}): string {\n if (options.xdgStateHome) {\n return path.join(options.xdgStateHome, 'tiangong-lca-cli', 'session.json');\n }\n\n if (options.homeDir) {\n return path.join(options.homeDir, '.local', 'state', 'tiangong-lca-cli', 'session.json');\n }\n\n if (options.platform === 'darwin') {\n return path.join(\n os.homedir(),\n 'Library',\n 'Application Support',\n 'tiangong-lca-cli',\n 'session.json',\n );\n }\n\n if (options.platform === 'win32' && options.localAppData) {\n return path.join(options.localAppData, 'tiangong-lca-cli', 'session.json');\n }\n\n return path.resolve('.tiangong-lca-session.json');\n}\n\nfunction resolveSessionFilePath(runtime: SupabaseRestRuntime): string | null {\n if (runtime.disableSessionCache) {\n return null;\n }\n\n if (runtime.sessionFile) {\n return path.resolve(runtime.sessionFile);\n }\n\n return resolveDefaultSessionFilePath({\n platform: process.platform,\n homeDir: trimToken(os.homedir()),\n xdgStateHome: trimToken(process.env.XDG_STATE_HOME) || null,\n localAppData: trimToken(process.env.LOCALAPPDATA) || null,\n });\n}\n\nfunction buildRuntimeIdentity(runtime: SupabaseRestRuntime): RuntimeIdentity {\n const projectBaseUrl = deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl);\n const publishableKeyFingerprint = fingerprintSecret(runtime.publishableKey);\n const userApiKeyFingerprint = fingerprintUserApiKey(runtime.userApiKey);\n const sessionFilePath = resolveSessionFilePath(runtime);\n\n return {\n projectBaseUrl,\n publishableKeyFingerprint,\n userApiKeyFingerprint,\n sessionFilePath,\n memoKey: [\n projectBaseUrl,\n publishableKeyFingerprint,\n userApiKeyFingerprint,\n sessionFilePath ?? 'memory-only',\n ].join('|'),\n };\n}\n\nfunction recordMatchesRuntime(\n record: CachedSupabaseSessionRecord,\n runtime: RuntimeIdentity,\n): boolean {\n return (\n record.supabase_url === runtime.projectBaseUrl &&\n record.publishable_key_fingerprint === runtime.publishableKeyFingerprint &&\n record.user_api_key_fingerprint === runtime.userApiKeyFingerprint\n );\n}\n\nfunction isSessionFresh(record: CachedSupabaseSessionRecord, now: Date): boolean {\n return (\n typeof record.expires_at === 'number' &&\n Number.isFinite(record.expires_at) &&\n record.expires_at > nowSeconds(now) + SESSION_REFRESH_WINDOW_SECONDS\n );\n}\n\nfunction buildCachedSessionRecord(options: {\n runtime: RuntimeIdentity;\n session: Session;\n userEmail: string;\n now: Date;\n}): CachedSupabaseSessionRecord {\n const accessToken = trimToken(options.session.access_token);\n const refreshToken = trimToken(options.session.refresh_token);\n if (!accessToken || !refreshToken) {\n throw new CliError('Supabase auth did not return a usable session.', {\n code: 'SUPABASE_AUTH_SESSION_INVALID',\n exitCode: 1,\n });\n }\n\n return {\n schema_version: 1,\n supabase_url: options.runtime.projectBaseUrl,\n publishable_key_fingerprint: options.runtime.publishableKeyFingerprint,\n user_api_key_fingerprint: options.runtime.userApiKeyFingerprint,\n user_email: options.userEmail,\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_at: computeExpiresAt(options.session, options.now),\n updated_at_utc: options.now.toISOString(),\n };\n}\n\nfunction toResolvedSession(\n record: CachedSupabaseSessionRecord,\n runtime: RuntimeIdentity,\n source: ResolvedSupabaseUserSession['source'],\n): ResolvedSupabaseUserSession {\n return {\n accessToken: record.access_token,\n refreshToken: record.refresh_token,\n expiresAt: record.expires_at,\n userEmail: record.user_email,\n projectBaseUrl: runtime.projectBaseUrl,\n sessionFile: runtime.sessionFilePath,\n source,\n };\n}\n\nfunction readCachedSessionRecord(sessionFilePath: string): CachedSupabaseSessionRecord | null {\n try {\n const text = readFileSync(sessionFilePath, 'utf8').trim();\n if (!text) {\n return null;\n }\n\n return parseCachedSessionRecord(JSON.parse(text));\n } catch {\n return null;\n }\n}\n\nfunction writeCachedSessionRecord(\n sessionFilePath: string,\n record: CachedSupabaseSessionRecord,\n): void {\n mkdirSync(path.dirname(sessionFilePath), {\n recursive: true,\n mode: 0o700,\n });\n\n const tempPath = `${sessionFilePath}.${process.pid}.${Date.now()}.tmp`;\n try {\n writeFileSync(tempPath, `${JSON.stringify(record, null, 2)}\\n`, {\n encoding: 'utf8',\n mode: 0o600,\n });\n renameSync(tempPath, sessionFilePath);\n chmodSync(sessionFilePath, 0o600);\n } catch (error) {\n rmSync(tempPath, { force: true });\n throw error;\n }\n}\n\nfunction getMemoizedRecord(runtime: RuntimeIdentity): CachedSupabaseSessionRecord | null {\n return SESSION_MEMORY_CACHE.get(runtime.memoKey) ?? null;\n}\n\nfunction memoizeRecord(runtime: RuntimeIdentity, record: CachedSupabaseSessionRecord): void {\n SESSION_MEMORY_CACHE.set(runtime.memoKey, record);\n}\n\nfunction dropMemoizedRecord(runtime: RuntimeIdentity): void {\n SESSION_MEMORY_CACHE.delete(runtime.memoKey);\n}\n\nasync function withSessionOperationLock<T>(memoKey: string, task: () => Promise<T>): Promise<T> {\n const previous = SESSION_OPERATION_CHAINS.get(memoKey) ?? Promise.resolve();\n let release!: () => void;\n const gate = new Promise<void>((resolve) => {\n release = resolve;\n });\n const chain = previous.catch(() => undefined).then(() => gate);\n SESSION_OPERATION_CHAINS.set(memoKey, chain);\n\n await previous.catch(() => undefined);\n try {\n return await task();\n } finally {\n release();\n if (SESSION_OPERATION_CHAINS.get(memoKey) === chain) {\n SESSION_OPERATION_CHAINS.delete(memoKey);\n }\n }\n}\n\nfunction createSupabaseAuthClient(\n runtime: RuntimeIdentity,\n publishableKey: string,\n fetchImpl: FetchLike,\n timeoutMs: number,\n) {\n return createClient(runtime.projectBaseUrl, publishableKey, {\n auth: {\n autoRefreshToken: false,\n persistSession: false,\n detectSessionInUrl: false,\n },\n global: {\n fetch: createSupabaseFetch(fetchImpl, timeoutMs),\n },\n });\n}\n\nasync function signInWithUserApiKey(options: {\n runtime: SupabaseRestRuntime;\n runtimeIdentity: RuntimeIdentity;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n}): Promise<CachedSupabaseSessionRecord> {\n const credentials = requireUserApiKeyCredentials(options.runtime.userApiKey);\n const authClient = createSupabaseAuthClient(\n options.runtimeIdentity,\n options.runtime.publishableKey,\n options.fetchImpl,\n options.timeoutMs,\n );\n const { data, error } = await authClient.auth.signInWithPassword({\n email: credentials.email,\n password: credentials.password,\n });\n\n if (error || !data.session) {\n throw new CliError('Failed to sign in with TIANGONG_LCA_API_KEY.', {\n code: 'SUPABASE_AUTH_SIGN_IN_FAILED',\n exitCode: 1,\n details: error?.message ?? 'Supabase auth session missing from sign-in response.',\n });\n }\n\n return buildCachedSessionRecord({\n runtime: options.runtimeIdentity,\n session: data.session,\n userEmail: trimToken(data.user?.email) || credentials.email,\n now: options.now,\n });\n}\n\nasync function refreshWithRefreshToken(options: {\n runtime: SupabaseRestRuntime;\n runtimeIdentity: RuntimeIdentity;\n refreshToken: string;\n userEmail: string;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n}): Promise<CachedSupabaseSessionRecord | null> {\n const normalizedRefreshToken = trimToken(options.refreshToken);\n if (!normalizedRefreshToken) {\n return null;\n }\n\n try {\n const authClient = createSupabaseAuthClient(\n options.runtimeIdentity,\n options.runtime.publishableKey,\n options.fetchImpl,\n options.timeoutMs,\n );\n const { data, error } = await authClient.auth.refreshSession({\n refresh_token: normalizedRefreshToken,\n });\n\n if (error || !data.session) {\n return null;\n }\n\n return buildCachedSessionRecord({\n runtime: options.runtimeIdentity,\n session: data.session,\n userEmail: trimToken(data.user?.email) || options.userEmail,\n now: options.now,\n });\n } catch {\n return null;\n }\n}\n\nasync function resolveAndPersistSession(options: {\n runtime: SupabaseRestRuntime;\n runtimeIdentity: RuntimeIdentity;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n forceRefresh: boolean;\n}): Promise<ResolvedSupabaseUserSession> {\n const { runtime, runtimeIdentity } = options;\n const memoized = getMemoizedRecord(runtimeIdentity);\n if (\n !options.forceRefresh &&\n !runtime.forceReauth &&\n memoized &&\n recordMatchesRuntime(memoized, runtimeIdentity) &&\n isSessionFresh(memoized, options.now)\n ) {\n return toResolvedSession(memoized, runtimeIdentity, 'memory');\n }\n\n const cachedFromDisk =\n runtimeIdentity.sessionFilePath !== null\n ? readCachedSessionRecord(runtimeIdentity.sessionFilePath)\n : null;\n if (\n !options.forceRefresh &&\n !runtime.forceReauth &&\n cachedFromDisk &&\n recordMatchesRuntime(cachedFromDisk, runtimeIdentity) &&\n isSessionFresh(cachedFromDisk, options.now)\n ) {\n memoizeRecord(runtimeIdentity, cachedFromDisk);\n return toResolvedSession(cachedFromDisk, runtimeIdentity, 'cache');\n }\n\n if (!runtime.forceReauth) {\n const refreshCandidate =\n cachedFromDisk &&\n recordMatchesRuntime(cachedFromDisk, runtimeIdentity) &&\n trimToken(cachedFromDisk.refresh_token)\n ? cachedFromDisk\n : memoized &&\n recordMatchesRuntime(memoized, runtimeIdentity) &&\n trimToken(memoized.refresh_token)\n ? memoized\n : null;\n\n if (refreshCandidate) {\n const refreshed = await refreshWithRefreshToken({\n runtime,\n runtimeIdentity,\n refreshToken: refreshCandidate.refresh_token,\n userEmail: refreshCandidate.user_email,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n\n if (refreshed) {\n if (runtimeIdentity.sessionFilePath) {\n writeCachedSessionRecord(runtimeIdentity.sessionFilePath, refreshed);\n }\n memoizeRecord(runtimeIdentity, refreshed);\n return toResolvedSession(refreshed, runtimeIdentity, 'refresh');\n }\n }\n }\n\n const signedIn = await signInWithUserApiKey({\n runtime,\n runtimeIdentity,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n\n if (runtimeIdentity.sessionFilePath) {\n writeCachedSessionRecord(runtimeIdentity.sessionFilePath, signedIn);\n }\n memoizeRecord(runtimeIdentity, signedIn);\n return toResolvedSession(signedIn, runtimeIdentity, 'signin');\n}\n\nexport async function resolveSupabaseUserSession(options: {\n runtime: SupabaseRestRuntime;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n now?: Date;\n forceRefresh?: boolean;\n}): Promise<ResolvedSupabaseUserSession> {\n const runtimeIdentity = buildRuntimeIdentity(options.runtime);\n const now = options.now ?? new Date();\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const forceRefresh = Boolean(options.forceRefresh);\n\n if (!forceRefresh && !options.runtime.forceReauth) {\n const memoized = getMemoizedRecord(runtimeIdentity);\n if (\n memoized &&\n recordMatchesRuntime(memoized, runtimeIdentity) &&\n isSessionFresh(memoized, now)\n ) {\n return toResolvedSession(memoized, runtimeIdentity, 'memory');\n }\n\n if (runtimeIdentity.sessionFilePath) {\n const cached = readCachedSessionRecord(runtimeIdentity.sessionFilePath);\n if (cached && recordMatchesRuntime(cached, runtimeIdentity) && isSessionFresh(cached, now)) {\n memoizeRecord(runtimeIdentity, cached);\n return toResolvedSession(cached, runtimeIdentity, 'cache');\n }\n }\n }\n\n return withSessionOperationLock(runtimeIdentity.memoKey, async () => {\n if (runtimeIdentity.sessionFilePath) {\n return withStateFileLock(\n runtimeIdentity.sessionFilePath,\n {\n reason: forceRefresh ? 'refresh_supabase_user_session' : 'resolve_supabase_user_session',\n },\n () =>\n resolveAndPersistSession({\n runtime: options.runtime,\n runtimeIdentity,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n now,\n forceRefresh,\n }),\n );\n }\n\n return resolveAndPersistSession({\n runtime: options.runtime,\n runtimeIdentity,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n now,\n forceRefresh,\n });\n });\n}\n\nexport function createSupabaseDataRuntime(options: {\n runtime: SupabaseRestRuntime;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n now?: Date;\n}): SupabaseDataRuntime {\n return {\n apiBaseUrl: options.runtime.apiBaseUrl,\n publishableKey: options.runtime.publishableKey,\n getAccessToken: async () =>\n (\n await resolveSupabaseUserSession({\n runtime: options.runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n })\n ).accessToken,\n refreshAccessToken: async () =>\n (\n await resolveSupabaseUserSession({\n runtime: options.runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n forceRefresh: true,\n })\n ).accessToken,\n };\n}\n\nexport const __testInternals = {\n SESSION_MEMORY_CACHE,\n SESSION_OPERATION_CHAINS,\n buildCachedSessionRecord,\n buildRuntimeIdentity,\n computeExpiresAt,\n createSupabaseAuthClient,\n dropMemoizedRecord,\n getMemoizedRecord,\n isSessionFresh,\n memoizeRecord,\n parseCachedSessionRecord,\n readCachedSessionRecord,\n recordMatchesRuntime,\n refreshWithRefreshToken,\n resolveDefaultSessionFilePath,\n resolveAndPersistSession,\n resolveSessionFilePath,\n signInWithUserApiKey,\n withSessionOperationLock,\n writeCachedSessionRecord,\n};\n"]}
1
+ {"version":3,"file":"supabase-session.js","sourceRoot":"","sources":["../../../src/lib/supabase-session.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n chmodSync,\n mkdirSync,\n readFileSync,\n renameSync,\n rmSync,\n statSync,\n writeFileSync,\n} from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { createClient, type Session } from '@supabase/supabase-js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport {\n openSystemBrowser,\n receiveOAuthLoopbackCallback,\n SYSTEM_BROWSER_OPTIONS,\n type BrowserSpawn,\n} from './oauth-loopback.js';\nimport {\n buildOAuthAuthorizationUrl,\n createOAuthPkceValues,\n DEFAULT_OAUTH_SCOPES,\n exchangeOAuthAuthorizationCode,\n fetchOAuthUserInfo,\n refreshOAuthTokens,\n type OAuthPkceValues,\n} from './oauth-pkce.js';\nimport { withStateFileLock } from './state-lock.js';\nimport {\n createSupabaseFetch,\n deriveSupabaseProjectBaseUrl,\n type SupabaseDataRuntime,\n type SupabaseRestRuntime,\n} from './supabase-client.js';\nimport {\n fingerprintSecret,\n fingerprintUserApiKey,\n requireUserApiKeyCredentials,\n} from './user-api-key.js';\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst SESSION_REFRESH_WINDOW_SECONDS = 300;\n\nexport type CachedSupabaseSessionRecord = {\n schema_version: 2;\n auth_method: 'oauth' | 'legacy_user_api_key';\n supabase_url: string;\n publishable_key_fingerprint: string;\n auth_binding_fingerprint: string;\n user_email: string;\n access_token: string;\n refresh_token: string;\n expires_at: number | null;\n granted_scopes: string[];\n updated_at_utc: string;\n};\n\nexport type ResolvedSupabaseUserSession = {\n accessToken: string;\n refreshToken: string;\n expiresAt: number | null;\n userEmail: string;\n projectBaseUrl: string;\n sessionFile: string | null;\n authMethod: 'oauth' | 'access_token' | 'legacy_user_api_key';\n source: 'memory' | 'cache' | 'refresh' | 'oauth_login' | 'legacy_signin' | 'access_token';\n};\n\ntype RuntimeIdentity = {\n projectBaseUrl: string;\n publishableKeyFingerprint: string;\n authMethod: 'oauth' | 'access_token' | 'legacy_user_api_key';\n authBindingFingerprint: string;\n sessionFilePath: string | null;\n memoKey: string;\n};\n\nconst SESSION_MEMORY_CACHE = new Map<string, CachedSupabaseSessionRecord>();\nconst ACCESS_TOKEN_MEMORY_CACHE = new Map<string, ResolvedSupabaseUserSession>();\nconst SESSION_OPERATION_CHAINS = new Map<string, Promise<void>>();\n\nfunction trimToken(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction nowSeconds(now: Date): number {\n return Math.floor(now.getTime() / 1000);\n}\n\ntype SessionTokenFields = Pick<\n Session,\n 'access_token' | 'refresh_token' | 'expires_at' | 'expires_in'\n>;\n\nfunction computeExpiresAt(session: SessionTokenFields, now: Date): number | null {\n if (typeof session.expires_at === 'number' && Number.isFinite(session.expires_at)) {\n return Math.floor(session.expires_at);\n }\n\n if (typeof session.expires_in === 'number' && Number.isFinite(session.expires_in)) {\n return nowSeconds(now) + Math.max(Math.floor(session.expires_in), 0);\n }\n\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction parseCachedSessionRecord(value: unknown): CachedSupabaseSessionRecord | null {\n if (!isRecord(value)) {\n return null;\n }\n\n if (value.schema_version !== 1 && value.schema_version !== 2) {\n return null;\n }\n\n const supabaseUrl = trimToken(value.supabase_url);\n const publishableKeyFingerprint = trimToken(value.publishable_key_fingerprint);\n const authMethod =\n value.schema_version === 1\n ? 'legacy_user_api_key'\n : value.auth_method === 'oauth' || value.auth_method === 'legacy_user_api_key'\n ? value.auth_method\n : null;\n const authBindingFingerprint =\n value.schema_version === 1\n ? trimToken(value.user_api_key_fingerprint)\n : trimToken(value.auth_binding_fingerprint);\n const userEmail = trimToken(value.user_email);\n const accessToken = trimToken(value.access_token);\n const refreshToken = trimToken(value.refresh_token);\n const updatedAtUtc = trimToken(value.updated_at_utc);\n const expiresAt =\n typeof value.expires_at === 'number' && Number.isFinite(value.expires_at)\n ? Math.floor(value.expires_at)\n : value.expires_at === null\n ? null\n : NaN;\n const grantedScopes =\n value.schema_version === 1\n ? []\n : Array.isArray(value.granted_scopes) &&\n value.granted_scopes.every((scope) => typeof scope === 'string' && scope.trim())\n ? [...new Set(value.granted_scopes.map((scope) => scope.trim()))].sort((left, right) =>\n left.localeCompare(right),\n )\n : null;\n\n if (\n !supabaseUrl ||\n !publishableKeyFingerprint ||\n !authMethod ||\n !authBindingFingerprint ||\n !userEmail ||\n !accessToken ||\n !refreshToken ||\n !updatedAtUtc ||\n Number.isNaN(expiresAt) ||\n grantedScopes === null\n ) {\n return null;\n }\n\n return {\n schema_version: 2,\n auth_method: authMethod,\n supabase_url: supabaseUrl,\n publishable_key_fingerprint: publishableKeyFingerprint,\n auth_binding_fingerprint: authBindingFingerprint,\n user_email: userEmail,\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_at: expiresAt,\n granted_scopes: grantedScopes,\n updated_at_utc: updatedAtUtc,\n };\n}\n\nfunction resolveDefaultSessionFilePath(options: {\n platform: NodeJS.Platform;\n homeDir: string;\n xdgStateHome: string | null;\n localAppData: string | null;\n}): string {\n if (options.xdgStateHome) {\n return path.join(options.xdgStateHome, 'tiangong-lca-cli', 'session.json');\n }\n\n if (options.homeDir) {\n return path.join(options.homeDir, '.local', 'state', 'tiangong-lca-cli', 'session.json');\n }\n\n if (options.platform === 'darwin') {\n return path.join(\n os.homedir(),\n 'Library',\n 'Application Support',\n 'tiangong-lca-cli',\n 'session.json',\n );\n }\n\n if (options.platform === 'win32' && options.localAppData) {\n return path.join(options.localAppData, 'tiangong-lca-cli', 'session.json');\n }\n\n return path.resolve('.tiangong-lca-session.json');\n}\n\nfunction resolveSessionFilePath(runtime: SupabaseRestRuntime): string | null {\n if (runtime.authMode === 'access_token' || runtime.disableSessionCache) {\n return null;\n }\n\n if (runtime.sessionFile) {\n return path.resolve(runtime.sessionFile);\n }\n\n return resolveDefaultSessionFilePath({\n platform: process.platform,\n homeDir: trimToken(os.homedir()),\n xdgStateHome: trimToken(process.env.XDG_STATE_HOME) || null,\n localAppData: trimToken(process.env.LOCALAPPDATA) || null,\n });\n}\n\nfunction buildRuntimeIdentity(runtime: SupabaseRestRuntime): RuntimeIdentity {\n const projectBaseUrl = deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl);\n const publishableKeyFingerprint = fingerprintSecret(runtime.publishableKey);\n const authBindingFingerprint =\n runtime.authMode === 'oauth'\n ? fingerprintSecret(`oauth-client:${runtime.oauthClientId as string}`)\n : runtime.authMode === 'access_token'\n ? fingerprintSecret(runtime.accessToken as string)\n : fingerprintUserApiKey(runtime.userApiKey as string);\n const sessionFilePath = resolveSessionFilePath(runtime);\n\n return {\n projectBaseUrl,\n publishableKeyFingerprint,\n authMethod: runtime.authMode,\n authBindingFingerprint,\n sessionFilePath,\n memoKey: [\n projectBaseUrl,\n publishableKeyFingerprint,\n runtime.authMode,\n authBindingFingerprint,\n sessionFilePath ?? 'memory-only',\n ].join('|'),\n };\n}\n\nfunction recordMatchesRuntime(\n record: CachedSupabaseSessionRecord,\n runtime: RuntimeIdentity,\n): boolean {\n return (\n record.supabase_url === runtime.projectBaseUrl &&\n record.publishable_key_fingerprint === runtime.publishableKeyFingerprint &&\n record.auth_method === runtime.authMethod &&\n record.auth_binding_fingerprint === runtime.authBindingFingerprint\n );\n}\n\nfunction isSessionFresh(record: CachedSupabaseSessionRecord, now: Date): boolean {\n return (\n typeof record.expires_at === 'number' &&\n Number.isFinite(record.expires_at) &&\n record.expires_at > nowSeconds(now) + SESSION_REFRESH_WINDOW_SECONDS\n );\n}\n\nfunction buildCachedSessionRecord(options: {\n runtime: RuntimeIdentity;\n session: SessionTokenFields;\n userEmail: string;\n grantedScopes?: string[];\n now: Date;\n}): CachedSupabaseSessionRecord {\n const accessToken = trimToken(options.session.access_token);\n const refreshToken = trimToken(options.session.refresh_token);\n if (!accessToken || !refreshToken) {\n throw new CliError('Supabase auth did not return a usable session.', {\n code: 'SUPABASE_AUTH_SESSION_INVALID',\n exitCode: 1,\n });\n }\n\n return {\n schema_version: 2,\n auth_method: options.runtime.authMethod === 'oauth' ? 'oauth' : 'legacy_user_api_key',\n supabase_url: options.runtime.projectBaseUrl,\n publishable_key_fingerprint: options.runtime.publishableKeyFingerprint,\n auth_binding_fingerprint: options.runtime.authBindingFingerprint,\n user_email: options.userEmail,\n access_token: accessToken,\n refresh_token: refreshToken,\n expires_at: computeExpiresAt(options.session, options.now),\n granted_scopes: [...new Set(options.grantedScopes ?? [])].sort(),\n updated_at_utc: options.now.toISOString(),\n };\n}\n\nfunction toResolvedSession(\n record: CachedSupabaseSessionRecord,\n runtime: RuntimeIdentity,\n source: ResolvedSupabaseUserSession['source'],\n): ResolvedSupabaseUserSession {\n return {\n accessToken: record.access_token,\n refreshToken: record.refresh_token,\n expiresAt: record.expires_at,\n userEmail: record.user_email,\n projectBaseUrl: runtime.projectBaseUrl,\n sessionFile: runtime.sessionFilePath,\n authMethod: runtime.authMethod,\n source,\n };\n}\n\nfunction readCachedSessionRecord(\n sessionFilePath: string,\n platform: NodeJS.Platform = process.platform,\n): CachedSupabaseSessionRecord | null {\n try {\n const stat = statSync(sessionFilePath);\n if (!stat.isFile() || (platform !== 'win32' && (stat.mode & 0o077) !== 0)) {\n return null;\n }\n const text = readFileSync(sessionFilePath, 'utf8').trim();\n if (!text) {\n return null;\n }\n\n return parseCachedSessionRecord(JSON.parse(text));\n } catch {\n return null;\n }\n}\n\nfunction writeCachedSessionRecord(\n sessionFilePath: string,\n record: CachedSupabaseSessionRecord,\n platform: NodeJS.Platform = process.platform,\n): void {\n mkdirSync(path.dirname(sessionFilePath), {\n recursive: true,\n mode: 0o700,\n });\n if (platform !== 'win32') {\n chmodSync(path.dirname(sessionFilePath), 0o700);\n }\n\n const tempPath = `${sessionFilePath}.${process.pid}.${Date.now()}.tmp`;\n try {\n writeFileSync(tempPath, `${JSON.stringify(record, null, 2)}\\n`, {\n encoding: 'utf8',\n flag: 'wx',\n mode: 0o600,\n });\n renameSync(tempPath, sessionFilePath);\n chmodSync(sessionFilePath, 0o600);\n } catch (error) {\n rmSync(tempPath, { force: true });\n throw error;\n }\n}\n\nfunction getMemoizedRecord(runtime: RuntimeIdentity): CachedSupabaseSessionRecord | null {\n return SESSION_MEMORY_CACHE.get(runtime.memoKey) ?? null;\n}\n\nfunction memoizeRecord(runtime: RuntimeIdentity, record: CachedSupabaseSessionRecord): void {\n SESSION_MEMORY_CACHE.set(runtime.memoKey, record);\n}\n\nfunction dropMemoizedRecord(runtime: RuntimeIdentity): void {\n SESSION_MEMORY_CACHE.delete(runtime.memoKey);\n}\n\nasync function withSessionOperationLock<T>(memoKey: string, task: () => Promise<T>): Promise<T> {\n const previous = SESSION_OPERATION_CHAINS.get(memoKey) ?? Promise.resolve();\n let release!: () => void;\n const gate = new Promise<void>((resolve) => {\n release = resolve;\n });\n const chain = previous.catch(() => undefined).then(() => gate);\n SESSION_OPERATION_CHAINS.set(memoKey, chain);\n\n await previous.catch(() => undefined);\n try {\n return await task();\n } finally {\n release();\n if (SESSION_OPERATION_CHAINS.get(memoKey) === chain) {\n SESSION_OPERATION_CHAINS.delete(memoKey);\n }\n }\n}\n\nfunction createSupabaseAuthClient(\n runtime: RuntimeIdentity,\n publishableKey: string,\n fetchImpl: FetchLike,\n timeoutMs: number,\n) {\n return createClient(runtime.projectBaseUrl, publishableKey, {\n auth: {\n autoRefreshToken: false,\n persistSession: false,\n detectSessionInUrl: false,\n },\n global: {\n fetch: createSupabaseFetch(fetchImpl, timeoutMs),\n },\n });\n}\n\nasync function signInWithUserApiKey(options: {\n runtime: SupabaseRestRuntime;\n runtimeIdentity: RuntimeIdentity;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n}): Promise<CachedSupabaseSessionRecord> {\n const credentials = requireUserApiKeyCredentials(options.runtime.userApiKey as string);\n const authClient = createSupabaseAuthClient(\n options.runtimeIdentity,\n options.runtime.publishableKey,\n options.fetchImpl,\n options.timeoutMs,\n );\n const { data, error } = await authClient.auth.signInWithPassword({\n email: credentials.email,\n password: credentials.password,\n });\n\n if (error || !data.session) {\n throw new CliError('Failed to sign in with TIANGONG_LCA_API_KEY.', {\n code: 'SUPABASE_AUTH_SIGN_IN_FAILED',\n exitCode: 1,\n details: error?.message ?? 'Supabase auth session missing from sign-in response.',\n });\n }\n\n return buildCachedSessionRecord({\n runtime: options.runtimeIdentity,\n session: data.session,\n userEmail: trimToken(data.user?.email) || credentials.email,\n grantedScopes: [],\n now: options.now,\n });\n}\n\nasync function refreshWithRefreshToken(options: {\n runtime: SupabaseRestRuntime;\n runtimeIdentity: RuntimeIdentity;\n refreshToken: string;\n userEmail: string;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n}): Promise<CachedSupabaseSessionRecord | null> {\n const normalizedRefreshToken = trimToken(options.refreshToken);\n if (!normalizedRefreshToken) {\n return null;\n }\n\n try {\n if (options.runtime.authMode === 'oauth') {\n const tokens = await refreshOAuthTokens({\n projectBaseUrl: options.runtimeIdentity.projectBaseUrl,\n clientId: options.runtime.oauthClientId as string,\n refreshToken: normalizedRefreshToken,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const userInfo = await fetchOAuthUserInfo({\n projectBaseUrl: options.runtimeIdentity.projectBaseUrl,\n accessToken: tokens.accessToken,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n return buildCachedSessionRecord({\n runtime: options.runtimeIdentity,\n session: {\n access_token: tokens.accessToken,\n refresh_token: tokens.refreshToken,\n expires_at: undefined,\n expires_in: tokens.expiresIn,\n },\n userEmail: userInfo.email,\n grantedScopes: tokens.scope,\n now: options.now,\n });\n }\n\n if (options.runtime.authMode !== 'legacy_user_api_key') {\n return null;\n }\n\n const authClient = createSupabaseAuthClient(\n options.runtimeIdentity,\n options.runtime.publishableKey,\n options.fetchImpl,\n options.timeoutMs,\n );\n const { data, error } = await authClient.auth.refreshSession({\n refresh_token: normalizedRefreshToken,\n });\n\n if (error || !data.session) {\n return null;\n }\n\n return buildCachedSessionRecord({\n runtime: options.runtimeIdentity,\n session: data.session,\n userEmail: trimToken(data.user?.email) || options.userEmail,\n grantedScopes: [],\n now: options.now,\n });\n } catch {\n return null;\n }\n}\n\nasync function resolveExplicitAccessToken(options: {\n runtime: SupabaseRestRuntime;\n runtimeIdentity: RuntimeIdentity;\n fetchImpl: FetchLike;\n timeoutMs: number;\n}): Promise<ResolvedSupabaseUserSession> {\n const cached = ACCESS_TOKEN_MEMORY_CACHE.get(options.runtimeIdentity.memoKey);\n if (cached) {\n return cached;\n }\n const accessToken = trimToken(options.runtime.accessToken);\n const authClient = createSupabaseAuthClient(\n options.runtimeIdentity,\n options.runtime.publishableKey,\n options.fetchImpl,\n options.timeoutMs,\n );\n const { data, error } = await authClient.auth.getUser(accessToken);\n const userEmail = trimToken(data.user?.email);\n if (error || !data.user?.id || data.user.role !== 'authenticated' || !userEmail) {\n throw new CliError('TIANGONG_LCA_ACCESS_TOKEN did not resolve to an authenticated user.', {\n code: 'SUPABASE_ACCESS_TOKEN_INVALID',\n exitCode: 1,\n details: error?.message ?? 'Authenticated user identity missing from access token.',\n });\n }\n\n const resolved: ResolvedSupabaseUserSession = {\n accessToken,\n refreshToken: '',\n expiresAt: null,\n userEmail,\n projectBaseUrl: options.runtimeIdentity.projectBaseUrl,\n sessionFile: null,\n authMethod: 'access_token',\n source: 'access_token',\n };\n ACCESS_TOKEN_MEMORY_CACHE.set(options.runtimeIdentity.memoKey, resolved);\n return resolved;\n}\n\nasync function resolveAndPersistSession(options: {\n runtime: SupabaseRestRuntime;\n runtimeIdentity: RuntimeIdentity;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n forceRefresh: boolean;\n}): Promise<ResolvedSupabaseUserSession> {\n const { runtime, runtimeIdentity } = options;\n if (runtime.authMode === 'access_token') {\n return resolveExplicitAccessToken({\n runtime,\n runtimeIdentity,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n const memoized = getMemoizedRecord(runtimeIdentity);\n if (\n !options.forceRefresh &&\n !runtime.forceReauth &&\n memoized &&\n recordMatchesRuntime(memoized, runtimeIdentity) &&\n isSessionFresh(memoized, options.now)\n ) {\n return toResolvedSession(memoized, runtimeIdentity, 'memory');\n }\n\n const cachedFromDisk =\n runtimeIdentity.sessionFilePath !== null\n ? readCachedSessionRecord(runtimeIdentity.sessionFilePath)\n : null;\n if (\n !options.forceRefresh &&\n !runtime.forceReauth &&\n cachedFromDisk &&\n recordMatchesRuntime(cachedFromDisk, runtimeIdentity) &&\n isSessionFresh(cachedFromDisk, options.now)\n ) {\n memoizeRecord(runtimeIdentity, cachedFromDisk);\n return toResolvedSession(cachedFromDisk, runtimeIdentity, 'cache');\n }\n\n if (!runtime.forceReauth) {\n const refreshCandidate =\n cachedFromDisk &&\n recordMatchesRuntime(cachedFromDisk, runtimeIdentity) &&\n trimToken(cachedFromDisk.refresh_token)\n ? cachedFromDisk\n : memoized &&\n recordMatchesRuntime(memoized, runtimeIdentity) &&\n trimToken(memoized.refresh_token)\n ? memoized\n : null;\n\n if (refreshCandidate) {\n const refreshed = await refreshWithRefreshToken({\n runtime,\n runtimeIdentity,\n refreshToken: refreshCandidate.refresh_token,\n userEmail: refreshCandidate.user_email,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n\n if (refreshed) {\n if (runtimeIdentity.sessionFilePath) {\n writeCachedSessionRecord(runtimeIdentity.sessionFilePath, refreshed);\n }\n memoizeRecord(runtimeIdentity, refreshed);\n return toResolvedSession(refreshed, runtimeIdentity, 'refresh');\n }\n }\n }\n\n if (runtime.authMode === 'oauth') {\n dropMemoizedRecord(runtimeIdentity);\n throw new CliError(\n 'No usable OAuth session is available. Run `tiangong-lca auth login` in a trusted terminal.',\n {\n code: 'SUPABASE_OAUTH_LOGIN_REQUIRED',\n exitCode: 1,\n },\n );\n }\n\n const signedIn = await signInWithUserApiKey({\n runtime,\n runtimeIdentity,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n\n if (runtimeIdentity.sessionFilePath) {\n writeCachedSessionRecord(runtimeIdentity.sessionFilePath, signedIn);\n }\n memoizeRecord(runtimeIdentity, signedIn);\n return toResolvedSession(signedIn, runtimeIdentity, 'legacy_signin');\n}\n\nexport async function resolveSupabaseUserSession(options: {\n runtime: SupabaseRestRuntime;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n now?: Date;\n forceRefresh?: boolean;\n}): Promise<ResolvedSupabaseUserSession> {\n const runtimeIdentity = buildRuntimeIdentity(options.runtime);\n const now = options.now ?? new Date();\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const forceRefresh = Boolean(options.forceRefresh);\n\n if (options.runtime.authMode === 'access_token') {\n return resolveExplicitAccessToken({\n runtime: options.runtime,\n runtimeIdentity,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n });\n }\n\n if (!forceRefresh && !options.runtime.forceReauth) {\n const memoized = getMemoizedRecord(runtimeIdentity);\n if (\n memoized &&\n recordMatchesRuntime(memoized, runtimeIdentity) &&\n isSessionFresh(memoized, now)\n ) {\n return toResolvedSession(memoized, runtimeIdentity, 'memory');\n }\n\n if (runtimeIdentity.sessionFilePath) {\n const cached = readCachedSessionRecord(runtimeIdentity.sessionFilePath);\n if (cached && recordMatchesRuntime(cached, runtimeIdentity) && isSessionFresh(cached, now)) {\n memoizeRecord(runtimeIdentity, cached);\n return toResolvedSession(cached, runtimeIdentity, 'cache');\n }\n }\n }\n\n return withSessionOperationLock(runtimeIdentity.memoKey, async () => {\n if (runtimeIdentity.sessionFilePath) {\n return withStateFileLock(\n runtimeIdentity.sessionFilePath,\n {\n reason: forceRefresh ? 'refresh_supabase_user_session' : 'resolve_supabase_user_session',\n },\n () =>\n resolveAndPersistSession({\n runtime: options.runtime,\n runtimeIdentity,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n now,\n forceRefresh,\n }),\n );\n }\n\n return resolveAndPersistSession({\n runtime: options.runtime,\n runtimeIdentity,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n now,\n forceRefresh,\n });\n });\n}\n\nexport type OAuthLoginReceipt = {\n schemaVersion: 'tiangong.cli-oauth-login.v1';\n status: 'authenticated';\n authMethod: 'oauth';\n expiresAt: number;\n grantedScopes: string[];\n sessionCache: 'private-file';\n};\n\nexport type OAuthLogoutReceipt = {\n schemaVersion: 'tiangong.cli-oauth-logout.v1';\n status: 'logged-out';\n removed: boolean;\n};\n\nexport type AuthStatusReceipt = {\n schemaVersion: 'tiangong.cli-auth-status.v1';\n status: 'ready' | 'login-required';\n authMethod: ResolvedSupabaseUserSession['authMethod'];\n sessionState: 'fresh' | 'refresh-required' | 'memory-only' | 'transition-only' | 'missing';\n sessionCache: 'private-file' | 'disabled' | 'memory-only';\n expiresAt: number | null;\n grantedScopes: string[];\n onlineVerified: false;\n};\n\nexport function inspectSupabaseAuthStatus(options: {\n runtime: SupabaseRestRuntime;\n now?: Date;\n}): AuthStatusReceipt {\n const runtimeIdentity = buildRuntimeIdentity(options.runtime);\n const now = options.now ?? new Date();\n\n if (options.runtime.authMode === 'access_token') {\n return {\n schemaVersion: 'tiangong.cli-auth-status.v1',\n status: 'ready',\n authMethod: 'access_token',\n sessionState: 'memory-only',\n sessionCache: 'memory-only',\n expiresAt: null,\n grantedScopes: [],\n onlineVerified: false,\n };\n }\n\n if (options.runtime.authMode === 'legacy_user_api_key') {\n return {\n schemaVersion: 'tiangong.cli-auth-status.v1',\n status: 'ready',\n authMethod: 'legacy_user_api_key',\n sessionState: 'transition-only',\n sessionCache: runtimeIdentity.sessionFilePath ? 'private-file' : 'disabled',\n expiresAt: null,\n grantedScopes: [],\n onlineVerified: false,\n };\n }\n\n const memoized = getMemoizedRecord(runtimeIdentity);\n const cached =\n memoized && recordMatchesRuntime(memoized, runtimeIdentity)\n ? memoized\n : runtimeIdentity.sessionFilePath\n ? readCachedSessionRecord(runtimeIdentity.sessionFilePath)\n : null;\n const matching = cached && recordMatchesRuntime(cached, runtimeIdentity) ? cached : null;\n if (!matching || !trimToken(matching.refresh_token)) {\n return {\n schemaVersion: 'tiangong.cli-auth-status.v1',\n status: 'login-required',\n authMethod: 'oauth',\n sessionState: 'missing',\n sessionCache: runtimeIdentity.sessionFilePath ? 'private-file' : 'disabled',\n expiresAt: null,\n grantedScopes: [],\n onlineVerified: false,\n };\n }\n\n return {\n schemaVersion: 'tiangong.cli-auth-status.v1',\n status: 'ready',\n authMethod: 'oauth',\n sessionState: isSessionFresh(matching, now) ? 'fresh' : 'refresh-required',\n sessionCache: 'private-file',\n expiresAt: matching.expires_at,\n grantedScopes: matching.granted_scopes,\n onlineVerified: false,\n };\n}\n\nexport async function loginWithSupabaseOAuth(options: {\n runtime: SupabaseRestRuntime;\n fetchImpl: FetchLike;\n requestTimeoutMs?: number;\n loginTimeoutMs?: number;\n now?: Date;\n createPkceValuesImpl?: () => OAuthPkceValues;\n receiveCallbackImpl?: typeof receiveOAuthLoopbackCallback;\n openBrowserImpl?: (authorizationUrl: string) => Promise<void>;\n browserOptions?: { platform: NodeJS.Platform; spawnImpl: BrowserSpawn };\n exchangeCodeImpl?: typeof exchangeOAuthAuthorizationCode;\n fetchUserInfoImpl?: typeof fetchOAuthUserInfo;\n}): Promise<OAuthLoginReceipt> {\n if (\n options.runtime.authMode !== 'oauth' ||\n !options.runtime.oauthClientId ||\n !options.runtime.oauthRedirectUri\n ) {\n throw new CliError('OAuth login requires TIANGONG_LCA_AUTH_MODE=oauth and a client ID.', {\n code: 'SUPABASE_OAUTH_RUNTIME_REQUIRED',\n exitCode: 2,\n });\n }\n\n const runtimeIdentity = buildRuntimeIdentity(options.runtime);\n if (!runtimeIdentity.sessionFilePath) {\n throw new CliError('OAuth login requires the private session cache to be enabled.', {\n code: 'SUPABASE_OAUTH_SESSION_CACHE_REQUIRED',\n exitCode: 2,\n });\n }\n\n const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_TIMEOUT_MS;\n const loginTimeoutMs = options.loginTimeoutMs ?? 180_000;\n const now = options.now ?? new Date();\n const createPkceValuesImpl = options.createPkceValuesImpl ?? createOAuthPkceValues;\n const receiveCallbackImpl = options.receiveCallbackImpl ?? receiveOAuthLoopbackCallback;\n const browserOptions = options.browserOptions ?? SYSTEM_BROWSER_OPTIONS;\n const openBrowserImpl =\n options.openBrowserImpl ??\n ((authorizationUrl) => openSystemBrowser(authorizationUrl, browserOptions));\n const exchangeCodeImpl = options.exchangeCodeImpl ?? exchangeOAuthAuthorizationCode;\n const fetchUserInfoImpl = options.fetchUserInfoImpl ?? fetchOAuthUserInfo;\n\n return withSessionOperationLock(runtimeIdentity.memoKey, () =>\n withStateFileLock(\n runtimeIdentity.sessionFilePath as string,\n { reason: 'supabase_oauth_pkce_login' },\n async () => {\n const pkce = createPkceValuesImpl();\n const authorizationUrl = buildOAuthAuthorizationUrl({\n projectBaseUrl: runtimeIdentity.projectBaseUrl,\n clientId: options.runtime.oauthClientId as string,\n redirectUri: options.runtime.oauthRedirectUri as string,\n codeChallenge: pkce.codeChallenge,\n state: pkce.state,\n });\n const authorizationCode = await receiveCallbackImpl({\n redirectUri: options.runtime.oauthRedirectUri as string,\n expectedState: pkce.state,\n timeoutMs: loginTimeoutMs,\n onListening: () => openBrowserImpl(authorizationUrl),\n });\n const tokens = await exchangeCodeImpl({\n projectBaseUrl: runtimeIdentity.projectBaseUrl,\n clientId: options.runtime.oauthClientId as string,\n redirectUri: options.runtime.oauthRedirectUri as string,\n authorizationCode,\n codeVerifier: pkce.codeVerifier,\n fetchImpl: options.fetchImpl,\n timeoutMs: requestTimeoutMs,\n });\n const userInfo = await fetchUserInfoImpl({\n projectBaseUrl: runtimeIdentity.projectBaseUrl,\n accessToken: tokens.accessToken,\n fetchImpl: options.fetchImpl,\n timeoutMs: requestTimeoutMs,\n });\n const grantedScopes = tokens.scope.length > 0 ? tokens.scope : [...DEFAULT_OAUTH_SCOPES];\n const record = buildCachedSessionRecord({\n runtime: runtimeIdentity,\n session: {\n access_token: tokens.accessToken,\n refresh_token: tokens.refreshToken,\n expires_at: undefined,\n expires_in: tokens.expiresIn,\n },\n userEmail: userInfo.email,\n grantedScopes,\n now,\n });\n writeCachedSessionRecord(runtimeIdentity.sessionFilePath as string, record);\n memoizeRecord(runtimeIdentity, record);\n return {\n schemaVersion: 'tiangong.cli-oauth-login.v1',\n status: 'authenticated',\n authMethod: 'oauth',\n expiresAt: record.expires_at as number,\n grantedScopes: record.granted_scopes,\n sessionCache: 'private-file',\n };\n },\n ),\n );\n}\n\nexport async function logoutSupabaseUserSession(options: {\n runtime: SupabaseRestRuntime;\n}): Promise<OAuthLogoutReceipt> {\n const runtimeIdentity = buildRuntimeIdentity(options.runtime);\n return withSessionOperationLock(runtimeIdentity.memoKey, async () => {\n let removed = false;\n const removeCurrent = () => {\n const cached = runtimeIdentity.sessionFilePath\n ? readCachedSessionRecord(runtimeIdentity.sessionFilePath)\n : null;\n if (\n runtimeIdentity.sessionFilePath &&\n cached &&\n recordMatchesRuntime(cached, runtimeIdentity)\n ) {\n rmSync(runtimeIdentity.sessionFilePath, { force: true });\n removed = true;\n }\n dropMemoizedRecord(runtimeIdentity);\n ACCESS_TOKEN_MEMORY_CACHE.delete(runtimeIdentity.memoKey);\n };\n\n if (runtimeIdentity.sessionFilePath) {\n await withStateFileLock(\n runtimeIdentity.sessionFilePath,\n { reason: 'supabase_oauth_local_logout' },\n removeCurrent,\n );\n } else {\n removeCurrent();\n }\n\n return {\n schemaVersion: 'tiangong.cli-oauth-logout.v1',\n status: 'logged-out',\n removed,\n };\n });\n}\n\nexport function createSupabaseDataRuntime(options: {\n runtime: SupabaseRestRuntime;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n now?: Date;\n}): SupabaseDataRuntime {\n const runtime: SupabaseDataRuntime = {\n apiBaseUrl: options.runtime.apiBaseUrl,\n publishableKey: options.runtime.publishableKey,\n getAccessToken: async () =>\n (\n await resolveSupabaseUserSession({\n runtime: options.runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n })\n ).accessToken,\n };\n if (options.runtime.authMode !== 'access_token') {\n runtime.refreshAccessToken = async () =>\n (\n await resolveSupabaseUserSession({\n runtime: options.runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n forceRefresh: true,\n })\n ).accessToken;\n }\n return runtime;\n}\n\nexport const __testInternals = {\n SESSION_MEMORY_CACHE,\n ACCESS_TOKEN_MEMORY_CACHE,\n SESSION_OPERATION_CHAINS,\n buildCachedSessionRecord,\n buildRuntimeIdentity,\n computeExpiresAt,\n createSupabaseAuthClient,\n dropMemoizedRecord,\n getMemoizedRecord,\n isSessionFresh,\n memoizeRecord,\n parseCachedSessionRecord,\n readCachedSessionRecord,\n recordMatchesRuntime,\n refreshWithRefreshToken,\n resolveDefaultSessionFilePath,\n resolveAndPersistSession,\n resolveSessionFilePath,\n signInWithUserApiKey,\n withSessionOperationLock,\n writeCachedSessionRecord,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tidas-sdk-package-validator.js","sourceRoot":"","sources":["../../../src/lib/tidas-sdk-package-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\nimport {\n type SafeParseIssue,\n type SafeParseSchema,\n type SdkValidationFactory,\n validateSchemaWithDeepFallback,\n} from './tidas-sdk-validation.js';\nimport { TIDAS_LANGUAGE_CODE_SET } from './tidas-languages.js';\n\ntype JsonObject = Record<string, unknown>;\n\nexport type ValidationSeverity = 'error' | 'warning' | 'info';\n\nexport type ValidationIssue = {\n issue_code: string;\n severity: ValidationSeverity;\n category: string;\n file_path: string;\n message: string;\n location: string;\n context: Record<string, unknown>;\n};\n\ntype ValidationSummary = {\n issue_count: number;\n error_count: number;\n warning_count: number;\n info_count: number;\n};\n\ntype CategoryValidationReport = {\n category: string;\n ok: boolean;\n summary: ValidationSummary;\n issues: ValidationIssue[];\n};\n\nexport type PackageValidationReport = {\n input_dir: string;\n ok: boolean;\n summary: ValidationSummary & { category_count: number };\n categories: CategoryValidationReport[];\n issues: ValidationIssue[];\n};\n\ntype SupportedCategory =\n | 'contacts'\n | 'flowproperties'\n | 'flows'\n | 'lciamethods'\n | 'lifecyclemodels'\n | 'processes'\n | 'sources'\n | 'unitgroups';\n\ntype TidasSdkPublicModule = {\n ContactSchema?: SafeParseSchema;\n FlowPropertySchema?: SafeParseSchema;\n FlowSchema?: SafeParseSchema;\n LCIAMethodSchema?: SafeParseSchema;\n LifeCycleModelSchema?: SafeParseSchema;\n ProcessSchema?: SafeParseSchema;\n SourceSchema?: SafeParseSchema;\n UnitGroupSchema?: SafeParseSchema;\n createContact?: SdkValidationFactory;\n createFlowProperty?: SdkValidationFactory;\n createFlow?: SdkValidationFactory;\n createLCIAMethod?: SdkValidationFactory;\n createLifeCycleModel?: SdkValidationFactory;\n createProcess?: SdkValidationFactory;\n createSource?: SdkValidationFactory;\n createUnitGroup?: SdkValidationFactory;\n};\n\nconst SUPPORTED_CATEGORIES: SupportedCategory[] = [\n 'contacts',\n 'flowproperties',\n 'flows',\n 'lciamethods',\n 'lifecyclemodels',\n 'processes',\n 'sources',\n 'unitgroups',\n];\n\nconst CATEGORY_SCHEMA_EXPORTS: Record<SupportedCategory, keyof TidasSdkPublicModule> = {\n contacts: 'ContactSchema',\n flowproperties: 'FlowPropertySchema',\n flows: 'FlowSchema',\n lciamethods: 'LCIAMethodSchema',\n lifecyclemodels: 'LifeCycleModelSchema',\n processes: 'ProcessSchema',\n sources: 'SourceSchema',\n unitgroups: 'UnitGroupSchema',\n};\n\nconst CATEGORY_FACTORY_EXPORTS: Record<SupportedCategory, keyof TidasSdkPublicModule> = {\n contacts: 'createContact',\n flowproperties: 'createFlowProperty',\n flows: 'createFlow',\n lciamethods: 'createLCIAMethod',\n lifecyclemodels: 'createLifeCycleModel',\n processes: 'createProcess',\n sources: 'createSource',\n unitgroups: 'createUnitGroup',\n};\n\nconst CHINESE_CHARACTER_RE = /[\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF]/u;\n\nfunction summarizeIssues(issues: ValidationIssue[]): ValidationSummary {\n const errorCount = issues.filter((issue) => issue.severity === 'error').length;\n const warningCount = issues.filter((issue) => issue.severity === 'warning').length;\n const infoCount = issues.filter((issue) => issue.severity === 'info').length;\n\n return {\n issue_count: issues.length,\n error_count: errorCount,\n warning_count: warningCount,\n info_count: infoCount,\n };\n}\n\nfunction buildCategoryReport(\n category: string,\n issues: ValidationIssue[],\n): CategoryValidationReport {\n return {\n category,\n ok: issues.length === 0,\n summary: summarizeIssues(issues),\n issues,\n };\n}\n\nfunction buildPackageReport(\n inputDir: string,\n categoryReports: CategoryValidationReport[],\n): PackageValidationReport {\n const issues = categoryReports.flatMap((report) => report.issues);\n const summary = summarizeIssues(issues);\n\n return {\n input_dir: inputDir,\n ok: issues.length === 0,\n summary: {\n category_count: categoryReports.length,\n ...summary,\n },\n categories: categoryReports,\n issues,\n };\n}\n\nfunction asRecord(value: unknown): JsonObject | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JsonObject) : null;\n}\n\nfunction ensureArray<T>(value: T | T[] | undefined | null): T[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (value === undefined || value === null) {\n return [];\n }\n return [value];\n}\n\nfunction toLocation(pathParts: Array<string | number> | undefined): string {\n if (!Array.isArray(pathParts) || pathParts.length === 0) {\n return '<root>';\n }\n return pathParts.join('/');\n}\n\nfunction createInvalidJsonIssue(\n category: string,\n filePath: string,\n error: unknown,\n): ValidationIssue {\n return {\n issue_code: 'invalid_json',\n severity: 'error',\n category,\n file_path: filePath,\n location: '<root>',\n message: `Invalid JSON: ${\n error instanceof Error ? error.name : 'Error'\n }: ${error instanceof Error ? error.message : String(error)}`,\n context: {},\n };\n}\n\nfunction createValidationErrorIssue(\n category: string,\n filePath: string,\n error: unknown,\n): ValidationIssue {\n return {\n issue_code: 'validation_error',\n severity: 'error',\n category,\n file_path: filePath,\n location: '<root>',\n message: `Validation error: ${error instanceof Error ? error.message : String(error)}`,\n context: {},\n };\n}\n\nfunction createSchemaIssue(\n category: string,\n filePath: string,\n issue: SafeParseIssue,\n): ValidationIssue {\n const location = toLocation(issue.path);\n return {\n issue_code: 'schema_error',\n severity: 'error',\n category,\n file_path: filePath,\n location,\n message: `Schema Error at ${location}: ${issue.message ?? 'Validation failed'}`,\n context: {\n validator: issue.code ?? 'custom',\n },\n };\n}\n\nfunction dedupeIssues(issues: ValidationIssue[]): ValidationIssue[] {\n const seen = new Set<string>();\n const deduped: ValidationIssue[] = [];\n\n for (const issue of issues) {\n const key = `${issue.issue_code}|${issue.file_path}|${issue.location}|${issue.message}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(issue);\n }\n\n return deduped;\n}\n\nfunction makeIssue(\n category: string,\n filePath: string,\n location: string,\n message: string,\n issueCode = 'schema_error',\n): ValidationIssue {\n return {\n issue_code: issueCode,\n severity: 'error',\n category,\n file_path: filePath,\n location,\n message,\n context: {},\n };\n}\n\nexport function validateElementaryFlowsClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Elementary flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parentId = String(classItems[index - 1]?.['@catId'] ?? '');\n const childId = String(classItems[index]?.['@catId'] ?? '');\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Elementary flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nexport function validateProductFlowsClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Product flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parentId = String(classItems[index - 1]?.['@classId'] ?? '');\n const childId = String(classItems[index]?.['@classId'] ?? '');\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Product flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nexport function validateProcessesClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n const level0ToLevel1Mapping: Record<string, string[]> = {\n A: ['01', '02', '03'],\n B: ['05', '06', '07', '08', '09'],\n C: Array.from({ length: 24 }, (_, index) => String(index + 10).padStart(2, '0')),\n D: ['35'],\n E: ['36', '37', '38', '39'],\n F: ['41', '42', '43'],\n G: ['46', '47'],\n H: ['49', '50', '51', '52', '53'],\n I: ['55', '56'],\n J: ['58', '59', '60'],\n K: ['61', '62', '63'],\n L: ['64', '65', '66'],\n M: ['68'],\n N: ['69', '70', '71', '72', '73', '74', '75'],\n O: ['77', '78', '79', '80', '81', '82'],\n P: ['84'],\n Q: ['85'],\n R: ['86', '87', '88'],\n S: ['90', '91', '92', '93'],\n T: ['94', '95', '96'],\n U: ['97', '98'],\n V: ['99'],\n };\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Processes classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parent = classItems[index - 1] ?? {};\n const child = classItems[index] ?? {};\n const parentLevel = Number(parent['@level']);\n const childLevel = Number(child['@level']);\n const parentId = String(parent['@classId'] ?? '');\n const childId = String(child['@classId'] ?? '');\n\n if (parentLevel === 0 && childLevel === 1) {\n const validCodes = level0ToLevel1Mapping[parentId] ?? [];\n if (!validCodes.includes(childId)) {\n errors.push(\n `Processes classification code error: level 1 code '${childId}' does not correspond to level 0 code '${parentId}'`,\n );\n }\n continue;\n }\n\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Processes classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateSourcesClassificationHierarchy(\n classItems: Array<Record<string, unknown>> | Record<string, unknown> | undefined,\n): string[] {\n const normalizedItems = ensureArray(classItems);\n const errors: string[] = [];\n\n normalizedItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (!Number.isFinite(level)) {\n errors.push(\n `Sources classification level parsing error: missing or invalid '@level' at index ${index}`,\n );\n return;\n }\n if (level !== index) {\n errors.push(\n `Sources classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < normalizedItems.length; index += 1) {\n const parentId = normalizedItems[index - 1]?.['@classId'];\n const childId = normalizedItems[index]?.['@classId'];\n if (typeof parentId !== 'string' || typeof childId !== 'string') {\n errors.push(\n `Sources classification code error: missing '@classId' for parent index ${index - 1} or child index ${index}`,\n );\n continue;\n }\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Sources classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateLocalizedTextLanguageConstraints(node: unknown, currentPath = ''): string[] {\n const errors: string[] = [];\n const currentNode = asRecord(node);\n\n if (currentNode) {\n const language = currentNode['@xml:lang'];\n const text = currentNode['#text'];\n const location = currentPath || '<root>';\n\n if (typeof language === 'string') {\n if (!TIDAS_LANGUAGE_CODE_SET.has(language)) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' is not a TIDAS Languages enumeration value`,\n );\n }\n }\n\n if (typeof language === 'string' && typeof text === 'string') {\n const hasChinese = CHINESE_CHARACTER_RE.test(text);\n\n if (language === 'zh' && !hasChinese) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' must include at least one Chinese character`,\n );\n }\n\n if (language === 'en' && hasChinese) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' must not contain Chinese characters`,\n );\n }\n }\n\n for (const [key, value] of Object.entries(currentNode)) {\n const childPath = currentPath ? `${currentPath}/${key}` : key;\n errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));\n }\n return errors;\n }\n\n if (Array.isArray(node)) {\n node.forEach((value, index) => {\n const childPath = currentPath ? `${currentPath}/${index}` : String(index);\n errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));\n });\n }\n\n return errors;\n}\n\nfunction collectFlowClassificationStructureIssues(\n items: unknown,\n category: string,\n filePath: string,\n locationBase: string,\n requiredIdKey: '@classId' | '@catId',\n): ValidationIssue[] {\n if (!Array.isArray(items)) {\n return [];\n }\n\n const issues: ValidationIssue[] = [];\n\n items.forEach((item, index) => {\n const record = asRecord(item);\n if (!record) {\n return;\n }\n\n for (const fieldName of ['@level', requiredIdKey, '#text'] as const) {\n if (record[fieldName] !== undefined) {\n continue;\n }\n\n issues.push(\n makeIssue(\n category,\n filePath,\n `${locationBase}/${index}`,\n `Schema Error at ${locationBase}/${index}: '${fieldName}' is a required property`,\n ),\n );\n }\n });\n\n return issues;\n}\n\nfunction extractLocalizedTextLocation(message: string): string {\n if (!message.startsWith('Localized text error at ') || !message.includes(':')) {\n return '<root>';\n }\n\n const location = message.slice('Localized text error at '.length).split(':', 1)[0];\n return location.length > 0 ? location : '<root>';\n}\n\nfunction collectLocalizedTextIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n return validateLocalizedTextLanguageConstraints(jsonItem).map((message) => {\n return makeIssue(\n category,\n filePath,\n extractLocalizedTextLocation(message),\n message,\n message.includes('is not a TIDAS Languages enumeration value')\n ? 'localized_text_language_not_in_tidas_enum'\n : 'localized_text_language_error',\n );\n });\n}\n\nfunction collectFlowSchemaGapIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n if (category !== 'flows') {\n return [];\n }\n\n const flowDataSet = asRecord(asRecord(jsonItem)?.flowDataSet);\n const modellingAndValidation = asRecord(flowDataSet?.modellingAndValidation);\n const lciMethod = asRecord(modellingAndValidation?.LCIMethod);\n const dataSetType = lciMethod?.typeOfDataSet;\n const dataSetInformation = asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation);\n const classificationInformation = asRecord(dataSetInformation?.classificationInformation);\n\n if (dataSetType === 'Product flow') {\n const classes = asRecord(classificationInformation?.['common:classification'])?.[\n 'common:class'\n ];\n return collectFlowClassificationStructureIssues(\n classes,\n category,\n filePath,\n 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:classification/common:class',\n '@classId',\n );\n }\n\n if (dataSetType === 'Elementary flow') {\n const categories = asRecord(\n classificationInformation?.['common:elementaryFlowCategorization'],\n )?.['common:category'];\n\n return collectFlowClassificationStructureIssues(\n categories,\n category,\n filePath,\n 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:elementaryFlowCategorization/common:category',\n '@catId',\n );\n }\n\n return [];\n}\n\nexport function collectClassificationIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const root = asRecord(jsonItem);\n\n try {\n if (category === 'flows') {\n const flowDataSet = asRecord(root?.flowDataSet);\n const dataSetType = asRecord(asRecord(flowDataSet?.modellingAndValidation)?.LCIMethod)?.[\n 'typeOfDataSet'\n ];\n\n if (dataSetType === 'Product flow' || dataSetType === 'Waste flow') {\n const items = asRecord(\n asRecord(\n asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:classification'],\n )?.['common:class'];\n\n if (Array.isArray(items)) {\n issues.push(\n ...validateProductFlowsClassificationHierarchy(\n items.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (dataSetType === 'Elementary flow') {\n const items = asRecord(\n asRecord(\n asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:elementaryFlowCategorization'],\n )?.['common:category'];\n\n if (Array.isArray(items)) {\n issues.push(\n ...validateElementaryFlowsClassificationHierarchy(\n items.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n }\n } else if (category === 'processes') {\n const items = asRecord(\n asRecord(asRecord(asRecord(root?.processDataSet)?.processInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:classification'];\n\n const classes = asRecord(items)?.['common:class'];\n if (Array.isArray(classes)) {\n issues.push(\n ...validateProcessesClassificationHierarchy(\n classes.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (category === 'lifecyclemodels') {\n const items = asRecord(\n asRecord(asRecord(root?.lifecycleModelDataSet)?.lifecycleModelInformation)\n ?.dataSetInformation,\n )?.classificationInformation;\n\n const classes = asRecord(asRecord(items)?.['common:classification'])?.['common:class'];\n if (Array.isArray(classes)) {\n issues.push(\n ...validateProcessesClassificationHierarchy(\n classes.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (category === 'sources') {\n const classes = asRecord(\n asRecord(asRecord(asRecord(root?.sourceDataSet)?.sourceInformation)?.dataSetInformation)\n ?.classificationInformation,\n );\n issues.push(\n ...validateSourcesClassificationHierarchy(\n asRecord(asRecord(classes)?.['common:classification'])?.['common:class'] as\n | Array<Record<string, unknown>>\n | Record<string, unknown>\n | undefined,\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } catch {\n return issues;\n }\n\n return issues;\n}\n\nfunction collectSchemaIssues(\n schema: SafeParseSchema,\n jsonItem: unknown,\n category: SupportedCategory,\n filePath: string,\n createEntity: SdkValidationFactory | null = null,\n): ValidationIssue[] {\n try {\n const result = validateSchemaWithDeepFallback(schema, jsonItem, createEntity);\n if (result.success) {\n return [];\n }\n\n const rawIssues = result.issues;\n if (rawIssues.length === 0) {\n return [createValidationErrorIssue(category, filePath, 'Schema validation failed')];\n }\n\n return rawIssues.map((issue) => createSchemaIssue(category, filePath, issue));\n } catch (error) {\n return [createValidationErrorIssue(category, filePath, error)];\n }\n}\n\nfunction categoryValidate(\n jsonFilePath: string,\n category: SupportedCategory,\n schema: SafeParseSchema,\n createEntity: SdkValidationFactory | null = null,\n emitLogs = true,\n): CategoryValidationReport {\n const issues: ValidationIssue[] = [];\n\n for (const fileName of readdirSync(jsonFilePath).sort()) {\n if (!fileName.endsWith('.json')) {\n continue;\n }\n\n const fullPath = path.join(jsonFilePath, fileName);\n let jsonItem: unknown;\n\n try {\n jsonItem = JSON.parse(readFileSync(fullPath, 'utf8')) as unknown;\n } catch (error) {\n issues.push(createInvalidJsonIssue(category, fullPath, error));\n continue;\n }\n\n const itemIssues = dedupeIssues([\n ...collectSchemaIssues(schema, jsonItem, category, fullPath, createEntity),\n ...collectFlowSchemaGapIssues(jsonItem, category, fullPath),\n ...collectLocalizedTextIssues(jsonItem, category, fullPath),\n ...collectClassificationIssues(jsonItem, category, fullPath),\n ]);\n\n issues.push(...itemIssues);\n\n if (!emitLogs) {\n continue;\n }\n\n if (itemIssues.length === 0) {\n console.info(`INFO: ${fullPath} PASSED.`);\n continue;\n }\n\n itemIssues.forEach((issue) => {\n console.error(`ERROR: ${fullPath} ${issue.message}`);\n });\n }\n\n return buildCategoryReport(category, issues);\n}\n\nfunction isSafeParseSchema(value: unknown): value is SafeParseSchema {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'safeParse' in value &&\n typeof (value as { safeParse?: unknown }).safeParse === 'function'\n );\n}\n\nfunction resolveCategorySchemas(\n moduleExports: TidasSdkPublicModule,\n): Map<\n SupportedCategory,\n { schema: SafeParseSchema; createEntity: SdkValidationFactory | null }\n> | null {\n const schemas = new Map<\n SupportedCategory,\n { schema: SafeParseSchema; createEntity: SdkValidationFactory | null }\n >();\n\n for (const category of SUPPORTED_CATEGORIES) {\n const exportName = CATEGORY_SCHEMA_EXPORTS[category];\n const schema = moduleExports[exportName];\n if (!isSafeParseSchema(schema)) {\n return null;\n }\n const factoryName = CATEGORY_FACTORY_EXPORTS[category];\n const createEntity = moduleExports[factoryName];\n schemas.set(category, {\n schema,\n createEntity: typeof createEntity === 'function' ? createEntity : null,\n });\n }\n\n return schemas;\n}\n\nexport function createTidasSdkPackageValidator(\n moduleExports: TidasSdkPublicModule,\n location: string,\n): {\n location: string;\n validatePackageDir: (inputDir: string, emitLogs?: boolean) => PackageValidationReport;\n} | null {\n const schemas = resolveCategorySchemas(moduleExports);\n if (!schemas) {\n return null;\n }\n\n return {\n location,\n validatePackageDir(inputDir: string, emitLogs = false): PackageValidationReport {\n const categoryReports = SUPPORTED_CATEGORIES.flatMap((category) => {\n const categoryDir = path.join(inputDir, category);\n const validator = schemas.get(category);\n if (!validator || !existsSync(categoryDir)) {\n return [];\n }\n\n return [\n categoryValidate(\n categoryDir,\n category,\n validator.schema,\n validator.createEntity,\n emitLogs,\n ),\n ];\n });\n\n return buildPackageReport(inputDir, categoryReports);\n },\n };\n}\n\nexport const __testInternals = {\n summarizeIssues,\n buildCategoryReport,\n buildPackageReport,\n asRecord,\n ensureArray,\n toLocation,\n createInvalidJsonIssue,\n createValidationErrorIssue,\n createSchemaIssue,\n dedupeIssues,\n makeIssue,\n validateElementaryFlowsClassificationHierarchy,\n validateProductFlowsClassificationHierarchy,\n validateProcessesClassificationHierarchy,\n validateSourcesClassificationHierarchy,\n validateLocalizedTextLanguageConstraints,\n collectFlowClassificationStructureIssues,\n extractLocalizedTextLocation,\n collectLocalizedTextIssues,\n collectFlowSchemaGapIssues,\n collectClassificationIssues,\n collectSchemaIssues,\n categoryValidate,\n CATEGORY_FACTORY_EXPORTS,\n resolveCategorySchemas,\n};\n"]}
1
+ {"version":3,"file":"tidas-sdk-package-validator.js","sourceRoot":"","sources":["../../../src/lib/tidas-sdk-package-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, readdirSync } from 'node:fs';\nimport path from 'node:path';\nimport {\n type SafeParseIssue,\n type SafeParseSchema,\n type SdkValidationFactory,\n validateSchemaWithDeepFallback,\n} from './tidas-sdk-validation.js';\nimport { TIDAS_LANGUAGE_CODE_SET } from './tidas-languages.js';\n\ntype JsonObject = Record<string, unknown>;\n\nexport type ValidationSeverity = 'error' | 'warning' | 'info';\n\nexport type ValidationIssue = {\n issue_code: string;\n severity: ValidationSeverity;\n category: string;\n file_path: string;\n message: string;\n location: string;\n context: Record<string, unknown>;\n};\n\ntype ValidationSummary = {\n issue_count: number;\n error_count: number;\n warning_count: number;\n info_count: number;\n};\n\ntype CategoryValidationReport = {\n category: string;\n ok: boolean;\n summary: ValidationSummary;\n issues: ValidationIssue[];\n};\n\nexport type PackageValidationReport = {\n input_dir: string;\n ok: boolean;\n summary: ValidationSummary & { category_count: number };\n categories: CategoryValidationReport[];\n issues: ValidationIssue[];\n};\n\ntype SupportedCategory =\n | 'contacts'\n | 'flowproperties'\n | 'flows'\n | 'lciamethods'\n | 'lifecyclemodels'\n | 'processes'\n | 'sources'\n | 'unitgroups';\n\ntype TidasSdkPublicModule = {\n ContactSchema?: SafeParseSchema;\n FlowPropertySchema?: SafeParseSchema;\n FlowSchema?: SafeParseSchema;\n LCIAMethodSchema?: SafeParseSchema;\n LifeCycleModelSchema?: SafeParseSchema;\n ProcessSchema?: SafeParseSchema;\n SourceSchema?: SafeParseSchema;\n UnitGroupSchema?: SafeParseSchema;\n createContact?: SdkValidationFactory;\n createFlowProperty?: SdkValidationFactory;\n createFlow?: SdkValidationFactory;\n createLCIAMethod?: SdkValidationFactory;\n createLifeCycleModel?: SdkValidationFactory;\n createProcess?: SdkValidationFactory;\n createSource?: SdkValidationFactory;\n createUnitGroup?: SdkValidationFactory;\n};\n\nconst SUPPORTED_CATEGORIES: SupportedCategory[] = [\n 'contacts',\n 'flowproperties',\n 'flows',\n 'lciamethods',\n 'lifecyclemodels',\n 'processes',\n 'sources',\n 'unitgroups',\n];\n\nconst CATEGORY_SCHEMA_EXPORTS: Record<SupportedCategory, keyof TidasSdkPublicModule> = {\n contacts: 'ContactSchema',\n flowproperties: 'FlowPropertySchema',\n flows: 'FlowSchema',\n lciamethods: 'LCIAMethodSchema',\n lifecyclemodels: 'LifeCycleModelSchema',\n processes: 'ProcessSchema',\n sources: 'SourceSchema',\n unitgroups: 'UnitGroupSchema',\n};\n\nconst CATEGORY_FACTORY_EXPORTS: Record<SupportedCategory, keyof TidasSdkPublicModule> = {\n contacts: 'createContact',\n flowproperties: 'createFlowProperty',\n flows: 'createFlow',\n lciamethods: 'createLCIAMethod',\n lifecyclemodels: 'createLifeCycleModel',\n processes: 'createProcess',\n sources: 'createSource',\n unitgroups: 'createUnitGroup',\n};\n\nconst CHINESE_CHARACTER_RE = /[\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF]/u;\n\nfunction summarizeIssues(issues: ValidationIssue[]): ValidationSummary {\n const errorCount = issues.filter((issue) => issue.severity === 'error').length;\n const warningCount = issues.filter((issue) => issue.severity === 'warning').length;\n const infoCount = issues.filter((issue) => issue.severity === 'info').length;\n\n return {\n issue_count: issues.length,\n error_count: errorCount,\n warning_count: warningCount,\n info_count: infoCount,\n };\n}\n\nfunction buildCategoryReport(\n category: string,\n issues: ValidationIssue[],\n): CategoryValidationReport {\n return {\n category,\n ok: issues.length === 0,\n summary: summarizeIssues(issues),\n issues,\n };\n}\n\nfunction buildPackageReport(\n inputDir: string,\n categoryReports: CategoryValidationReport[],\n): PackageValidationReport {\n const issues = categoryReports.flatMap((report) => report.issues);\n const summary = summarizeIssues(issues);\n\n return {\n input_dir: inputDir,\n ok: issues.length === 0,\n summary: {\n category_count: categoryReports.length,\n ...summary,\n },\n categories: categoryReports,\n issues,\n };\n}\n\nfunction asRecord(value: unknown): JsonObject | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JsonObject) : null;\n}\n\nfunction ensureArray<T>(value: T | T[] | undefined | null): T[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (value === undefined || value === null) {\n return [];\n }\n return [value];\n}\n\nfunction toLocation(pathParts: Array<string | number> | undefined): string {\n if (!Array.isArray(pathParts) || pathParts.length === 0) {\n return '<root>';\n }\n return pathParts.join('/');\n}\n\nfunction createInvalidJsonIssue(\n category: string,\n filePath: string,\n error: unknown,\n): ValidationIssue {\n return {\n issue_code: 'invalid_json',\n severity: 'error',\n category,\n file_path: filePath,\n location: '<root>',\n message: `Invalid JSON: ${\n error instanceof Error ? error.name : 'Error'\n }: ${error instanceof Error ? error.message : String(error)}`,\n context: {},\n };\n}\n\nfunction createValidationErrorIssue(\n category: string,\n filePath: string,\n error: unknown,\n): ValidationIssue {\n return {\n issue_code: 'validation_error',\n severity: 'error',\n category,\n file_path: filePath,\n location: '<root>',\n message: `Validation error: ${error instanceof Error ? error.message : String(error)}`,\n context: {},\n };\n}\n\nfunction createSchemaIssue(\n category: string,\n filePath: string,\n issue: SafeParseIssue,\n): ValidationIssue {\n const location = toLocation(issue.path);\n return {\n issue_code: 'schema_error',\n severity: 'error',\n category,\n file_path: filePath,\n location,\n message: `Schema Error at ${location}: ${issue.message ?? 'Validation failed'}`,\n context: {\n validator: issue.code ?? 'custom',\n },\n };\n}\n\nfunction dedupeIssues(issues: ValidationIssue[]): ValidationIssue[] {\n const seen = new Set<string>();\n const deduped: ValidationIssue[] = [];\n\n for (const issue of issues) {\n const key = `${issue.issue_code}|${issue.file_path}|${issue.location}|${issue.message}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(issue);\n }\n\n return deduped;\n}\n\nfunction makeIssue(\n category: string,\n filePath: string,\n location: string,\n message: string,\n issueCode = 'schema_error',\n): ValidationIssue {\n return {\n issue_code: issueCode,\n severity: 'error',\n category,\n file_path: filePath,\n location,\n message,\n context: {},\n };\n}\n\nexport function validateElementaryFlowsClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Elementary flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parentId = String(classItems[index - 1]?.['@catId'] ?? '');\n const childId = String(classItems[index]?.['@catId'] ?? '');\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Elementary flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nexport function validateProductFlowsClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Product flow classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parentId = String(classItems[index - 1]?.['@classId'] ?? '');\n const childId = String(classItems[index]?.['@classId'] ?? '');\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Product flow classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nexport function validateProcessesClassificationHierarchy(\n classItems: Array<Record<string, unknown>>,\n): string[] {\n const errors: string[] = [];\n const level0ToLevel1Mapping: Record<string, string[]> = {\n A: ['01', '02', '03'],\n B: ['05', '06', '07', '08', '09'],\n C: Array.from({ length: 24 }, (_, index) => String(index + 10).padStart(2, '0')),\n D: ['35'],\n E: ['36', '37', '38', '39'],\n F: ['41', '42', '43'],\n G: ['46', '47'],\n H: ['49', '50', '51', '52', '53'],\n I: ['55', '56'],\n J: ['58', '59', '60'],\n K: ['61', '62', '63'],\n L: ['64', '65', '66'],\n M: ['68'],\n N: ['69', '70', '71', '72', '73', '74', '75'],\n O: ['77', '78', '79', '80', '81', '82'],\n P: ['84'],\n Q: ['85'],\n R: ['86', '87', '88'],\n S: ['90', '91', '92', '93'],\n T: ['94', '95', '96'],\n U: ['97', '98'],\n V: ['99'],\n };\n\n classItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (level !== index) {\n errors.push(\n `Processes classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < classItems.length; index += 1) {\n const parent = classItems[index - 1] ?? {};\n const child = classItems[index] ?? {};\n const parentLevel = Number(parent['@level']);\n const childLevel = Number(child['@level']);\n const parentId = String(parent['@classId'] ?? '');\n const childId = String(child['@classId'] ?? '');\n\n if (parentLevel === 0 && childLevel === 1) {\n const validCodes = level0ToLevel1Mapping[parentId] ?? [];\n if (!validCodes.includes(childId)) {\n errors.push(\n `Processes classification code error: level 1 code '${childId}' does not correspond to level 0 code '${parentId}'`,\n );\n }\n continue;\n }\n\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Processes classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateSourcesClassificationHierarchy(\n classItems: Array<Record<string, unknown>> | Record<string, unknown> | undefined,\n): string[] {\n const normalizedItems = ensureArray(classItems);\n const errors: string[] = [];\n\n normalizedItems.forEach((item, index) => {\n const level = Number(item['@level']);\n if (!Number.isFinite(level)) {\n errors.push(\n `Sources classification level parsing error: missing or invalid '@level' at index ${index}`,\n );\n return;\n }\n if (level !== index) {\n errors.push(\n `Sources classification level sorting error: at index ${index}, expected level ${index}, got ${level}`,\n );\n }\n });\n\n for (let index = 1; index < normalizedItems.length; index += 1) {\n const parentId = normalizedItems[index - 1]?.['@classId'];\n const childId = normalizedItems[index]?.['@classId'];\n if (typeof parentId !== 'string' || typeof childId !== 'string') {\n errors.push(\n `Sources classification code error: missing '@classId' for parent index ${index - 1} or child index ${index}`,\n );\n continue;\n }\n if (!childId.startsWith(parentId)) {\n errors.push(\n `Sources classification code error: child code '${childId}' does not start with parent code '${parentId}'`,\n );\n }\n }\n\n return errors;\n}\n\nfunction validateLocalizedTextLanguageConstraints(node: unknown, currentPath = ''): string[] {\n const errors: string[] = [];\n const currentNode = asRecord(node);\n\n if (currentNode) {\n const language = currentNode['@xml:lang'];\n const text = currentNode['#text'];\n const location = currentPath || '<root>';\n\n if (typeof language === 'string') {\n if (!TIDAS_LANGUAGE_CODE_SET.has(language)) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' is not a TIDAS Languages enumeration value`,\n );\n }\n }\n\n if (typeof language === 'string' && typeof text === 'string') {\n const hasChinese = CHINESE_CHARACTER_RE.test(text);\n\n if (language === 'zh' && !hasChinese) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' must include at least one Chinese character`,\n );\n }\n\n if (language === 'en' && hasChinese) {\n errors.push(\n `Localized text error at ${location}: @xml:lang '${language}' must not contain Chinese characters`,\n );\n }\n }\n\n for (const [key, value] of Object.entries(currentNode)) {\n const childPath = currentPath ? `${currentPath}/${key}` : key;\n errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));\n }\n return errors;\n }\n\n if (Array.isArray(node)) {\n node.forEach((value, index) => {\n const childPath = currentPath ? `${currentPath}/${index}` : String(index);\n errors.push(...validateLocalizedTextLanguageConstraints(value, childPath));\n });\n }\n\n return errors;\n}\n\nfunction collectFlowClassificationStructureIssues(\n items: unknown,\n category: string,\n filePath: string,\n locationBase: string,\n requiredIdKey: '@classId' | '@catId',\n): ValidationIssue[] {\n if (!Array.isArray(items)) {\n return [];\n }\n\n const issues: ValidationIssue[] = [];\n\n items.forEach((item, index) => {\n const record = asRecord(item);\n if (!record) {\n return;\n }\n\n for (const fieldName of ['@level', requiredIdKey, '#text'] as const) {\n if (record[fieldName] !== undefined) {\n continue;\n }\n\n issues.push(\n makeIssue(\n category,\n filePath,\n `${locationBase}/${index}`,\n `Schema Error at ${locationBase}/${index}: '${fieldName}' is a required property`,\n ),\n );\n }\n });\n\n return issues;\n}\n\nfunction extractLocalizedTextLocation(message: string): string {\n if (!message.startsWith('Localized text error at ') || !message.includes(':')) {\n return '<root>';\n }\n\n const location = message.slice('Localized text error at '.length).split(':', 1)[0];\n return location.length > 0 ? location : '<root>';\n}\n\nfunction collectLocalizedTextIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n return validateLocalizedTextLanguageConstraints(jsonItem).map((message) => {\n return makeIssue(\n category,\n filePath,\n extractLocalizedTextLocation(message),\n message,\n message.includes('is not a TIDAS Languages enumeration value')\n ? 'localized_text_language_not_in_tidas_enum'\n : 'localized_text_language_error',\n );\n });\n}\n\nfunction collectFlowSchemaGapIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n if (category !== 'flows') {\n return [];\n }\n\n const flowDataSet = asRecord(asRecord(jsonItem)?.flowDataSet);\n const modellingAndValidation = asRecord(flowDataSet?.modellingAndValidation);\n const lciMethod = asRecord(modellingAndValidation?.LCIMethod);\n const dataSetType = lciMethod?.typeOfDataSet;\n const dataSetInformation = asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation);\n const classificationInformation = asRecord(dataSetInformation?.classificationInformation);\n\n if (dataSetType === 'Product flow') {\n const classes = asRecord(classificationInformation?.['common:classification'])?.[\n 'common:class'\n ];\n return collectFlowClassificationStructureIssues(\n classes,\n category,\n filePath,\n 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:classification/common:class',\n '@classId',\n );\n }\n\n if (dataSetType === 'Elementary flow') {\n const categories = asRecord(\n classificationInformation?.['common:elementaryFlowCategorization'],\n )?.['common:category'];\n\n return collectFlowClassificationStructureIssues(\n categories,\n category,\n filePath,\n 'flowDataSet/flowInformation/dataSetInformation/classificationInformation/common:elementaryFlowCategorization/common:category',\n '@catId',\n );\n }\n\n return [];\n}\n\nexport function collectClassificationIssues(\n jsonItem: unknown,\n category: string,\n filePath: string,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n const root = asRecord(jsonItem);\n\n try {\n if (category === 'flows') {\n const flowDataSet = asRecord(root?.flowDataSet);\n const dataSetType = asRecord(asRecord(flowDataSet?.modellingAndValidation)?.LCIMethod)?.[\n 'typeOfDataSet'\n ];\n\n if (dataSetType === 'Product flow' || dataSetType === 'Waste flow') {\n const items = asRecord(\n asRecord(\n asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:classification'],\n )?.['common:class'];\n\n if (Array.isArray(items)) {\n issues.push(\n ...validateProductFlowsClassificationHierarchy(\n items.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (dataSetType === 'Elementary flow') {\n const items = asRecord(\n asRecord(\n asRecord(asRecord(flowDataSet?.flowInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:elementaryFlowCategorization'],\n )?.['common:category'];\n\n if (Array.isArray(items)) {\n issues.push(\n ...validateElementaryFlowsClassificationHierarchy(\n items.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n }\n } else if (category === 'processes') {\n const items = asRecord(\n asRecord(asRecord(asRecord(root?.processDataSet)?.processInformation)?.dataSetInformation)\n ?.classificationInformation,\n )?.['common:classification'];\n\n const classes = asRecord(items)?.['common:class'];\n if (Array.isArray(classes)) {\n issues.push(\n ...validateProcessesClassificationHierarchy(\n classes.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (category === 'lifecyclemodels') {\n const items = asRecord(\n asRecord(asRecord(root?.lifecycleModelDataSet)?.lifecycleModelInformation)\n ?.dataSetInformation,\n )?.classificationInformation;\n\n const classes = asRecord(asRecord(items)?.['common:classification'])?.['common:class'];\n if (Array.isArray(classes)) {\n issues.push(\n ...validateProcessesClassificationHierarchy(\n classes.filter((item): item is Record<string, unknown> => Boolean(asRecord(item))),\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } else if (category === 'sources') {\n const classes = asRecord(\n asRecord(asRecord(asRecord(root?.sourceDataSet)?.sourceInformation)?.dataSetInformation)\n ?.classificationInformation,\n );\n issues.push(\n ...validateSourcesClassificationHierarchy(\n asRecord(asRecord(classes)?.['common:classification'])?.['common:class'] as\n Array<Record<string, unknown>> | Record<string, unknown> | undefined,\n ).map((message) =>\n makeIssue(category, filePath, '<root>', message, 'classification_hierarchy_error'),\n ),\n );\n }\n } catch {\n return issues;\n }\n\n return issues;\n}\n\nfunction collectSchemaIssues(\n schema: SafeParseSchema,\n jsonItem: unknown,\n category: SupportedCategory,\n filePath: string,\n createEntity: SdkValidationFactory | null = null,\n): ValidationIssue[] {\n try {\n const result = validateSchemaWithDeepFallback(schema, jsonItem, createEntity);\n if (result.success) {\n return [];\n }\n\n const rawIssues = result.issues;\n if (rawIssues.length === 0) {\n return [createValidationErrorIssue(category, filePath, 'Schema validation failed')];\n }\n\n return rawIssues.map((issue) => createSchemaIssue(category, filePath, issue));\n } catch (error) {\n return [createValidationErrorIssue(category, filePath, error)];\n }\n}\n\nfunction categoryValidate(\n jsonFilePath: string,\n category: SupportedCategory,\n schema: SafeParseSchema,\n createEntity: SdkValidationFactory | null = null,\n emitLogs = true,\n): CategoryValidationReport {\n const issues: ValidationIssue[] = [];\n\n for (const fileName of readdirSync(jsonFilePath).sort()) {\n if (!fileName.endsWith('.json')) {\n continue;\n }\n\n const fullPath = path.join(jsonFilePath, fileName);\n let jsonItem: unknown;\n\n try {\n jsonItem = JSON.parse(readFileSync(fullPath, 'utf8')) as unknown;\n } catch (error) {\n issues.push(createInvalidJsonIssue(category, fullPath, error));\n continue;\n }\n\n const itemIssues = dedupeIssues([\n ...collectSchemaIssues(schema, jsonItem, category, fullPath, createEntity),\n ...collectFlowSchemaGapIssues(jsonItem, category, fullPath),\n ...collectLocalizedTextIssues(jsonItem, category, fullPath),\n ...collectClassificationIssues(jsonItem, category, fullPath),\n ]);\n\n issues.push(...itemIssues);\n\n if (!emitLogs) {\n continue;\n }\n\n if (itemIssues.length === 0) {\n console.info(`INFO: ${fullPath} PASSED.`);\n continue;\n }\n\n itemIssues.forEach((issue) => {\n console.error(`ERROR: ${fullPath} ${issue.message}`);\n });\n }\n\n return buildCategoryReport(category, issues);\n}\n\nfunction isSafeParseSchema(value: unknown): value is SafeParseSchema {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'safeParse' in value &&\n typeof (value as { safeParse?: unknown }).safeParse === 'function'\n );\n}\n\nfunction resolveCategorySchemas(\n moduleExports: TidasSdkPublicModule,\n): Map<\n SupportedCategory,\n { schema: SafeParseSchema; createEntity: SdkValidationFactory | null }\n> | null {\n const schemas = new Map<\n SupportedCategory,\n { schema: SafeParseSchema; createEntity: SdkValidationFactory | null }\n >();\n\n for (const category of SUPPORTED_CATEGORIES) {\n const exportName = CATEGORY_SCHEMA_EXPORTS[category];\n const schema = moduleExports[exportName];\n if (!isSafeParseSchema(schema)) {\n return null;\n }\n const factoryName = CATEGORY_FACTORY_EXPORTS[category];\n const createEntity = moduleExports[factoryName];\n schemas.set(category, {\n schema,\n createEntity: typeof createEntity === 'function' ? createEntity : null,\n });\n }\n\n return schemas;\n}\n\nexport function createTidasSdkPackageValidator(\n moduleExports: TidasSdkPublicModule,\n location: string,\n): {\n location: string;\n validatePackageDir: (inputDir: string, emitLogs?: boolean) => PackageValidationReport;\n} | null {\n const schemas = resolveCategorySchemas(moduleExports);\n if (!schemas) {\n return null;\n }\n\n return {\n location,\n validatePackageDir(inputDir: string, emitLogs = false): PackageValidationReport {\n const categoryReports = SUPPORTED_CATEGORIES.flatMap((category) => {\n const categoryDir = path.join(inputDir, category);\n const validator = schemas.get(category);\n if (!validator || !existsSync(categoryDir)) {\n return [];\n }\n\n return [\n categoryValidate(\n categoryDir,\n category,\n validator.schema,\n validator.createEntity,\n emitLogs,\n ),\n ];\n });\n\n return buildPackageReport(inputDir, categoryReports);\n },\n };\n}\n\nexport const __testInternals = {\n summarizeIssues,\n buildCategoryReport,\n buildPackageReport,\n asRecord,\n ensureArray,\n toLocation,\n createInvalidJsonIssue,\n createValidationErrorIssue,\n createSchemaIssue,\n dedupeIssues,\n makeIssue,\n validateElementaryFlowsClassificationHierarchy,\n validateProductFlowsClassificationHierarchy,\n validateProcessesClassificationHierarchy,\n validateSourcesClassificationHierarchy,\n validateLocalizedTextLanguageConstraints,\n collectFlowClassificationStructureIssues,\n extractLocalizedTextLocation,\n collectLocalizedTextIssues,\n collectFlowSchemaGapIssues,\n collectClassificationIssues,\n collectSchemaIssues,\n categoryValidate,\n CATEGORY_FACTORY_EXPORTS,\n resolveCategorySchemas,\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tiangong-lca/cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.6",
4
4
  "description": "Unified TianGong LCA CLI with direct REST adapters and low-entropy command surface.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -60,17 +60,17 @@
60
60
  "devDependencies": {
61
61
  "@types/node": "^24.13.3",
62
62
  "c8": "^12.0.0",
63
- "lint-staged": "^17.3.0",
63
+ "lint-staged": "^17.4.1",
64
64
  "oxlint": "^1.80.0",
65
65
  "oxlint-tsgolint": "^7.0.2001",
66
- "prettier": "3.8.1",
66
+ "prettier": "3.9.6",
67
67
  "sigstore": "5.0.0",
68
- "tsx": "^4.23.12",
68
+ "tsx": "^4.23.13",
69
69
  "typescript": "^7.0.2"
70
70
  },
71
71
  "dependencies": {
72
- "@supabase/supabase-js": "^2.101.1",
73
- "@tiangong-lca/tidas-sdk": "^0.2.0"
72
+ "@supabase/supabase-js": "^2.112.4",
73
+ "@tiangong-lca/tidas-sdk": "0.2.0"
74
74
  },
75
75
  "scripts": {
76
76
  "start": "pnpm build && node ./bin/tiangong-lca.js",
@@ -90,8 +90,9 @@
90
90
  "test:package": "node --test test/toolchain-contract.test.mjs",
91
91
  "test:coverage": "pnpm build && node ./scripts/run-test-coverage.cjs",
92
92
  "test:coverage:assert-full": "node ./dist/scripts/assert-full-coverage.js",
93
+ "peers:check": "pnpm peers check",
93
94
  "case:auth-identity:production": "pnpm build && node ./dist/scripts/run-auth-identity-production-case.js",
94
- "prepush:gate": "pnpm lint && pnpm test:package && pnpm test:coverage && pnpm test:coverage:assert-full",
95
+ "prepush:gate": "pnpm lint && pnpm peers:check && pnpm test:package && pnpm test:coverage && pnpm test:coverage:assert-full",
95
96
  "release:check-tag": "node ./scripts/ci/check-release-tag.cjs cli",
96
97
  "release:assert-unpublished": "node ./scripts/ci/release-version.cjs assert-unpublished",
97
98
  "release:verify-published": "node ./scripts/ci/verify-published-release.cjs",