@opengeni/db 0.31.1 → 0.36.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 (122) hide show
  1. package/dist/browser-auth.d.ts +209 -1
  2. package/dist/browser-downloads.d.ts +51 -0
  3. package/dist/browser-identities.d.ts +11 -2
  4. package/dist/browser-sessions.d.ts +83 -1
  5. package/dist/browser-state-artifacts.d.ts +75 -1
  6. package/dist/canonical-human-identities.d.ts +48 -0
  7. package/dist/canonical-human-identities.js +28 -0
  8. package/dist/canonical-human-identities.js.map +1 -0
  9. package/dist/capability-integrations.d.ts +8 -6
  10. package/dist/{chunk-MWDVXQOL.js → chunk-5KTIEDX7.js} +5773 -4212
  11. package/dist/chunk-5KTIEDX7.js.map +1 -0
  12. package/dist/{chunk-NBE6CHRI.js → chunk-CQZ4QSP5.js} +49 -9
  13. package/dist/chunk-CQZ4QSP5.js.map +1 -0
  14. package/dist/chunk-F32YT7MP.js +117 -0
  15. package/dist/chunk-F32YT7MP.js.map +1 -0
  16. package/dist/{chunk-ISI2TIUG.js → chunk-JC5QPLUM.js} +30 -3
  17. package/dist/chunk-JC5QPLUM.js.map +1 -0
  18. package/dist/{chunk-F5FT7BEZ.js → chunk-P3RE4D2B.js} +2 -2
  19. package/dist/chunk-TAUTWOS5.js +259 -0
  20. package/dist/chunk-TAUTWOS5.js.map +1 -0
  21. package/dist/{chunk-YHZXQ7HP.js → chunk-VKLB2ZGI.js} +446 -19
  22. package/dist/chunk-VKLB2ZGI.js.map +1 -0
  23. package/dist/database.d.ts +5 -0
  24. package/dist/editable-artifact-durable-export.js +2 -2
  25. package/dist/editable-artifacts.js +3 -3
  26. package/dist/index.d.ts +438 -29
  27. package/dist/index.js +35640 -28969
  28. package/dist/index.js.map +1 -1
  29. package/dist/insights.d.ts +23 -7
  30. package/dist/integration-bindings.d.ts +24 -24
  31. package/dist/integration-facets.d.ts +99 -0
  32. package/dist/interaction-revisions.d.ts +11 -0
  33. package/dist/interaction-schema.d.ts +698 -34
  34. package/dist/provision-roles.js +1 -1
  35. package/dist/runtime-posture.d.ts +8 -7
  36. package/dist/schema.d.ts +9464 -5412
  37. package/dist/schema.js +51 -9
  38. package/dist/session-control.d.ts +29 -3
  39. package/dist/session-tenancy.d.ts +44 -0
  40. package/dist/session-tenancy.js +16 -0
  41. package/dist/session-tenancy.js.map +1 -0
  42. package/dist/slack-task-policy-schema.d.ts +847 -0
  43. package/dist/slack-task-policy.d.ts +65 -0
  44. package/dist/task-notes-schema.d.ts +924 -0
  45. package/dist/task-notes.d.ts +85 -0
  46. package/dist/video-generation.d.ts +9 -0
  47. package/dist/video-generation.js +5 -3
  48. package/dist/xai-subscription.d.ts +326 -0
  49. package/drizzle/0212_browser_state_transfer_hardening.sql +560 -0
  50. package/drizzle/0213_browser_interaction_authority.sql +67 -0
  51. package/drizzle/0214_browser_download_saves.sql +34 -0
  52. package/drizzle/0215_browser_controller_host.sql +385 -0
  53. package/drizzle/0216_browser_auth_health_evidence.sql +137 -0
  54. package/drizzle/0217_external_browser_auth_operations.sql +22 -0
  55. package/drizzle/0218_organization_tenancy_foundation.sql +299 -0
  56. package/drizzle/0219_organization_tenancy_managed_human_provisioning.sql +317 -0
  57. package/drizzle/0219_site_auth_maintenance_sessions.sql +234 -0
  58. package/drizzle/0220_memory_slack_append_only_cascade.sql +38 -0
  59. package/drizzle/0220_session_channels.sql +54 -0
  60. package/drizzle/0221_sessions_channel_index.sql +5 -0
  61. package/drizzle/0222_session_visibility_authority_epochs.sql +158 -0
  62. package/drizzle/0222_sessions_channel_fk.sql +89 -0
  63. package/drizzle/0223_pending_tool_event_output.sql +55 -0
  64. package/drizzle/0223_sessions_channel_fk_validate.sql +118 -0
  65. package/drizzle/0224_slack_post_outcome_reconciliation.sql +123 -0
  66. package/drizzle/0225_session_visibility_fork_activation.sql +1363 -0
  67. package/drizzle/0226_personal_codex_authority_foundation.sql +365 -0
  68. package/drizzle/0227_slack_native_actions.sql +145 -0
  69. package/drizzle/0228_interaction_controller_data_plane.sql +14 -0
  70. package/drizzle/0228_slack_task_policy.sql +400 -0
  71. package/drizzle/0229_slack_inbox_file_fact.sql +10 -0
  72. package/drizzle/0230_user_scoped_variable_sets_rigs.sql +84 -0
  73. package/drizzle/0231_integration_definition_identity_cutover.sql +271 -0
  74. package/drizzle/0232_integration_facet_authority_cutover.sql +610 -0
  75. package/drizzle/0233_skill_and_integration_authority_cutover.sql +1162 -0
  76. package/drizzle/0234_xai_subscription_authority.sql +1139 -0
  77. package/drizzle/0235_canonical_human_login_bindings.sql +920 -0
  78. package/drizzle/0236_browser_identity_lifecycle.sql +39 -0
  79. package/drizzle/0236_session_visibility_slack_policy.sql +72 -0
  80. package/drizzle/0237_interaction_transition_reaper.sql +263 -0
  81. package/drizzle/0238_goal_persistence_policy.sql +471 -0
  82. package/drizzle/0238_supergrok_realtime_model.sql +29 -0
  83. package/drizzle/0239_supergrok_video_funding.sql +50 -0
  84. package/drizzle/0239_task_tree_notes.sql +990 -0
  85. package/package.json +13 -5
  86. package/src/browser-auth.ts +2600 -123
  87. package/src/browser-downloads.ts +517 -0
  88. package/src/browser-identities.ts +220 -3
  89. package/src/browser-sessions.ts +334 -45
  90. package/src/browser-state-artifacts.ts +402 -12
  91. package/src/canonical-human-identities.ts +317 -0
  92. package/src/capability-integrations.ts +121 -213
  93. package/src/database.ts +41 -1
  94. package/src/index.ts +4157 -394
  95. package/src/insights.ts +109 -28
  96. package/src/integration-bindings.ts +101 -101
  97. package/src/{integration-features.ts → integration-facets.ts} +187 -184
  98. package/src/interaction-revisions.ts +33 -3
  99. package/src/interaction-schema.ts +311 -8
  100. package/src/pack-components.ts +43 -43
  101. package/src/pack-installations.ts +0 -43
  102. package/src/plugin-packages.ts +9 -9
  103. package/src/provision-roles.ts +232 -0
  104. package/src/runtime-posture.ts +227 -14
  105. package/src/schema.ts +1188 -75
  106. package/src/session-control.ts +122 -37
  107. package/src/session-queue-commands.ts +78 -1
  108. package/src/session-tenancy.ts +188 -0
  109. package/src/session-tool-call-settlement.ts +9 -3
  110. package/src/slack-task-policy-schema.ts +130 -0
  111. package/src/slack-task-policy.ts +341 -0
  112. package/src/task-notes-schema.ts +135 -0
  113. package/src/task-notes.ts +178 -0
  114. package/src/video-generation.ts +90 -12
  115. package/src/workspace-artifacts.ts +1 -1
  116. package/src/xai-subscription.ts +1887 -0
  117. package/dist/chunk-ISI2TIUG.js.map +0 -1
  118. package/dist/chunk-MWDVXQOL.js.map +0 -1
  119. package/dist/chunk-NBE6CHRI.js.map +0 -1
  120. package/dist/chunk-YHZXQ7HP.js.map +0 -1
  121. package/dist/integration-features.d.ts +0 -99
  122. /package/dist/{chunk-F5FT7BEZ.js.map → chunk-P3RE4D2B.js.map} +0 -0
@@ -0,0 +1,271 @@
1
+ -- deployment-mode: maintenance
2
+ -- Replace the provider-preset / nullable integration identity with one
3
+ -- mandatory Integration Definition identity across immutable manifests,
4
+ -- compiled revisions, and provider-OAuth Connection metadata. This is a
5
+ -- one-way protocol cutover: all opengeni_app sessions must be stopped.
6
+
7
+ SET LOCAL lock_timeout = '5s';
8
+ SET LOCAL statement_timeout = '30min';
9
+
10
+ DO $maintenance_preflight_guard$
11
+ BEGIN
12
+ IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'opengeni_app')
13
+ AND EXISTS (
14
+ SELECT 1
15
+ FROM pg_stat_activity
16
+ WHERE datname = current_database()
17
+ AND usename = 'opengeni_app'
18
+ AND pid <> pg_backend_pid()
19
+ )
20
+ THEN
21
+ RAISE EXCEPTION
22
+ 'Integration Definition identity activation requires all opengeni_app sessions to be stopped'
23
+ USING ERRCODE = '55000';
24
+ END IF;
25
+ END
26
+ $maintenance_preflight_guard$;
27
+
28
+ LOCK TABLE capability_plugin_versions IN ACCESS EXCLUSIVE MODE;
29
+ LOCK TABLE integration_spec_revisions IN ACCESS EXCLUSIVE MODE;
30
+ LOCK TABLE connections IN ACCESS EXCLUSIVE MODE;
31
+
32
+ DO $maintenance_guard$
33
+ BEGIN
34
+ IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'opengeni_app')
35
+ AND EXISTS (
36
+ SELECT 1
37
+ FROM pg_stat_activity
38
+ WHERE datname = current_database()
39
+ AND usename = 'opengeni_app'
40
+ AND pid <> pg_backend_pid()
41
+ )
42
+ THEN
43
+ RAISE EXCEPTION
44
+ 'Integration Definition identity activation requires all opengeni_app sessions to be stopped'
45
+ USING ERRCODE = '55000';
46
+ END IF;
47
+ END
48
+ $maintenance_guard$;
49
+
50
+ CREATE OR REPLACE FUNCTION opengeni_private.integration_definition_canonical_json(value jsonb)
51
+ RETURNS text
52
+ LANGUAGE plpgsql
53
+ IMMUTABLE
54
+ STRICT
55
+ PARALLEL SAFE
56
+ AS $canonical_json$
57
+ DECLARE
58
+ rendered text;
59
+ BEGIN
60
+ CASE jsonb_typeof(value)
61
+ WHEN 'object' THEN
62
+ SELECT COALESCE(
63
+ '{' || string_agg(
64
+ to_jsonb(entry.key)::text || ':' ||
65
+ opengeni_private.integration_definition_canonical_json(entry.value),
66
+ ',' ORDER BY entry.key COLLATE "C"
67
+ ) || '}',
68
+ '{}'
69
+ )
70
+ INTO rendered
71
+ FROM jsonb_each(value) AS entry(key, value);
72
+ RETURN rendered;
73
+ WHEN 'array' THEN
74
+ SELECT COALESCE(
75
+ '[' || string_agg(
76
+ opengeni_private.integration_definition_canonical_json(entry.value),
77
+ ',' ORDER BY entry.ordinality
78
+ ) || ']',
79
+ '[]'
80
+ )
81
+ INTO rendered
82
+ FROM jsonb_array_elements(value) WITH ORDINALITY AS entry(value, ordinality);
83
+ RETURN rendered;
84
+ ELSE
85
+ RETURN value::text;
86
+ END CASE;
87
+ END
88
+ $canonical_json$;
89
+
90
+ DO $identity_precondition$
91
+ BEGIN
92
+ IF EXISTS (
93
+ SELECT 1
94
+ FROM capability_plugin_versions version
95
+ WHERE version.manifest ->> 'kind' = 'integration'
96
+ AND COALESCE(
97
+ NULLIF(version.manifest ->> 'definitionId', ''),
98
+ NULLIF(version.manifest ->> 'presetId', ''),
99
+ (
100
+ SELECT COALESCE(
101
+ NULLIF(revision.spec ->> 'definitionId', ''),
102
+ NULLIF(revision.spec ->> 'integrationId', '')
103
+ )
104
+ FROM capability_facets facet
105
+ JOIN capability_api_facets api ON api.facet_id = facet.id
106
+ JOIN integration_spec_revisions revision ON revision.api_facet_id = api.facet_id
107
+ WHERE facet.plugin_version_id = version.id
108
+ ORDER BY (revision.status = 'active') DESC, revision.revision DESC
109
+ LIMIT 1
110
+ )
111
+ ) IS NULL
112
+ ) THEN
113
+ RAISE EXCEPTION 'an Integration definition has no recoverable immutable identity'
114
+ USING ERRCODE = '23514';
115
+ END IF;
116
+ END
117
+ $identity_precondition$;
118
+
119
+ ALTER TABLE integration_spec_revisions DISABLE TRIGGER integration_spec_revisions_immutable;
120
+ ALTER TABLE capability_plugin_versions DISABLE TRIGGER capability_plugin_versions_restrict_update;
121
+
122
+ UPDATE integration_spec_revisions revision
123
+ SET spec = (revision.spec - 'integrationId') || jsonb_build_object(
124
+ 'definitionId',
125
+ COALESCE(
126
+ NULLIF(version.manifest ->> 'definitionId', ''),
127
+ NULLIF(version.manifest ->> 'presetId', ''),
128
+ NULLIF(revision.spec ->> 'definitionId', ''),
129
+ NULLIF(revision.spec ->> 'integrationId', '')
130
+ )
131
+ )
132
+ FROM capability_api_facets api
133
+ JOIN capability_facets facet ON facet.id = api.facet_id
134
+ JOIN capability_plugin_versions version ON version.id = facet.plugin_version_id
135
+ WHERE revision.api_facet_id = api.facet_id
136
+ AND version.manifest ->> 'kind' = 'integration';
137
+
138
+ WITH migrated AS MATERIALIZED (
139
+ SELECT
140
+ version.id,
141
+ (version.manifest - 'presetId') || jsonb_build_object(
142
+ 'definitionId',
143
+ COALESCE(
144
+ NULLIF(version.manifest ->> 'definitionId', ''),
145
+ NULLIF(version.manifest ->> 'presetId', ''),
146
+ (
147
+ SELECT NULLIF(revision.spec ->> 'definitionId', '')
148
+ FROM capability_facets facet
149
+ JOIN capability_api_facets api ON api.facet_id = facet.id
150
+ JOIN integration_spec_revisions revision ON revision.api_facet_id = api.facet_id
151
+ WHERE facet.plugin_version_id = version.id
152
+ ORDER BY (revision.status = 'active') DESC, revision.revision DESC
153
+ LIMIT 1
154
+ )
155
+ ),
156
+ 'definitionProvenance',
157
+ COALESCE(
158
+ NULLIF(version.manifest ->> 'definitionProvenance', ''),
159
+ CASE
160
+ WHEN NULLIF(version.manifest ->> 'presetId', '') IS NOT NULL THEN 'curated'
161
+ ELSE 'workspace'
162
+ END
163
+ )
164
+ ) AS manifest
165
+ FROM capability_plugin_versions version
166
+ WHERE version.manifest ->> 'kind' = 'integration'
167
+ )
168
+ UPDATE capability_plugin_versions version
169
+ SET manifest = migrated.manifest,
170
+ manifest_digest = encode(
171
+ digest(
172
+ convert_to(
173
+ opengeni_private.integration_definition_canonical_json(migrated.manifest),
174
+ 'UTF8'
175
+ ),
176
+ 'sha256'
177
+ ),
178
+ 'hex'
179
+ )
180
+ FROM migrated
181
+ WHERE version.id = migrated.id;
182
+
183
+ UPDATE connections
184
+ SET metadata = (metadata - 'authorizedPresetIds') || jsonb_build_object(
185
+ 'authorizedDefinitionIds',
186
+ (
187
+ SELECT jsonb_agg(candidate.value ORDER BY candidate.value)
188
+ FROM (
189
+ SELECT DISTINCT value
190
+ FROM jsonb_array_elements_text(
191
+ COALESCE(metadata -> 'authorizedDefinitionIds', '[]'::jsonb) ||
192
+ COALESCE(metadata -> 'authorizedPresetIds', '[]'::jsonb)
193
+ ) AS entry(value)
194
+ ) AS candidate
195
+ )
196
+ )
197
+ WHERE metadata ->> 'credentialRole' = 'api_integration_oauth'
198
+ AND (
199
+ metadata ? 'authorizedPresetIds'
200
+ OR metadata ? 'authorizedDefinitionIds'
201
+ );
202
+
203
+ DO $identity_postcondition$
204
+ BEGIN
205
+ IF EXISTS (
206
+ SELECT 1
207
+ FROM capability_plugin_versions version
208
+ WHERE version.manifest ->> 'kind' = 'integration'
209
+ AND (
210
+ version.manifest ? 'presetId'
211
+ OR NULLIF(version.manifest ->> 'definitionId', '') IS NULL
212
+ OR version.manifest ->> 'definitionProvenance' NOT IN ('curated', 'workspace')
213
+ OR version.manifest_digest <> encode(
214
+ digest(
215
+ convert_to(
216
+ opengeni_private.integration_definition_canonical_json(version.manifest),
217
+ 'UTF8'
218
+ ),
219
+ 'sha256'
220
+ ),
221
+ 'hex'
222
+ )
223
+ )
224
+ ) THEN
225
+ RAISE EXCEPTION 'Integration Definition manifest migration did not converge'
226
+ USING ERRCODE = '23514';
227
+ END IF;
228
+
229
+ IF EXISTS (
230
+ SELECT 1
231
+ FROM integration_spec_revisions revision
232
+ JOIN capability_api_facets api ON api.facet_id = revision.api_facet_id
233
+ JOIN capability_facets facet ON facet.id = api.facet_id
234
+ JOIN capability_plugin_versions version ON version.id = facet.plugin_version_id
235
+ WHERE version.manifest ->> 'kind' = 'integration'
236
+ AND (
237
+ revision.spec ? 'integrationId'
238
+ OR NULLIF(revision.spec ->> 'definitionId', '') IS NULL
239
+ OR revision.spec ->> 'definitionId' <> version.manifest ->> 'definitionId'
240
+ )
241
+ ) THEN
242
+ RAISE EXCEPTION 'Integration Definition revision migration did not converge'
243
+ USING ERRCODE = '23514';
244
+ END IF;
245
+
246
+ IF EXISTS (
247
+ SELECT 1
248
+ FROM connections
249
+ WHERE metadata ->> 'credentialRole' = 'api_integration_oauth'
250
+ AND (
251
+ metadata ? 'authorizedPresetIds'
252
+ OR jsonb_typeof(metadata -> 'authorizedDefinitionIds') <> 'array'
253
+ OR jsonb_array_length(metadata -> 'authorizedDefinitionIds') = 0
254
+ OR EXISTS (
255
+ SELECT 1
256
+ FROM jsonb_array_elements(metadata -> 'authorizedDefinitionIds') AS entry(value)
257
+ WHERE jsonb_typeof(entry.value) <> 'string'
258
+ OR btrim(entry.value #>> '{}') = ''
259
+ )
260
+ )
261
+ ) THEN
262
+ RAISE EXCEPTION 'Integration Definition Connection metadata migration did not converge'
263
+ USING ERRCODE = '23514';
264
+ END IF;
265
+ END
266
+ $identity_postcondition$;
267
+
268
+ ALTER TABLE capability_plugin_versions ENABLE TRIGGER capability_plugin_versions_restrict_update;
269
+ ALTER TABLE integration_spec_revisions ENABLE TRIGGER integration_spec_revisions_immutable;
270
+
271
+ DROP FUNCTION opengeni_private.integration_definition_canonical_json(jsonb);