@tiangong-lca/cli 0.0.31 → 0.0.33

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.
@@ -278,6 +278,40 @@ export async function fetchMaintenanceAccountTableRows(options) {
278
278
  },
279
279
  });
280
280
  }
281
+ /**
282
+ * Read every row visible to the authenticated owner for one maintenance table.
283
+ *
284
+ * This deliberately omits a user_id predicate. It is a SELECT-only RLS view used
285
+ * by destructive maintenance admission to prove that a draft flow has no inbound
286
+ * reference from either an owner row or another row visible to the owner session.
287
+ */
288
+ export async function fetchMaintenanceVisibleTableRows(options) {
289
+ const pageSize = normalizeMaintenancePageSize(options.pageSize);
290
+ return fetchCompletePostgrestPages({
291
+ table: options.table,
292
+ requestedPageSize: pageSize,
293
+ rowIdentity: (row) => `${row.id}\u0000${row.version}\u0000${row.user_id ?? ''}\u0000${row.state_code === null ? '' : String(row.state_code).padStart(12, '0')}`,
294
+ fetchPage: async (offset) => {
295
+ const url = new URL(`${options.context.rest_base_url}/${options.table}`);
296
+ url.searchParams.set('select', selectForTable(options.table, options.includeJson));
297
+ url.searchParams.set('order', 'id.asc,version.asc,user_id.asc.nullsfirst,state_code.asc.nullsfirst');
298
+ url.searchParams.set('limit', String(pageSize));
299
+ url.searchParams.set('offset', String(offset));
300
+ const sourceUrl = url.toString();
301
+ const response = await fetchJsonResponse({
302
+ context: options.context,
303
+ url: sourceUrl,
304
+ init: { headers: { Prefer: 'count=exact' } },
305
+ label: `${options.table} visible maintenance snapshot`,
306
+ });
307
+ return {
308
+ rows: normalizeRemoteRows(options.table, response.body, sourceUrl, options.includeJson),
309
+ source_url: sourceUrl,
310
+ content_range: response.headers.get('content-range'),
311
+ };
312
+ },
313
+ });
314
+ }
281
315
  async function invokeMaintenanceRpc(options) {
282
316
  const url = `${options.context.rest_base_url}/rpc/${options.rpc}`;
283
317
  const redactResponseDetails = options.rpc.startsWith('cmd_dataset_flow_identity_');
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-maintenance-remote.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-remote.ts"],"names":[],"mappings":"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","sourcesContent":["import { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport {\n buildSnapshotCompleteness,\n fetchCompletePostgrestPages,\n type DatasetMaintenanceTableCompleteness,\n type DatasetMaintenanceSnapshotCompleteness,\n} from './dataset-maintenance-pagination.js';\nimport {\n buildSupabaseAuthHeaders,\n deriveSupabaseProjectBaseUrl,\n requireSupabaseRestRuntime,\n} from './supabase-client.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\nimport {\n isJsonObject,\n MAINTENANCE_SCAN_TABLES,\n type DatasetMaintenanceMutableTable,\n type DatasetMaintenanceRemoteRow,\n type DatasetMaintenanceScanTable,\n type JsonObject,\n} from './dataset-maintenance-contract.js';\nimport { assertFlowIdentityWireJson } from './dataset-maintenance-flow-identity-wire.js';\n\nconst DEFAULT_PAGE_SIZE = 1_000;\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nexport type DatasetMaintenanceRemoteContext = {\n project_ref: string;\n rest_base_url: string;\n publishable_key: string;\n access_token: string;\n account: {\n user_id: string;\n email: string;\n session_source: string;\n };\n fetch_impl: FetchLike;\n timeout_ms: number;\n};\n\nexport type DatasetMaintenanceDerivativeRemoteRow = {\n table: 'flows' | 'processes';\n id: string;\n version: string;\n user_id: string;\n state_code: number;\n raw: JsonObject;\n};\n\nfunction trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nfunction normalizeStateCode(value: unknown): number | null {\n if (typeof value === 'number' && Number.isInteger(value)) {\n return value;\n }\n return typeof value === 'string' && /^-?\\d+$/u.test(value.trim())\n ? Number.parseInt(value.trim(), 10)\n : null;\n}\n\nexport function normalizeMaintenancePageSize(value?: number): number {\n const normalized = value ?? DEFAULT_PAGE_SIZE;\n if (!Number.isInteger(normalized) || normalized < 1 || normalized > 5_000) {\n throw new CliError('Maintenance page size must be an integer between 1 and 5000.', {\n code: 'DATASET_MAINTENANCE_PAGE_SIZE_INVALID',\n exitCode: 2,\n details: value,\n });\n }\n return normalized;\n}\n\nexport function normalizeMaintenanceTimeout(value?: number): number {\n const normalized = value ?? DEFAULT_TIMEOUT_MS;\n if (!Number.isInteger(normalized) || normalized < 1) {\n throw new CliError('Maintenance timeout must be a positive integer.', {\n code: 'DATASET_MAINTENANCE_TIMEOUT_INVALID',\n exitCode: 2,\n details: value,\n });\n }\n return normalized;\n}\n\nasync function fetchJsonResponse(options: {\n context: Pick<\n DatasetMaintenanceRemoteContext,\n 'publishable_key' | 'access_token' | 'fetch_impl' | 'timeout_ms'\n >;\n url: string;\n init?: RequestInit;\n label: string;\n redactResponseDetails?: boolean;\n}): Promise<{ body: unknown; headers: ResponseLike['headers'] }> {\n const response = await options.context.fetch_impl(options.url, {\n ...options.init,\n headers: {\n ...buildSupabaseAuthHeaders(options.context.publishable_key, options.context.access_token),\n ...(options.init?.headers ?? {}),\n },\n signal: AbortSignal.timeout(options.context.timeout_ms),\n });\n const text = await response.text();\n if (!response.ok) {\n throw new CliError(`HTTP ${response.status} returned from ${options.label}`, {\n code: 'DATASET_MAINTENANCE_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: options.redactResponseDetails\n ? { url: options.url, response_redacted: true }\n : { url: options.url, response: text },\n });\n }\n if (!text.trim()) {\n return { body: null, headers: response.headers };\n }\n try {\n return { body: JSON.parse(text), headers: response.headers };\n } catch (error) {\n throw new CliError(`Remote response was not valid JSON for ${options.label}`, {\n code: 'DATASET_MAINTENANCE_REMOTE_INVALID_JSON',\n exitCode: 1,\n details: {\n url: options.url,\n error: String(error),\n },\n });\n }\n}\n\nasync function fetchJson(options: {\n context: Pick<\n DatasetMaintenanceRemoteContext,\n 'publishable_key' | 'access_token' | 'fetch_impl' | 'timeout_ms'\n >;\n url: string;\n init?: RequestInit;\n label: string;\n redactResponseDetails?: boolean;\n}): Promise<unknown> {\n return (await fetchJsonResponse(options)).body;\n}\n\nfunction selectForTable(table: DatasetMaintenanceScanTable, includeJson = false): string {\n const common = `id,version,user_id,state_code,modified_at,${includeJson ? 'json,' : ''}json_ordered,rule_verification`;\n return table === 'processes' ? `${common},model_id` : common;\n}\n\nfunction normalizeRemoteRow(\n table: DatasetMaintenanceScanTable,\n value: unknown,\n includeJson = false,\n): DatasetMaintenanceRemoteRow | null {\n if (!isJsonObject(value)) {\n return null;\n }\n const id = trimToken(value.id);\n const version = trimToken(value.version);\n if (!id || !version) {\n return null;\n }\n return {\n table,\n id,\n version,\n user_id: trimToken(value.user_id),\n state_code: normalizeStateCode(value.state_code),\n modified_at: trimToken(value.modified_at),\n ...(includeJson ? { json: isJsonObject(value.json) ? value.json : null } : {}),\n json_ordered: isJsonObject(value.json_ordered) ? value.json_ordered : null,\n model_id: trimToken(value.model_id),\n rule_verification:\n typeof value.rule_verification === 'boolean' ? value.rule_verification : null,\n };\n}\n\nfunction normalizeRemoteRows(\n table: DatasetMaintenanceScanTable,\n value: unknown,\n label: string,\n includeJson = false,\n): DatasetMaintenanceRemoteRow[] {\n if (!Array.isArray(value)) {\n throw new CliError(`Remote response was not an array for ${label}.`, {\n code: 'DATASET_MAINTENANCE_REMOTE_ROWS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n const rows = value.map((entry) => normalizeRemoteRow(table, entry, includeJson));\n if (rows.some((row) => row === null)) {\n throw new CliError(`Remote response contained an invalid row for ${label}.`, {\n code: 'DATASET_MAINTENANCE_REMOTE_ROW_INVALID',\n exitCode: 1,\n });\n }\n return rows as DatasetMaintenanceRemoteRow[];\n}\n\nexport async function resolveMaintenanceRemoteContext(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n now?: Date;\n}): Promise<DatasetMaintenanceRemoteContext> {\n const timeoutMs = normalizeMaintenanceTimeout(options.timeoutMs);\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n now: options.now,\n });\n const projectBaseUrl = deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl);\n const projectHost = new URL(projectBaseUrl).hostname;\n const projectRef = projectHost.endsWith('.supabase.co')\n ? projectHost.slice(0, -'.supabase.co'.length)\n : projectHost;\n const partialContext = {\n publishable_key: runtime.publishableKey,\n access_token: session.accessToken,\n fetch_impl: options.fetchImpl,\n timeout_ms: timeoutMs,\n };\n const currentUser = await fetchJson({\n context: partialContext,\n url: `${projectBaseUrl}/auth/v1/user`,\n label: 'supabase current-user lookup',\n });\n const userId = isJsonObject(currentUser) ? trimToken(currentUser.id) : null;\n const email = isJsonObject(currentUser)\n ? (trimToken(currentUser.email) ?? trimToken(session.userEmail))\n : trimToken(session.userEmail);\n if (!userId || !email) {\n throw new CliError('Supabase current-user lookup did not return id and email.', {\n code: 'DATASET_MAINTENANCE_CURRENT_USER_INVALID',\n exitCode: 1,\n });\n }\n return {\n project_ref: projectRef,\n rest_base_url: `${projectBaseUrl}/rest/v1`,\n publishable_key: runtime.publishableKey,\n access_token: session.accessToken,\n account: {\n user_id: userId,\n email,\n session_source: session.source,\n },\n fetch_impl: options.fetchImpl,\n timeout_ms: timeoutMs,\n };\n}\n\nexport async function fetchMaintenanceExactRows(options: {\n context: DatasetMaintenanceRemoteContext;\n table: DatasetMaintenanceScanTable;\n id: string;\n version: string;\n includeJson?: boolean;\n}): Promise<{ rows: DatasetMaintenanceRemoteRow[]; source_url: string }> {\n const url = new URL(`${options.context.rest_base_url}/${options.table}`);\n url.searchParams.set('select', selectForTable(options.table, options.includeJson));\n url.searchParams.set('id', `eq.${options.id}`);\n url.searchParams.set('version', `eq.${options.version}`);\n url.searchParams.set('limit', '2');\n const sourceUrl = url.toString();\n const body = await fetchJson({\n context: options.context,\n url: sourceUrl,\n label: `${options.table} exact maintenance lookup`,\n });\n return {\n rows: normalizeRemoteRows(options.table, body, sourceUrl, options.includeJson),\n source_url: sourceUrl,\n };\n}\n\nexport async function fetchMaintenanceAccountRows(options: {\n context: DatasetMaintenanceRemoteContext;\n userId: string;\n pageSize?: number;\n}): Promise<{\n rows: DatasetMaintenanceRemoteRow[];\n source_urls: string[];\n completeness: DatasetMaintenanceSnapshotCompleteness<DatasetMaintenanceScanTable>;\n}> {\n const pageSize = normalizeMaintenancePageSize(options.pageSize);\n const tableResults: Array<{\n table: DatasetMaintenanceScanTable;\n rows: DatasetMaintenanceRemoteRow[];\n source_urls: string[];\n completeness: Awaited<ReturnType<typeof fetchCompletePostgrestPages>>['completeness'];\n }> = [];\n for (const table of MAINTENANCE_SCAN_TABLES) {\n const result = await fetchCompletePostgrestPages({\n table,\n requestedPageSize: pageSize,\n rowIdentity: (row: DatasetMaintenanceRemoteRow) => `${row.id}\\u0000${row.version}`,\n fetchPage: async (offset) => {\n const url = new URL(`${options.context.rest_base_url}/${table}`);\n url.searchParams.set('select', selectForTable(table));\n url.searchParams.set('user_id', `eq.${options.userId}`);\n url.searchParams.set('order', 'id.asc,version.asc');\n url.searchParams.set('limit', String(pageSize));\n url.searchParams.set('offset', String(offset));\n const sourceUrl = url.toString();\n const response = await fetchJsonResponse({\n context: options.context,\n url: sourceUrl,\n init: { headers: { Prefer: 'count=exact' } },\n label: `${table} account maintenance snapshot`,\n });\n const rows = normalizeRemoteRows(table, response.body, sourceUrl);\n if (rows.some((row) => row.user_id !== options.userId)) {\n throw new CliError(`Remote ${table} snapshot contained a foreign account row.`, {\n code: 'DATASET_MAINTENANCE_REMOTE_ROW_INVALID',\n exitCode: 1,\n });\n }\n return {\n rows,\n source_url: sourceUrl,\n content_range: response.headers.get('content-range'),\n };\n },\n });\n tableResults.push({ table, ...result });\n }\n return {\n rows: tableResults.flatMap((result) => result.rows),\n source_urls: tableResults.flatMap((result) => result.source_urls),\n completeness: buildSnapshotCompleteness({\n tables: MAINTENANCE_SCAN_TABLES,\n requestedPageSize: pageSize,\n results: tableResults,\n }),\n };\n}\n\nexport async function fetchMaintenanceAccountTableRows(options: {\n context: DatasetMaintenanceRemoteContext;\n userId: string;\n table: DatasetMaintenanceScanTable;\n stateCode?: number;\n includeJson?: boolean;\n pageSize?: number;\n}): Promise<{\n rows: DatasetMaintenanceRemoteRow[];\n source_urls: string[];\n completeness: DatasetMaintenanceTableCompleteness;\n}> {\n const pageSize = normalizeMaintenancePageSize(options.pageSize);\n return fetchCompletePostgrestPages({\n table: options.table,\n requestedPageSize: pageSize,\n rowIdentity: (row: DatasetMaintenanceRemoteRow) => `${row.id}\\u0000${row.version}`,\n fetchPage: async (offset) => {\n const url = new URL(`${options.context.rest_base_url}/${options.table}`);\n url.searchParams.set('select', selectForTable(options.table, options.includeJson));\n url.searchParams.set('user_id', `eq.${options.userId}`);\n if (options.stateCode !== undefined) {\n url.searchParams.set('state_code', `eq.${options.stateCode}`);\n }\n url.searchParams.set('order', 'id.asc,version.asc');\n url.searchParams.set('limit', String(pageSize));\n url.searchParams.set('offset', String(offset));\n const sourceUrl = url.toString();\n const response = await fetchJsonResponse({\n context: options.context,\n url: sourceUrl,\n init: { headers: { Prefer: 'count=exact' } },\n label: `${options.table} account maintenance snapshot`,\n });\n const rows = normalizeRemoteRows(\n options.table,\n response.body,\n sourceUrl,\n options.includeJson,\n );\n if (\n rows.some(\n (row) =>\n row.user_id !== options.userId ||\n (options.stateCode !== undefined && row.state_code !== options.stateCode),\n )\n ) {\n throw new CliError(`Remote ${options.table} snapshot violated the account/state fence.`, {\n code: 'DATASET_MAINTENANCE_REMOTE_ROW_INVALID',\n exitCode: 1,\n });\n }\n return {\n rows,\n source_url: sourceUrl,\n content_range: response.headers.get('content-range'),\n };\n },\n });\n}\n\nasync function invokeMaintenanceRpc(options: {\n context: DatasetMaintenanceRemoteContext;\n rpc:\n | 'cmd_dataset_save_draft'\n | 'cmd_dataset_delete'\n | 'cmd_dataset_alias_plan_guarded'\n | 'cmd_dataset_alias_execution_preflight_guarded'\n | 'cmd_dataset_alias_execution_gate_guarded'\n | 'cmd_dataset_alias_execution_admit_guarded'\n | 'cmd_dataset_alias_execution_read'\n | 'cmd_dataset_derivative_rebuild_snapshot'\n | 'cmd_dataset_derivative_rebuild_plan_guarded'\n | 'cmd_dataset_derivative_rebuild_read'\n | 'cmd_dataset_flow_identity_capture_attest_guarded'\n | 'cmd_dataset_flow_identity_scope_preflight_guarded'\n | 'cmd_dataset_flow_identity_scope_lookup'\n | 'cmd_dataset_flow_identity_scope_recover_guarded'\n | 'cmd_dataset_flow_identity_process_rewrite_guarded'\n | 'cmd_dataset_flow_identity_scope_read'\n | 'cmd_dataset_flow_identity_scope_finalize_guarded';\n body: JsonObject;\n minimumTimeoutMs?: number;\n allowDomainFailure?: boolean;\n}): Promise<JsonObject> {\n const url = `${options.context.rest_base_url}/rpc/${options.rpc}`;\n const redactResponseDetails = options.rpc.startsWith('cmd_dataset_flow_identity_');\n const body = await fetchJson({\n context: {\n ...options.context,\n timeout_ms: Math.max(options.context.timeout_ms, options.minimumTimeoutMs ?? 0),\n },\n url,\n init: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(options.body),\n },\n label: options.rpc,\n redactResponseDetails,\n });\n if (\n redactResponseDetails &&\n isJsonObject(body) &&\n body.ok !== true &&\n Object.hasOwn(body, 'execution_permit')\n ) {\n throw new CliError(`${options.rpc} returned an invalid rejection envelope.`, {\n code: 'DATASET_MAINTENANCE_RPC_FAILED',\n exitCode: 1,\n details: { rpc: options.rpc, response_redacted: true },\n });\n }\n if (\n !isJsonObject(body) ||\n (body.ok !== true &&\n !(options.allowDomainFailure === true && isMaintenanceRpcDomainFailure(body)))\n ) {\n throw new CliError(`${options.rpc} returned an unexpected response.`, {\n code: 'DATASET_MAINTENANCE_RPC_FAILED',\n exitCode: 1,\n details: redactResponseDetails ? { rpc: options.rpc, response_redacted: true } : body,\n });\n }\n return body;\n}\n\nexport type MaintenanceRpcDomainFailure = JsonObject & {\n ok: false;\n code: string;\n status: string | number;\n};\n\nexport function isMaintenanceRpcDomainFailure(\n value: unknown,\n): value is MaintenanceRpcDomainFailure {\n return Boolean(\n isJsonObject(value) &&\n value.ok === false &&\n typeof value.code === 'string' &&\n value.code.trim() &&\n ((typeof value.status === 'number' && Number.isSafeInteger(value.status)) ||\n (typeof value.status === 'string' && value.status.trim())),\n );\n}\n\nexport async function preflightMaintenanceAliasExecution(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_execution_preflight_guarded',\n body: { p_request: options.request },\n minimumTimeoutMs: 90_000,\n });\n}\n\nexport async function admitMaintenanceAliasExecution(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_execution_admit_guarded',\n body: { p_request: options.request },\n minimumTimeoutMs: 90_000,\n });\n}\n\nexport async function captureMaintenanceAliasExecutionGate(options: {\n context: DatasetMaintenanceRemoteContext;\n requestId: string;\n preflightToken: string;\n gateName: 'primary_support_plan' | 'execution_unused' | 'derivative_quiescence';\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_execution_gate_guarded',\n body: {\n p_request_id: options.requestId,\n p_preflight_token: options.preflightToken,\n p_gate_name: options.gateName,\n },\n minimumTimeoutMs: 90_000,\n });\n}\n\nexport async function readMaintenanceAliasExecution(options: {\n context: DatasetMaintenanceRemoteContext;\n requestId: string;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_execution_read',\n body: { p_request_id: options.requestId },\n minimumTimeoutMs: 90_000,\n });\n}\n\nfunction derivativeSelectForTable(table: 'flows' | 'processes'): string {\n void table;\n return 'id,version,user_id,state_code,modified_at,json,json_ordered,extracted_text,extracted_md,embedding_ft,embedding_ft_at';\n}\n\nexport async function fetchMaintenanceDerivativeTargetRows(options: {\n context: DatasetMaintenanceRemoteContext;\n targets: Array<{ table: 'flows' | 'processes'; id: string; version: string }>;\n concurrency?: number;\n}): Promise<{ rows: DatasetMaintenanceDerivativeRemoteRow[]; source_urls: string[] }> {\n const concurrency = options.concurrency ?? 5;\n if (!Number.isInteger(concurrency) || concurrency < 1 || concurrency > 10) {\n throw new CliError('Derivative target read concurrency must be an integer between 1 and 10.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_READ_CONCURRENCY_INVALID',\n exitCode: 2,\n });\n }\n if (options.targets.length > 50) {\n throw new CliError('Protected derivative target read is bounded to 50 rows.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_TARGET_COUNT_INVALID',\n exitCode: 2,\n });\n }\n const rows: DatasetMaintenanceDerivativeRemoteRow[] = [];\n const sourceUrls: string[] = [];\n for (let offset = 0; offset < options.targets.length; offset += concurrency) {\n const chunk = options.targets.slice(offset, offset + concurrency);\n const results = await Promise.all(\n chunk.map(async (target) => {\n const url = new URL(`${options.context.rest_base_url}/${target.table}`);\n url.searchParams.set('select', derivativeSelectForTable(target.table));\n url.searchParams.set('id', `eq.${target.id}`);\n url.searchParams.set('version', `eq.${target.version}`);\n url.searchParams.set('limit', '2');\n const sourceUrl = url.toString();\n const body = await fetchJson({\n context: options.context,\n url: sourceUrl,\n label: `${target.table} protected derivative lookup`,\n });\n if (!Array.isArray(body) || body.length !== 1 || !isJsonObject(body[0])) {\n throw new CliError('Protected derivative target was missing, duplicated, or malformed.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_TARGET_READ_INVALID',\n exitCode: 1,\n details: target,\n });\n }\n const row = body[0];\n const id = trimToken(row.id);\n const version = trimToken(row.version);\n const userId = trimToken(row.user_id);\n const stateCode = normalizeStateCode(row.state_code);\n if (id !== target.id || version !== target.version || !userId || stateCode === null) {\n throw new CliError('Protected derivative target identity was malformed.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_TARGET_READ_INVALID',\n exitCode: 1,\n details: target,\n });\n }\n return {\n row: {\n table: target.table,\n id,\n version,\n user_id: userId,\n state_code: stateCode,\n raw: row,\n } satisfies DatasetMaintenanceDerivativeRemoteRow,\n sourceUrl,\n };\n }),\n );\n rows.push(...results.map((result) => result.row));\n sourceUrls.push(...results.map((result) => result.sourceUrl));\n }\n return { rows, source_urls: sourceUrls };\n}\n\nexport async function fetchMaintenanceDerivativeSnapshot(options: {\n context: DatasetMaintenanceRemoteContext;\n table?: 'flows' | 'processes';\n id: string;\n version: string;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_derivative_rebuild_snapshot',\n body: {\n p_table: options.table ?? 'processes',\n p_id: options.id,\n p_version: options.version,\n },\n });\n}\n\nexport async function applyMaintenanceDerivativeRebuild(options: {\n context: DatasetMaintenanceRemoteContext;\n plan: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_derivative_rebuild_plan_guarded',\n body: { p_plan: options.plan },\n });\n}\n\nexport async function readMaintenanceDerivativeRebuild(options: {\n context: DatasetMaintenanceRemoteContext;\n requestId: string;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_derivative_rebuild_read',\n body: { p_request_id: options.requestId },\n });\n}\n\nexport async function applyMaintenanceAliasPlan(options: {\n context: DatasetMaintenanceRemoteContext;\n plan: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_plan_guarded',\n body: { p_plan: options.plan },\n });\n}\n\nexport async function preflightMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({ p_request: options.request });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_preflight_guarded',\n body,\n minimumTimeoutMs: 130_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function lookupMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({ p_request: options.request });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_lookup',\n body,\n minimumTimeoutMs: 90_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function rewriteMaintenanceFlowIdentityProcess(options: {\n context: DatasetMaintenanceRemoteContext;\n scopeId: string;\n request: JsonObject;\n authorization: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({\n p_scope_id: options.scopeId,\n p_request: options.request,\n p_authorization: options.authorization,\n });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_process_rewrite_guarded',\n body,\n minimumTimeoutMs: 90_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function readMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n scopeId: string;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({ p_scope_id: options.scopeId });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_read',\n body,\n minimumTimeoutMs: 90_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function finalizeMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n scopeId: string;\n request: JsonObject;\n authorization: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({\n p_scope_id: options.scopeId,\n p_request: options.request,\n p_authorization: options.authorization,\n });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_finalize_guarded',\n body,\n minimumTimeoutMs: 190_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function recoverMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n scopeId: string;\n request: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({\n p_scope_id: options.scopeId,\n p_request: options.request,\n });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_recover_guarded',\n body,\n minimumTimeoutMs: 130_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function attestMaintenanceFlowIdentityCapture(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({ p_request: options.request });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_capture_attest_guarded',\n body,\n minimumTimeoutMs: 190_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function saveDraftMaintenanceRow(options: {\n context: DatasetMaintenanceRemoteContext;\n table: DatasetMaintenanceMutableTable;\n id: string;\n version: string;\n payload: JsonObject;\n modelId: string | null;\n ruleVerification: boolean | null;\n audit: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_save_draft',\n body: {\n p_table: options.table,\n p_id: options.id,\n p_version: options.version,\n p_json_ordered: options.payload,\n p_model_id: options.modelId,\n p_rule_verification: options.ruleVerification,\n p_audit: options.audit,\n },\n });\n}\n\nexport async function deleteMaintenanceRow(options: {\n context: DatasetMaintenanceRemoteContext;\n table: DatasetMaintenanceMutableTable;\n id: string;\n version: string;\n audit: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_delete',\n body: {\n p_table: options.table,\n p_id: options.id,\n p_version: options.version,\n p_audit: options.audit,\n },\n });\n}\n\nexport const __testInternals = {\n fetchJson,\n fetchJsonResponse,\n normalizeRemoteRow,\n normalizeRemoteRows,\n selectForTable,\n};\n"]}
1
+ {"version":3,"file":"dataset-maintenance-remote.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EACL,yBAAyB,EACzB,2BAA2B,GAG5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EACL,YAAY,EACZ,uBAAuB,GAKxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAEzF,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAyBlC,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,IAAI,IAAI,CAAC;AACzB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/D,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAc;IACzD,MAAM,UAAU,GAAG,KAAK,IAAI,iBAAiB,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,KAAK,EAAE,CAAC;QAC1E,MAAM,IAAI,QAAQ,CAAC,8DAA8D,EAAE;YACjF,IAAI,EAAE,uCAAuC;YAC7C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,MAAM,UAAU,GAAG,KAAK,IAAI,kBAAkB,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,QAAQ,CAAC,iDAAiD,EAAE;YACpE,IAAI,EAAE,qCAAqC;YAC3C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAShC;IACC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE;QAC7D,GAAG,OAAO,CAAC,IAAI;QACf,OAAO,EAAE;YACP,GAAG,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;YAC1F,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;SACjC;QACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;KACxD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,QAAQ,QAAQ,CAAC,MAAM,kBAAkB,OAAO,CAAC,KAAK,EAAE,EAAE;YAC3E,IAAI,EAAE,2CAA2C;YACjD,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,CAAC,qBAAqB;gBACpC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE;gBAC/C,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,0CAA0C,OAAO,CAAC,KAAK,EAAE,EAAE;YAC5E,IAAI,EAAE,yCAAyC;YAC/C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACrB;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OASxB;IACC,OAAO,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,cAAc,CAAC,KAAkC,EAAE,WAAW,GAAG,KAAK;IAC7E,MAAM,MAAM,GAAG,6CAA6C,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,gCAAgC,CAAC;IACvH,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;AAC/D,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAkC,EAClC,KAAc,EACd,WAAW,GAAG,KAAK;IAEnB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,KAAK;QACL,EAAE;QACF,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QACjC,UAAU,EAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;QAChD,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;QACzC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QAC1E,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC,iBAAiB,EACf,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI;KAChF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAkC,EAClC,KAAc,EACd,KAAa,EACb,WAAW,GAAG,KAAK;IAEnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,wCAAwC,KAAK,GAAG,EAAE;YACnE,IAAI,EAAE,yCAAyC;YAC/C,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IACjF,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,QAAQ,CAAC,gDAAgD,KAAK,GAAG,EAAE;YAC3E,IAAI,EAAE,wCAAwC;YAC9C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAqC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,OAKrD;IACC,MAAM,SAAS,GAAG,2BAA2B,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,0BAA0B,CAAC;QAC/C,OAAO;QACP,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS;QACT,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,4BAA4B,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;IACrD,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrD,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;QAC9C,CAAC,CAAC,WAAW,CAAC;IAChB,MAAM,cAAc,GAAG;QACrB,eAAe,EAAE,OAAO,CAAC,cAAc;QACvC,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,UAAU,EAAE,SAAS;KACtB,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC;QAClC,OAAO,EAAE,cAAc;QACvB,GAAG,EAAE,GAAG,cAAc,eAAe;QACrC,KAAK,EAAE,8BAA8B;KACtC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC;QACrC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,2DAA2D,EAAE;YAC9E,IAAI,EAAE,0CAA0C;YAChD,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,WAAW,EAAE,UAAU;QACvB,aAAa,EAAE,GAAG,cAAc,UAAU;QAC1C,eAAe,EAAE,OAAO,CAAC,cAAc;QACvC,YAAY,EAAE,OAAO,CAAC,WAAW;QACjC,OAAO,EAAE;YACP,OAAO,EAAE,MAAM;YACf,KAAK;YACL,cAAc,EAAE,OAAO,CAAC,MAAM;SAC/B;QACD,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAM/C;IACC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACnF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,2BAA2B;KACnD,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;QAC9E,UAAU,EAAE,SAAS;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAIjD;IAKC,MAAM,QAAQ,GAAG,4BAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,YAAY,GAKb,EAAE,CAAC;IACR,KAAK,MAAM,KAAK,IAAI,uBAAuB,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC;YAC/C,KAAK;YACL,iBAAiB,EAAE,QAAQ;YAC3B,WAAW,EAAE,CAAC,GAAgC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,OAAO,EAAE;YAClF,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,EAAE,CAAC,CAAC;gBACjE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;gBACpD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;oBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,GAAG,EAAE,SAAS;oBACd,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;oBAC5C,KAAK,EAAE,GAAG,KAAK,+BAA+B;iBAC/C,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAClE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvD,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,4CAA4C,EAAE;wBAC9E,IAAI,EAAE,wCAAwC;wBAC9C,QAAQ,EAAE,CAAC;qBACZ,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;oBACL,IAAI;oBACJ,UAAU,EAAE,SAAS;oBACrB,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;iBACrD,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QACH,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO;QACL,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;QACnD,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;QACjE,YAAY,EAAE,yBAAyB,CAAC;YACtC,MAAM,EAAE,uBAAuB;YAC/B,iBAAiB,EAAE,QAAQ;YAC3B,OAAO,EAAE,YAAY;SACtB,CAAC;KACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,OAOtD;IAKC,MAAM,QAAQ,GAAG,4BAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChE,OAAO,2BAA2B,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,iBAAiB,EAAE,QAAQ;QAC3B,WAAW,EAAE,CAAC,GAAgC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,OAAO,EAAE;QAClF,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YACnF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;YACpD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;gBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,EAAE,SAAS;gBACd,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;gBAC5C,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,+BAA+B;aACvD,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,mBAAmB,CAC9B,OAAO,CAAC,KAAK,EACb,QAAQ,CAAC,IAAI,EACb,SAAS,EACT,OAAO,CAAC,WAAW,CACpB,CAAC;YACF,IACE,IAAI,CAAC,IAAI,CACP,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM;gBAC9B,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,CAC5E,EACD,CAAC;gBACD,MAAM,IAAI,QAAQ,CAAC,UAAU,OAAO,CAAC,KAAK,6CAA6C,EAAE;oBACvF,IAAI,EAAE,wCAAwC;oBAC9C,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,OAAO;gBACL,IAAI;gBACJ,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;aACrD,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,OAKtD;IAKC,MAAM,QAAQ,GAAG,4BAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChE,OAAO,2BAA2B,CAAC;QACjC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,iBAAiB,EAAE,QAAQ;QAC3B,WAAW,EAAE,CAAC,GAAgC,EAAE,EAAE,CAChD,GAAG,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,OAAO,SAAS,GAAG,CAAC,OAAO,IAAI,EAAE,SACrD,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CACxE,EAAE;QACJ,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACzE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YACnF,GAAG,CAAC,YAAY,CAAC,GAAG,CAClB,OAAO,EACP,qEAAqE,CACtE,CAAC;YACF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;gBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,EAAE,SAAS;gBACd,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE;gBAC5C,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,+BAA+B;aACvD,CAAC,CAAC;YACH,OAAO;gBACL,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;gBACvF,UAAU,EAAE,SAAS;gBACrB,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;aACrD,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAuBnC;IACC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;IAClE,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC;QAC3B,OAAO,EAAE;YACP,GAAG,OAAO,CAAC,OAAO;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC;SAChF;QACD,GAAG;QACH,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;SACnC;QACD,KAAK,EAAE,OAAO,CAAC,GAAG;QAClB,qBAAqB;KACtB,CAAC,CAAC;IACH,IACE,qBAAqB;QACrB,YAAY,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,EAAE,KAAK,IAAI;QAChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,EACvC,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,GAAG,OAAO,CAAC,GAAG,0CAA0C,EAAE;YAC3E,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE;SACvD,CAAC,CAAC;IACL,CAAC;IACD,IACE,CAAC,YAAY,CAAC,IAAI,CAAC;QACnB,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI;YACf,CAAC,CAAC,OAAO,CAAC,kBAAkB,KAAK,IAAI,IAAI,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,EAChF,CAAC;QACD,MAAM,IAAI,QAAQ,CAAC,GAAG,OAAO,CAAC,GAAG,mCAAmC,EAAE;YACpE,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;SACtF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,MAAM,UAAU,6BAA6B,CAC3C,KAAc;IAEd,OAAO,OAAO,CACZ,YAAY,CAAC,KAAK,CAAC;QACnB,KAAK,CAAC,EAAE,KAAK,KAAK;QAClB,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;QACjB,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvE,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,OAGxD;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,+CAA+C;QACpD,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE;QACpC,gBAAgB,EAAE,MAAM;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,OAGpD;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,2CAA2C;QAChD,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE;QACpC,gBAAgB,EAAE,MAAM;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CAAC,OAK1D;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,0CAA0C;QAC/C,IAAI,EAAE;YACJ,YAAY,EAAE,OAAO,CAAC,SAAS;YAC/B,iBAAiB,EAAE,OAAO,CAAC,cAAc;YACzC,WAAW,EAAE,OAAO,CAAC,QAAQ;SAC9B;QACD,gBAAgB,EAAE,MAAM;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,OAGnD;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,kCAAkC;QACvC,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE;QACzC,gBAAgB,EAAE,MAAM;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,KAA4B;IAC5D,KAAK,KAAK,CAAC;IACX,OAAO,sHAAsH,CAAC;AAChI,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CAAC,OAI1D;IACC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,WAAW,GAAG,EAAE,EAAE,CAAC;QAC1E,MAAM,IAAI,QAAQ,CAAC,yEAAyE,EAAE;YAC5F,IAAI,EAAE,yDAAyD;YAC/D,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,QAAQ,CAAC,yDAAyD,EAAE;YAC5E,IAAI,EAAE,qDAAqD;YAC3D,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAA4C,EAAE,CAAC;IACzD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,CAAC;QAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC;gBAC3B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,8BAA8B;aACrD,CAAC,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,QAAQ,CAAC,oEAAoE,EAAE;oBACvF,IAAI,EAAE,oDAAoD;oBAC1D,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,EAAE,KAAK,MAAM,CAAC,EAAE,IAAI,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACpF,MAAM,IAAI,QAAQ,CAAC,qDAAqD,EAAE;oBACxE,IAAI,EAAE,oDAAoD;oBAC1D,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,OAAO;gBACL,GAAG,EAAE;oBACH,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,EAAE;oBACF,OAAO;oBACP,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,SAAS;oBACrB,GAAG,EAAE,GAAG;iBACuC;gBACjD,SAAS;aACV,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,OAKxD;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,yCAAyC;QAC9C,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,WAAW;YACrC,IAAI,EAAE,OAAO,CAAC,EAAE;YAChB,SAAS,EAAE,OAAO,CAAC,OAAO;SAC3B;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CAAC,OAGvD;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,6CAA6C;QAClD,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,OAGtD;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,qCAAqC;QAC1C,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,OAG/C;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,gCAAgC;QACrC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qCAAqC,CAAC,OAG3D;IACC,MAAM,IAAI,GAAG,0BAA0B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,mDAAmD;QACxD,IAAI;QACJ,gBAAgB,EAAE,OAAO;QACzB,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,OAGxD;IACC,MAAM,IAAI,GAAG,0BAA0B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,wCAAwC;QAC7C,IAAI;QACJ,gBAAgB,EAAE,MAAM;QACxB,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qCAAqC,CAAC,OAK3D;IACC,MAAM,IAAI,GAAG,0BAA0B,CAAC;QACtC,UAAU,EAAE,OAAO,CAAC,OAAO;QAC3B,SAAS,EAAE,OAAO,CAAC,OAAO;QAC1B,eAAe,EAAE,OAAO,CAAC,aAAa;KACvC,CAAC,CAAC;IACH,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,mDAAmD;QACxD,IAAI;QACJ,gBAAgB,EAAE,MAAM;QACxB,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,OAGtD;IACC,MAAM,IAAI,GAAG,0BAA0B,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,sCAAsC;QAC3C,IAAI;QACJ,gBAAgB,EAAE,MAAM;QACxB,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CAAC,OAK1D;IACC,MAAM,IAAI,GAAG,0BAA0B,CAAC;QACtC,UAAU,EAAE,OAAO,CAAC,OAAO;QAC3B,SAAS,EAAE,OAAO,CAAC,OAAO;QAC1B,eAAe,EAAE,OAAO,CAAC,aAAa;KACvC,CAAC,CAAC;IACH,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,kDAAkD;QACvD,IAAI;QACJ,gBAAgB,EAAE,OAAO;QACzB,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CAAC,OAIzD;IACC,MAAM,IAAI,GAAG,0BAA0B,CAAC;QACtC,UAAU,EAAE,OAAO,CAAC,OAAO;QAC3B,SAAS,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAC,CAAC;IACH,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,iDAAiD;QACtD,IAAI;QACJ,gBAAgB,EAAE,OAAO;QACzB,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CAAC,OAG1D;IACC,MAAM,IAAI,GAAG,0BAA0B,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,kDAAkD;QACvD,IAAI;QACJ,gBAAgB,EAAE,OAAO;QACzB,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAS7C;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,wBAAwB;QAC7B,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC,KAAK;YACtB,IAAI,EAAE,OAAO,CAAC,EAAE;YAChB,SAAS,EAAE,OAAO,CAAC,OAAO;YAC1B,cAAc,EAAE,OAAO,CAAC,OAAO;YAC/B,UAAU,EAAE,OAAO,CAAC,OAAO;YAC3B,mBAAmB,EAAE,OAAO,CAAC,gBAAgB;YAC7C,OAAO,EAAE,OAAO,CAAC,KAAK;SACvB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAM1C;IACC,OAAO,oBAAoB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,EAAE,oBAAoB;QACzB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC,KAAK;YACtB,IAAI,EAAE,OAAO,CAAC,EAAE;YAChB,SAAS,EAAE,OAAO,CAAC,OAAO;YAC1B,OAAO,EAAE,OAAO,CAAC,KAAK;SACvB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,SAAS;IACT,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,cAAc;CACf,CAAC","sourcesContent":["import { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport {\n buildSnapshotCompleteness,\n fetchCompletePostgrestPages,\n type DatasetMaintenanceTableCompleteness,\n type DatasetMaintenanceSnapshotCompleteness,\n} from './dataset-maintenance-pagination.js';\nimport {\n buildSupabaseAuthHeaders,\n deriveSupabaseProjectBaseUrl,\n requireSupabaseRestRuntime,\n} from './supabase-client.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\nimport {\n isJsonObject,\n MAINTENANCE_SCAN_TABLES,\n type DatasetMaintenanceMutableTable,\n type DatasetMaintenanceRemoteRow,\n type DatasetMaintenanceScanTable,\n type JsonObject,\n} from './dataset-maintenance-contract.js';\nimport { assertFlowIdentityWireJson } from './dataset-maintenance-flow-identity-wire.js';\n\nconst DEFAULT_PAGE_SIZE = 1_000;\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nexport type DatasetMaintenanceRemoteContext = {\n project_ref: string;\n rest_base_url: string;\n publishable_key: string;\n access_token: string;\n account: {\n user_id: string;\n email: string;\n session_source: string;\n };\n fetch_impl: FetchLike;\n timeout_ms: number;\n};\n\nexport type DatasetMaintenanceDerivativeRemoteRow = {\n table: 'flows' | 'processes';\n id: string;\n version: string;\n user_id: string;\n state_code: number;\n raw: JsonObject;\n};\n\nfunction trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nfunction normalizeStateCode(value: unknown): number | null {\n if (typeof value === 'number' && Number.isInteger(value)) {\n return value;\n }\n return typeof value === 'string' && /^-?\\d+$/u.test(value.trim())\n ? Number.parseInt(value.trim(), 10)\n : null;\n}\n\nexport function normalizeMaintenancePageSize(value?: number): number {\n const normalized = value ?? DEFAULT_PAGE_SIZE;\n if (!Number.isInteger(normalized) || normalized < 1 || normalized > 5_000) {\n throw new CliError('Maintenance page size must be an integer between 1 and 5000.', {\n code: 'DATASET_MAINTENANCE_PAGE_SIZE_INVALID',\n exitCode: 2,\n details: value,\n });\n }\n return normalized;\n}\n\nexport function normalizeMaintenanceTimeout(value?: number): number {\n const normalized = value ?? DEFAULT_TIMEOUT_MS;\n if (!Number.isInteger(normalized) || normalized < 1) {\n throw new CliError('Maintenance timeout must be a positive integer.', {\n code: 'DATASET_MAINTENANCE_TIMEOUT_INVALID',\n exitCode: 2,\n details: value,\n });\n }\n return normalized;\n}\n\nasync function fetchJsonResponse(options: {\n context: Pick<\n DatasetMaintenanceRemoteContext,\n 'publishable_key' | 'access_token' | 'fetch_impl' | 'timeout_ms'\n >;\n url: string;\n init?: RequestInit;\n label: string;\n redactResponseDetails?: boolean;\n}): Promise<{ body: unknown; headers: ResponseLike['headers'] }> {\n const response = await options.context.fetch_impl(options.url, {\n ...options.init,\n headers: {\n ...buildSupabaseAuthHeaders(options.context.publishable_key, options.context.access_token),\n ...(options.init?.headers ?? {}),\n },\n signal: AbortSignal.timeout(options.context.timeout_ms),\n });\n const text = await response.text();\n if (!response.ok) {\n throw new CliError(`HTTP ${response.status} returned from ${options.label}`, {\n code: 'DATASET_MAINTENANCE_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: options.redactResponseDetails\n ? { url: options.url, response_redacted: true }\n : { url: options.url, response: text },\n });\n }\n if (!text.trim()) {\n return { body: null, headers: response.headers };\n }\n try {\n return { body: JSON.parse(text), headers: response.headers };\n } catch (error) {\n throw new CliError(`Remote response was not valid JSON for ${options.label}`, {\n code: 'DATASET_MAINTENANCE_REMOTE_INVALID_JSON',\n exitCode: 1,\n details: {\n url: options.url,\n error: String(error),\n },\n });\n }\n}\n\nasync function fetchJson(options: {\n context: Pick<\n DatasetMaintenanceRemoteContext,\n 'publishable_key' | 'access_token' | 'fetch_impl' | 'timeout_ms'\n >;\n url: string;\n init?: RequestInit;\n label: string;\n redactResponseDetails?: boolean;\n}): Promise<unknown> {\n return (await fetchJsonResponse(options)).body;\n}\n\nfunction selectForTable(table: DatasetMaintenanceScanTable, includeJson = false): string {\n const common = `id,version,user_id,state_code,modified_at,${includeJson ? 'json,' : ''}json_ordered,rule_verification`;\n return table === 'processes' ? `${common},model_id` : common;\n}\n\nfunction normalizeRemoteRow(\n table: DatasetMaintenanceScanTable,\n value: unknown,\n includeJson = false,\n): DatasetMaintenanceRemoteRow | null {\n if (!isJsonObject(value)) {\n return null;\n }\n const id = trimToken(value.id);\n const version = trimToken(value.version);\n if (!id || !version) {\n return null;\n }\n return {\n table,\n id,\n version,\n user_id: trimToken(value.user_id),\n state_code: normalizeStateCode(value.state_code),\n modified_at: trimToken(value.modified_at),\n ...(includeJson ? { json: isJsonObject(value.json) ? value.json : null } : {}),\n json_ordered: isJsonObject(value.json_ordered) ? value.json_ordered : null,\n model_id: trimToken(value.model_id),\n rule_verification:\n typeof value.rule_verification === 'boolean' ? value.rule_verification : null,\n };\n}\n\nfunction normalizeRemoteRows(\n table: DatasetMaintenanceScanTable,\n value: unknown,\n label: string,\n includeJson = false,\n): DatasetMaintenanceRemoteRow[] {\n if (!Array.isArray(value)) {\n throw new CliError(`Remote response was not an array for ${label}.`, {\n code: 'DATASET_MAINTENANCE_REMOTE_ROWS_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n const rows = value.map((entry) => normalizeRemoteRow(table, entry, includeJson));\n if (rows.some((row) => row === null)) {\n throw new CliError(`Remote response contained an invalid row for ${label}.`, {\n code: 'DATASET_MAINTENANCE_REMOTE_ROW_INVALID',\n exitCode: 1,\n });\n }\n return rows as DatasetMaintenanceRemoteRow[];\n}\n\nexport async function resolveMaintenanceRemoteContext(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n now?: Date;\n}): Promise<DatasetMaintenanceRemoteContext> {\n const timeoutMs = normalizeMaintenanceTimeout(options.timeoutMs);\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n now: options.now,\n });\n const projectBaseUrl = deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl);\n const projectHost = new URL(projectBaseUrl).hostname;\n const projectRef = projectHost.endsWith('.supabase.co')\n ? projectHost.slice(0, -'.supabase.co'.length)\n : projectHost;\n const partialContext = {\n publishable_key: runtime.publishableKey,\n access_token: session.accessToken,\n fetch_impl: options.fetchImpl,\n timeout_ms: timeoutMs,\n };\n const currentUser = await fetchJson({\n context: partialContext,\n url: `${projectBaseUrl}/auth/v1/user`,\n label: 'supabase current-user lookup',\n });\n const userId = isJsonObject(currentUser) ? trimToken(currentUser.id) : null;\n const email = isJsonObject(currentUser)\n ? (trimToken(currentUser.email) ?? trimToken(session.userEmail))\n : trimToken(session.userEmail);\n if (!userId || !email) {\n throw new CliError('Supabase current-user lookup did not return id and email.', {\n code: 'DATASET_MAINTENANCE_CURRENT_USER_INVALID',\n exitCode: 1,\n });\n }\n return {\n project_ref: projectRef,\n rest_base_url: `${projectBaseUrl}/rest/v1`,\n publishable_key: runtime.publishableKey,\n access_token: session.accessToken,\n account: {\n user_id: userId,\n email,\n session_source: session.source,\n },\n fetch_impl: options.fetchImpl,\n timeout_ms: timeoutMs,\n };\n}\n\nexport async function fetchMaintenanceExactRows(options: {\n context: DatasetMaintenanceRemoteContext;\n table: DatasetMaintenanceScanTable;\n id: string;\n version: string;\n includeJson?: boolean;\n}): Promise<{ rows: DatasetMaintenanceRemoteRow[]; source_url: string }> {\n const url = new URL(`${options.context.rest_base_url}/${options.table}`);\n url.searchParams.set('select', selectForTable(options.table, options.includeJson));\n url.searchParams.set('id', `eq.${options.id}`);\n url.searchParams.set('version', `eq.${options.version}`);\n url.searchParams.set('limit', '2');\n const sourceUrl = url.toString();\n const body = await fetchJson({\n context: options.context,\n url: sourceUrl,\n label: `${options.table} exact maintenance lookup`,\n });\n return {\n rows: normalizeRemoteRows(options.table, body, sourceUrl, options.includeJson),\n source_url: sourceUrl,\n };\n}\n\nexport async function fetchMaintenanceAccountRows(options: {\n context: DatasetMaintenanceRemoteContext;\n userId: string;\n pageSize?: number;\n}): Promise<{\n rows: DatasetMaintenanceRemoteRow[];\n source_urls: string[];\n completeness: DatasetMaintenanceSnapshotCompleteness<DatasetMaintenanceScanTable>;\n}> {\n const pageSize = normalizeMaintenancePageSize(options.pageSize);\n const tableResults: Array<{\n table: DatasetMaintenanceScanTable;\n rows: DatasetMaintenanceRemoteRow[];\n source_urls: string[];\n completeness: Awaited<ReturnType<typeof fetchCompletePostgrestPages>>['completeness'];\n }> = [];\n for (const table of MAINTENANCE_SCAN_TABLES) {\n const result = await fetchCompletePostgrestPages({\n table,\n requestedPageSize: pageSize,\n rowIdentity: (row: DatasetMaintenanceRemoteRow) => `${row.id}\\u0000${row.version}`,\n fetchPage: async (offset) => {\n const url = new URL(`${options.context.rest_base_url}/${table}`);\n url.searchParams.set('select', selectForTable(table));\n url.searchParams.set('user_id', `eq.${options.userId}`);\n url.searchParams.set('order', 'id.asc,version.asc');\n url.searchParams.set('limit', String(pageSize));\n url.searchParams.set('offset', String(offset));\n const sourceUrl = url.toString();\n const response = await fetchJsonResponse({\n context: options.context,\n url: sourceUrl,\n init: { headers: { Prefer: 'count=exact' } },\n label: `${table} account maintenance snapshot`,\n });\n const rows = normalizeRemoteRows(table, response.body, sourceUrl);\n if (rows.some((row) => row.user_id !== options.userId)) {\n throw new CliError(`Remote ${table} snapshot contained a foreign account row.`, {\n code: 'DATASET_MAINTENANCE_REMOTE_ROW_INVALID',\n exitCode: 1,\n });\n }\n return {\n rows,\n source_url: sourceUrl,\n content_range: response.headers.get('content-range'),\n };\n },\n });\n tableResults.push({ table, ...result });\n }\n return {\n rows: tableResults.flatMap((result) => result.rows),\n source_urls: tableResults.flatMap((result) => result.source_urls),\n completeness: buildSnapshotCompleteness({\n tables: MAINTENANCE_SCAN_TABLES,\n requestedPageSize: pageSize,\n results: tableResults,\n }),\n };\n}\n\nexport async function fetchMaintenanceAccountTableRows(options: {\n context: DatasetMaintenanceRemoteContext;\n userId: string;\n table: DatasetMaintenanceScanTable;\n stateCode?: number;\n includeJson?: boolean;\n pageSize?: number;\n}): Promise<{\n rows: DatasetMaintenanceRemoteRow[];\n source_urls: string[];\n completeness: DatasetMaintenanceTableCompleteness;\n}> {\n const pageSize = normalizeMaintenancePageSize(options.pageSize);\n return fetchCompletePostgrestPages({\n table: options.table,\n requestedPageSize: pageSize,\n rowIdentity: (row: DatasetMaintenanceRemoteRow) => `${row.id}\\u0000${row.version}`,\n fetchPage: async (offset) => {\n const url = new URL(`${options.context.rest_base_url}/${options.table}`);\n url.searchParams.set('select', selectForTable(options.table, options.includeJson));\n url.searchParams.set('user_id', `eq.${options.userId}`);\n if (options.stateCode !== undefined) {\n url.searchParams.set('state_code', `eq.${options.stateCode}`);\n }\n url.searchParams.set('order', 'id.asc,version.asc');\n url.searchParams.set('limit', String(pageSize));\n url.searchParams.set('offset', String(offset));\n const sourceUrl = url.toString();\n const response = await fetchJsonResponse({\n context: options.context,\n url: sourceUrl,\n init: { headers: { Prefer: 'count=exact' } },\n label: `${options.table} account maintenance snapshot`,\n });\n const rows = normalizeRemoteRows(\n options.table,\n response.body,\n sourceUrl,\n options.includeJson,\n );\n if (\n rows.some(\n (row) =>\n row.user_id !== options.userId ||\n (options.stateCode !== undefined && row.state_code !== options.stateCode),\n )\n ) {\n throw new CliError(`Remote ${options.table} snapshot violated the account/state fence.`, {\n code: 'DATASET_MAINTENANCE_REMOTE_ROW_INVALID',\n exitCode: 1,\n });\n }\n return {\n rows,\n source_url: sourceUrl,\n content_range: response.headers.get('content-range'),\n };\n },\n });\n}\n\n/**\n * Read every row visible to the authenticated owner for one maintenance table.\n *\n * This deliberately omits a user_id predicate. It is a SELECT-only RLS view used\n * by destructive maintenance admission to prove that a draft flow has no inbound\n * reference from either an owner row or another row visible to the owner session.\n */\nexport async function fetchMaintenanceVisibleTableRows(options: {\n context: DatasetMaintenanceRemoteContext;\n table: DatasetMaintenanceScanTable;\n includeJson?: boolean;\n pageSize?: number;\n}): Promise<{\n rows: DatasetMaintenanceRemoteRow[];\n source_urls: string[];\n completeness: DatasetMaintenanceTableCompleteness;\n}> {\n const pageSize = normalizeMaintenancePageSize(options.pageSize);\n return fetchCompletePostgrestPages({\n table: options.table,\n requestedPageSize: pageSize,\n rowIdentity: (row: DatasetMaintenanceRemoteRow) =>\n `${row.id}\\u0000${row.version}\\u0000${row.user_id ?? ''}\\u0000${\n row.state_code === null ? '' : String(row.state_code).padStart(12, '0')\n }`,\n fetchPage: async (offset) => {\n const url = new URL(`${options.context.rest_base_url}/${options.table}`);\n url.searchParams.set('select', selectForTable(options.table, options.includeJson));\n url.searchParams.set(\n 'order',\n 'id.asc,version.asc,user_id.asc.nullsfirst,state_code.asc.nullsfirst',\n );\n url.searchParams.set('limit', String(pageSize));\n url.searchParams.set('offset', String(offset));\n const sourceUrl = url.toString();\n const response = await fetchJsonResponse({\n context: options.context,\n url: sourceUrl,\n init: { headers: { Prefer: 'count=exact' } },\n label: `${options.table} visible maintenance snapshot`,\n });\n return {\n rows: normalizeRemoteRows(options.table, response.body, sourceUrl, options.includeJson),\n source_url: sourceUrl,\n content_range: response.headers.get('content-range'),\n };\n },\n });\n}\n\nasync function invokeMaintenanceRpc(options: {\n context: DatasetMaintenanceRemoteContext;\n rpc:\n | 'cmd_dataset_save_draft'\n | 'cmd_dataset_delete'\n | 'cmd_dataset_alias_plan_guarded'\n | 'cmd_dataset_alias_execution_preflight_guarded'\n | 'cmd_dataset_alias_execution_gate_guarded'\n | 'cmd_dataset_alias_execution_admit_guarded'\n | 'cmd_dataset_alias_execution_read'\n | 'cmd_dataset_derivative_rebuild_snapshot'\n | 'cmd_dataset_derivative_rebuild_plan_guarded'\n | 'cmd_dataset_derivative_rebuild_read'\n | 'cmd_dataset_flow_identity_capture_attest_guarded'\n | 'cmd_dataset_flow_identity_scope_preflight_guarded'\n | 'cmd_dataset_flow_identity_scope_lookup'\n | 'cmd_dataset_flow_identity_scope_recover_guarded'\n | 'cmd_dataset_flow_identity_process_rewrite_guarded'\n | 'cmd_dataset_flow_identity_scope_read'\n | 'cmd_dataset_flow_identity_scope_finalize_guarded';\n body: JsonObject;\n minimumTimeoutMs?: number;\n allowDomainFailure?: boolean;\n}): Promise<JsonObject> {\n const url = `${options.context.rest_base_url}/rpc/${options.rpc}`;\n const redactResponseDetails = options.rpc.startsWith('cmd_dataset_flow_identity_');\n const body = await fetchJson({\n context: {\n ...options.context,\n timeout_ms: Math.max(options.context.timeout_ms, options.minimumTimeoutMs ?? 0),\n },\n url,\n init: {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(options.body),\n },\n label: options.rpc,\n redactResponseDetails,\n });\n if (\n redactResponseDetails &&\n isJsonObject(body) &&\n body.ok !== true &&\n Object.hasOwn(body, 'execution_permit')\n ) {\n throw new CliError(`${options.rpc} returned an invalid rejection envelope.`, {\n code: 'DATASET_MAINTENANCE_RPC_FAILED',\n exitCode: 1,\n details: { rpc: options.rpc, response_redacted: true },\n });\n }\n if (\n !isJsonObject(body) ||\n (body.ok !== true &&\n !(options.allowDomainFailure === true && isMaintenanceRpcDomainFailure(body)))\n ) {\n throw new CliError(`${options.rpc} returned an unexpected response.`, {\n code: 'DATASET_MAINTENANCE_RPC_FAILED',\n exitCode: 1,\n details: redactResponseDetails ? { rpc: options.rpc, response_redacted: true } : body,\n });\n }\n return body;\n}\n\nexport type MaintenanceRpcDomainFailure = JsonObject & {\n ok: false;\n code: string;\n status: string | number;\n};\n\nexport function isMaintenanceRpcDomainFailure(\n value: unknown,\n): value is MaintenanceRpcDomainFailure {\n return Boolean(\n isJsonObject(value) &&\n value.ok === false &&\n typeof value.code === 'string' &&\n value.code.trim() &&\n ((typeof value.status === 'number' && Number.isSafeInteger(value.status)) ||\n (typeof value.status === 'string' && value.status.trim())),\n );\n}\n\nexport async function preflightMaintenanceAliasExecution(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_execution_preflight_guarded',\n body: { p_request: options.request },\n minimumTimeoutMs: 90_000,\n });\n}\n\nexport async function admitMaintenanceAliasExecution(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_execution_admit_guarded',\n body: { p_request: options.request },\n minimumTimeoutMs: 90_000,\n });\n}\n\nexport async function captureMaintenanceAliasExecutionGate(options: {\n context: DatasetMaintenanceRemoteContext;\n requestId: string;\n preflightToken: string;\n gateName: 'primary_support_plan' | 'execution_unused' | 'derivative_quiescence';\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_execution_gate_guarded',\n body: {\n p_request_id: options.requestId,\n p_preflight_token: options.preflightToken,\n p_gate_name: options.gateName,\n },\n minimumTimeoutMs: 90_000,\n });\n}\n\nexport async function readMaintenanceAliasExecution(options: {\n context: DatasetMaintenanceRemoteContext;\n requestId: string;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_execution_read',\n body: { p_request_id: options.requestId },\n minimumTimeoutMs: 90_000,\n });\n}\n\nfunction derivativeSelectForTable(table: 'flows' | 'processes'): string {\n void table;\n return 'id,version,user_id,state_code,modified_at,json,json_ordered,extracted_text,extracted_md,embedding_ft,embedding_ft_at';\n}\n\nexport async function fetchMaintenanceDerivativeTargetRows(options: {\n context: DatasetMaintenanceRemoteContext;\n targets: Array<{ table: 'flows' | 'processes'; id: string; version: string }>;\n concurrency?: number;\n}): Promise<{ rows: DatasetMaintenanceDerivativeRemoteRow[]; source_urls: string[] }> {\n const concurrency = options.concurrency ?? 5;\n if (!Number.isInteger(concurrency) || concurrency < 1 || concurrency > 10) {\n throw new CliError('Derivative target read concurrency must be an integer between 1 and 10.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_READ_CONCURRENCY_INVALID',\n exitCode: 2,\n });\n }\n if (options.targets.length > 50) {\n throw new CliError('Protected derivative target read is bounded to 50 rows.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_TARGET_COUNT_INVALID',\n exitCode: 2,\n });\n }\n const rows: DatasetMaintenanceDerivativeRemoteRow[] = [];\n const sourceUrls: string[] = [];\n for (let offset = 0; offset < options.targets.length; offset += concurrency) {\n const chunk = options.targets.slice(offset, offset + concurrency);\n const results = await Promise.all(\n chunk.map(async (target) => {\n const url = new URL(`${options.context.rest_base_url}/${target.table}`);\n url.searchParams.set('select', derivativeSelectForTable(target.table));\n url.searchParams.set('id', `eq.${target.id}`);\n url.searchParams.set('version', `eq.${target.version}`);\n url.searchParams.set('limit', '2');\n const sourceUrl = url.toString();\n const body = await fetchJson({\n context: options.context,\n url: sourceUrl,\n label: `${target.table} protected derivative lookup`,\n });\n if (!Array.isArray(body) || body.length !== 1 || !isJsonObject(body[0])) {\n throw new CliError('Protected derivative target was missing, duplicated, or malformed.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_TARGET_READ_INVALID',\n exitCode: 1,\n details: target,\n });\n }\n const row = body[0];\n const id = trimToken(row.id);\n const version = trimToken(row.version);\n const userId = trimToken(row.user_id);\n const stateCode = normalizeStateCode(row.state_code);\n if (id !== target.id || version !== target.version || !userId || stateCode === null) {\n throw new CliError('Protected derivative target identity was malformed.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_TARGET_READ_INVALID',\n exitCode: 1,\n details: target,\n });\n }\n return {\n row: {\n table: target.table,\n id,\n version,\n user_id: userId,\n state_code: stateCode,\n raw: row,\n } satisfies DatasetMaintenanceDerivativeRemoteRow,\n sourceUrl,\n };\n }),\n );\n rows.push(...results.map((result) => result.row));\n sourceUrls.push(...results.map((result) => result.sourceUrl));\n }\n return { rows, source_urls: sourceUrls };\n}\n\nexport async function fetchMaintenanceDerivativeSnapshot(options: {\n context: DatasetMaintenanceRemoteContext;\n table?: 'flows' | 'processes';\n id: string;\n version: string;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_derivative_rebuild_snapshot',\n body: {\n p_table: options.table ?? 'processes',\n p_id: options.id,\n p_version: options.version,\n },\n });\n}\n\nexport async function applyMaintenanceDerivativeRebuild(options: {\n context: DatasetMaintenanceRemoteContext;\n plan: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_derivative_rebuild_plan_guarded',\n body: { p_plan: options.plan },\n });\n}\n\nexport async function readMaintenanceDerivativeRebuild(options: {\n context: DatasetMaintenanceRemoteContext;\n requestId: string;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_derivative_rebuild_read',\n body: { p_request_id: options.requestId },\n });\n}\n\nexport async function applyMaintenanceAliasPlan(options: {\n context: DatasetMaintenanceRemoteContext;\n plan: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_alias_plan_guarded',\n body: { p_plan: options.plan },\n });\n}\n\nexport async function preflightMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({ p_request: options.request });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_preflight_guarded',\n body,\n minimumTimeoutMs: 130_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function lookupMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({ p_request: options.request });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_lookup',\n body,\n minimumTimeoutMs: 90_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function rewriteMaintenanceFlowIdentityProcess(options: {\n context: DatasetMaintenanceRemoteContext;\n scopeId: string;\n request: JsonObject;\n authorization: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({\n p_scope_id: options.scopeId,\n p_request: options.request,\n p_authorization: options.authorization,\n });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_process_rewrite_guarded',\n body,\n minimumTimeoutMs: 90_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function readMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n scopeId: string;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({ p_scope_id: options.scopeId });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_read',\n body,\n minimumTimeoutMs: 90_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function finalizeMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n scopeId: string;\n request: JsonObject;\n authorization: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({\n p_scope_id: options.scopeId,\n p_request: options.request,\n p_authorization: options.authorization,\n });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_finalize_guarded',\n body,\n minimumTimeoutMs: 190_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function recoverMaintenanceFlowIdentityScope(options: {\n context: DatasetMaintenanceRemoteContext;\n scopeId: string;\n request: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({\n p_scope_id: options.scopeId,\n p_request: options.request,\n });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_scope_recover_guarded',\n body,\n minimumTimeoutMs: 130_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function attestMaintenanceFlowIdentityCapture(options: {\n context: DatasetMaintenanceRemoteContext;\n request: JsonObject;\n}): Promise<JsonObject> {\n const body = assertFlowIdentityWireJson({ p_request: options.request });\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_flow_identity_capture_attest_guarded',\n body,\n minimumTimeoutMs: 190_000,\n allowDomainFailure: true,\n });\n}\n\nexport async function saveDraftMaintenanceRow(options: {\n context: DatasetMaintenanceRemoteContext;\n table: DatasetMaintenanceMutableTable;\n id: string;\n version: string;\n payload: JsonObject;\n modelId: string | null;\n ruleVerification: boolean | null;\n audit: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_save_draft',\n body: {\n p_table: options.table,\n p_id: options.id,\n p_version: options.version,\n p_json_ordered: options.payload,\n p_model_id: options.modelId,\n p_rule_verification: options.ruleVerification,\n p_audit: options.audit,\n },\n });\n}\n\nexport async function deleteMaintenanceRow(options: {\n context: DatasetMaintenanceRemoteContext;\n table: DatasetMaintenanceMutableTable;\n id: string;\n version: string;\n audit: JsonObject;\n}): Promise<JsonObject> {\n return invokeMaintenanceRpc({\n context: options.context,\n rpc: 'cmd_dataset_delete',\n body: {\n p_table: options.table,\n p_id: options.id,\n p_version: options.version,\n p_audit: options.audit,\n },\n });\n}\n\nexport const __testInternals = {\n fetchJson,\n fetchJsonResponse,\n normalizeRemoteRow,\n normalizeRemoteRows,\n selectForTable,\n};\n"]}
@@ -908,6 +908,42 @@ async function readbackIsDesiredExact(options) {
908
908
  return false;
909
909
  }
910
910
  }
911
+ function normalizeExecutionMaxParallel(value) {
912
+ const normalized = value ?? 1;
913
+ if (!Number.isInteger(normalized) || normalized < 1 || normalized > 8) {
914
+ executionContractError('Execution contract --max-parallel must be an integer from 1 to 8.');
915
+ }
916
+ return normalized;
917
+ }
918
+ function executionSerialPrefixLength(contract) {
919
+ const actionIndexes = new Map(contract.actions.map((action, index) => [action.action_id, index]));
920
+ let highestDependencyIndex = -1;
921
+ for (const action of contract.actions) {
922
+ for (const dependencyActionId of action.dependency_action_ids) {
923
+ highestDependencyIndex = Math.max(highestDependencyIndex, actionIndexes.get(dependencyActionId));
924
+ }
925
+ }
926
+ return highestDependencyIndex + 1;
927
+ }
928
+ function assertParallelSuffixTargetsAreUnique(contract, serialPrefixLength) {
929
+ const targets = new Set();
930
+ for (const action of contract.actions.slice(serialPrefixLength)) {
931
+ const target = `${action.table}\u0000${action.id}\u0000${action.version}`;
932
+ if (targets.has(target)) {
933
+ executionContractError('Execution contract parallel suffix contains a repeated table/id/version target.');
934
+ }
935
+ targets.add(target);
936
+ }
937
+ }
938
+ async function renewExecutionOwnerToken(options) {
939
+ const accessToken = await options.runtime.getAccessToken();
940
+ const actor = decodeExecutionActor(accessToken);
941
+ if (actor.user_id !== options.contract.owner.user_id ||
942
+ actor.email !== options.contract.owner.email) {
943
+ executionContractError('Renewed owner session does not match the execution contract.');
944
+ }
945
+ options.commandTransport.accessToken = accessToken;
946
+ }
911
947
  async function runExecutionContractBatch(options) {
912
948
  const contractSha256 = sha256Json(options.contract);
913
949
  const ledgerRoot = executionLedgerRoot(options.env, options.contract);
@@ -919,11 +955,20 @@ async function runExecutionContractBatch(options) {
919
955
  executionContractError('Owner session or project does not match the execution contract.');
920
956
  }
921
957
  options.files.execution_ledger = ledgerRoot;
922
- const reports = [];
958
+ const serialPrefixLength = executionSerialPrefixLength(options.contract);
959
+ if (options.maxParallel > 1) {
960
+ assertParallelSuffixTargetsAreUnique(options.contract, serialPrefixLength);
961
+ }
962
+ const reports = new Array(options.contract.actions.length);
923
963
  const statuses = new Map();
924
964
  const referenceOnlySupportCache = new Map();
925
- for (const [index, action] of options.contract.actions.entries()) {
965
+ const executeAction = async (index) => {
966
+ const action = options.contract.actions[index];
926
967
  const row = options.preparedRows[index];
968
+ const storeReport = (report) => {
969
+ reports[index] = report;
970
+ statuses.set(action.action_id, report.status);
971
+ };
927
972
  const preparedFailure = buildPreparedFailure(row, options.allowReferenceOnlySupport);
928
973
  if (preparedFailure) {
929
974
  const report = {
@@ -934,9 +979,8 @@ async function runExecutionContractBatch(options) {
934
979
  replayed: false,
935
980
  readback: 'not_performed',
936
981
  };
937
- reports.push(report);
938
- statuses.set(action.action_id, report.status);
939
- continue;
982
+ storeReport(report);
983
+ return;
940
984
  }
941
985
  const priorOutcome = ledger.outcomes.get(action.action_id);
942
986
  if (priorOutcome) {
@@ -965,9 +1009,8 @@ async function runExecutionContractBatch(options) {
965
1009
  }
966
1010
  : {}),
967
1011
  });
968
- reports.push(report);
969
- statuses.set(action.action_id, status);
970
- continue;
1012
+ storeReport(report);
1013
+ return;
971
1014
  }
972
1015
  if (ledger.attempts.has(action.action_id)) {
973
1016
  const report = await finalizeAttemptedAction({
@@ -982,9 +1025,8 @@ async function runExecutionContractBatch(options) {
982
1025
  now: options.now,
983
1026
  recovered: true,
984
1027
  });
985
- reports.push(report);
986
- statuses.set(action.action_id, report.status);
987
- continue;
1028
+ storeReport(report);
1029
+ return;
988
1030
  }
989
1031
  const blockingDependencies = action.dependency_action_ids.filter((dependency) => statuses.get(dependency) !== 'executed');
990
1032
  if (blockingDependencies.length > 0) {
@@ -1000,9 +1042,8 @@ async function runExecutionContractBatch(options) {
1000
1042
  details: { dependency_action_ids: blockingDependencies },
1001
1043
  },
1002
1044
  });
1003
- reports.push(report);
1004
- statuses.set(action.action_id, report.status);
1005
- continue;
1045
+ storeReport(report);
1046
+ return;
1006
1047
  }
1007
1048
  let beforeRows;
1008
1049
  let transportFailed = false;
@@ -1048,6 +1089,11 @@ async function runExecutionContractBatch(options) {
1048
1089
  });
1049
1090
  }
1050
1091
  }
1092
+ await renewExecutionOwnerToken({
1093
+ runtime: options.runtime,
1094
+ commandTransport: options.commandTransport,
1095
+ contract: options.contract,
1096
+ });
1051
1097
  }
1052
1098
  catch (error) {
1053
1099
  const report = contractRowReport({
@@ -1059,9 +1105,8 @@ async function runExecutionContractBatch(options) {
1059
1105
  readback: 'not_performed',
1060
1106
  error: serializeError(error),
1061
1107
  });
1062
- reports.push(report);
1063
- statuses.set(action.action_id, report.status);
1064
- continue;
1108
+ storeReport(report);
1109
+ return;
1065
1110
  }
1066
1111
  try {
1067
1112
  const beforeDispatch = () => {
@@ -1117,15 +1162,40 @@ async function runExecutionContractBatch(options) {
1117
1162
  now: options.now,
1118
1163
  recovered: transportFailed,
1119
1164
  });
1120
- reports.push(report);
1121
- statuses.set(action.action_id, report.status);
1165
+ storeReport(report);
1166
+ };
1167
+ for (let index = 0; index < serialPrefixLength; index += 1) {
1168
+ await executeAction(index);
1122
1169
  }
1123
- const failures = reports.filter((row) => ['failed', 'unknown', 'blocked'].includes(row.status));
1124
- writeJsonLinesArtifact(options.files.progress_jsonl, reports);
1170
+ let nextParallelIndex = serialPrefixLength;
1171
+ let fatalWorkerError = null;
1172
+ const runParallelWorker = async () => {
1173
+ while (fatalWorkerError === null) {
1174
+ const index = nextParallelIndex;
1175
+ nextParallelIndex += 1;
1176
+ if (index >= options.contract.actions.length) {
1177
+ return;
1178
+ }
1179
+ try {
1180
+ await executeAction(index);
1181
+ }
1182
+ catch (error) {
1183
+ fatalWorkerError ??= error;
1184
+ }
1185
+ }
1186
+ };
1187
+ const parallelWorkerCount = Math.min(options.maxParallel, options.contract.actions.length - serialPrefixLength);
1188
+ await Promise.all(Array.from({ length: parallelWorkerCount }, () => runParallelWorker()));
1189
+ if (fatalWorkerError !== null) {
1190
+ throw fatalWorkerError;
1191
+ }
1192
+ const completedReports = reports;
1193
+ const failures = completedReports.filter((row) => ['failed', 'unknown', 'blocked'].includes(row.status));
1194
+ writeJsonLinesArtifact(options.files.progress_jsonl, completedReports);
1125
1195
  writeJsonLinesArtifact(options.files.failures_jsonl, failures);
1126
- const unknown = reports.filter((row) => row.status === 'unknown').length;
1127
- const failed = reports.filter((row) => row.status === 'failed').length;
1128
- const blocked = reports.filter((row) => row.status === 'blocked').length;
1196
+ const unknown = completedReports.filter((row) => row.status === 'unknown').length;
1197
+ const failed = completedReports.filter((row) => row.status === 'failed').length;
1198
+ const blocked = completedReports.filter((row) => row.status === 'blocked').length;
1129
1199
  const report = {
1130
1200
  schema_version: 2,
1131
1201
  generated_at_utc: options.now(),
@@ -1142,21 +1212,24 @@ async function runExecutionContractBatch(options) {
1142
1212
  counts: {
1143
1213
  selected: options.preparedRows.length,
1144
1214
  prepared: 0,
1145
- executed: reports.filter((row) => row.status === 'executed').length,
1215
+ executed: completedReports.filter((row) => row.status === 'executed').length,
1146
1216
  failed,
1147
1217
  unknown,
1148
1218
  blocked,
1149
1219
  attempts_consumed: ledger.attempts.size,
1150
1220
  by_table: byTable(options.preparedRows),
1151
- operations: operationCount(reports),
1221
+ operations: operationCount(completedReports),
1152
1222
  },
1153
1223
  files: options.files,
1154
- rows: reports,
1224
+ rows: completedReports,
1155
1225
  execution_contract: {
1156
1226
  path: path.resolve(options.contractPath),
1157
1227
  sha256: contractSha256,
1158
1228
  execution_id: options.contract.execution_id,
1159
1229
  target_mode: 'owner_draft',
1230
+ max_parallel: options.maxParallel,
1231
+ serial_prefix_actions: serialPrefixLength,
1232
+ parallel_suffix_actions: options.contract.actions.length - serialPrefixLength,
1160
1233
  },
1161
1234
  };
1162
1235
  writeJsonArtifact(options.files.summary_json, report);
@@ -1173,6 +1246,7 @@ export async function runDatasetSaveDraft(options) {
1173
1246
  const files = buildFiles(outDir);
1174
1247
  const preparedRows = prepareRows(inputPath, options.rawInput, requestedType);
1175
1248
  const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
1249
+ const maxParallel = normalizeExecutionMaxParallel(options.maxParallel);
1176
1250
  const executionContractPath = options.executionContractPath
1177
1251
  ? path.resolve(options.executionContractPath)
1178
1252
  : null;
@@ -1182,6 +1256,9 @@ export async function runDatasetSaveDraft(options) {
1182
1256
  if (executionContract && !commit) {
1183
1257
  executionContractError('Execution contract mode requires --commit.');
1184
1258
  }
1259
+ if (!executionContract && maxParallel !== 1) {
1260
+ executionContractError('--max-parallel greater than 1 requires --execution-contract.');
1261
+ }
1185
1262
  if (executionContract) {
1186
1263
  bindExecutionContractRows(executionContract, preparedRows);
1187
1264
  }
@@ -1227,6 +1304,7 @@ export async function runDatasetSaveDraft(options) {
1227
1304
  fetchImpl: options.fetchImpl,
1228
1305
  timeoutMs,
1229
1306
  now: () => now.toISOString(),
1307
+ maxParallel,
1230
1308
  });
1231
1309
  }
1232
1310
  const reports = [];