@opengeni/db 0.28.9 → 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 (225) hide show
  1. package/dist/attached-browser-devices.d.ts +42 -0
  2. package/dist/attempt-tool-catalogs.d.ts +16 -0
  3. package/dist/browser-auth.d.ts +299 -0
  4. package/dist/browser-downloads.d.ts +51 -0
  5. package/dist/browser-identities.d.ts +137 -0
  6. package/dist/browser-sessions.d.ts +354 -0
  7. package/dist/browser-state-artifacts.d.ts +91 -0
  8. package/dist/canonical-human-identities.d.ts +48 -0
  9. package/dist/canonical-human-identities.js +28 -0
  10. package/dist/canonical-human-identities.js.map +1 -0
  11. package/dist/capability-components.d.ts +37 -0
  12. package/dist/capability-integrations.d.ts +194 -0
  13. package/dist/chunk-5KTIEDX7.js +13200 -0
  14. package/dist/chunk-5KTIEDX7.js.map +1 -0
  15. package/dist/chunk-CQZ4QSP5.js +995 -0
  16. package/dist/chunk-CQZ4QSP5.js.map +1 -0
  17. package/dist/chunk-F32YT7MP.js +117 -0
  18. package/dist/chunk-F32YT7MP.js.map +1 -0
  19. package/dist/chunk-JC5QPLUM.js +666 -0
  20. package/dist/chunk-JC5QPLUM.js.map +1 -0
  21. package/dist/chunk-P3RE4D2B.js +3535 -0
  22. package/dist/chunk-P3RE4D2B.js.map +1 -0
  23. package/dist/chunk-TAUTWOS5.js +259 -0
  24. package/dist/chunk-TAUTWOS5.js.map +1 -0
  25. package/dist/chunk-VKLB2ZGI.js +2389 -0
  26. package/dist/chunk-VKLB2ZGI.js.map +1 -0
  27. package/dist/codemode-operations.d.ts +117 -0
  28. package/dist/codex-token-resolver.d.ts +2 -2
  29. package/dist/company-profile-schema.d.ts +798 -0
  30. package/dist/company-profile.d.ts +268 -0
  31. package/dist/computer-sessions.d.ts +109 -0
  32. package/dist/connection-token-resolver.d.ts +9 -4
  33. package/dist/database.d.ts +57 -3
  34. package/dist/editable-artifact-durable-export.d.ts +153 -0
  35. package/dist/editable-artifact-durable-export.js +788 -0
  36. package/dist/editable-artifact-durable-export.js.map +1 -0
  37. package/dist/editable-artifact-materialization.d.ts +123 -0
  38. package/dist/editable-artifacts-schema.d.ts +4152 -0
  39. package/dist/editable-artifacts.d.ts +610 -0
  40. package/dist/editable-artifacts.js +26 -0
  41. package/dist/editable-artifacts.js.map +1 -0
  42. package/dist/generated-images.d.ts +139 -0
  43. package/dist/index.d.ts +1122 -126
  44. package/dist/index.js +42329 -18407
  45. package/dist/index.js.map +1 -1
  46. package/dist/insights.d.ts +73 -10
  47. package/dist/integration-bindings.d.ts +70 -0
  48. package/dist/integration-facets.d.ts +99 -0
  49. package/dist/interaction-revisions.d.ts +14 -0
  50. package/dist/interaction-schema.d.ts +6036 -0
  51. package/dist/knowledge-source-sync-schema.d.ts +1679 -0
  52. package/dist/knowledge-source-sync.d.ts +274 -0
  53. package/dist/memory-governance.d.ts +2 -2
  54. package/dist/memory-slack-delivery.d.ts +101 -0
  55. package/dist/new-session-drafts.d.ts +2 -2
  56. package/dist/pack-components.d.ts +76 -0
  57. package/dist/pack-installations.d.ts +86 -0
  58. package/dist/persistence-errors.d.ts +3 -3
  59. package/dist/plugin-packages.d.ts +126 -0
  60. package/dist/preference-registry.d.ts +1 -1
  61. package/dist/provision-roles.d.ts +9 -1
  62. package/dist/provision-roles.js +1 -1
  63. package/dist/runtime-posture.d.ts +19 -6
  64. package/dist/schema.d.ts +22654 -9359
  65. package/dist/schema.js +209 -3
  66. package/dist/scoped-knowledge.d.ts +97 -1
  67. package/dist/session-control.d.ts +33 -7
  68. package/dist/session-queue-commands.d.ts +19 -11
  69. package/dist/session-realtime-context.d.ts +2 -2
  70. package/dist/session-realtime-ledger.d.ts +4 -4
  71. package/dist/session-realtime-mirror.d.ts +2 -2
  72. package/dist/session-realtime-state.d.ts +1 -1
  73. package/dist/session-realtime-terminal.d.ts +1 -1
  74. package/dist/session-realtime.d.ts +7 -7
  75. package/dist/session-tenancy.d.ts +44 -0
  76. package/dist/session-tenancy.js +16 -0
  77. package/dist/session-tenancy.js.map +1 -0
  78. package/dist/session-tool-call-settlement.d.ts +1 -1
  79. package/dist/slack-task-policy-schema.d.ts +847 -0
  80. package/dist/slack-task-policy.d.ts +65 -0
  81. package/dist/slack-user-link-access.d.ts +54 -0
  82. package/dist/task-notes-schema.d.ts +924 -0
  83. package/dist/task-notes.d.ts +85 -0
  84. package/dist/transcription-recordings.d.ts +2 -2
  85. package/dist/turn-initiator.d.ts +2 -2
  86. package/dist/video-generation.d.ts +225 -0
  87. package/dist/video-generation.js +68 -0
  88. package/dist/video-generation.js.map +1 -0
  89. package/dist/workspace-artifacts.d.ts +1 -1
  90. package/dist/workspace-instruction-policies.d.ts +1 -1
  91. package/dist/workspace-learning-policy-schema.d.ts +932 -0
  92. package/dist/workspace-learning-policy.d.ts +161 -0
  93. package/dist/xai-subscription.d.ts +326 -0
  94. package/drizzle/0183_model_call_provider_cost_estimates.sql +39 -0
  95. package/drizzle/0184_sandbox_drain_teardown_fence.sql +682 -0
  96. package/drizzle/0185_temporal_schedule_cleanup_outbox.sql +168 -0
  97. package/drizzle/0186_sandbox_capture_provider_contract.sql +400 -0
  98. package/drizzle/0187_generated_image_artifacts.sql +173 -0
  99. package/drizzle/0188_image_generation_retention_failure.sql +25 -0
  100. package/drizzle/0189_retained_session_image_formats.sql +13 -0
  101. package/drizzle/0190_timeline_annotations.sql +31 -0
  102. package/drizzle/0191_editable_artifact_engine.sql +3853 -0
  103. package/drizzle/0192_editable_artifact_live_tickets.sql +338 -0
  104. package/drizzle/0193_editable_artifact_authorization.sql +190 -0
  105. package/drizzle/0194_editable_artifact_durable_exports.sql +160 -0
  106. package/drizzle/0195_editable_artifact_import_authorization.sql +203 -0
  107. package/drizzle/0196_rig_provider_images.sql +152 -0
  108. package/drizzle/0197_knowledge_source_sync_schedules.sql +523 -0
  109. package/drizzle/0198_memory_slack_publication_delivery.sql +393 -0
  110. package/drizzle/0199_workspace_learning_policy.sql +980 -0
  111. package/drizzle/0201_company_profile_authority.sql +849 -0
  112. package/drizzle/0202_document_index_checkpoints.sql +85 -0
  113. package/drizzle/0203_durable_video_generation.sql +353 -0
  114. package/drizzle/0204_video_generation_funding.sql +44 -0
  115. package/drizzle/0205_attempt_tool_catalogs.sql +230 -0
  116. package/drizzle/0206_browser_sessions.sql +646 -0
  117. package/drizzle/0207_browser_identities.sql +379 -0
  118. package/drizzle/0208_attached_browser_devices.sql +165 -0
  119. package/drizzle/0209_computer_sessions.sql +575 -0
  120. package/drizzle/0210_browser_auth_network_interventions.sql +441 -0
  121. package/drizzle/0211_editable_artifact_session_links.sql +58 -0
  122. package/drizzle/0212_browser_state_transfer_hardening.sql +560 -0
  123. package/drizzle/0212_slack_installation_bindings.sql +348 -0
  124. package/drizzle/0213_browser_interaction_authority.sql +67 -0
  125. package/drizzle/0213_slack_user_link_access_requests.sql +177 -0
  126. package/drizzle/0214_browser_download_saves.sql +34 -0
  127. package/drizzle/0214_session_activity_commit_gate.sql +262 -0
  128. package/drizzle/0215_browser_controller_host.sql +385 -0
  129. package/drizzle/0215_capabilities_platform.sql +980 -0
  130. package/drizzle/0216_browser_auth_health_evidence.sql +137 -0
  131. package/drizzle/0216_pack_component_ownership.sql +235 -0
  132. package/drizzle/0217_capability_definition_delete_authority.sql +32 -0
  133. package/drizzle/0217_external_browser_auth_operations.sql +22 -0
  134. package/drizzle/0218_organization_tenancy_foundation.sql +299 -0
  135. package/drizzle/0219_organization_tenancy_managed_human_provisioning.sql +317 -0
  136. package/drizzle/0219_site_auth_maintenance_sessions.sql +234 -0
  137. package/drizzle/0220_memory_slack_append_only_cascade.sql +38 -0
  138. package/drizzle/0220_session_channels.sql +54 -0
  139. package/drizzle/0221_sessions_channel_index.sql +5 -0
  140. package/drizzle/0222_session_visibility_authority_epochs.sql +158 -0
  141. package/drizzle/0222_sessions_channel_fk.sql +89 -0
  142. package/drizzle/0223_pending_tool_event_output.sql +55 -0
  143. package/drizzle/0223_sessions_channel_fk_validate.sql +118 -0
  144. package/drizzle/0224_slack_post_outcome_reconciliation.sql +123 -0
  145. package/drizzle/0225_session_visibility_fork_activation.sql +1363 -0
  146. package/drizzle/0226_personal_codex_authority_foundation.sql +365 -0
  147. package/drizzle/0227_slack_native_actions.sql +145 -0
  148. package/drizzle/0228_interaction_controller_data_plane.sql +14 -0
  149. package/drizzle/0228_slack_task_policy.sql +400 -0
  150. package/drizzle/0229_slack_inbox_file_fact.sql +10 -0
  151. package/drizzle/0230_user_scoped_variable_sets_rigs.sql +84 -0
  152. package/drizzle/0231_integration_definition_identity_cutover.sql +271 -0
  153. package/drizzle/0232_integration_facet_authority_cutover.sql +610 -0
  154. package/drizzle/0233_skill_and_integration_authority_cutover.sql +1162 -0
  155. package/drizzle/0234_xai_subscription_authority.sql +1139 -0
  156. package/drizzle/0235_canonical_human_login_bindings.sql +920 -0
  157. package/drizzle/0236_browser_identity_lifecycle.sql +39 -0
  158. package/drizzle/0236_session_visibility_slack_policy.sql +72 -0
  159. package/drizzle/0237_interaction_transition_reaper.sql +263 -0
  160. package/drizzle/0238_goal_persistence_policy.sql +471 -0
  161. package/drizzle/0238_supergrok_realtime_model.sql +29 -0
  162. package/drizzle/0239_supergrok_video_funding.sql +50 -0
  163. package/drizzle/0239_task_tree_notes.sql +990 -0
  164. package/package.json +26 -5
  165. package/src/attached-browser-devices.ts +371 -0
  166. package/src/attempt-tool-catalogs.ts +131 -0
  167. package/src/browser-auth.ts +4373 -0
  168. package/src/browser-downloads.ts +517 -0
  169. package/src/browser-identities.ts +1385 -0
  170. package/src/browser-sessions.ts +2294 -0
  171. package/src/browser-state-artifacts.ts +449 -0
  172. package/src/canonical-human-identities.ts +317 -0
  173. package/src/capability-components.ts +166 -0
  174. package/src/capability-integrations.ts +1571 -0
  175. package/src/codemode-operations.ts +674 -0
  176. package/src/company-profile-schema.ts +143 -0
  177. package/src/company-profile.ts +968 -0
  178. package/src/computer-sessions.ts +1130 -0
  179. package/src/connection-token-resolver.ts +270 -25
  180. package/src/database.ts +468 -24
  181. package/src/editable-artifact-durable-export.ts +1201 -0
  182. package/src/editable-artifact-materialization.ts +893 -0
  183. package/src/editable-artifacts-schema.ts +879 -0
  184. package/src/editable-artifacts.ts +5404 -0
  185. package/src/generated-images.ts +740 -0
  186. package/src/index.ts +9963 -1465
  187. package/src/insights.ts +251 -23
  188. package/src/integration-bindings.ts +455 -0
  189. package/src/integration-facets.ts +862 -0
  190. package/src/interaction-revisions.ts +70 -0
  191. package/src/interaction-schema.ts +1606 -0
  192. package/src/knowledge-source-sync-schema.ts +192 -0
  193. package/src/knowledge-source-sync.ts +1922 -0
  194. package/src/memory-slack-delivery.ts +801 -0
  195. package/src/pack-components.ts +954 -0
  196. package/src/pack-installations.ts +886 -0
  197. package/src/persistence-errors.ts +4 -7
  198. package/src/plugin-packages.ts +1186 -0
  199. package/src/provision-roles.ts +534 -1
  200. package/src/runtime-posture-cli.ts +9 -0
  201. package/src/runtime-posture.ts +721 -5
  202. package/src/schema.ts +6270 -3159
  203. package/src/scoped-knowledge-schema.ts +1 -1
  204. package/src/scoped-knowledge.ts +655 -3
  205. package/src/session-control.ts +130 -42
  206. package/src/session-queue-commands.ts +265 -15
  207. package/src/session-realtime-context.ts +2 -2
  208. package/src/session-realtime-ledger.ts +3 -3
  209. package/src/session-realtime.ts +7 -7
  210. package/src/session-tenancy.ts +188 -0
  211. package/src/session-tool-call-settlement.ts +18 -3
  212. package/src/slack-task-policy-schema.ts +130 -0
  213. package/src/slack-task-policy.ts +341 -0
  214. package/src/slack-user-link-access.ts +702 -0
  215. package/src/task-notes-schema.ts +135 -0
  216. package/src/task-notes.ts +178 -0
  217. package/src/video-generation.ts +1530 -0
  218. package/src/workspace-artifacts.ts +1 -1
  219. package/src/workspace-learning-policy-schema.ts +139 -0
  220. package/src/workspace-learning-policy.ts +595 -0
  221. package/src/xai-subscription.ts +1887 -0
  222. package/dist/chunk-P6CUHXQZ.js +0 -7248
  223. package/dist/chunk-P6CUHXQZ.js.map +0 -1
  224. package/dist/chunk-VHBFHMPC.js +0 -1219
  225. package/dist/chunk-VHBFHMPC.js.map +0 -1
@@ -0,0 +1,118 @@
1
+ -- deployment-mode: rolling
2
+ -- Validate only the staged NOT VALID constraint. PostgreSQL performs this scan
3
+ -- with SHARE UPDATE EXCLUSIVE rather than retaining the column-addition
4
+ -- transaction's ACCESS EXCLUSIVE lock across the populated sessions table.
5
+ SET LOCAL lock_timeout = '5s';
6
+ SET LOCAL statement_timeout = '10min';
7
+
8
+ DO $migration$
9
+ DECLARE
10
+ same_name_count integer;
11
+ exact_count integer;
12
+ validated_exact_count integer;
13
+ constraint_name text;
14
+ constraint_validated boolean;
15
+ BEGIN
16
+ SELECT count(*)::integer
17
+ INTO same_name_count
18
+ FROM pg_catalog.pg_constraint AS constraint_row
19
+ WHERE constraint_row.conrelid = 'sessions'::regclass
20
+ AND constraint_row.conname IN ('sessions_channel_id_fk', 'sessions_channel_id_fkey');
21
+
22
+ SELECT count(*)::integer
23
+ INTO exact_count
24
+ FROM pg_catalog.pg_constraint AS constraint_row
25
+ JOIN pg_catalog.pg_attribute AS local_column
26
+ ON local_column.attrelid = constraint_row.conrelid
27
+ AND local_column.attnum = constraint_row.conkey[1]
28
+ JOIN pg_catalog.pg_attribute AS referenced_column
29
+ ON referenced_column.attrelid = constraint_row.confrelid
30
+ AND referenced_column.attnum = constraint_row.confkey[1]
31
+ WHERE constraint_row.conrelid = 'sessions'::regclass
32
+ AND constraint_row.confrelid = 'channels'::regclass
33
+ AND constraint_row.contype = 'f'
34
+ AND constraint_row.conname IN ('sessions_channel_id_fk', 'sessions_channel_id_fkey')
35
+ AND cardinality(constraint_row.conkey) = 1
36
+ AND cardinality(constraint_row.confkey) = 1
37
+ AND local_column.attname = 'channel_id'
38
+ AND referenced_column.attname = 'id'
39
+ AND constraint_row.confdeltype = 'n'
40
+ AND constraint_row.confupdtype = 'a'
41
+ AND constraint_row.confmatchtype = 's'
42
+ AND NOT constraint_row.condeferrable
43
+ AND NOT constraint_row.condeferred;
44
+
45
+ IF same_name_count <> exact_count OR exact_count <> 1 THEN
46
+ RAISE EXCEPTION
47
+ 'expected exactly one compatible sessions channel foreign key, found % compatible among % named constraints',
48
+ exact_count,
49
+ same_name_count;
50
+ END IF;
51
+
52
+ SELECT constraint_row.conname, constraint_row.convalidated
53
+ INTO constraint_name, constraint_validated
54
+ FROM pg_catalog.pg_constraint AS constraint_row
55
+ JOIN pg_catalog.pg_attribute AS local_column
56
+ ON local_column.attrelid = constraint_row.conrelid
57
+ AND local_column.attnum = constraint_row.conkey[1]
58
+ JOIN pg_catalog.pg_attribute AS referenced_column
59
+ ON referenced_column.attrelid = constraint_row.confrelid
60
+ AND referenced_column.attnum = constraint_row.confkey[1]
61
+ WHERE constraint_row.conrelid = 'sessions'::regclass
62
+ AND constraint_row.confrelid = 'channels'::regclass
63
+ AND constraint_row.contype = 'f'
64
+ AND constraint_row.conname IN ('sessions_channel_id_fk', 'sessions_channel_id_fkey')
65
+ AND cardinality(constraint_row.conkey) = 1
66
+ AND cardinality(constraint_row.confkey) = 1
67
+ AND local_column.attname = 'channel_id'
68
+ AND referenced_column.attname = 'id'
69
+ AND constraint_row.confdeltype = 'n'
70
+ AND constraint_row.confupdtype = 'a'
71
+ AND constraint_row.confmatchtype = 's'
72
+ AND NOT constraint_row.condeferrable
73
+ AND NOT constraint_row.condeferred;
74
+
75
+ IF NOT constraint_validated THEN
76
+ EXECUTE format(
77
+ 'ALTER TABLE "sessions" VALIDATE CONSTRAINT %I',
78
+ constraint_name
79
+ );
80
+ END IF;
81
+
82
+ SELECT
83
+ count(*)::integer,
84
+ count(*) FILTER (WHERE constraint_row.convalidated)::integer
85
+ INTO exact_count, validated_exact_count
86
+ FROM pg_catalog.pg_constraint AS constraint_row
87
+ JOIN pg_catalog.pg_attribute AS local_column
88
+ ON local_column.attrelid = constraint_row.conrelid
89
+ AND local_column.attnum = constraint_row.conkey[1]
90
+ JOIN pg_catalog.pg_attribute AS referenced_column
91
+ ON referenced_column.attrelid = constraint_row.confrelid
92
+ AND referenced_column.attnum = constraint_row.confkey[1]
93
+ WHERE constraint_row.conrelid = 'sessions'::regclass
94
+ AND constraint_row.confrelid = 'channels'::regclass
95
+ AND constraint_row.contype = 'f'
96
+ AND constraint_row.conname IN ('sessions_channel_id_fk', 'sessions_channel_id_fkey')
97
+ AND cardinality(constraint_row.conkey) = 1
98
+ AND cardinality(constraint_row.confkey) = 1
99
+ AND local_column.attname = 'channel_id'
100
+ AND referenced_column.attname = 'id'
101
+ AND constraint_row.confdeltype = 'n'
102
+ AND constraint_row.confupdtype = 'a'
103
+ AND constraint_row.confmatchtype = 's'
104
+ AND NOT constraint_row.condeferrable
105
+ AND NOT constraint_row.condeferred;
106
+
107
+ SELECT count(*)::integer
108
+ INTO same_name_count
109
+ FROM pg_catalog.pg_constraint AS constraint_row
110
+ WHERE constraint_row.conrelid = 'sessions'::regclass
111
+ AND constraint_row.conname IN ('sessions_channel_id_fk', 'sessions_channel_id_fkey');
112
+
113
+ IF same_name_count <> 1 OR exact_count <> 1 OR validated_exact_count <> 1 THEN
114
+ RAISE EXCEPTION
115
+ 'sessions channel foreign key validation did not produce exactly one validated exact constraint';
116
+ END IF;
117
+ END
118
+ $migration$;
@@ -0,0 +1,123 @@
1
+ -- deployment-mode: rolling
2
+ -- Slack does not guarantee that chat.postMessage retries are deduplicated by
3
+ -- client_msg_id. Split pre-provider admission from unknown provider outcomes,
4
+ -- and fence rolling old writers from reclaiming an unknown outcome for resend.
5
+
6
+ ALTER TABLE "slack_bot_post_operations"
7
+ ADD COLUMN IF NOT EXISTS "claim_mode" text;
8
+
9
+ CREATE OR REPLACE FUNCTION opengeni_private.fence_slack_bot_post_claim_mode()
10
+ RETURNS trigger
11
+ LANGUAGE plpgsql
12
+ AS $function$
13
+ DECLARE
14
+ acquires_claim boolean;
15
+ BEGIN
16
+ IF NEW."claim_holder_id" IS NULL THEN
17
+ NEW."claim_mode" := NULL;
18
+ RETURN NEW;
19
+ END IF;
20
+
21
+ IF TG_OP = 'INSERT' THEN
22
+ -- Rolling old writers insert directly at provider_started. They remain
23
+ -- compatible for their first attempt, but any abandoned attempt is fenced
24
+ -- by the UPDATE branch below.
25
+ IF NEW."claim_mode" IS NULL AND NEW."status" IN ('pending', 'provider_started') THEN
26
+ NEW."claim_mode" := 'send';
27
+ END IF;
28
+ RETURN NEW;
29
+ END IF;
30
+
31
+ acquires_claim :=
32
+ OLD."claim_holder_id" IS NULL
33
+ OR OLD."claim_holder_id" IS DISTINCT FROM NEW."claim_holder_id"
34
+ OR OLD."claim_expires_at" IS NULL
35
+ OR OLD."claim_expires_at" <= statement_timestamp();
36
+
37
+ IF acquires_claim AND OLD."status" IN ('provider_started', 'outcome_unknown') THEN
38
+ IF NEW."status" <> 'outcome_unknown' OR NEW."claim_mode" <> 'reconcile' THEN
39
+ RAISE EXCEPTION
40
+ 'Slack post outcome requires reconciliation before another provider mutation'
41
+ USING ERRCODE = '23514';
42
+ END IF;
43
+ ELSIF acquires_claim AND OLD."status" = 'pending' AND NEW."claim_mode" IS NULL THEN
44
+ -- A rolling old writer may safely claim a request that never crossed the
45
+ -- provider-admission boundary.
46
+ NEW."claim_mode" := 'send';
47
+ END IF;
48
+
49
+ RETURN NEW;
50
+ END;
51
+ $function$;
52
+
53
+ REVOKE ALL ON FUNCTION opengeni_private.fence_slack_bot_post_claim_mode() FROM PUBLIC;
54
+
55
+ DROP TRIGGER IF EXISTS slack_bot_post_operations_claim_mode_fence
56
+ ON "slack_bot_post_operations";
57
+ CREATE TRIGGER slack_bot_post_operations_claim_mode_fence
58
+ BEFORE INSERT OR UPDATE ON "slack_bot_post_operations"
59
+ FOR EACH ROW
60
+ EXECUTE FUNCTION opengeni_private.fence_slack_bot_post_claim_mode();
61
+
62
+ UPDATE "slack_bot_post_operations"
63
+ SET "claim_mode" = 'send'
64
+ WHERE "claim_holder_id" IS NOT NULL
65
+ AND "claim_mode" IS NULL
66
+ AND "status" = 'provider_started';
67
+
68
+ ALTER TABLE "slack_bot_post_operations"
69
+ DROP CONSTRAINT IF EXISTS "slack_bot_post_operations_status_check",
70
+ DROP CONSTRAINT IF EXISTS "slack_bot_post_operations_identity_check",
71
+ DROP CONSTRAINT IF EXISTS "slack_bot_post_operations_completion_check";
72
+
73
+ ALTER TABLE "slack_bot_post_operations"
74
+ ADD CONSTRAINT "slack_bot_post_operations_status_check"
75
+ CHECK ("status" IN ('pending', 'provider_started', 'outcome_unknown', 'completed'))
76
+ NOT VALID,
77
+ ADD CONSTRAINT "slack_bot_post_operations_identity_check"
78
+ CHECK (
79
+ "client_message_id" = "operation_id"
80
+ AND length("target_id") BETWEEN 1 AND 64
81
+ AND "request_digest" ~ '^[0-9a-f]{64}$'
82
+ AND "attempt_count" > 0
83
+ AND (
84
+ (
85
+ "claim_holder_id" IS NULL
86
+ AND "claim_expires_at" IS NULL
87
+ AND "claim_mode" IS NULL
88
+ )
89
+ OR (
90
+ "claim_holder_id" IS NOT NULL
91
+ AND "claim_expires_at" IS NOT NULL
92
+ AND (
93
+ ("claim_mode" = 'send' AND "status" IN ('pending', 'provider_started'))
94
+ OR ("claim_mode" = 'reconcile' AND "status" = 'outcome_unknown')
95
+ )
96
+ )
97
+ )
98
+ ) NOT VALID,
99
+ ADD CONSTRAINT "slack_bot_post_operations_completion_check"
100
+ CHECK (
101
+ (
102
+ "status" <> 'completed'
103
+ AND "slack_channel_id" IS NULL
104
+ AND "slack_message_timestamp" IS NULL
105
+ AND "completed_at" IS NULL
106
+ )
107
+ OR (
108
+ "status" = 'completed'
109
+ AND "claim_holder_id" IS NULL
110
+ AND "claim_expires_at" IS NULL
111
+ AND "claim_mode" IS NULL
112
+ AND "slack_channel_id" IS NOT NULL
113
+ AND "slack_message_timestamp" IS NOT NULL
114
+ AND "completed_at" IS NOT NULL
115
+ )
116
+ ) NOT VALID;
117
+
118
+ ALTER TABLE "slack_bot_post_operations"
119
+ VALIDATE CONSTRAINT "slack_bot_post_operations_status_check";
120
+ ALTER TABLE "slack_bot_post_operations"
121
+ VALIDATE CONSTRAINT "slack_bot_post_operations_identity_check";
122
+ ALTER TABLE "slack_bot_post_operations"
123
+ VALIDATE CONSTRAINT "slack_bot_post_operations_completion_check";