@opengeni/db 0.28.9 → 0.31.1
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/attached-browser-devices.d.ts +42 -0
- package/dist/attempt-tool-catalogs.d.ts +16 -0
- package/dist/browser-auth.d.ts +91 -0
- package/dist/browser-identities.d.ts +128 -0
- package/dist/browser-sessions.d.ts +272 -0
- package/dist/browser-state-artifacts.d.ts +17 -0
- package/dist/capability-components.d.ts +37 -0
- package/dist/capability-integrations.d.ts +192 -0
- package/dist/chunk-F5FT7BEZ.js +3535 -0
- package/dist/chunk-F5FT7BEZ.js.map +1 -0
- package/dist/chunk-ISI2TIUG.js +639 -0
- package/dist/chunk-ISI2TIUG.js.map +1 -0
- package/dist/chunk-MWDVXQOL.js +11639 -0
- package/dist/chunk-MWDVXQOL.js.map +1 -0
- package/dist/chunk-NBE6CHRI.js +955 -0
- package/dist/chunk-NBE6CHRI.js.map +1 -0
- package/dist/{chunk-VHBFHMPC.js → chunk-YHZXQ7HP.js} +754 -11
- package/dist/chunk-YHZXQ7HP.js.map +1 -0
- package/dist/codemode-operations.d.ts +117 -0
- package/dist/codex-token-resolver.d.ts +2 -2
- package/dist/company-profile-schema.d.ts +798 -0
- package/dist/company-profile.d.ts +268 -0
- package/dist/computer-sessions.d.ts +109 -0
- package/dist/connection-token-resolver.d.ts +9 -4
- package/dist/database.d.ts +52 -3
- package/dist/editable-artifact-durable-export.d.ts +153 -0
- package/dist/editable-artifact-durable-export.js +788 -0
- package/dist/editable-artifact-durable-export.js.map +1 -0
- package/dist/editable-artifact-materialization.d.ts +123 -0
- package/dist/editable-artifacts-schema.d.ts +4152 -0
- package/dist/editable-artifacts.d.ts +610 -0
- package/dist/editable-artifacts.js +26 -0
- package/dist/editable-artifacts.js.map +1 -0
- package/dist/generated-images.d.ts +139 -0
- package/dist/index.d.ts +698 -111
- package/dist/index.js +27573 -10322
- package/dist/index.js.map +1 -1
- package/dist/insights.d.ts +51 -4
- package/dist/integration-bindings.d.ts +70 -0
- package/dist/integration-features.d.ts +99 -0
- package/dist/interaction-revisions.d.ts +3 -0
- package/dist/interaction-schema.d.ts +5372 -0
- package/dist/knowledge-source-sync-schema.d.ts +1679 -0
- package/dist/knowledge-source-sync.d.ts +274 -0
- package/dist/memory-governance.d.ts +2 -2
- package/dist/memory-slack-delivery.d.ts +101 -0
- package/dist/new-session-drafts.d.ts +2 -2
- package/dist/pack-components.d.ts +76 -0
- package/dist/pack-installations.d.ts +86 -0
- package/dist/persistence-errors.d.ts +3 -3
- package/dist/plugin-packages.d.ts +126 -0
- package/dist/preference-registry.d.ts +1 -1
- package/dist/provision-roles.d.ts +9 -1
- package/dist/provision-roles.js +1 -1
- package/dist/runtime-posture.d.ts +18 -6
- package/dist/schema.d.ts +18342 -9099
- package/dist/schema.js +165 -1
- package/dist/scoped-knowledge.d.ts +97 -1
- package/dist/session-control.d.ts +4 -4
- package/dist/session-queue-commands.d.ts +19 -11
- package/dist/session-realtime-context.d.ts +2 -2
- package/dist/session-realtime-ledger.d.ts +4 -4
- package/dist/session-realtime-mirror.d.ts +2 -2
- package/dist/session-realtime-state.d.ts +1 -1
- package/dist/session-realtime-terminal.d.ts +1 -1
- package/dist/session-realtime.d.ts +7 -7
- package/dist/session-tool-call-settlement.d.ts +1 -1
- package/dist/slack-user-link-access.d.ts +54 -0
- package/dist/transcription-recordings.d.ts +2 -2
- package/dist/turn-initiator.d.ts +2 -2
- package/dist/video-generation.d.ts +216 -0
- package/dist/video-generation.js +66 -0
- package/dist/video-generation.js.map +1 -0
- package/dist/workspace-artifacts.d.ts +1 -1
- package/dist/workspace-instruction-policies.d.ts +1 -1
- package/dist/workspace-learning-policy-schema.d.ts +932 -0
- package/dist/workspace-learning-policy.d.ts +161 -0
- package/drizzle/0183_model_call_provider_cost_estimates.sql +39 -0
- package/drizzle/0184_sandbox_drain_teardown_fence.sql +682 -0
- package/drizzle/0185_temporal_schedule_cleanup_outbox.sql +168 -0
- package/drizzle/0186_sandbox_capture_provider_contract.sql +400 -0
- package/drizzle/0187_generated_image_artifacts.sql +173 -0
- package/drizzle/0188_image_generation_retention_failure.sql +25 -0
- package/drizzle/0189_retained_session_image_formats.sql +13 -0
- package/drizzle/0190_timeline_annotations.sql +31 -0
- package/drizzle/0191_editable_artifact_engine.sql +3853 -0
- package/drizzle/0192_editable_artifact_live_tickets.sql +338 -0
- package/drizzle/0193_editable_artifact_authorization.sql +190 -0
- package/drizzle/0194_editable_artifact_durable_exports.sql +160 -0
- package/drizzle/0195_editable_artifact_import_authorization.sql +203 -0
- package/drizzle/0196_rig_provider_images.sql +152 -0
- package/drizzle/0197_knowledge_source_sync_schedules.sql +523 -0
- package/drizzle/0198_memory_slack_publication_delivery.sql +393 -0
- package/drizzle/0199_workspace_learning_policy.sql +980 -0
- package/drizzle/0201_company_profile_authority.sql +849 -0
- package/drizzle/0202_document_index_checkpoints.sql +85 -0
- package/drizzle/0203_durable_video_generation.sql +353 -0
- package/drizzle/0204_video_generation_funding.sql +44 -0
- package/drizzle/0205_attempt_tool_catalogs.sql +230 -0
- package/drizzle/0206_browser_sessions.sql +646 -0
- package/drizzle/0207_browser_identities.sql +379 -0
- package/drizzle/0208_attached_browser_devices.sql +165 -0
- package/drizzle/0209_computer_sessions.sql +575 -0
- package/drizzle/0210_browser_auth_network_interventions.sql +441 -0
- package/drizzle/0211_editable_artifact_session_links.sql +58 -0
- package/drizzle/0212_slack_installation_bindings.sql +348 -0
- package/drizzle/0213_slack_user_link_access_requests.sql +177 -0
- package/drizzle/0214_session_activity_commit_gate.sql +262 -0
- package/drizzle/0215_capabilities_platform.sql +980 -0
- package/drizzle/0216_pack_component_ownership.sql +235 -0
- package/drizzle/0217_capability_definition_delete_authority.sql +32 -0
- package/package.json +18 -5
- package/src/attached-browser-devices.ts +371 -0
- package/src/attempt-tool-catalogs.ts +131 -0
- package/src/browser-auth.ts +1896 -0
- package/src/browser-identities.ts +1168 -0
- package/src/browser-sessions.ts +2005 -0
- package/src/browser-state-artifacts.ts +59 -0
- package/src/capability-components.ts +166 -0
- package/src/capability-integrations.ts +1663 -0
- package/src/codemode-operations.ts +674 -0
- package/src/company-profile-schema.ts +143 -0
- package/src/company-profile.ts +968 -0
- package/src/computer-sessions.ts +1130 -0
- package/src/connection-token-resolver.ts +270 -25
- package/src/database.ts +427 -23
- package/src/editable-artifact-durable-export.ts +1201 -0
- package/src/editable-artifact-materialization.ts +893 -0
- package/src/editable-artifacts-schema.ts +879 -0
- package/src/editable-artifacts.ts +5404 -0
- package/src/generated-images.ts +740 -0
- package/src/index.ts +5917 -1182
- package/src/insights.ts +160 -13
- package/src/integration-bindings.ts +455 -0
- package/src/integration-features.ts +859 -0
- package/src/interaction-revisions.ts +40 -0
- package/src/interaction-schema.ts +1303 -0
- package/src/knowledge-source-sync-schema.ts +192 -0
- package/src/knowledge-source-sync.ts +1922 -0
- package/src/memory-slack-delivery.ts +801 -0
- package/src/pack-components.ts +954 -0
- package/src/pack-installations.ts +929 -0
- package/src/persistence-errors.ts +4 -7
- package/src/plugin-packages.ts +1186 -0
- package/src/provision-roles.ts +302 -1
- package/src/runtime-posture-cli.ts +9 -0
- package/src/runtime-posture.ts +508 -5
- package/src/schema.ts +5117 -3119
- package/src/scoped-knowledge-schema.ts +1 -1
- package/src/scoped-knowledge.ts +655 -3
- package/src/session-control.ts +8 -5
- package/src/session-queue-commands.ts +187 -14
- package/src/session-realtime-context.ts +2 -2
- package/src/session-realtime-ledger.ts +3 -3
- package/src/session-realtime.ts +7 -7
- package/src/session-tool-call-settlement.ts +9 -0
- package/src/slack-user-link-access.ts +702 -0
- package/src/video-generation.ts +1452 -0
- package/src/workspace-learning-policy-schema.ts +139 -0
- package/src/workspace-learning-policy.ts +595 -0
- package/dist/chunk-P6CUHXQZ.js +0 -7248
- package/dist/chunk-P6CUHXQZ.js.map +0 -1
- package/dist/chunk-VHBFHMPC.js.map +0 -1
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
-- deployment-mode: rolling
|
|
2
|
+
SET lock_timeout = '5s';
|
|
3
|
+
SET statement_timeout = '30s';
|
|
4
|
+
|
|
5
|
+
CREATE TABLE "memory_slack_publication_configurations" (
|
|
6
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
7
|
+
"account_id" uuid NOT NULL REFERENCES "managed_accounts"("id") ON DELETE CASCADE,
|
|
8
|
+
"workspace_id" uuid NOT NULL REFERENCES "workspaces"("id") ON DELETE CASCADE,
|
|
9
|
+
"revision" integer NOT NULL,
|
|
10
|
+
"enabled" boolean NOT NULL,
|
|
11
|
+
"connection_id" uuid,
|
|
12
|
+
"slack_team_id" text,
|
|
13
|
+
"slack_channel_id" text,
|
|
14
|
+
"slack_channel_name" text,
|
|
15
|
+
"auto_importances" text[] NOT NULL DEFAULT ARRAY['major']::text[],
|
|
16
|
+
"review_importances" text[] NOT NULL DEFAULT ARRAY['normal']::text[],
|
|
17
|
+
"created_by_subject_id" text NOT NULL,
|
|
18
|
+
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
19
|
+
CONSTRAINT "memory_slack_publication_configurations_workspace_revision_uq"
|
|
20
|
+
UNIQUE ("workspace_id", "revision"),
|
|
21
|
+
CONSTRAINT "memory_slack_publication_configurations_revision_check"
|
|
22
|
+
CHECK ("revision" > 0),
|
|
23
|
+
CONSTRAINT "memory_slack_publication_configurations_destination_check"
|
|
24
|
+
CHECK (
|
|
25
|
+
NOT "enabled"
|
|
26
|
+
OR (
|
|
27
|
+
"connection_id" IS NOT NULL
|
|
28
|
+
AND octet_length("slack_team_id") BETWEEN 1 AND 64
|
|
29
|
+
AND octet_length("slack_channel_id") BETWEEN 1 AND 64
|
|
30
|
+
)
|
|
31
|
+
),
|
|
32
|
+
CONSTRAINT "memory_slack_publication_configurations_channel_name_check"
|
|
33
|
+
CHECK (
|
|
34
|
+
"slack_channel_name" IS NULL
|
|
35
|
+
OR octet_length("slack_channel_name") BETWEEN 1 AND 256
|
|
36
|
+
),
|
|
37
|
+
CONSTRAINT "memory_slack_publication_configurations_policy_check"
|
|
38
|
+
CHECK (
|
|
39
|
+
"auto_importances" <@ ARRAY['major', 'normal', 'minor']::text[]
|
|
40
|
+
AND "review_importances" <@ ARRAY['major', 'normal', 'minor']::text[]
|
|
41
|
+
AND cardinality("auto_importances") <= 3
|
|
42
|
+
AND cardinality("review_importances") <= 3
|
|
43
|
+
AND NOT ("auto_importances" && "review_importances")
|
|
44
|
+
),
|
|
45
|
+
CONSTRAINT "memory_slack_publication_configurations_actor_check"
|
|
46
|
+
CHECK (octet_length("created_by_subject_id") BETWEEN 1 AND 1024)
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
CREATE INDEX "memory_slack_publication_configurations_workspace_created_idx"
|
|
50
|
+
ON "memory_slack_publication_configurations" ("workspace_id", "revision" DESC);
|
|
51
|
+
|
|
52
|
+
CREATE TABLE "memory_slack_publications" (
|
|
53
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
54
|
+
"account_id" uuid NOT NULL REFERENCES "managed_accounts"("id") ON DELETE CASCADE,
|
|
55
|
+
"workspace_id" uuid NOT NULL REFERENCES "workspaces"("id") ON DELETE CASCADE,
|
|
56
|
+
"configuration_id" uuid NOT NULL REFERENCES "memory_slack_publication_configurations"("id") ON DELETE RESTRICT,
|
|
57
|
+
"configuration_revision" integer NOT NULL,
|
|
58
|
+
"connection_id" uuid NOT NULL,
|
|
59
|
+
"slack_team_id" text NOT NULL,
|
|
60
|
+
"slack_channel_id" text NOT NULL,
|
|
61
|
+
"source_type" text NOT NULL,
|
|
62
|
+
"source_id" text NOT NULL,
|
|
63
|
+
"source_version" text,
|
|
64
|
+
"source_idempotency_key" text NOT NULL,
|
|
65
|
+
"projection" jsonb NOT NULL,
|
|
66
|
+
"projection_sha256" text NOT NULL,
|
|
67
|
+
"importance" text NOT NULL,
|
|
68
|
+
"delivery_mode" text NOT NULL,
|
|
69
|
+
"state" text NOT NULL,
|
|
70
|
+
"operation_id" uuid NOT NULL,
|
|
71
|
+
"initiator_kind" text NOT NULL,
|
|
72
|
+
"initiator_subject_id" text NOT NULL,
|
|
73
|
+
"initiating_human_subject_id" text,
|
|
74
|
+
"session_id" uuid,
|
|
75
|
+
"turn_id" uuid,
|
|
76
|
+
"attempt_id" uuid,
|
|
77
|
+
"claim_holder_id" uuid,
|
|
78
|
+
"claim_expires_at" timestamptz,
|
|
79
|
+
"attempt_count" integer NOT NULL DEFAULT 0,
|
|
80
|
+
"retry_at" timestamptz,
|
|
81
|
+
"last_error_code" text,
|
|
82
|
+
"slack_message_timestamp" text,
|
|
83
|
+
"delivered_at" timestamptz,
|
|
84
|
+
"terminal_at" timestamptz,
|
|
85
|
+
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
86
|
+
"updated_at" timestamptz NOT NULL DEFAULT now(),
|
|
87
|
+
CONSTRAINT "memory_slack_publications_source_uq"
|
|
88
|
+
UNIQUE ("workspace_id", "source_idempotency_key"),
|
|
89
|
+
CONSTRAINT "memory_slack_publications_operation_uq"
|
|
90
|
+
UNIQUE ("workspace_id", "operation_id"),
|
|
91
|
+
CONSTRAINT "memory_slack_publications_source_type_check"
|
|
92
|
+
CHECK ("source_type" IN ('workspace_memory', 'durable_learning')),
|
|
93
|
+
CONSTRAINT "memory_slack_publications_source_check"
|
|
94
|
+
CHECK (
|
|
95
|
+
octet_length("source_id") BETWEEN 1 AND 1024
|
|
96
|
+
AND ("source_version" IS NULL OR octet_length("source_version") BETWEEN 1 AND 512)
|
|
97
|
+
AND octet_length("source_idempotency_key") BETWEEN 1 AND 256
|
|
98
|
+
),
|
|
99
|
+
CONSTRAINT "memory_slack_publications_projection_check"
|
|
100
|
+
CHECK (
|
|
101
|
+
jsonb_typeof("projection") = 'object'
|
|
102
|
+
AND octet_length("projection"::text) BETWEEN 2 AND 8192
|
|
103
|
+
AND "projection_sha256" ~ '^[0-9a-f]{64}$'
|
|
104
|
+
),
|
|
105
|
+
CONSTRAINT "memory_slack_publications_distribution_check"
|
|
106
|
+
CHECK (
|
|
107
|
+
"importance" IN ('major', 'normal', 'minor')
|
|
108
|
+
AND "delivery_mode" IN ('auto', 'review')
|
|
109
|
+
),
|
|
110
|
+
CONSTRAINT "memory_slack_publications_state_check"
|
|
111
|
+
CHECK (
|
|
112
|
+
"state" IN (
|
|
113
|
+
'review_pending', 'queued', 'delivering', 'retry_wait',
|
|
114
|
+
'delivered', 'rejected', 'failed', 'cancelled'
|
|
115
|
+
)
|
|
116
|
+
),
|
|
117
|
+
CONSTRAINT "memory_slack_publications_destination_check"
|
|
118
|
+
CHECK (
|
|
119
|
+
"configuration_revision" > 0
|
|
120
|
+
AND octet_length("slack_team_id") BETWEEN 1 AND 64
|
|
121
|
+
AND octet_length("slack_channel_id") BETWEEN 1 AND 64
|
|
122
|
+
),
|
|
123
|
+
CONSTRAINT "memory_slack_publications_initiator_check"
|
|
124
|
+
CHECK (
|
|
125
|
+
"initiator_kind" IN ('human', 'agent', 'service')
|
|
126
|
+
AND octet_length("initiator_subject_id") BETWEEN 1 AND 1024
|
|
127
|
+
AND (
|
|
128
|
+
"initiating_human_subject_id" IS NULL
|
|
129
|
+
OR octet_length("initiating_human_subject_id") BETWEEN 1 AND 1024
|
|
130
|
+
)
|
|
131
|
+
),
|
|
132
|
+
CONSTRAINT "memory_slack_publications_claim_check"
|
|
133
|
+
CHECK (
|
|
134
|
+
("state" = 'delivering' AND "claim_holder_id" IS NOT NULL AND "claim_expires_at" IS NOT NULL AND "retry_at" IS NULL)
|
|
135
|
+
OR ("state" = 'retry_wait' AND "claim_holder_id" IS NULL AND "claim_expires_at" IS NULL AND "retry_at" IS NOT NULL)
|
|
136
|
+
OR ("state" NOT IN ('delivering', 'retry_wait') AND "claim_holder_id" IS NULL AND "claim_expires_at" IS NULL AND "retry_at" IS NULL)
|
|
137
|
+
),
|
|
138
|
+
CONSTRAINT "memory_slack_publications_attempt_check"
|
|
139
|
+
CHECK ("attempt_count" >= 0),
|
|
140
|
+
CONSTRAINT "memory_slack_publications_error_check"
|
|
141
|
+
CHECK (
|
|
142
|
+
"last_error_code" IS NULL
|
|
143
|
+
OR octet_length("last_error_code") BETWEEN 1 AND 128
|
|
144
|
+
),
|
|
145
|
+
CONSTRAINT "memory_slack_publications_terminal_check"
|
|
146
|
+
CHECK (
|
|
147
|
+
(
|
|
148
|
+
"state" = 'delivered'
|
|
149
|
+
AND "claim_holder_id" IS NULL
|
|
150
|
+
AND "claim_expires_at" IS NULL
|
|
151
|
+
AND "retry_at" IS NULL
|
|
152
|
+
AND "slack_message_timestamp" IS NOT NULL
|
|
153
|
+
AND "delivered_at" IS NOT NULL
|
|
154
|
+
AND "terminal_at" IS NOT NULL
|
|
155
|
+
)
|
|
156
|
+
OR (
|
|
157
|
+
"state" IN ('rejected', 'failed', 'cancelled')
|
|
158
|
+
AND "claim_holder_id" IS NULL
|
|
159
|
+
AND "claim_expires_at" IS NULL
|
|
160
|
+
AND "retry_at" IS NULL
|
|
161
|
+
AND "terminal_at" IS NOT NULL
|
|
162
|
+
)
|
|
163
|
+
OR (
|
|
164
|
+
"state" NOT IN ('delivered', 'rejected', 'failed', 'cancelled')
|
|
165
|
+
AND "slack_message_timestamp" IS NULL
|
|
166
|
+
AND "delivered_at" IS NULL
|
|
167
|
+
AND "terminal_at" IS NULL
|
|
168
|
+
)
|
|
169
|
+
)
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
CREATE INDEX "memory_slack_publications_claim_idx"
|
|
173
|
+
ON "memory_slack_publications" ("state", "retry_at", "created_at", "id")
|
|
174
|
+
WHERE "state" IN ('queued', 'retry_wait', 'delivering');
|
|
175
|
+
|
|
176
|
+
CREATE INDEX "memory_slack_publications_workspace_history_idx"
|
|
177
|
+
ON "memory_slack_publications" ("workspace_id", "created_at" DESC, "id" DESC);
|
|
178
|
+
|
|
179
|
+
CREATE TABLE "memory_slack_publication_receipts" (
|
|
180
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
181
|
+
"account_id" uuid NOT NULL REFERENCES "managed_accounts"("id") ON DELETE CASCADE,
|
|
182
|
+
"workspace_id" uuid NOT NULL REFERENCES "workspaces"("id") ON DELETE CASCADE,
|
|
183
|
+
"publication_id" uuid NOT NULL REFERENCES "memory_slack_publications"("id") ON DELETE CASCADE,
|
|
184
|
+
"sequence" integer NOT NULL,
|
|
185
|
+
"kind" text NOT NULL,
|
|
186
|
+
"state" text NOT NULL,
|
|
187
|
+
"attempt_number" integer NOT NULL,
|
|
188
|
+
"actor_kind" text NOT NULL,
|
|
189
|
+
"actor_subject_id" text NOT NULL,
|
|
190
|
+
"operation_id" uuid NOT NULL,
|
|
191
|
+
"error_code" text,
|
|
192
|
+
"retry_at" timestamptz,
|
|
193
|
+
"slack_channel_id" text,
|
|
194
|
+
"slack_message_timestamp" text,
|
|
195
|
+
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
196
|
+
CONSTRAINT "memory_slack_publication_receipts_sequence_uq"
|
|
197
|
+
UNIQUE ("publication_id", "sequence"),
|
|
198
|
+
CONSTRAINT "memory_slack_publication_receipts_kind_check"
|
|
199
|
+
CHECK (
|
|
200
|
+
"kind" IN (
|
|
201
|
+
'enqueued', 'review_approved', 'review_rejected', 'delivery_claimed',
|
|
202
|
+
'retry_scheduled', 'delivered', 'failed', 'cancelled', 'manual_retry'
|
|
203
|
+
)
|
|
204
|
+
),
|
|
205
|
+
CONSTRAINT "memory_slack_publication_receipts_state_check"
|
|
206
|
+
CHECK (
|
|
207
|
+
"state" IN (
|
|
208
|
+
'review_pending', 'queued', 'delivering', 'retry_wait',
|
|
209
|
+
'delivered', 'rejected', 'failed', 'cancelled'
|
|
210
|
+
)
|
|
211
|
+
),
|
|
212
|
+
CONSTRAINT "memory_slack_publication_receipts_attempt_check"
|
|
213
|
+
CHECK ("sequence" > 0 AND "attempt_number" >= 0),
|
|
214
|
+
CONSTRAINT "memory_slack_publication_receipts_actor_check"
|
|
215
|
+
CHECK (
|
|
216
|
+
"actor_kind" IN ('human', 'agent', 'service')
|
|
217
|
+
AND octet_length("actor_subject_id") BETWEEN 1 AND 1024
|
|
218
|
+
),
|
|
219
|
+
CONSTRAINT "memory_slack_publication_receipts_error_check"
|
|
220
|
+
CHECK ("error_code" IS NULL OR octet_length("error_code") BETWEEN 1 AND 128),
|
|
221
|
+
CONSTRAINT "memory_slack_publication_receipts_provider_check"
|
|
222
|
+
CHECK (
|
|
223
|
+
("slack_channel_id" IS NULL) = ("slack_message_timestamp" IS NULL)
|
|
224
|
+
AND ("slack_channel_id" IS NULL OR octet_length("slack_channel_id") BETWEEN 1 AND 64)
|
|
225
|
+
AND (
|
|
226
|
+
"slack_message_timestamp" IS NULL
|
|
227
|
+
OR octet_length("slack_message_timestamp") BETWEEN 1 AND 64
|
|
228
|
+
)
|
|
229
|
+
)
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
CREATE INDEX "memory_slack_publication_receipts_workspace_history_idx"
|
|
233
|
+
ON "memory_slack_publication_receipts" ("workspace_id", "publication_id", "sequence");
|
|
234
|
+
|
|
235
|
+
DO $privileged_functions$
|
|
236
|
+
DECLARE data_schema text := current_schema();
|
|
237
|
+
BEGIN
|
|
238
|
+
EXECUTE format($ddl$
|
|
239
|
+
CREATE OR REPLACE FUNCTION opengeni_private.claim_memory_slack_publication(
|
|
240
|
+
p_holder uuid,
|
|
241
|
+
p_lease_ms integer
|
|
242
|
+
)
|
|
243
|
+
RETURNS SETOF %1$I.memory_slack_publications
|
|
244
|
+
LANGUAGE plpgsql
|
|
245
|
+
SECURITY DEFINER
|
|
246
|
+
SET search_path = pg_catalog
|
|
247
|
+
AS $function$
|
|
248
|
+
BEGIN
|
|
249
|
+
IF p_lease_ms < 1000 OR p_lease_ms > 300000 THEN
|
|
250
|
+
RAISE EXCEPTION 'invalid memory Slack publication claim lease';
|
|
251
|
+
END IF;
|
|
252
|
+
RETURN QUERY
|
|
253
|
+
WITH candidate AS (
|
|
254
|
+
SELECT P.id
|
|
255
|
+
FROM %1$I.memory_slack_publications P
|
|
256
|
+
WHERE (
|
|
257
|
+
P.state = 'queued'
|
|
258
|
+
) OR (
|
|
259
|
+
P.state = 'retry_wait'
|
|
260
|
+
AND P.retry_at <= now()
|
|
261
|
+
) OR (
|
|
262
|
+
P.state = 'delivering'
|
|
263
|
+
AND P.claim_expires_at <= now()
|
|
264
|
+
)
|
|
265
|
+
ORDER BY P.retry_at NULLS FIRST, P.created_at, P.id
|
|
266
|
+
FOR UPDATE SKIP LOCKED
|
|
267
|
+
LIMIT 1
|
|
268
|
+
), claimed AS (
|
|
269
|
+
UPDATE %1$I.memory_slack_publications P
|
|
270
|
+
SET state = 'delivering',
|
|
271
|
+
claim_holder_id = p_holder,
|
|
272
|
+
claim_expires_at = now() + make_interval(secs => p_lease_ms::double precision / 1000),
|
|
273
|
+
retry_at = NULL,
|
|
274
|
+
attempt_count = P.attempt_count + 1,
|
|
275
|
+
updated_at = now()
|
|
276
|
+
FROM candidate C
|
|
277
|
+
WHERE P.id = C.id
|
|
278
|
+
RETURNING P.*
|
|
279
|
+
), receipt AS (
|
|
280
|
+
INSERT INTO %1$I.memory_slack_publication_receipts (
|
|
281
|
+
account_id, workspace_id, publication_id, sequence, kind, state,
|
|
282
|
+
attempt_number, actor_kind, actor_subject_id, operation_id
|
|
283
|
+
)
|
|
284
|
+
SELECT
|
|
285
|
+
C.account_id, C.workspace_id, C.id,
|
|
286
|
+
COALESCE((
|
|
287
|
+
SELECT max(R.sequence)
|
|
288
|
+
FROM %1$I.memory_slack_publication_receipts R
|
|
289
|
+
WHERE R.publication_id = C.id
|
|
290
|
+
), 0) + 1,
|
|
291
|
+
'delivery_claimed', 'delivering', C.attempt_count,
|
|
292
|
+
'service', 'memory-slack-delivery', C.operation_id
|
|
293
|
+
FROM claimed C
|
|
294
|
+
RETURNING publication_id
|
|
295
|
+
)
|
|
296
|
+
SELECT C.*
|
|
297
|
+
FROM claimed C
|
|
298
|
+
JOIN receipt R ON R.publication_id = C.id;
|
|
299
|
+
END
|
|
300
|
+
$function$
|
|
301
|
+
$ddl$, data_schema);
|
|
302
|
+
END
|
|
303
|
+
$privileged_functions$;
|
|
304
|
+
|
|
305
|
+
REVOKE ALL ON FUNCTION opengeni_private.claim_memory_slack_publication(uuid, integer)
|
|
306
|
+
FROM PUBLIC;
|
|
307
|
+
|
|
308
|
+
DO $$
|
|
309
|
+
BEGIN
|
|
310
|
+
IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'opengeni_app') THEN
|
|
311
|
+
GRANT EXECUTE ON FUNCTION
|
|
312
|
+
opengeni_private.claim_memory_slack_publication(uuid, integer)
|
|
313
|
+
TO opengeni_app;
|
|
314
|
+
END IF;
|
|
315
|
+
END $$;
|
|
316
|
+
|
|
317
|
+
CREATE OR REPLACE FUNCTION opengeni_private.reject_memory_slack_immutable_mutation()
|
|
318
|
+
RETURNS trigger
|
|
319
|
+
LANGUAGE plpgsql
|
|
320
|
+
AS $function$
|
|
321
|
+
BEGIN
|
|
322
|
+
RAISE EXCEPTION '% is append-only', TG_TABLE_NAME;
|
|
323
|
+
END;
|
|
324
|
+
$function$;
|
|
325
|
+
|
|
326
|
+
REVOKE ALL ON FUNCTION opengeni_private.reject_memory_slack_immutable_mutation()
|
|
327
|
+
FROM PUBLIC;
|
|
328
|
+
|
|
329
|
+
CREATE TRIGGER memory_slack_publication_configurations_immutable
|
|
330
|
+
BEFORE UPDATE OR DELETE ON "memory_slack_publication_configurations"
|
|
331
|
+
FOR EACH ROW EXECUTE FUNCTION opengeni_private.reject_memory_slack_immutable_mutation();
|
|
332
|
+
|
|
333
|
+
CREATE TRIGGER memory_slack_publication_receipts_immutable
|
|
334
|
+
BEFORE UPDATE OR DELETE ON "memory_slack_publication_receipts"
|
|
335
|
+
FOR EACH ROW EXECUTE FUNCTION opengeni_private.reject_memory_slack_immutable_mutation();
|
|
336
|
+
|
|
337
|
+
CREATE OR REPLACE FUNCTION opengeni_private.guard_memory_slack_publication_identity()
|
|
338
|
+
RETURNS trigger
|
|
339
|
+
LANGUAGE plpgsql
|
|
340
|
+
AS $function$
|
|
341
|
+
BEGIN
|
|
342
|
+
IF ROW(
|
|
343
|
+
NEW."account_id", NEW."workspace_id", NEW."configuration_id",
|
|
344
|
+
NEW."configuration_revision", NEW."connection_id", NEW."slack_team_id",
|
|
345
|
+
NEW."slack_channel_id", NEW."source_type", NEW."source_id",
|
|
346
|
+
NEW."source_version", NEW."source_idempotency_key", NEW."projection",
|
|
347
|
+
NEW."projection_sha256", NEW."importance", NEW."delivery_mode",
|
|
348
|
+
NEW."operation_id", NEW."initiator_kind", NEW."initiator_subject_id",
|
|
349
|
+
NEW."initiating_human_subject_id", NEW."session_id", NEW."turn_id",
|
|
350
|
+
NEW."attempt_id", NEW."created_at"
|
|
351
|
+
) IS DISTINCT FROM ROW(
|
|
352
|
+
OLD."account_id", OLD."workspace_id", OLD."configuration_id",
|
|
353
|
+
OLD."configuration_revision", OLD."connection_id", OLD."slack_team_id",
|
|
354
|
+
OLD."slack_channel_id", OLD."source_type", OLD."source_id",
|
|
355
|
+
OLD."source_version", OLD."source_idempotency_key", OLD."projection",
|
|
356
|
+
OLD."projection_sha256", OLD."importance", OLD."delivery_mode",
|
|
357
|
+
OLD."operation_id", OLD."initiator_kind", OLD."initiator_subject_id",
|
|
358
|
+
OLD."initiating_human_subject_id", OLD."session_id", OLD."turn_id",
|
|
359
|
+
OLD."attempt_id", OLD."created_at"
|
|
360
|
+
) THEN
|
|
361
|
+
RAISE EXCEPTION 'memory Slack publication identity is immutable';
|
|
362
|
+
END IF;
|
|
363
|
+
RETURN NEW;
|
|
364
|
+
END;
|
|
365
|
+
$function$;
|
|
366
|
+
|
|
367
|
+
REVOKE ALL ON FUNCTION opengeni_private.guard_memory_slack_publication_identity()
|
|
368
|
+
FROM PUBLIC;
|
|
369
|
+
|
|
370
|
+
CREATE TRIGGER memory_slack_publications_identity_immutable
|
|
371
|
+
BEFORE UPDATE ON "memory_slack_publications"
|
|
372
|
+
FOR EACH ROW EXECUTE FUNCTION opengeni_private.guard_memory_slack_publication_identity();
|
|
373
|
+
|
|
374
|
+
ALTER TABLE "memory_slack_publication_configurations" ENABLE ROW LEVEL SECURITY;
|
|
375
|
+
ALTER TABLE "memory_slack_publication_configurations" FORCE ROW LEVEL SECURITY;
|
|
376
|
+
CREATE POLICY workspace_isolation ON "memory_slack_publication_configurations"
|
|
377
|
+
USING (opengeni_private.workspace_rls_visible("account_id", "workspace_id"))
|
|
378
|
+
WITH CHECK (opengeni_private.workspace_rls_visible("account_id", "workspace_id"));
|
|
379
|
+
|
|
380
|
+
ALTER TABLE "memory_slack_publications" ENABLE ROW LEVEL SECURITY;
|
|
381
|
+
ALTER TABLE "memory_slack_publications" FORCE ROW LEVEL SECURITY;
|
|
382
|
+
CREATE POLICY workspace_isolation ON "memory_slack_publications"
|
|
383
|
+
USING (opengeni_private.workspace_rls_visible("account_id", "workspace_id"))
|
|
384
|
+
WITH CHECK (opengeni_private.workspace_rls_visible("account_id", "workspace_id"));
|
|
385
|
+
|
|
386
|
+
ALTER TABLE "memory_slack_publication_receipts" ENABLE ROW LEVEL SECURITY;
|
|
387
|
+
ALTER TABLE "memory_slack_publication_receipts" FORCE ROW LEVEL SECURITY;
|
|
388
|
+
CREATE POLICY workspace_isolation ON "memory_slack_publication_receipts"
|
|
389
|
+
USING (opengeni_private.workspace_rls_visible("account_id", "workspace_id"))
|
|
390
|
+
WITH CHECK (opengeni_private.workspace_rls_visible("account_id", "workspace_id"));
|
|
391
|
+
|
|
392
|
+
RESET statement_timeout;
|
|
393
|
+
RESET lock_timeout;
|