@opengeni/db 3.7.4 → 4.0.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/automations.d.ts +4 -0
- package/dist/canonical-human-identities.js +3 -3
- package/dist/capability-integrations.d.ts +2 -0
- package/dist/{chunk-6DPJA36C.js → chunk-2XEZK4LF.js} +7 -1
- package/dist/chunk-2XEZK4LF.js.map +1 -0
- package/dist/{chunk-4NAR7FBA.js → chunk-3RI33YQN.js} +67 -1
- package/dist/chunk-3RI33YQN.js.map +1 -0
- package/dist/{chunk-SZAWDXQC.js → chunk-CJROYHSC.js} +3 -3
- package/dist/{chunk-DZCYW2WT.js → chunk-MX6V5F65.js} +2 -2
- package/dist/{chunk-S3TDDCS2.js → chunk-N5VXJ4I2.js} +151 -78
- package/dist/chunk-N5VXJ4I2.js.map +1 -0
- package/dist/{chunk-U4WPPEBH.js → chunk-NLFHMPUB.js} +2 -2
- package/dist/{chunk-5NNCGFQY.js → chunk-P6NSEG2S.js} +2 -2
- package/dist/{chunk-O56DM5GZ.js → chunk-QM6YOWHZ.js} +624 -57
- package/dist/chunk-QM6YOWHZ.js.map +1 -0
- package/dist/{chunk-US4IS6IV.js → chunk-RZNOSEMC.js} +2 -2
- package/dist/{chunk-F6PBS6WE.js → chunk-UFAMOUWL.js} +2 -2
- package/dist/codemode-operations.d.ts +5 -0
- package/dist/codex-token-resolver.d.ts +6 -2
- package/dist/connection-token-resolver.d.ts +8 -0
- package/dist/editable-artifact-durable-export.js +2 -2
- package/dist/editable-artifacts.js +3 -3
- package/dist/generated-images.d.ts +15 -0
- package/dist/index.d.ts +393 -91
- package/dist/index.js +9992 -6069
- package/dist/index.js.map +1 -1
- package/dist/insights.d.ts +9 -0
- package/dist/managed-auth-session-sets.js +3 -3
- package/dist/managed-user-setup.d.ts +3 -0
- package/dist/mcp-oauth.d.ts +80 -0
- package/dist/migrate.d.ts +1 -0
- package/dist/migrate.js +3 -1
- package/dist/model-catalog.d.ts +153 -0
- package/dist/model-context-snapshots.d.ts +20 -0
- package/dist/new-session-drafts.d.ts +12 -0
- package/dist/organization-membership-lifecycle.d.ts +8 -1
- package/dist/organization-model-providers.d.ts +101 -0
- package/dist/pack-components.d.ts +1 -0
- package/dist/pr-review.d.ts +9 -0
- package/dist/provision-roles.js +1 -1
- package/dist/runtime-posture.d.ts +8 -8
- package/dist/schema.d.ts +7708 -5050
- package/dist/schema.js +25 -1
- package/dist/session-background-commands.d.ts +18 -6
- package/dist/session-background-commands.js +15 -9
- package/dist/session-control.d.ts +37 -2
- package/dist/session-goal-pacing.d.ts +3 -6
- package/dist/session-queue-commands.d.ts +17 -0
- package/dist/session-tenancy.js +3 -3
- package/dist/tool-gateway-approvals.d.ts +31 -0
- package/dist/video-generation.js +3 -3
- package/dist/workspace-artifacts.d.ts +17 -3
- package/dist/xai-subscription.d.ts +8 -0
- package/drizzle/0387_bound_host_export_session_payloads.sql +165 -0
- package/drizzle/0388_sandbox_provider_deadline_interactions.sql +491 -0
- package/drizzle/0389_model_catalog_and_gateway_custom_models.sql +241 -0
- package/drizzle/0390_organization_model_provider_connections.sql +197 -0
- package/drizzle/0391_sandbox_provider_deadline_interaction_followup.sql +295 -0
- package/drizzle/0392_context_compaction_pending_observability.sql +198 -0
- package/drizzle/0393_workspace_memory_and_learning_defaults.sql +102 -0
- package/drizzle/0394_session_selected_skill_activation.sql +20 -0
- package/drizzle/0395_scheduled_task_unclaimed_occurrence_invalidation.sql +154 -0
- package/drizzle/0396_model_call_equivalent_credit_cost.sql +28 -0
- package/drizzle/0397_sandbox_deadline_rotation_preemption.sql +113 -0
- package/drizzle/0398_organization_workspace_management_entry.sql +206 -0
- package/drizzle/0399_additional_managed_organization_creation.sql +691 -0
- package/drizzle/0400_session_attempt_model_context_snapshots.sql +65 -0
- package/drizzle/0401_organization_user_setup_token_transport.sql +178 -0
- package/drizzle/0402_session_input_wait_and_background_command_results.sql +1023 -0
- package/drizzle/0403_codex_unconditional_credential_leasing.sql +181 -0
- package/drizzle/0404_mcp_oauth_authorization_server.sql +471 -0
- package/drizzle/0405_tool_gateway_approval_capabilities.sql +184 -0
- package/drizzle/0406_workspace_html_site_sources.sql +71 -0
- package/package.json +6 -6
- package/src/automations.ts +9 -1
- package/src/capability-integrations.ts +8 -0
- package/src/codemode-operations.ts +31 -21
- package/src/codex-token-resolver.ts +16 -6
- package/src/connection-token-resolver.ts +52 -3
- package/src/generated-images.ts +70 -6
- package/src/index.ts +3894 -994
- package/src/insights-model-bundle.ts +54 -5
- package/src/insights.ts +53 -7
- package/src/managed-user-setup.ts +14 -3
- package/src/mcp-oauth.ts +488 -0
- package/src/migrate.ts +9 -1
- package/src/model-catalog.ts +682 -0
- package/src/model-context-snapshots.ts +151 -0
- package/src/new-session-drafts.ts +66 -21
- package/src/organization-membership-lifecycle.ts +47 -5
- package/src/organization-model-providers.ts +614 -0
- package/src/pack-components.ts +15 -2
- package/src/pr-review.ts +19 -0
- package/src/provision-roles.ts +4 -0
- package/src/runtime-posture.ts +64 -0
- package/src/schema.ts +666 -61
- package/src/session-background-commands.ts +180 -78
- package/src/session-control.ts +181 -12
- package/src/session-goal-pacing.ts +4 -8
- package/src/session-queue-commands.ts +157 -82
- package/src/tool-gateway-approvals.ts +168 -0
- package/src/workspace-artifacts.ts +633 -178
- package/src/xai-subscription.ts +66 -14
- package/dist/chunk-4NAR7FBA.js.map +0 -1
- package/dist/chunk-6DPJA36C.js.map +0 -1
- package/dist/chunk-O56DM5GZ.js.map +0 -1
- package/dist/chunk-S3TDDCS2.js.map +0 -1
- /package/dist/{chunk-SZAWDXQC.js.map → chunk-CJROYHSC.js.map} +0 -0
- /package/dist/{chunk-DZCYW2WT.js.map → chunk-MX6V5F65.js.map} +0 -0
- /package/dist/{chunk-U4WPPEBH.js.map → chunk-NLFHMPUB.js.map} +0 -0
- /package/dist/{chunk-5NNCGFQY.js.map → chunk-P6NSEG2S.js.map} +0 -0
- /package/dist/{chunk-US4IS6IV.js.map → chunk-RZNOSEMC.js.map} +0 -0
- /package/dist/{chunk-F6PBS6WE.js.map → chunk-UFAMOUWL.js.map} +0 -0
package/dist/automations.d.ts
CHANGED
|
@@ -75,6 +75,8 @@ export declare function createAutomationTrigger(db: Database, input: {
|
|
|
75
75
|
createdBySubjectId: string;
|
|
76
76
|
request: CreateAutomationTriggerRequest;
|
|
77
77
|
adapterId: string;
|
|
78
|
+
/** Trusted database-only admission seam. Throwing rolls creation back. */
|
|
79
|
+
beforeCreateCommit?: (tx: Database) => Promise<void>;
|
|
78
80
|
}): Promise<AutomationTrigger>;
|
|
79
81
|
export declare function listAutomationTriggers(db: Database, workspaceId: string): Promise<AutomationTrigger[]>;
|
|
80
82
|
export declare function listActiveAutomationTriggersForSource(db: Database, input: {
|
|
@@ -94,6 +96,8 @@ export declare function updateAutomationTrigger(db: Database, input: {
|
|
|
94
96
|
triggerId: string;
|
|
95
97
|
subjectId: string;
|
|
96
98
|
request: UpdateAutomationTriggerRequest;
|
|
99
|
+
/** Trusted database-only admission seam. Throwing rolls the revision back. */
|
|
100
|
+
beforeUpdateCommit?: (tx: Database) => Promise<void>;
|
|
97
101
|
}): Promise<AutomationTrigger | null>;
|
|
98
102
|
export declare function recordAutomationEvent(db: Database, input: {
|
|
99
103
|
accountId: string;
|
|
@@ -11,9 +11,9 @@ import {
|
|
|
11
11
|
getCanonicalHumanIdentityProjection,
|
|
12
12
|
synchronizeCanonicalHumanLoginBindings,
|
|
13
13
|
validateCanonicalHumanSession
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-NLFHMPUB.js";
|
|
15
|
+
import "./chunk-UFAMOUWL.js";
|
|
16
|
+
import "./chunk-QM6YOWHZ.js";
|
|
17
17
|
import "./chunk-PZ5AY32C.js";
|
|
18
18
|
export {
|
|
19
19
|
CanonicalHumanIdentityAuthorityError,
|
|
@@ -137,6 +137,8 @@ export type ApiIntegrationRuntime = {
|
|
|
137
137
|
providerDomain: string;
|
|
138
138
|
authScheme: Record<string, unknown>;
|
|
139
139
|
connectionRef: McpServerConnectionRef | null;
|
|
140
|
+
/** Live credential authority revision used to invalidate stale human approvals. */
|
|
141
|
+
connectionAuthorityGeneration: number | null;
|
|
140
142
|
allowedTools: string[];
|
|
141
143
|
requireApproval: true | string[];
|
|
142
144
|
revision: StoredApiIntegrationRevision;
|
|
@@ -168,6 +168,11 @@ function migrationApplicationRoles(schema, options) {
|
|
|
168
168
|
}
|
|
169
169
|
return [DEFAULT_APPLICATION_DATABASE_ROLE];
|
|
170
170
|
}
|
|
171
|
+
if (configured !== void 0 && configured.some((role) => typeof role !== "string" || role !== role.trim())) {
|
|
172
|
+
throw new Error(
|
|
173
|
+
"MigrationRuntimeOptions.applicationDatabaseRoles must contain canonical Postgres role names without surrounding whitespace"
|
|
174
|
+
);
|
|
175
|
+
}
|
|
171
176
|
if (explicit.length < 1 || explicit.length > MAX_MIGRATION_APPLICATION_ROLES) {
|
|
172
177
|
throw new Error(
|
|
173
178
|
`Migration application database roles must contain 1-${MAX_MIGRATION_APPLICATION_ROLES} entries`
|
|
@@ -264,7 +269,8 @@ if (import.meta.main) {
|
|
|
264
269
|
|
|
265
270
|
export {
|
|
266
271
|
parseConcurrentIndexMigration,
|
|
272
|
+
migrationApplicationRoles,
|
|
267
273
|
migrate,
|
|
268
274
|
runMigrations
|
|
269
275
|
};
|
|
270
|
-
//# sourceMappingURL=chunk-
|
|
276
|
+
//# sourceMappingURL=chunk-2XEZK4LF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/migrate.ts"],"sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport postgres from \"postgres\";\n\nconst DEFAULT_DATABASE_URL = \"postgres://opengeni:opengeni@127.0.0.1:5432/opengeni\";\nconst DEFAULT_MAX_NESTED_AGENT_DEPTH = 3;\nconst MAX_NESTED_AGENT_DEPTH = 2_147_483_647;\nconst DEFAULT_APPLICATION_DATABASE_ROLE = \"opengeni_app\";\nconst MIGRATION_APPLICATION_ROLES_SETTING = \"opengeni.migration_application_roles\";\nconst MAX_MIGRATION_APPLICATION_ROLES = 16;\nconst batchedBackfillDirective =\n /^-- opengeni:batched-backfill batch-size=(\\d+) lock-timeout=(\\d+(?:ms|s|min)) statement-timeout=(\\d+(?:ms|s|min))$/;\nconst concurrentIndexDirective = /^-- opengeni:concurrent-index lock-timeout=(\\d+(?:ms|s|min))$/;\nconst concurrentIndexStatement =\n /^CREATE\\s+(?:UNIQUE\\s+)?INDEX\\s+CONCURRENTLY\\s+(?:(IF\\s+NOT\\s+EXISTS)\\s+)?(?:\"((?:[^\"]|\"\")+)\"|([A-Za-z_][A-Za-z0-9_]*))\\s+ON\\b/is;\nconst governedLegacyConcurrentIndexMigrations = new Set([\n \"0066_session_interruption_attempt_lookup.sql\",\n \"0070_session_event_type_sequence_lookup.sql\",\n \"0071_session_event_monitoring_tail.sql\",\n \"0072_sessions_workspace_created_id_idx.sql\",\n \"0073_sessions_workspace_updated_id_idx.sql\",\n \"0075_sessions_workspace_activity_revision_idx.sql\",\n \"0077_session_attempt_latest_lookup.sql\",\n]);\n\nexport interface ConcurrentIndexMigration {\n indexName: string;\n lockTimeout: string;\n skipWhenValid: boolean;\n statement: string;\n}\n\nexport type MigrationRuntimeOptions = {\n maxNestedAgentDepth?: number;\n /**\n * Exact database login roles that may run an OpenGeni API or worker against\n * this target. Maintenance cutovers use this list to reject a live mixed-\n * version fleet, and rolling ACL migrations use it to preserve old-binary\n * readiness until later role provisioning converges. Dedicated-schema and\n * custom-role deployments must supply it.\n */\n applicationDatabaseRoles?: string[];\n};\n\ntype DeploymentDepthPolicy = {\n maxNestedAgentDepth: number;\n source: \"deployment\" | \"default\";\n};\n\n/** A bare Postgres identifier (schema/role name) safe to interpolate into DDL. */\nfunction assertIdentifier(name: string, value: string): string {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(value)) {\n throw new Error(`${name} is not a valid Postgres identifier: ${value}`);\n }\n return value;\n}\n\n/**\n * Most migration files intentionally execute as one implicit transaction.\n * PostgreSQL forbids CREATE INDEX CONCURRENTLY there, so a migration may opt\n * into one narrowly validated transactionless statement with:\n *\n * -- opengeni:concurrent-index lock-timeout=5s\n * CREATE [UNIQUE] INDEX CONCURRENTLY IF NOT EXISTS ...;\n *\n * The directive is deliberately not a generic \"no transaction\" escape hatch:\n * only one idempotent concurrent-index statement is accepted, lock acquisition\n * is always bounded, and an invalid artifact left by a failed concurrent build\n * is removed before retry. Seven governed historical migrations predate the\n * IF NOT EXISTS rule; only those exact filenames may use their immutable bare\n * statements, and the runner makes their retries idempotent by skipping an\n * already-valid index. This keeps additive large-table indexes online without\n * rewriting shipped history or making arbitrary partially-applied migration\n * scripts possible.\n */\nexport function parseConcurrentIndexMigration(\n file: string,\n sqlText: string,\n): ConcurrentIndexMigration | null {\n const lines = sqlText.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n const firstLine = lines[0]?.trim() ?? \"\";\n const deploymentPrefixed = /^-- deployment-mode: (?:rolling|maintenance)$/.test(firstLine);\n const directiveIndex = deploymentPrefixed ? 1 : 0;\n const directiveLine = lines[directiveIndex]?.trim() ?? \"\";\n const directive = concurrentIndexDirective.exec(directiveLine);\n if (!directive) {\n if (directiveLine.startsWith(\"-- opengeni:\")) {\n throw new Error(`Unsupported OpenGeni migration directive in ${file}`);\n }\n return null;\n }\n\n const lockTimeout = directive[1]!;\n const statement = lines\n .slice(directiveIndex + 1)\n .join(\"\\n\")\n .trim();\n const withoutTrailingSemicolon = statement.endsWith(\";\")\n ? statement.slice(0, -1).trimEnd()\n : statement;\n const parsedStatement = concurrentIndexStatement.exec(withoutTrailingSemicolon);\n if (!parsedStatement || withoutTrailingSemicolon.includes(\";\")) {\n throw new Error(\n `${file}: opengeni:concurrent-index requires exactly one CREATE [UNIQUE] INDEX CONCURRENTLY IF NOT EXISTS statement with an unqualified index name`,\n );\n }\n const idempotentInSql = parsedStatement[1] !== undefined;\n if (!idempotentInSql && !governedLegacyConcurrentIndexMigrations.has(file)) {\n throw new Error(\n `${file}: opengeni:concurrent-index requires IF NOT EXISTS; bare statements are supported only for governed historical migrations`,\n );\n }\n return {\n indexName: (parsedStatement[2] ?? parsedStatement[3]!).replaceAll('\"\"', '\"'),\n lockTimeout,\n skipWhenValid: !idempotentInSql,\n statement,\n };\n}\n\nfunction parseBatchedBackfillMigration(\n file: string,\n sqlText: string,\n): { batchSize: number; lockTimeout: string; statementTimeout: string; statement: string } | null {\n const lines = sqlText.replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n const directiveIndex = /^-- deployment-mode: (?:rolling|maintenance)$/.test(\n lines[0]?.trim() ?? \"\",\n )\n ? 1\n : 0;\n const directive = batchedBackfillDirective.exec(lines[directiveIndex]?.trim() ?? \"\");\n if (!directive) return null;\n const statement = lines\n .slice(directiveIndex + 1)\n .filter((line) => !line.trim().startsWith(\"--\"))\n .join(\"\\n\")\n .trim();\n const withoutTrailingSemicolon = statement.endsWith(\";\")\n ? statement.slice(0, -1).trimEnd()\n : statement;\n const batchSize = Number(directive[1]!);\n if (\n !Number.isSafeInteger(batchSize) ||\n batchSize < 1 ||\n batchSize > 10_000 ||\n !/^WITH\\b/is.test(withoutTrailingSemicolon) ||\n !/\\bUPDATE\\b/is.test(withoutTrailingSemicolon) ||\n !/\\bRETURNING\\b/is.test(withoutTrailingSemicolon) ||\n !new RegExp(`\\\\bLIMIT\\\\s+${batchSize}\\\\b`, \"i\").test(withoutTrailingSemicolon) ||\n withoutTrailingSemicolon.includes(\";\")\n ) {\n throw new Error(\n `${file}: opengeni:batched-backfill requires one bounded WITH ... UPDATE ... RETURNING statement whose LIMIT matches batch-size`,\n );\n }\n return {\n batchSize,\n lockTimeout: directive[2]!,\n statementTimeout: directive[3]!,\n statement,\n };\n}\n\nasync function executeMigrationFile(\n sql: postgres.Sql,\n file: string,\n sqlText: string,\n): Promise<void> {\n const batchedBackfill = parseBatchedBackfillMigration(file, sqlText);\n if (batchedBackfill) {\n await sql`select set_config('lock_timeout', ${batchedBackfill.lockTimeout}, false)`;\n await sql`select set_config('statement_timeout', ${batchedBackfill.statementTimeout}, false)`;\n try {\n for (;;) {\n const result = await sql.begin(async (transaction) => {\n await transaction`select\n pg_catalog.set_config('opengeni.sandbox_recovery_protocol_v2', '1', true),\n pg_catalog.set_config(\n 'opengeni.session_variable_set_attachments_v1',\n '1',\n true\n )`;\n return await transaction.unsafe(batchedBackfill.statement);\n });\n if (result.length === 0) break;\n }\n } finally {\n await sql`select set_config('statement_timeout', '0', false)`;\n await sql`select set_config('lock_timeout', '0', false)`;\n }\n return;\n }\n const concurrentIndex = parseConcurrentIndexMigration(file, sqlText);\n if (!concurrentIndex) {\n // Migration SQL is the only writer allowed to cross protocol generations.\n // Keep the authority transaction-local and inside the same PostgreSQL simple\n // query as the migration body: setting it in a prior statement would end\n // that implicit transaction and silently lose the LOCAL value. This also\n // makes a fresh database capable of applying maintenance migration 0138\n // and later migrations capable of crossing the 0352 sessions policy\n // without a process-global PGOPTIONS escape hatch.\n await sql.unsafe(\n `SELECT\n pg_catalog.set_config('opengeni.sandbox_recovery_protocol_v2', '1', true),\n pg_catalog.set_config('opengeni.session_variable_set_attachments_v1', '1', true);\\n${sqlText}`,\n );\n return;\n }\n\n await sql`select set_config('lock_timeout', ${concurrentIndex.lockTimeout}, false)`;\n try {\n const [existing] = await sql<Array<{ valid: boolean; ready: boolean }>>`\n select i.indisvalid as valid, i.indisready as ready\n from pg_catalog.pg_class c\n join pg_catalog.pg_namespace n on n.oid = c.relnamespace\n join pg_catalog.pg_index i on i.indexrelid = c.oid\n where n.nspname = current_schema() and c.relname = ${concurrentIndex.indexName}\n `;\n if (existing && (!existing.valid || !existing.ready)) {\n const quotedIndexName = `\"${concurrentIndex.indexName.replaceAll('\"', '\"\"')}\"`;\n await sql.unsafe(`DROP INDEX CONCURRENTLY ${quotedIndexName}`);\n } else if (existing && concurrentIndex.skipWhenValid) {\n return;\n }\n await sql.unsafe(concurrentIndex.statement);\n } finally {\n await sql`select set_config('lock_timeout', '0', false)`;\n }\n}\n\nfunction deploymentDepthPolicy(\n options: MigrationRuntimeOptions | undefined,\n): DeploymentDepthPolicy {\n const raw =\n options === undefined\n ? process.env.OPENGENI_MAX_NESTED_AGENT_DEPTH?.trim() || undefined\n : options.maxNestedAgentDepth;\n if (raw === undefined) {\n return { maxNestedAgentDepth: DEFAULT_MAX_NESTED_AGENT_DEPTH, source: \"default\" };\n }\n const value = typeof raw === \"number\" ? raw : Number(raw);\n if (\n !Number.isSafeInteger(value) ||\n value < 0 ||\n value > MAX_NESTED_AGENT_DEPTH ||\n (typeof raw === \"string\" && !/^(0|[1-9][0-9]*)$/.test(raw))\n ) {\n throw new Error(\n `OPENGENI_MAX_NESTED_AGENT_DEPTH must be a non-negative 32-bit integer: ${raw}`,\n );\n }\n return { maxNestedAgentDepth: value, source: \"deployment\" };\n}\n\nexport function migrationApplicationRoles(\n schema: string | undefined,\n options: MigrationRuntimeOptions | undefined,\n): string[] {\n const configured = options?.applicationDatabaseRoles;\n const environment = process.env.OPENGENI_MIGRATION_APPLICATION_DATABASE_ROLES?.trim();\n const explicit =\n configured !== undefined\n ? configured\n : environment\n ? environment.split(\",\").map((role) => role.trim())\n : undefined;\n\n if (!explicit) {\n const configuredRuntimeRoles = [\n process.env.OPENGENI_APP_DATABASE_USER?.trim(),\n process.env.OPENGENI_RUNTIME_DATABASE_ROLE?.trim(),\n ].filter((role): role is string => Boolean(role) && role !== DEFAULT_APPLICATION_DATABASE_ROLE);\n if (schema || configuredRuntimeRoles.length > 0) {\n throw new Error(\n \"Pending migrations require the exact application database roles via \" +\n \"MigrationRuntimeOptions.applicationDatabaseRoles or \" +\n \"OPENGENI_MIGRATION_APPLICATION_DATABASE_ROLES for dedicated-schema or custom-role deployments\",\n );\n }\n return [DEFAULT_APPLICATION_DATABASE_ROLE];\n }\n\n if (\n configured !== undefined &&\n configured.some((role) => typeof role !== \"string\" || role !== role.trim())\n ) {\n throw new Error(\n \"MigrationRuntimeOptions.applicationDatabaseRoles must contain canonical Postgres role names without surrounding whitespace\",\n );\n }\n if (explicit.length < 1 || explicit.length > MAX_MIGRATION_APPLICATION_ROLES) {\n throw new Error(\n `Migration application database roles must contain 1-${MAX_MIGRATION_APPLICATION_ROLES} entries`,\n );\n }\n const normalized = [...new Set(explicit)].sort((left, right) =>\n Buffer.compare(Buffer.from(left, \"utf8\"), Buffer.from(right, \"utf8\")),\n );\n if (\n normalized.length !== explicit.length ||\n normalized.some((role) => role.length === 0 || Buffer.byteLength(role, \"utf8\") > 63)\n ) {\n throw new Error(\n \"Migration application database roles must be unique, non-empty Postgres role names of at most 63 UTF-8 bytes\",\n );\n }\n return normalized;\n}\n\nasync function persistDeploymentDepthPolicy(\n sql: postgres.Sql,\n policy: DeploymentDepthPolicy,\n): Promise<void> {\n const [relation] = await sql<{ exists: boolean }[]>`\n select to_regclass('nested_agent_depth_configuration') is not null as exists\n `;\n if (!relation?.exists) return;\n await sql`\n insert into \"nested_agent_depth_configuration\" (\n \"singleton\", \"max_nested_agent_depth\", \"policy_source\", \"updated_at\"\n ) values (true, ${policy.maxNestedAgentDepth}, ${policy.source}, now())\n on conflict (\"singleton\") do update\n set \"max_nested_agent_depth\" = excluded.\"max_nested_agent_depth\",\n \"policy_source\" = excluded.\"policy_source\",\n \"updated_at\" = now()\n where \"nested_agent_depth_configuration\".\"max_nested_agent_depth\"\n is distinct from excluded.\"max_nested_agent_depth\"\n or \"nested_agent_depth_configuration\".\"policy_source\"\n is distinct from excluded.\"policy_source\"\n `;\n}\n\n/**\n * Apply the OpenGeni SQL migration chain.\n *\n * STANDALONE (default, unchanged): `migrate()` / `migrate(databaseUrl)` runs the\n * whole chain with NO search_path manipulation, so every unqualified\n * table/index/policy lands in the server default schema (`public`). This is the\n * byte-for-byte historical behavior — the migration test suite calls\n * `migrate(DB_URL)` and is unaffected.\n *\n * EMBEDDED SCHEMA MODE: pass a `schema` (or set\n * `OPENGENI_DB_SCHEMA`). The migrate session then `CREATE SCHEMA IF NOT EXISTS`\n * for both `<schema>` and `opengeni_private`, and sets\n * `search_path = \"<schema>\", \"opengeni_private\", \"public\"`, so EVERY unqualified\n * DDL statement lands in the dedicated schema with NO per-statement SQL rewrite\n * (the schema-isolation contract). Two things make this work and stay idempotent:\n * 1. The policy-existence guards in the migration SQL use `current_schema()`\n * (not a hardcoded `'public'`) — so a re-run finds the policy it already\n * created in `<schema>` and DROP/CREATEs idempotently instead of failing\n * with \"policy already exists\". (This guard substitution is the migrate-\n * time enabler for the runtime search_path approach; without it the SDK\n * entry point silently fails on re-run — the migration replay hazard.)\n * 2. `public` stays LAST on the path so `gen_random_uuid()` (pgcrypto) and the\n * `vector` type — both installed into `public` by 0000 — still resolve. The\n * `opengeni_private.*` helpers are always called with an absolute prefix.\n * Dedicated-schema callers must also pass the exact API/worker database login\n * identities in `applicationDatabaseRoles`; maintenance cutovers cannot infer\n * host-managed or scoped runtime roles from the admin connection.\n *\n * `OPENGENI_DB_SCHEMA` defaults UNSET → `public` → standalone, so the default\n * binding never regresses.\n */\nexport async function migrate(\n databaseUrl = process.env.OPENGENI_MIGRATIONS_DATABASE_URL ??\n process.env.OPENGENI_DATABASE_URL ??\n DEFAULT_DATABASE_URL,\n schema: string | undefined = process.env.OPENGENI_DB_SCHEMA?.trim() || undefined,\n runtimeOptions?: MigrationRuntimeOptions,\n): Promise<void> {\n const migrationsDir = join(dirname(fileURLToPath(import.meta.url)), \"../drizzle\");\n const files = (await readdir(migrationsDir)).filter((file) => file.endsWith(\".sql\")).sort();\n const depthPolicy = deploymentDepthPolicy(runtimeOptions);\n const sql = postgres(databaseUrl, { max: 1 });\n try {\n // Serialize concurrent migrate() runs; the session-level lock is released\n // when the connection closes.\n await sql`SELECT pg_advisory_lock(727458)`;\n if (schema) {\n assertIdentifier(\"OPENGENI_DB_SCHEMA\", schema);\n await sql.unsafe(`CREATE SCHEMA IF NOT EXISTS \"${schema}\"`);\n // opengeni_private is also created by 0001 with an absolute prefix, but the\n // session search_path must already resolve it for the policy predicates\n // and the SECURITY DEFINER functions that inherit the caller's path.\n await sql.unsafe(`CREATE SCHEMA IF NOT EXISTS \"opengeni_private\"`);\n await sql.unsafe(`SET search_path = \"${schema}\", \"opengeni_private\", \"public\"`);\n }\n await sql`select set_config('opengeni.max_nested_agent_depth', ${String(depthPolicy.maxNestedAgentDepth)}, false)`;\n await sql`select set_config('opengeni.nested_agent_depth_policy_source', ${depthPolicy.source}, false)`;\n await sql.unsafe(\n `CREATE TABLE IF NOT EXISTS \"schema_migrations\" (\"name\" text PRIMARY KEY, \"applied_at\" timestamptz NOT NULL DEFAULT now())`,\n );\n const appliedRows = await sql`SELECT \"name\" FROM \"schema_migrations\"`;\n const applied = new Set(appliedRows.map((row) => row.name as string));\n const pendingMigrationSources = new Map<string, string>();\n for (const file of files) {\n if (!applied.has(file)) {\n pendingMigrationSources.set(file, await readFile(join(migrationsDir, file), \"utf8\"));\n }\n }\n // Initialize this session GUC for every pending migration that consumes it,\n // instead of maintaining a second filename list that can silently lag the\n // shipped migration chain. The conservative source marker is intentional:\n // setting the bounded role list for a migration that only mentions the GUC\n // is harmless, while omitting it makes an otherwise valid upgrade fail.\n if (\n Array.from(pendingMigrationSources.values()).some((source) =>\n source.includes(MIGRATION_APPLICATION_ROLES_SETTING),\n )\n ) {\n const applicationRoles = migrationApplicationRoles(schema, runtimeOptions);\n await sql`select set_config(\n ${MIGRATION_APPLICATION_ROLES_SETTING},\n ${JSON.stringify(applicationRoles)},\n false\n )`;\n }\n for (const file of files) {\n if (applied.has(file)) {\n continue;\n }\n const sqlText = pendingMigrationSources.get(file);\n if (sqlText === undefined) {\n throw new Error(`Pending migration source was not loaded: ${file}`);\n }\n await executeMigrationFile(sql, file, sqlText);\n await sql`INSERT INTO \"schema_migrations\" (\"name\") VALUES (${file}) ON CONFLICT DO NOTHING`;\n }\n // Reconcile even when all migration names were already recorded. This is\n // the only supported way to change deployment policy in a live database.\n await persistDeploymentDepthPolicy(sql, depthPolicy);\n } finally {\n await sql.end();\n }\n}\n\n/**\n * SDK entry point (Step I): run the migration chain over a host-supplied admin\n * connection string against an explicit target schema. This is the embedded\n * topology's named entry — a host calls `runMigrations(adminConnection,\n * targetSchema, { applicationDatabaseRoles })` from its own provisioning code\n * instead of relying on env vars.\n * `targetSchema` undefined → `public` → standalone behavior. Thin wrapper over\n * `migrate` so there is one migration engine.\n */\nexport async function runMigrations(\n adminConnection: string,\n targetSchema?: string,\n runtimeOptions?: MigrationRuntimeOptions,\n): Promise<void> {\n await migrate(adminConnection, targetSchema, runtimeOptions);\n}\n\nif (import.meta.main) {\n await migrate();\n console.log(\"Applied Drizzle SQL migrations.\");\n}\n"],"mappings":"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","names":[]}
|
|
@@ -148,6 +148,7 @@ var KNOWLEDGE_SOURCE_SYNC_LOCK_AUTHORITY_TABLES = [
|
|
|
148
148
|
"knowledge_source_objects"
|
|
149
149
|
];
|
|
150
150
|
var MANAGED_HUMAN_PERSONAL_WORKSPACE_ROUTINE = "ensure_managed_human_personal_workspace(uuid, text, uuid)";
|
|
151
|
+
var ADDITIONAL_ORGANIZATION_CREATION_ROUTINE = "create_additional_managed_organization(text, text, text, text, uuid)";
|
|
151
152
|
var ORGANIZATION_MEMBERSHIP_LIFECYCLE_ROUTINES = [
|
|
152
153
|
"list_self_organization_memberships(text)",
|
|
153
154
|
"list_self_organization_invitations(text)",
|
|
@@ -161,9 +162,11 @@ var ORGANIZATION_MEMBERSHIP_LIFECYCLE_ROUTINES = [
|
|
|
161
162
|
"resolve_workspace_codex_subscription_source(uuid, uuid)",
|
|
162
163
|
"list_organization_workspace_ids(uuid)",
|
|
163
164
|
"organization_workspace_command(jsonb)",
|
|
165
|
+
"authorize_organization_shared_workspace_administration(uuid, uuid, text)",
|
|
164
166
|
"resolve_organization_workspace_removal_subject(uuid, text, uuid)",
|
|
165
167
|
"prepare_organization_workspace_member_removal(jsonb)",
|
|
166
168
|
"record_organization_workspace_member_removal(jsonb, uuid, uuid)",
|
|
169
|
+
ADDITIONAL_ORGANIZATION_CREATION_ROUTINE,
|
|
167
170
|
"create_managed_organization(text, text, text, uuid)",
|
|
168
171
|
"assert_organization_shared_workspace_administrator(uuid, uuid, text)",
|
|
169
172
|
"open_organization_shared_workspace_administration_capability(uuid, uuid, text)",
|
|
@@ -178,7 +181,9 @@ var ORGANIZATION_MEMBERSHIP_LIFECYCLE_ROUTINES = [
|
|
|
178
181
|
"complete_self_service_organization_setup(jsonb)",
|
|
179
182
|
"ensure_organization_user_setup_intent(jsonb)",
|
|
180
183
|
"claim_organization_user_setup_delivery(jsonb)",
|
|
184
|
+
"claim_organization_user_setup_delivery_v2(jsonb)",
|
|
181
185
|
"prepare_organization_user_setup_delivery(jsonb)",
|
|
186
|
+
"prepare_organization_user_setup_delivery_v2(jsonb)",
|
|
182
187
|
"settle_organization_user_setup_delivery(jsonb)",
|
|
183
188
|
"preview_organization_user_setup(text)",
|
|
184
189
|
"get_organization_invitation_for_administration(uuid, text, uuid)",
|
|
@@ -221,6 +226,10 @@ var ORGANIZATION_MEMBERSHIP_LIFECYCLE_AUTHORITY_TABLES = [
|
|
|
221
226
|
"organization_workspace_operation_receipts",
|
|
222
227
|
"self_service_organization_setup_receipts"
|
|
223
228
|
];
|
|
229
|
+
var ADDITIONAL_ORGANIZATION_CREATION_AUTHORITY_TABLES = [
|
|
230
|
+
...ORGANIZATION_MEMBERSHIP_LIFECYCLE_AUTHORITY_TABLES,
|
|
231
|
+
"additional_organization_creation_receipts"
|
|
232
|
+
];
|
|
224
233
|
var PRIVATE_SESSION_CREATE_POLICY_ROUTINE = "get_private_session_create_policy(uuid, uuid, text)";
|
|
225
234
|
var ORGANIZATION_PRIVATE_SESSION_SETTINGS_READ_ROUTINE = "get_organization_private_session_settings(uuid, text)";
|
|
226
235
|
var ORGANIZATION_PRIVATE_SESSION_SETTINGS_UPDATE_ROUTINE = "update_organization_private_session_settings(uuid, text, boolean, bigint, uuid)";
|
|
@@ -535,6 +544,7 @@ var SESSION_TENANCY_ANY_ACTIVATION_ROUTINE = "session_tenancy_any_product_activa
|
|
|
535
544
|
var SESSION_TENANCY_QUIESCENCE_ROUTINE = "assert_session_tenancy_quiescent(uuid, uuid, uuid, boolean)";
|
|
536
545
|
var TENANCY_BACKFILL_ACTIVATION_EVIDENCE_ROUTINE = "check_tenancy_backfill_activation_evidence(uuid)";
|
|
537
546
|
var GREENFIELD_SESSION_TENANCY_ACTIVATION_ROUTINE = "activate_greenfield_session_tenancy_from_setup(text)";
|
|
547
|
+
var ADDITIONAL_ORGANIZATION_SESSION_TENANCY_ACTIVATION_ROUTINE = "activate_session_tenancy_from_additional_organization(uuid)";
|
|
538
548
|
var SESSION_VISIBILITY_LIFECYCLE_CAPABILITY_ROUTINE = "session_visibility_lifecycle_capability_held()";
|
|
539
549
|
var PRIVATE_SESSION_CREATE_CAPABILITY_ROUTINES = [
|
|
540
550
|
"open_private_session_create_capability(uuid, uuid, uuid, text)",
|
|
@@ -628,6 +638,7 @@ var RUNTIME_TARGET_SCHEMA_PUBLIC_POLICY_PREDICATE_ROUTINE_SET = new Set(
|
|
|
628
638
|
RUNTIME_TARGET_SCHEMA_PUBLIC_POLICY_PREDICATE_ROUTINES
|
|
629
639
|
);
|
|
630
640
|
var RUNTIME_TARGET_SCHEMA_FORBIDDEN_ROUTINES = [
|
|
641
|
+
ADDITIONAL_ORGANIZATION_SESSION_TENANCY_ACTIVATION_ROUTINE,
|
|
631
642
|
AUTOMATIC_SESSION_TITLE_QUARANTINE_FENCE_ROUTINE,
|
|
632
643
|
ORGANIZATION_PRIVATE_SESSIONS_ENABLED_ROUTINE,
|
|
633
644
|
GREENFIELD_SESSION_TENANCY_ACTIVATION_ROUTINE,
|
|
@@ -644,6 +655,7 @@ var RUNTIME_TARGET_SCHEMA_INVOKER_ROUTINE_SET = new Set(
|
|
|
644
655
|
RUNTIME_TARGET_SCHEMA_INVOKER_ROUTINES
|
|
645
656
|
);
|
|
646
657
|
var FORCE_RLS_TABLES = [
|
|
658
|
+
"additional_organization_creation_receipts",
|
|
647
659
|
"agent_run_states",
|
|
648
660
|
"api_keys",
|
|
649
661
|
"attached_browser_devices",
|
|
@@ -810,6 +822,9 @@ var FORCE_RLS_TABLES = [
|
|
|
810
822
|
"organization_membership_lifecycle_events",
|
|
811
823
|
"organization_membership_operation_receipts",
|
|
812
824
|
"organization_memberships",
|
|
825
|
+
"organization_model_provider_connection_operations",
|
|
826
|
+
"organization_model_provider_connections",
|
|
827
|
+
"organization_model_provider_custom_models",
|
|
813
828
|
"organization_private_session_setting_events",
|
|
814
829
|
"organization_private_session_settings",
|
|
815
830
|
"organization_profile_events",
|
|
@@ -880,6 +895,7 @@ var FORCE_RLS_TABLES = [
|
|
|
880
895
|
"session_attempt_codemode_calls",
|
|
881
896
|
"session_attempt_connected_machine_authorizations",
|
|
882
897
|
"session_attempt_interruptions",
|
|
898
|
+
"session_attempt_model_context_snapshots",
|
|
883
899
|
"session_attempt_personal_document_admissions",
|
|
884
900
|
"session_attempt_personal_document_snapshots",
|
|
885
901
|
"session_attempt_personal_resource_admissions",
|
|
@@ -907,6 +923,7 @@ var FORCE_RLS_TABLES = [
|
|
|
907
923
|
"session_system_update_outbox",
|
|
908
924
|
"session_system_updates",
|
|
909
925
|
"session_tenancy_activations",
|
|
926
|
+
"session_tenancy_additional_organization_activation_evidence",
|
|
910
927
|
"session_tenancy_greenfield_activation_evidence",
|
|
911
928
|
"session_turn_attempts",
|
|
912
929
|
"session_turn_startup_milestones",
|
|
@@ -949,6 +966,7 @@ var FORCE_RLS_TABLES = [
|
|
|
949
966
|
"temporal_schedule_cleanup_outbox",
|
|
950
967
|
"tenancy_backfill_receipts",
|
|
951
968
|
"tenancy_backfill_unresolved_rows",
|
|
969
|
+
"tool_gateway_approval_capabilities",
|
|
952
970
|
"transcription_recording_chunks",
|
|
953
971
|
"transcription_recording_objects",
|
|
954
972
|
"transcription_recording_segments",
|
|
@@ -966,6 +984,7 @@ var FORCE_RLS_TABLES = [
|
|
|
966
984
|
"workspace_captures",
|
|
967
985
|
"workspace_codex_subscription_preferences",
|
|
968
986
|
"workspace_control_events",
|
|
987
|
+
"workspace_gateway_custom_models",
|
|
969
988
|
"workspace_inference_controls",
|
|
970
989
|
"workspace_instruction_policy_activation_events",
|
|
971
990
|
"workspace_instruction_policy_deactivation_events",
|
|
@@ -999,8 +1018,14 @@ var NON_RLS_RUNTIME_TABLES = [
|
|
|
999
1018
|
"auth_users",
|
|
1000
1019
|
"auth_verifications",
|
|
1001
1020
|
"automation_webhook_endpoints",
|
|
1021
|
+
"deployment_model_catalog",
|
|
1002
1022
|
"integration_oauth_clients",
|
|
1003
1023
|
"managed_accounts",
|
|
1024
|
+
"mcp_oauth_access_tokens",
|
|
1025
|
+
"mcp_oauth_authorization_codes",
|
|
1026
|
+
"mcp_oauth_authorization_requests",
|
|
1027
|
+
"mcp_oauth_clients",
|
|
1028
|
+
"mcp_oauth_refresh_tokens",
|
|
1004
1029
|
"nested_agent_depth_configuration",
|
|
1005
1030
|
"pr_review_managed_github_routes",
|
|
1006
1031
|
"stripe_webhook_events",
|
|
@@ -1073,12 +1098,20 @@ var RUNTIME_FULL_DML_TABLES = [
|
|
|
1073
1098
|
"machine_metrics_series",
|
|
1074
1099
|
"machine_removal_operations",
|
|
1075
1100
|
"managed_accounts",
|
|
1101
|
+
"mcp_oauth_access_tokens",
|
|
1102
|
+
"mcp_oauth_authorization_codes",
|
|
1103
|
+
"mcp_oauth_authorization_requests",
|
|
1104
|
+
"mcp_oauth_clients",
|
|
1105
|
+
"mcp_oauth_refresh_tokens",
|
|
1076
1106
|
"memory_slack_publication_configurations",
|
|
1077
1107
|
"memory_slack_publication_receipts",
|
|
1078
1108
|
"memory_slack_publications",
|
|
1079
1109
|
"model_call_facts",
|
|
1080
1110
|
"new_session_drafts",
|
|
1081
1111
|
"organization_codex_rotation_settings",
|
|
1112
|
+
"organization_model_provider_connection_operations",
|
|
1113
|
+
"organization_model_provider_connections",
|
|
1114
|
+
"organization_model_provider_custom_models",
|
|
1082
1115
|
"pack_installation_components",
|
|
1083
1116
|
"pack_installations",
|
|
1084
1117
|
"pr_review_app_registrations",
|
|
@@ -1136,6 +1169,7 @@ var RUNTIME_FULL_DML_TABLES = [
|
|
|
1136
1169
|
"social_connections",
|
|
1137
1170
|
"social_posts",
|
|
1138
1171
|
"stripe_webhook_events",
|
|
1172
|
+
"tool_gateway_approval_capabilities",
|
|
1139
1173
|
"transcription_recording_chunks",
|
|
1140
1174
|
"transcription_recording_objects",
|
|
1141
1175
|
"transcription_recording_segments",
|
|
@@ -1147,6 +1181,7 @@ var RUNTIME_FULL_DML_TABLES = [
|
|
|
1147
1181
|
"workspace_captures",
|
|
1148
1182
|
"workspace_codex_subscription_preferences",
|
|
1149
1183
|
"workspace_control_events",
|
|
1184
|
+
"workspace_gateway_custom_models",
|
|
1150
1185
|
"workspace_inference_controls",
|
|
1151
1186
|
"workspace_instruction_policy_heads",
|
|
1152
1187
|
"workspace_memberships",
|
|
@@ -1166,6 +1201,7 @@ var RUNTIME_READ_ONLY_TABLES = [
|
|
|
1166
1201
|
"company_profile_activation_events",
|
|
1167
1202
|
"company_profile_heads",
|
|
1168
1203
|
"company_profile_snapshots",
|
|
1204
|
+
"deployment_model_catalog",
|
|
1169
1205
|
"document_authority_reclassifications",
|
|
1170
1206
|
"knowledge_lifecycle_events",
|
|
1171
1207
|
"knowledge_memory_lifecycle_events",
|
|
@@ -1263,12 +1299,14 @@ var RUNTIME_READ_INSERT_UPDATE_TABLES = [
|
|
|
1263
1299
|
"scheduled_task_runs",
|
|
1264
1300
|
"scheduled_tasks",
|
|
1265
1301
|
"session_attempt_codemode_calls",
|
|
1302
|
+
"session_attempt_model_context_snapshots",
|
|
1266
1303
|
"session_turn_startup_milestones",
|
|
1267
1304
|
"site_auth_connections",
|
|
1268
1305
|
"slack_user_link_access_requests",
|
|
1269
1306
|
"workspace_interaction_revisions"
|
|
1270
1307
|
];
|
|
1271
1308
|
var PROTECTED_NO_DIRECT_DML_TABLES = [
|
|
1309
|
+
"additional_organization_creation_receipts",
|
|
1272
1310
|
"canonical_human_identities",
|
|
1273
1311
|
"canonical_human_identity_operations",
|
|
1274
1312
|
"canonical_human_identity_subjects",
|
|
@@ -1358,6 +1396,7 @@ var PROTECTED_NO_DIRECT_DML_TABLES = [
|
|
|
1358
1396
|
"session_attempt_personal_document_snapshots",
|
|
1359
1397
|
"session_attempt_personal_resource_admissions",
|
|
1360
1398
|
"session_attempt_personal_resource_snapshots",
|
|
1399
|
+
"session_tenancy_additional_organization_activation_evidence",
|
|
1361
1400
|
"session_tenancy_greenfield_activation_evidence",
|
|
1362
1401
|
"session_variable_set_attachments",
|
|
1363
1402
|
"session_visibility_write_capabilities",
|
|
@@ -2061,6 +2100,29 @@ function evaluateRuntimeDatabasePosture(posture, options) {
|
|
|
2061
2100
|
);
|
|
2062
2101
|
}
|
|
2063
2102
|
}
|
|
2103
|
+
} else if (routine.name === ADDITIONAL_ORGANIZATION_CREATION_ROUTINE) {
|
|
2104
|
+
const missingAuthorityTables = ADDITIONAL_ORGANIZATION_CREATION_AUTHORITY_TABLES.filter(
|
|
2105
|
+
(tableName) => !tableByName.has(tableName)
|
|
2106
|
+
);
|
|
2107
|
+
if (missingAuthorityTables.length > 0) {
|
|
2108
|
+
violations.push(
|
|
2109
|
+
`target-schema runtime capability ${routine.name} authority tables are missing: ${missingAuthorityTables.join(", ")}`
|
|
2110
|
+
);
|
|
2111
|
+
} else {
|
|
2112
|
+
const authorityTables = ADDITIONAL_ORGANIZATION_CREATION_AUTHORITY_TABLES.map(
|
|
2113
|
+
(tableName) => tableByName.get(tableName)
|
|
2114
|
+
);
|
|
2115
|
+
const authorityOwners = new Set(authorityTables.map((table) => table.owner));
|
|
2116
|
+
if (authorityOwners.size !== 1) {
|
|
2117
|
+
violations.push(
|
|
2118
|
+
`target-schema runtime capability ${routine.name} authority table owners do not match: ${authorityTables.map((table) => `${table.name}=${table.owner}`).join(", ")}`
|
|
2119
|
+
);
|
|
2120
|
+
} else if (routine.owner !== authorityTables[0].owner) {
|
|
2121
|
+
violations.push(
|
|
2122
|
+
`target-schema runtime capability ${routine.name} owner ${routine.owner} does not match authority table owner ${authorityTables[0].owner}`
|
|
2123
|
+
);
|
|
2124
|
+
}
|
|
2125
|
+
}
|
|
2064
2126
|
} else if (ORGANIZATION_MEMBERSHIP_LIFECYCLE_ROUTINES.includes(routine.name)) {
|
|
2065
2127
|
const missingAuthorityTables = ORGANIZATION_MEMBERSHIP_LIFECYCLE_AUTHORITY_TABLES.filter(
|
|
2066
2128
|
(tableName) => !tableByName.has(tableName)
|
|
@@ -3326,9 +3388,11 @@ async function grantAppRoleIfSchemaExists(sql2, role, schema) {
|
|
|
3326
3388
|
"resolve_workspace_codex_subscription_source(uuid,uuid)",
|
|
3327
3389
|
"list_organization_workspace_ids(uuid)",
|
|
3328
3390
|
"organization_workspace_command(jsonb)",
|
|
3391
|
+
"authorize_organization_shared_workspace_administration(uuid,uuid,text)",
|
|
3329
3392
|
"resolve_organization_workspace_removal_subject(uuid,text,uuid)",
|
|
3330
3393
|
"prepare_organization_workspace_member_removal(jsonb)",
|
|
3331
3394
|
"record_organization_workspace_member_removal(jsonb,uuid,uuid)",
|
|
3395
|
+
"create_additional_managed_organization(text,text,text,text,uuid)",
|
|
3332
3396
|
"create_managed_organization(text,text,text,uuid)",
|
|
3333
3397
|
"assert_organization_shared_workspace_administrator(uuid,uuid,text)",
|
|
3334
3398
|
"open_organization_shared_workspace_administration_capability(uuid,uuid,text)",
|
|
@@ -3343,7 +3407,9 @@ async function grantAppRoleIfSchemaExists(sql2, role, schema) {
|
|
|
3343
3407
|
"complete_self_service_organization_setup(jsonb)",
|
|
3344
3408
|
"ensure_organization_user_setup_intent(jsonb)",
|
|
3345
3409
|
"claim_organization_user_setup_delivery(jsonb)",
|
|
3410
|
+
"claim_organization_user_setup_delivery_v2(jsonb)",
|
|
3346
3411
|
"prepare_organization_user_setup_delivery(jsonb)",
|
|
3412
|
+
"prepare_organization_user_setup_delivery_v2(jsonb)",
|
|
3347
3413
|
"settle_organization_user_setup_delivery(jsonb)",
|
|
3348
3414
|
"preview_organization_user_setup(text)",
|
|
3349
3415
|
"get_organization_invitation_for_administration(uuid,text,uuid)",
|
|
@@ -5102,4 +5168,4 @@ export {
|
|
|
5102
5168
|
runtimeDatabaseReadyCheck,
|
|
5103
5169
|
provisionRoles
|
|
5104
5170
|
};
|
|
5105
|
-
//# sourceMappingURL=chunk-
|
|
5171
|
+
//# sourceMappingURL=chunk-3RI33YQN.js.map
|