@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.
Files changed (62) hide show
  1. package/dist/canonical-human-identities.js +3 -3
  2. package/dist/{chunk-DXJ2WY6W.js → chunk-53A2PEHT.js} +241 -31
  3. package/dist/chunk-53A2PEHT.js.map +1 -0
  4. package/dist/{chunk-JS3AWDKZ.js → chunk-5S4BQAHX.js} +3 -3
  5. package/dist/{chunk-JP6IYGYI.js → chunk-CITYUGMW.js} +3 -3
  6. package/dist/{chunk-6FIVOJ3V.js → chunk-F5YOZEYQ.js} +45 -1
  7. package/dist/chunk-F5YOZEYQ.js.map +1 -0
  8. package/dist/{chunk-ZTSJPFDH.js → chunk-HZV7O6JR.js} +2 -2
  9. package/dist/{chunk-VDXHLVDE.js → chunk-RLQVPOVR.js} +2 -2
  10. package/dist/{chunk-LHKB62GC.js → chunk-UKOGHUGC.js} +2 -2
  11. package/dist/{chunk-QL4AHBYD.js → chunk-X6TO5HII.js} +2 -2
  12. package/dist/{chunk-3ZMN4EXC.js → chunk-Y53WEFYB.js} +2 -2
  13. package/dist/connection-token-resolver.d.ts +4 -0
  14. package/dist/editable-artifact-durable-export.js +2 -2
  15. package/dist/editable-artifacts.js +3 -3
  16. package/dist/index.d.ts +59 -12
  17. package/dist/index.js +5259 -4374
  18. package/dist/index.js.map +1 -1
  19. package/dist/insights.d.ts +9 -0
  20. package/dist/managed-auth-session-sets.js +3 -3
  21. package/dist/new-session-drafts.d.ts +12 -0
  22. package/dist/organization-membership-lifecycle.d.ts +8 -1
  23. package/dist/organization-model-providers.d.ts +101 -0
  24. package/dist/pack-components.d.ts +1 -0
  25. package/dist/provision-roles.js +1 -1
  26. package/dist/runtime-posture.d.ts +5 -5
  27. package/dist/schema.d.ts +645 -0
  28. package/dist/schema.js +7 -1
  29. package/dist/session-background-commands.js +3 -3
  30. package/dist/session-tenancy.js +3 -3
  31. package/dist/video-generation.js +3 -3
  32. package/drizzle/0390_organization_model_provider_connections.sql +197 -0
  33. package/drizzle/0391_sandbox_provider_deadline_interaction_followup.sql +295 -0
  34. package/drizzle/0392_context_compaction_pending_observability.sql +198 -0
  35. package/drizzle/0393_workspace_memory_and_learning_defaults.sql +102 -0
  36. package/drizzle/0394_session_selected_skill_activation.sql +20 -0
  37. package/drizzle/0395_scheduled_task_unclaimed_occurrence_invalidation.sql +154 -0
  38. package/drizzle/0396_model_call_equivalent_credit_cost.sql +28 -0
  39. package/drizzle/0397_sandbox_deadline_rotation_preemption.sql +113 -0
  40. package/drizzle/0398_organization_workspace_management_entry.sql +206 -0
  41. package/drizzle/0399_additional_managed_organization_creation.sql +691 -0
  42. package/package.json +6 -6
  43. package/src/connection-token-resolver.ts +12 -0
  44. package/src/index.ts +701 -155
  45. package/src/insights-model-bundle.ts +54 -5
  46. package/src/insights.ts +32 -0
  47. package/src/new-session-drafts.ts +66 -21
  48. package/src/organization-membership-lifecycle.ts +47 -5
  49. package/src/organization-model-providers.ts +614 -0
  50. package/src/pack-components.ts +15 -2
  51. package/src/provision-roles.ts +2 -0
  52. package/src/runtime-posture.ts +44 -0
  53. package/src/schema.ts +250 -30
  54. package/dist/chunk-6FIVOJ3V.js.map +0 -1
  55. package/dist/chunk-DXJ2WY6W.js.map +0 -1
  56. /package/dist/{chunk-JS3AWDKZ.js.map → chunk-5S4BQAHX.js.map} +0 -0
  57. /package/dist/{chunk-JP6IYGYI.js.map → chunk-CITYUGMW.js.map} +0 -0
  58. /package/dist/{chunk-ZTSJPFDH.js.map → chunk-HZV7O6JR.js.map} +0 -0
  59. /package/dist/{chunk-VDXHLVDE.js.map → chunk-RLQVPOVR.js.map} +0 -0
  60. /package/dist/{chunk-LHKB62GC.js.map → chunk-UKOGHUGC.js.map} +0 -0
  61. /package/dist/{chunk-QL4AHBYD.js.map → chunk-X6TO5HII.js.map} +0 -0
  62. /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.';