@opengeni/db 3.7.4-canary.0 → 3.8.2-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/canonical-human-identities.js +3 -3
- package/dist/{chunk-DXJ2WY6W.js → chunk-53A2PEHT.js} +241 -31
- package/dist/chunk-53A2PEHT.js.map +1 -0
- package/dist/{chunk-JS3AWDKZ.js → chunk-5S4BQAHX.js} +3 -3
- package/dist/{chunk-JP6IYGYI.js → chunk-CITYUGMW.js} +3 -3
- package/dist/{chunk-6FIVOJ3V.js → chunk-F5YOZEYQ.js} +45 -1
- package/dist/chunk-F5YOZEYQ.js.map +1 -0
- package/dist/{chunk-ZTSJPFDH.js → chunk-HZV7O6JR.js} +2 -2
- package/dist/{chunk-VDXHLVDE.js → chunk-RLQVPOVR.js} +2 -2
- package/dist/{chunk-LHKB62GC.js → chunk-UKOGHUGC.js} +2 -2
- package/dist/{chunk-QL4AHBYD.js → chunk-X6TO5HII.js} +2 -2
- package/dist/{chunk-3ZMN4EXC.js → chunk-Y53WEFYB.js} +2 -2
- package/dist/connection-token-resolver.d.ts +4 -0
- package/dist/editable-artifact-durable-export.js +2 -2
- package/dist/editable-artifacts.js +3 -3
- package/dist/index.d.ts +59 -12
- package/dist/index.js +5259 -4374
- 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/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/provision-roles.js +1 -1
- package/dist/runtime-posture.d.ts +5 -5
- package/dist/schema.d.ts +645 -0
- package/dist/schema.js +7 -1
- package/dist/session-background-commands.js +3 -3
- package/dist/session-tenancy.js +3 -3
- package/dist/video-generation.js +3 -3
- 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/package.json +6 -6
- package/src/connection-token-resolver.ts +12 -0
- package/src/index.ts +701 -155
- package/src/insights-model-bundle.ts +54 -5
- package/src/insights.ts +32 -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/provision-roles.ts +2 -0
- package/src/runtime-posture.ts +44 -0
- package/src/schema.ts +250 -30
- package/dist/chunk-6FIVOJ3V.js.map +0 -1
- package/dist/chunk-DXJ2WY6W.js.map +0 -1
- /package/dist/{chunk-JS3AWDKZ.js.map → chunk-5S4BQAHX.js.map} +0 -0
- /package/dist/{chunk-JP6IYGYI.js.map → chunk-CITYUGMW.js.map} +0 -0
- /package/dist/{chunk-ZTSJPFDH.js.map → chunk-HZV7O6JR.js.map} +0 -0
- /package/dist/{chunk-VDXHLVDE.js.map → chunk-RLQVPOVR.js.map} +0 -0
- /package/dist/{chunk-LHKB62GC.js.map → chunk-UKOGHUGC.js.map} +0 -0
- /package/dist/{chunk-QL4AHBYD.js.map → chunk-X6TO5HII.js.map} +0 -0
- /package/dist/{chunk-3ZMN4EXC.js.map → chunk-Y53WEFYB.js.map} +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
-- deployment-mode: rolling
|
|
2
|
+
-- Shared-workspace creators receive explicit operational administration while
|
|
3
|
+
-- organization administrators retain a separate, content-blind lifecycle
|
|
4
|
+
-- authority for the workspace management surface.
|
|
5
|
+
|
|
6
|
+
SET LOCAL lock_timeout = '5s';
|
|
7
|
+
SET LOCAL statement_timeout = '10min';
|
|
8
|
+
|
|
9
|
+
ALTER FUNCTION organization_workspace_command(jsonb)
|
|
10
|
+
RENAME TO organization_workspace_command_without_creator_access;
|
|
11
|
+
|
|
12
|
+
REVOKE ALL ON FUNCTION organization_workspace_command_without_creator_access(jsonb) FROM PUBLIC;
|
|
13
|
+
|
|
14
|
+
CREATE FUNCTION organization_workspace_command(p_command jsonb)
|
|
15
|
+
RETURNS jsonb
|
|
16
|
+
LANGUAGE plpgsql SECURITY DEFINER
|
|
17
|
+
SET search_path FROM CURRENT
|
|
18
|
+
AS $body$
|
|
19
|
+
DECLARE
|
|
20
|
+
result jsonb;
|
|
21
|
+
actor_membership_id uuid;
|
|
22
|
+
creator_grant_operation_id uuid;
|
|
23
|
+
creator_grant_operation_hash text;
|
|
24
|
+
BEGIN
|
|
25
|
+
result := organization_workspace_command_without_creator_access(p_command);
|
|
26
|
+
IF p_command ->> 'action' IS DISTINCT FROM 'create' THEN
|
|
27
|
+
RETURN result;
|
|
28
|
+
END IF;
|
|
29
|
+
-- A create receipt written before this migration has no child grant receipt.
|
|
30
|
+
-- Preserve that historical outcome instead of turning a retry into a new
|
|
31
|
+
-- privilege grant after rollout.
|
|
32
|
+
IF coalesce((result ->> 'replay')::boolean, false) THEN
|
|
33
|
+
RETURN result;
|
|
34
|
+
END IF;
|
|
35
|
+
|
|
36
|
+
SELECT membership.id INTO actor_membership_id
|
|
37
|
+
FROM organization_memberships membership
|
|
38
|
+
WHERE membership.account_id = nullif(p_command ->> 'organizationId', '')::uuid
|
|
39
|
+
AND membership.subject_id = p_command ->> 'actorSubjectId'
|
|
40
|
+
AND membership.status = 'active'
|
|
41
|
+
AND membership.role IN ('owner', 'admin');
|
|
42
|
+
IF actor_membership_id IS NULL THEN
|
|
43
|
+
RAISE EXCEPTION 'organization administration required' USING ERRCODE = '42501';
|
|
44
|
+
END IF;
|
|
45
|
+
|
|
46
|
+
-- Derive one stable, private follow-up operation from the public create key.
|
|
47
|
+
-- A committed create can therefore be retried safely after a lost response,
|
|
48
|
+
-- without ever re-elevating a creator who was deliberately demoted later.
|
|
49
|
+
creator_grant_operation_hash := pg_catalog.md5(
|
|
50
|
+
'organization-workspace-creator-admin:' || (p_command ->> 'operationId')
|
|
51
|
+
);
|
|
52
|
+
creator_grant_operation_id := (
|
|
53
|
+
pg_catalog.substr(creator_grant_operation_hash, 1, 12)
|
|
54
|
+
|| '5'
|
|
55
|
+
|| pg_catalog.substr(creator_grant_operation_hash, 14, 3)
|
|
56
|
+
|| '8'
|
|
57
|
+
|| pg_catalog.substr(creator_grant_operation_hash, 18)
|
|
58
|
+
)::uuid;
|
|
59
|
+
|
|
60
|
+
result := result || organization_workspace_command_without_creator_access(
|
|
61
|
+
pg_catalog.jsonb_build_object(
|
|
62
|
+
'action', 'grant',
|
|
63
|
+
'organizationId', p_command ->> 'organizationId',
|
|
64
|
+
'actorSubjectId', p_command ->> 'actorSubjectId',
|
|
65
|
+
'workspaceId', result ->> 'workspaceId',
|
|
66
|
+
'targetOrganizationMembershipId', actor_membership_id,
|
|
67
|
+
'role', 'admin',
|
|
68
|
+
'operationId', creator_grant_operation_id
|
|
69
|
+
)
|
|
70
|
+
);
|
|
71
|
+
RETURN result;
|
|
72
|
+
END
|
|
73
|
+
$body$;
|
|
74
|
+
|
|
75
|
+
CREATE FUNCTION authorize_organization_shared_workspace_administration(
|
|
76
|
+
p_account_id uuid,
|
|
77
|
+
p_workspace_id uuid,
|
|
78
|
+
p_actor_subject_id text
|
|
79
|
+
) RETURNS void
|
|
80
|
+
LANGUAGE plpgsql SECURITY DEFINER
|
|
81
|
+
SET search_path FROM CURRENT
|
|
82
|
+
AS $body$
|
|
83
|
+
DECLARE
|
|
84
|
+
actor organization_memberships%ROWTYPE;
|
|
85
|
+
BEGIN
|
|
86
|
+
IF p_account_id IS NULL OR p_workspace_id IS NULL OR p_actor_subject_id IS NULL
|
|
87
|
+
OR p_account_id IS DISTINCT FROM opengeni_private.current_account_id()
|
|
88
|
+
OR p_workspace_id IS DISTINCT FROM opengeni_private.current_workspace_id()
|
|
89
|
+
OR p_actor_subject_id IS DISTINCT FROM opengeni_private.current_subject_id()
|
|
90
|
+
THEN
|
|
91
|
+
RAISE EXCEPTION 'organization workspace administration is invalid'
|
|
92
|
+
USING ERRCODE = '22023';
|
|
93
|
+
END IF;
|
|
94
|
+
|
|
95
|
+
PERFORM pg_catalog.pg_advisory_xact_lock(
|
|
96
|
+
pg_catalog.hashtextextended('organization-membership:' || p_account_id::text, 0)
|
|
97
|
+
);
|
|
98
|
+
PERFORM pg_catalog.set_config(
|
|
99
|
+
'opengeni.organization_tenancy_lifecycle',
|
|
100
|
+
'organization_membership_lifecycle', true
|
|
101
|
+
);
|
|
102
|
+
PERFORM 1 FROM managed_accounts account
|
|
103
|
+
WHERE account.id = p_account_id FOR KEY SHARE;
|
|
104
|
+
IF NOT FOUND THEN
|
|
105
|
+
RAISE EXCEPTION 'organization not found' USING ERRCODE = 'P0002';
|
|
106
|
+
END IF;
|
|
107
|
+
|
|
108
|
+
SELECT * INTO actor FROM organization_memberships membership
|
|
109
|
+
WHERE membership.account_id = p_account_id
|
|
110
|
+
AND membership.subject_id = p_actor_subject_id
|
|
111
|
+
FOR SHARE;
|
|
112
|
+
IF NOT FOUND OR actor.status <> 'active' OR actor.role NOT IN ('owner', 'admin') THEN
|
|
113
|
+
RAISE EXCEPTION 'organization administration required' USING ERRCODE = '42501';
|
|
114
|
+
END IF;
|
|
115
|
+
IF NOT EXISTS (
|
|
116
|
+
SELECT 1 FROM workspaces workspace
|
|
117
|
+
WHERE workspace.account_id = p_account_id AND workspace.id = p_workspace_id
|
|
118
|
+
) THEN
|
|
119
|
+
RAISE EXCEPTION 'workspace not found' USING ERRCODE = 'P0002';
|
|
120
|
+
END IF;
|
|
121
|
+
IF EXISTS (
|
|
122
|
+
SELECT 1 FROM organization_memberships membership
|
|
123
|
+
WHERE membership.account_id = p_account_id
|
|
124
|
+
AND membership.personal_workspace_id = p_workspace_id
|
|
125
|
+
) THEN
|
|
126
|
+
RAISE EXCEPTION 'personal workspaces are not administrable'
|
|
127
|
+
USING ERRCODE = '42501';
|
|
128
|
+
END IF;
|
|
129
|
+
END
|
|
130
|
+
$body$;
|
|
131
|
+
|
|
132
|
+
REVOKE ALL ON FUNCTION organization_workspace_command(jsonb) FROM PUBLIC;
|
|
133
|
+
REVOKE ALL ON FUNCTION authorize_organization_shared_workspace_administration(uuid,uuid,text)
|
|
134
|
+
FROM PUBLIC;
|
|
135
|
+
|
|
136
|
+
DO $pin_and_grant$
|
|
137
|
+
DECLARE
|
|
138
|
+
data_schema text := current_schema();
|
|
139
|
+
legacy_owner oid;
|
|
140
|
+
grantee_name text;
|
|
141
|
+
BEGIN
|
|
142
|
+
EXECUTE format(
|
|
143
|
+
'ALTER FUNCTION %I.organization_workspace_command_without_creator_access(jsonb) SET search_path = pg_catalog, %I, pg_temp',
|
|
144
|
+
data_schema, data_schema
|
|
145
|
+
);
|
|
146
|
+
EXECUTE format(
|
|
147
|
+
'ALTER FUNCTION %I.organization_workspace_command(jsonb) SET search_path = pg_catalog, %I, pg_temp',
|
|
148
|
+
data_schema, data_schema
|
|
149
|
+
);
|
|
150
|
+
EXECUTE format(
|
|
151
|
+
'ALTER FUNCTION %I.authorize_organization_shared_workspace_administration(uuid,uuid,text) SET search_path = pg_catalog, %I, pg_temp',
|
|
152
|
+
data_schema, data_schema
|
|
153
|
+
);
|
|
154
|
+
-- Renaming preserved the legacy function's ACL. Atomically move every
|
|
155
|
+
-- supported runtime role to the replacement wrapper before removing its
|
|
156
|
+
-- bypass access, so a migrate-then-provision rollout has no outage window.
|
|
157
|
+
SELECT function.proowner INTO legacy_owner
|
|
158
|
+
FROM pg_catalog.pg_proc function
|
|
159
|
+
WHERE function.oid =
|
|
160
|
+
'organization_workspace_command_without_creator_access(jsonb)'::regprocedure;
|
|
161
|
+
FOR grantee_name IN
|
|
162
|
+
SELECT role.rolname
|
|
163
|
+
FROM pg_catalog.pg_proc function
|
|
164
|
+
CROSS JOIN LATERAL pg_catalog.aclexplode(
|
|
165
|
+
coalesce(function.proacl, pg_catalog.acldefault('f', function.proowner))
|
|
166
|
+
) grant_value
|
|
167
|
+
JOIN pg_catalog.pg_roles role ON role.oid = grant_value.grantee
|
|
168
|
+
WHERE function.oid =
|
|
169
|
+
'organization_workspace_command_without_creator_access(jsonb)'::regprocedure
|
|
170
|
+
AND grant_value.privilege_type = 'EXECUTE'
|
|
171
|
+
AND grant_value.grantee <> legacy_owner
|
|
172
|
+
LOOP
|
|
173
|
+
EXECUTE format(
|
|
174
|
+
'GRANT EXECUTE ON FUNCTION %I.organization_workspace_command(jsonb) TO %I',
|
|
175
|
+
data_schema, grantee_name
|
|
176
|
+
);
|
|
177
|
+
EXECUTE format(
|
|
178
|
+
'GRANT EXECUTE ON FUNCTION %I.authorize_organization_shared_workspace_administration(uuid,uuid,text) TO %I',
|
|
179
|
+
data_schema, grantee_name
|
|
180
|
+
);
|
|
181
|
+
EXECUTE format(
|
|
182
|
+
'REVOKE EXECUTE ON FUNCTION %I.organization_workspace_command_without_creator_access(jsonb) FROM %I',
|
|
183
|
+
data_schema, grantee_name
|
|
184
|
+
);
|
|
185
|
+
END LOOP;
|
|
186
|
+
IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'opengeni_app') THEN
|
|
187
|
+
EXECUTE format(
|
|
188
|
+
'REVOKE ALL ON FUNCTION %I.organization_workspace_command_without_creator_access(jsonb) FROM opengeni_app',
|
|
189
|
+
data_schema
|
|
190
|
+
);
|
|
191
|
+
EXECUTE format(
|
|
192
|
+
'GRANT EXECUTE ON FUNCTION %I.organization_workspace_command(jsonb) TO opengeni_app',
|
|
193
|
+
data_schema
|
|
194
|
+
);
|
|
195
|
+
EXECUTE format(
|
|
196
|
+
'GRANT EXECUTE ON FUNCTION %I.authorize_organization_shared_workspace_administration(uuid,uuid,text) TO opengeni_app',
|
|
197
|
+
data_schema
|
|
198
|
+
);
|
|
199
|
+
END IF;
|
|
200
|
+
END
|
|
201
|
+
$pin_and_grant$;
|
|
202
|
+
|
|
203
|
+
COMMENT ON FUNCTION organization_workspace_command(jsonb) IS
|
|
204
|
+
'Idempotent organization-admin shared-workspace command. A create atomically materializes an explicit named admin grant for its creator.';
|
|
205
|
+
COMMENT ON FUNCTION authorize_organization_shared_workspace_administration(uuid,uuid,text) IS
|
|
206
|
+
'Transaction-scoped, content-blind organization owner/admin authority for managing one shared workspace. It grants no operational workspace access.';
|