@emseepea/server 0.24.0 → 0.24.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.
Files changed (51) hide show
  1. package/dist/events-cloud-tasks-transport.d.ts +34 -0
  2. package/dist/events-cloud-tasks-transport.d.ts.map +1 -0
  3. package/dist/events-cloud-tasks-transport.js +232 -0
  4. package/dist/events-cloud-tasks-transport.js.map +1 -0
  5. package/dist/events-google-sdk-lifetime.d.ts +7 -0
  6. package/dist/events-google-sdk-lifetime.d.ts.map +1 -0
  7. package/dist/events-google-sdk-lifetime.js +70 -0
  8. package/dist/events-google-sdk-lifetime.js.map +1 -0
  9. package/dist/events-postgres-delivery-migrations.d.ts +18 -0
  10. package/dist/events-postgres-delivery-migrations.d.ts.map +1 -0
  11. package/dist/events-postgres-delivery-migrations.js +146 -0
  12. package/dist/events-postgres-delivery-migrations.js.map +1 -0
  13. package/dist/events-postgres-delivery-owned.d.ts +16 -0
  14. package/dist/events-postgres-delivery-owned.d.ts.map +1 -0
  15. package/dist/events-postgres-delivery-owned.js +178 -0
  16. package/dist/events-postgres-delivery-owned.js.map +1 -0
  17. package/dist/events-postgres-delivery.d.ts +29 -0
  18. package/dist/events-postgres-delivery.d.ts.map +1 -0
  19. package/dist/events-postgres-delivery.js +299 -0
  20. package/dist/events-postgres-delivery.js.map +1 -0
  21. package/dist/events-postgres-dispatch-migrations.d.ts +19 -0
  22. package/dist/events-postgres-dispatch-migrations.d.ts.map +1 -0
  23. package/dist/events-postgres-dispatch-migrations.js +162 -0
  24. package/dist/events-postgres-dispatch-migrations.js.map +1 -0
  25. package/dist/events-postgres-dispatch.d.ts +39 -0
  26. package/dist/events-postgres-dispatch.d.ts.map +1 -0
  27. package/dist/events-postgres-dispatch.js +270 -0
  28. package/dist/events-postgres-dispatch.js.map +1 -0
  29. package/dist/events-postgres-lifecycle-migrations.d.ts +17 -0
  30. package/dist/events-postgres-lifecycle-migrations.d.ts.map +1 -0
  31. package/dist/events-postgres-lifecycle-migrations.js +125 -0
  32. package/dist/events-postgres-lifecycle-migrations.js.map +1 -0
  33. package/dist/events-postgres-lifecycle.d.ts +13 -0
  34. package/dist/events-postgres-lifecycle.d.ts.map +1 -0
  35. package/dist/events-postgres-lifecycle.js +176 -0
  36. package/dist/events-postgres-lifecycle.js.map +1 -0
  37. package/dist/events-postgres-migrations.d.ts +32 -0
  38. package/dist/events-postgres-migrations.d.ts.map +1 -0
  39. package/dist/events-postgres-migrations.js +329 -0
  40. package/dist/events-postgres-migrations.js.map +1 -0
  41. package/dist/events-postgres-owned.d.ts +16 -0
  42. package/dist/events-postgres-owned.d.ts.map +1 -0
  43. package/dist/events-postgres-owned.js +161 -0
  44. package/dist/events-postgres-owned.js.map +1 -0
  45. package/dist/events-postgres.d.ts +53 -0
  46. package/dist/events-postgres.d.ts.map +1 -0
  47. package/dist/events-postgres.js +289 -0
  48. package/dist/events-postgres.js.map +1 -0
  49. package/dist/index.js +58 -9
  50. package/dist/index.js.map +1 -1
  51. package/package.json +29 -5
@@ -0,0 +1,178 @@
1
+ import { performance } from 'node:perf_hooks';
2
+ import { ExternalMcpEventError } from './events-external.js';
3
+ /** One owned connection, multiple short transactions; no caller-owned client is accepted. */
4
+ export function createDeliverySessionOwner(pool) {
5
+ let closed = false, disposalFailed = false;
6
+ const pending = new Set();
7
+ function track(promise) {
8
+ pending.add(promise);
9
+ void promise.then(() => pending.delete(promise), () => pending.delete(promise));
10
+ return promise;
11
+ }
12
+ function dispose(client, uncertain) {
13
+ try {
14
+ client.release(uncertain ? new Error('DELIVERY_OPERATION_UNKNOWN') : undefined);
15
+ }
16
+ catch {
17
+ disposalFailed = true;
18
+ }
19
+ }
20
+ async function operation(invocation, work) {
21
+ if (!invocation?.signal || !Number.isFinite(invocation.deadlineMs))
22
+ throw new ExternalMcpEventError('INVALID_INPUT');
23
+ const end = performance.now() + Math.min(25000, invocation.deadlineMs - Date.now());
24
+ const check = (stageEnd = end) => {
25
+ if (closed || invocation.signal.aborted)
26
+ throw new ExternalMcpEventError('ABORTED');
27
+ if (performance.now() >= Math.min(end, stageEnd))
28
+ throw new ExternalMcpEventError('DEADLINE');
29
+ };
30
+ check();
31
+ async function wait(task, stageEnd) {
32
+ check(stageEnd);
33
+ let timer, stop;
34
+ try {
35
+ const actual = track(Promise.resolve().then(() => { check(stageEnd); return task(); }));
36
+ const value = await Promise.race([actual, new Promise((_resolve, reject) => {
37
+ timer = setTimeout(() => reject(new ExternalMcpEventError('DEADLINE')), Math.max(1, Math.min(stageEnd, end) - performance.now()));
38
+ stop = () => reject(new ExternalMcpEventError('ABORTED'));
39
+ invocation.signal.addEventListener('abort', stop, { once: true });
40
+ if (invocation.signal.aborted)
41
+ stop();
42
+ })]);
43
+ check(stageEnd);
44
+ return value;
45
+ }
46
+ finally {
47
+ if (timer)
48
+ clearTimeout(timer);
49
+ if (stop)
50
+ invocation.signal.removeEventListener('abort', stop);
51
+ }
52
+ }
53
+ const acquisition = track(Promise.resolve().then(() => pool.connect()));
54
+ let client;
55
+ try {
56
+ client = await wait(() => acquisition, performance.now() + 1000);
57
+ }
58
+ catch (error) {
59
+ track(acquisition.then(value => dispose(value, true), () => { }));
60
+ if (error instanceof ExternalMcpEventError)
61
+ throw error;
62
+ throw new ExternalMcpEventError('UNAVAILABLE');
63
+ }
64
+ let uncertain = false, inTransaction = false;
65
+ const raw = stageEnd => async (sql, values) => {
66
+ try {
67
+ return await wait(() => client.query(sql, values), stageEnd);
68
+ }
69
+ catch (error) {
70
+ const code = error && typeof error === 'object' && 'code' in error ? error.code : undefined;
71
+ if (error instanceof ExternalMcpEventError || typeof code !== 'string' || !/^[0-9A-Z]{5}$/.test(code) || code.startsWith('08'))
72
+ uncertain = true;
73
+ throw error;
74
+ }
75
+ };
76
+ async function rollback() {
77
+ if (!inTransaction || uncertain)
78
+ return;
79
+ let timer;
80
+ try {
81
+ await Promise.race([track(Promise.resolve().then(() => client.query('ROLLBACK'))), new Promise((_resolve, reject) => { timer = setTimeout(() => reject(new Error('ROLLBACK_UNKNOWN')), 500); })]);
82
+ inTransaction = false;
83
+ }
84
+ catch {
85
+ uncertain = true;
86
+ }
87
+ finally {
88
+ if (timer)
89
+ clearTimeout(timer);
90
+ }
91
+ }
92
+ const session = {
93
+ remaining: () => Math.max(0, end - performance.now()), check,
94
+ wait: (task, maximumMs) => wait(task, performance.now() + maximumMs),
95
+ async transaction(task) {
96
+ check();
97
+ if (inTransaction || uncertain)
98
+ throw new ExternalMcpEventError('OUTCOME_UNKNOWN');
99
+ let committing = false;
100
+ try {
101
+ const begin = raw(performance.now() + 1000);
102
+ await begin('BEGIN');
103
+ inTransaction = true;
104
+ await begin("SET LOCAL search_path=pg_catalog,public,pg_temp; SET LOCAL statement_timeout='750ms'; SET LOCAL lock_timeout='250ms'");
105
+ const stageEnd = Math.min(end, performance.now() + 1000), query = raw(stageEnd);
106
+ const run = async (sql, values) => {
107
+ check(stageEnd);
108
+ const ms = Math.max(1, Math.floor(Math.min(750, stageEnd - performance.now())));
109
+ await query("SELECT pg_catalog.set_config('statement_timeout',$1,true),pg_catalog.set_config('lock_timeout',$2,true)", [`${ms}ms`, `${Math.min(250, ms)}ms`]);
110
+ return query(sql, values);
111
+ };
112
+ const result = await task(run);
113
+ check(stageEnd);
114
+ committing = true;
115
+ await raw(performance.now() + 1000)('COMMIT');
116
+ committing = false;
117
+ inTransaction = false;
118
+ return result;
119
+ }
120
+ catch (error) {
121
+ uncertain ||= committing;
122
+ await rollback();
123
+ if (uncertain)
124
+ throw new ExternalMcpEventError('OUTCOME_UNKNOWN');
125
+ if (error instanceof ExternalMcpEventError)
126
+ throw error;
127
+ throw new ExternalMcpEventError('UNAVAILABLE');
128
+ }
129
+ },
130
+ };
131
+ try {
132
+ return await work(session);
133
+ }
134
+ catch (error) {
135
+ if (error instanceof ExternalMcpEventError)
136
+ throw error;
137
+ throw new ExternalMcpEventError('UNAVAILABLE');
138
+ }
139
+ finally {
140
+ await rollback();
141
+ dispose(client, uncertain || inTransaction);
142
+ }
143
+ }
144
+ return {
145
+ track,
146
+ run(invocation, work) { return track(operation(invocation, work)); },
147
+ // Private admission support. Call only after run() returns, never from its tracked work.
148
+ // The caller keeps admission closed; bounded settle() remains the shutdown boundary.
149
+ async quiesce() {
150
+ while (pending.size)
151
+ await Promise.allSettled([...pending]);
152
+ return !disposalFailed;
153
+ },
154
+ async settle(invocation) {
155
+ closed = true;
156
+ const end = performance.now() + Math.max(0, invocation.deadlineMs - Date.now());
157
+ while (pending.size) {
158
+ if (invocation.signal.aborted || performance.now() >= end)
159
+ return false;
160
+ let timer, stop;
161
+ try {
162
+ const done = await Promise.race([Promise.allSettled([...pending]).then(() => true), new Promise(resolve => { timer = setTimeout(() => resolve(false), Math.max(1, end - performance.now())); stop = () => resolve(false); invocation.signal.addEventListener('abort', stop, { once: true }); if (invocation.signal.aborted)
163
+ stop(); })]);
164
+ if (!done)
165
+ return false;
166
+ }
167
+ finally {
168
+ if (timer)
169
+ clearTimeout(timer);
170
+ if (stop)
171
+ invocation.signal.removeEventListener('abort', stop);
172
+ }
173
+ }
174
+ return !disposalFailed;
175
+ },
176
+ };
177
+ }
178
+ //# sourceMappingURL=events-postgres-delivery-owned.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-postgres-delivery-owned.js","sourceRoot":"","sources":["../src/events-postgres-delivery-owned.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { McpEventsOptions } from './events.js';
2
+ import { type ExternalMcpEventInvocation } from './events-external.js';
3
+ import { postCheckedWebhook } from './events-webhook.js';
4
+ import type { OwnedEventPool } from './events-postgres-owned.js';
5
+ export { createPostgresEventDeliveryMigrator, PostgresEventDeliveryMigrationError, } from './events-postgres-delivery-migrations.js';
6
+ export interface PostgresEventDeliveryOptions {
7
+ readonly namespace: string;
8
+ readonly pool: OwnedEventPool;
9
+ readonly definitions: McpEventsOptions['definitions'];
10
+ readonly authorize: McpEventsOptions['authorize'];
11
+ }
12
+ export type PostgresEventDeliveryOutcome = Readonly<{
13
+ outcome: 'terminal';
14
+ reason: 'callback_accepted' | 'suppressed' | 'gone' | 'too_large' | 'attempts_exhausted' | 'missing';
15
+ }> | Readonly<{
16
+ outcome: 'retry_pending';
17
+ reason: 'leased' | 'not_due' | 'callback_failed' | 'unavailable' | 'deadline' | 'aborted' | 'stopping' | 'unknown_outcome';
18
+ }>;
19
+ export interface PostgresEventDelivery {
20
+ deliver(deliveryId: string, invocation: ExternalMcpEventInvocation): Promise<PostgresEventDeliveryOutcome>;
21
+ settle(invocation: ExternalMcpEventInvocation): Promise<boolean>;
22
+ }
23
+ /** Call this API only from an authenticated worker service. It creates no HTTP
24
+ * route, timer, provider job, or automatic delivery.
25
+ */
26
+ export declare function createPostgresEventDelivery(options: PostgresEventDeliveryOptions): PostgresEventDelivery;
27
+ /** Internal test seam: production uses the checked transport above. */
28
+ export declare function createPostgresEventDeliveryRuntime(options: PostgresEventDeliveryOptions, send?: typeof postCheckedWebhook): PostgresEventDelivery;
29
+ //# sourceMappingURL=events-postgres-delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-postgres-delivery.d.ts","sourceRoot":"","sources":["../src/events-postgres-delivery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,EAAyB,KAAK,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAe,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EACL,mCAAmC,EACnC,mCAAmC,GACpC,MAAM,0CAA0C,CAAC;AAClD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,IAAI,EAAC,cAAc,CAAC;IACvD,QAAQ,CAAC,WAAW,EAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAAA,QAAQ,CAAC,SAAS,EAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;CACvG;AACD,MAAM,MAAM,4BAA4B,GACpC,QAAQ,CAAC;IAAC,OAAO,EAAC,UAAU,CAAC;IAAA,MAAM,EAAC,mBAAmB,GAAC,YAAY,GAAC,MAAM,GAAC,WAAW,GAAC,oBAAoB,GAAC,SAAS,CAAA;CAAC,CAAC,GACxH,QAAQ,CAAC;IAAC,OAAO,EAAC,eAAe,CAAC;IAAA,MAAM,EAAC,QAAQ,GAAC,SAAS,GAAC,iBAAiB,GAAC,aAAa,GAAC,UAAU,GAAC,SAAS,GAAC,UAAU,GAAC,iBAAiB,CAAA;CAAC,CAAC,CAAC;AACpJ,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,UAAU,EAAC,MAAM,EAAC,UAAU,EAAC,0BAA0B,GAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACvG,MAAM,CAAC,UAAU,EAAC,0BAA0B,GAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE;AA4BD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAC,4BAA4B,GAAE,qBAAqB,CAEtG;AACD,uEAAuE;AACvE,wBAAgB,kCAAkC,CAAC,OAAO,EAAC,4BAA4B,EAAC,IAAI,GAAC,OAAO,kBAAqC,GAAE,qBAAqB,CA4I/J"}
@@ -0,0 +1,299 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { performance } from 'node:perf_hooks';
3
+ import { normalizeMcpEventDefinitions, mcpEventSubscriptionIdentity, validateMcpEventSubscription } from './events.js';
4
+ import { ExternalMcpEventError } from './events-external.js';
5
+ import { postCheckedWebhook, signWebhook } from './events-webhook.js';
6
+ import { createDeliverySessionOwner } from './events-postgres-delivery-owned.js';
7
+ export { createPostgresEventDeliveryMigrator, PostgresEventDeliveryMigrationError, } from './events-postgres-delivery-migrations.js';
8
+ const columns = 'namespace,source_kind,source_id,subscription_id,generation';
9
+ const predicate = 'namespace=$1 AND source_kind=$2 AND source_id=$3 AND subscription_id=$4 AND generation=$5';
10
+ const values = (k) => [k.namespace, k.source_kind, k.source_id, k.subscription_id, k.generation];
11
+ const dbTime = `pg_catalog.floor(EXTRACT(epoch FROM pg_catalog.clock_timestamp())*1000)::pg_catalog.float8`;
12
+ const terminal = (reason) => ({ outcome: 'terminal', reason });
13
+ const retry = (reason) => ({ outcome: 'retry_pending', reason });
14
+ const unavailable = () => { throw new ExternalMcpEventError('UNAVAILABLE'); };
15
+ function identifier(value) {
16
+ if (typeof value !== 'string' || !value || Buffer.byteLength(value) > 240 || /\u0000|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(value))
17
+ throw new ExternalMcpEventError('INVALID_INPUT');
18
+ return value;
19
+ }
20
+ function canonical(value, depth = 0) {
21
+ if (depth > 32)
22
+ return unavailable();
23
+ if (value === null || typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number' && Number.isFinite(value))
24
+ return value;
25
+ if (Array.isArray(value))
26
+ return Object.freeze(value.map(v => canonical(v, depth + 1)));
27
+ if (!value || typeof value !== 'object' || Object.getPrototypeOf(value) !== Object.prototype)
28
+ return unavailable();
29
+ const result = Object.create(null);
30
+ for (const key of Object.keys(value).sort())
31
+ result[key] = canonical(value[key], depth + 1);
32
+ return Object.freeze(result);
33
+ }
34
+ function acceptedOrTerminal(value) {
35
+ if (value === null)
36
+ return null;
37
+ const reasons = { accepted: 'callback_accepted', suppressed: 'suppressed', gone: 'gone', too_large: 'too_large', exhausted: 'attempts_exhausted' };
38
+ if (typeof value !== 'string' || !Object.hasOwn(reasons, value))
39
+ return unavailable();
40
+ return terminal(reasons[value]);
41
+ }
42
+ /** Call this API only from an authenticated worker service. It creates no HTTP
43
+ * route, timer, provider job, or automatic delivery.
44
+ */
45
+ export function createPostgresEventDelivery(options) {
46
+ return createPostgresEventDeliveryRuntime(options);
47
+ }
48
+ /** Internal test seam: production uses the checked transport above. */
49
+ export function createPostgresEventDeliveryRuntime(options, send = postCheckedWebhook) {
50
+ const namespace = identifier(options?.namespace);
51
+ if (!options.pool || typeof options.pool.connect !== 'function' || typeof options.authorize !== 'function' || !Array.isArray(options.definitions) || !options.definitions.length)
52
+ throw new ExternalMcpEventError('INVALID_INPUT');
53
+ const definitions = normalizeMcpEventDefinitions(options.definitions), owner = createDeliverySessionOwner(options.pool);
54
+ let closing = false, busy = false;
55
+ async function lock(run, k) {
56
+ await run('SELECT revision FROM public.emseepea_event_heads WHERE namespace=$1 AND subscription_id=$2 FOR UPDATE', [namespace, k.subscription_id]);
57
+ const intent = (await run(`SELECT state,event_id FROM public.emseepea_event_intents WHERE ${predicate} FOR UPDATE`, values(k))).rows[0];
58
+ if (!intent)
59
+ return null;
60
+ await run(`INSERT INTO public.emseepea_event_delivery_state(${columns}) VALUES($1,$2,$3,$4,$5) ON CONFLICT(${columns}) DO NOTHING`, values(k));
61
+ const row = (await run(`SELECT reservations,lease_id,terminal,
62
+ pg_catalog.floor(EXTRACT(epoch FROM lease_until)*1000)::pg_catalog.float8 AS lease_until,
63
+ pg_catalog.floor(EXTRACT(epoch FROM due_at)*1000)::pg_catalog.float8 AS due_at
64
+ FROM public.emseepea_event_delivery_state WHERE ${predicate} FOR UPDATE`, values(k))).rows[0];
65
+ if (!row)
66
+ return unavailable();
67
+ row.now = (await run(`SELECT ${dbTime} AS now`)).rows[0]?.now;
68
+ if (!Number.isSafeInteger(row.now) || !Number.isInteger(row.reservations) || Number(row.reservations) < 0 || Number(row.reservations) > 4)
69
+ return unavailable();
70
+ return { intent, row };
71
+ }
72
+ async function snapshot(run, k, includeKeys) {
73
+ const keySelect = includeKeys ? ',key.secret,key.previous_secret,pg_catalog.floor(EXTRACT(epoch FROM key.previous_until)*1000)::pg_catalog.float8 AS previous_until' : '';
74
+ const keyJoin = includeKeys ? 'JOIN public.emseepea_event_keys key ON key.namespace=c.namespace AND key.subscription_id=c.subscription_id AND key.generation=c.generation' : '';
75
+ const rows = (await run(`SELECT s.event_id,s.owner_key,s.event_name,s.payload,
76
+ pg_catalog.floor(EXTRACT(epoch FROM s.occurred_at)*1000)::pg_catalog.float8 AS occurred_at,
77
+ c.arguments,h.url,${dbTime} AS now ${keySelect}
78
+ FROM public.emseepea_event_intents i JOIN public.emseepea_event_sources s ON s.namespace=i.namespace AND s.source_kind=i.source_kind AND s.source_id=i.source_id
79
+ JOIN public.emseepea_event_capture_subscriptions c ON c.namespace=i.namespace AND c.subscription_id=i.subscription_id AND c.generation=i.generation
80
+ JOIN public.emseepea_event_heads h ON h.namespace=c.namespace AND h.subscription_id=c.subscription_id AND h.generation=c.generation ${keyJoin}
81
+ WHERE i.namespace=$1 AND i.source_kind=$2 AND i.source_id=$3 AND i.subscription_id=$4 AND i.generation=$5 AND i.state='pending'
82
+ AND i.event_id=s.event_id AND s.owner_key=c.owner_key AND s.owner_key=h.owner_key AND s.event_name=c.event_name
83
+ AND c.active AND c.expires_at>pg_catalog.clock_timestamp() AND h.url IS NOT NULL`, values(k))).rows;
84
+ return rows.length === 1 ? rows[0] : null;
85
+ }
86
+ function body(row) {
87
+ const definition = definitions.find(v => v.name === row.event_name);
88
+ if (!definition || typeof row.owner_key !== 'string' || typeof row.event_id !== 'string' || !Number.isSafeInteger(row.occurred_at) || !row.payload || typeof row.payload !== 'object' || Array.isArray(row.payload) || !row.arguments || typeof row.arguments !== 'object' || Array.isArray(row.arguments))
89
+ return null;
90
+ const payload = canonical(row.payload), args = canonical(row.arguments);
91
+ if (!definition.payloadSchema.safeParse(payload).success || !definition.inputSchema.safeParse(args).success)
92
+ return null;
93
+ const matched = definition.matches(args, payload, row.owner_key);
94
+ if (typeof matched !== 'boolean') {
95
+ if (matched && typeof matched.then === 'function')
96
+ owner.track(Promise.resolve(matched));
97
+ return unavailable();
98
+ }
99
+ if (!matched)
100
+ return null;
101
+ // Validate but do not substitute a current schema's transformed output.
102
+ return Buffer.from(JSON.stringify({ eventId: row.event_id, name: row.event_name, timestamp: new Date(Number(row.occurred_at)).toISOString(), data: payload, cursor: null }));
103
+ }
104
+ async function finishTerminal(run, k, category) {
105
+ await run(`UPDATE public.emseepea_event_intents SET state=$6 WHERE ${predicate} AND state='pending'`, [...values(k), category === 'suppressed' ? 'revoked' : 'completed']);
106
+ await run(`UPDATE public.emseepea_event_delivery_state SET terminal=$6,lease_id=NULL,lease_until=NULL WHERE ${predicate} AND terminal IS NULL`, [...values(k), category]);
107
+ }
108
+ async function leaseSuppression(run, k, lease) {
109
+ const locked = await lock(run, k);
110
+ if (!locked)
111
+ return terminal('missing');
112
+ const previous = acceptedOrTerminal(locked.row.terminal);
113
+ if (previous)
114
+ return previous;
115
+ if (locked.row.lease_id !== lease || Number(locked.row.lease_until) <= Number(locked.row.now))
116
+ return retry('leased');
117
+ await finishTerminal(run, k, 'suppressed');
118
+ return terminal('suppressed');
119
+ }
120
+ return Object.freeze({
121
+ async deliver(deliveryId, invocation) {
122
+ identifier(deliveryId);
123
+ if (closing)
124
+ return retry('stopping');
125
+ if (busy)
126
+ return retry('unavailable');
127
+ busy = true;
128
+ let sendStarted = false;
129
+ try {
130
+ return await owner.run(invocation, async (session) => {
131
+ const claim = await session.transaction(async (run) => {
132
+ const k = (await run(`SELECT ${columns} FROM public.emseepea_event_intents WHERE namespace=$1 AND delivery_id=$2`, [namespace, deliveryId])).rows[0];
133
+ if (!k)
134
+ return { result: terminal('missing') };
135
+ for (const column of columns.split(','))
136
+ identifier(k[column]);
137
+ const locked = await lock(run, k);
138
+ if (!locked)
139
+ return { result: terminal('missing') };
140
+ const previous = acceptedOrTerminal(locked.row.terminal);
141
+ if (previous)
142
+ return { result: previous };
143
+ if (locked.intent.state !== 'pending') {
144
+ await finishTerminal(run, k, 'suppressed');
145
+ return { result: terminal('suppressed') };
146
+ }
147
+ if (locked.row.lease_id !== null && Number(locked.row.lease_until) > Number(locked.row.now))
148
+ return { result: retry('leased') };
149
+ if (Number(locked.row.reservations) >= 4) {
150
+ await finishTerminal(run, k, 'exhausted');
151
+ return { result: terminal('attempts_exhausted') };
152
+ }
153
+ if (Number(locked.row.due_at) > Number(locked.row.now))
154
+ return { result: retry('not_due') };
155
+ const data = await snapshot(run, k, false);
156
+ if (!data || !body(data)) {
157
+ await finishTerminal(run, k, 'suppressed');
158
+ return { result: terminal('suppressed') };
159
+ }
160
+ const lease = randomUUID();
161
+ await run(`UPDATE public.emseepea_event_delivery_state SET lease_id=$6,lease_until=pg_catalog.to_timestamp(($7::pg_catalog.float8+60000)/1000) WHERE ${predicate}`, [...values(k), lease, locked.row.now]);
162
+ return { lease, data, k };
163
+ });
164
+ if ('result' in claim)
165
+ return claim.result;
166
+ const k = claim.k;
167
+ const allowed = await session.wait(() => options.authorize({ ownerKey: String(claim.data.owner_key), name: String(claim.data.event_name), arguments: canonical(claim.data.arguments), phase: 'delivery' }), 1000);
168
+ if (allowed !== true)
169
+ return session.transaction(run => leaseSuppression(run, k, claim.lease));
170
+ if (session.remaining() < 18000)
171
+ return retry('deadline');
172
+ const reserved = await session.transaction(async (run) => {
173
+ const locked = await lock(run, k);
174
+ if (!locked)
175
+ return { result: terminal('missing') };
176
+ const previous = acceptedOrTerminal(locked.row.terminal);
177
+ if (previous)
178
+ return { result: previous };
179
+ if (locked.row.lease_id !== claim.lease || Number(locked.row.lease_until) <= Number(locked.row.now))
180
+ return { result: retry('leased') };
181
+ if (locked.intent.state !== 'pending') {
182
+ await finishTerminal(run, k, 'suppressed');
183
+ return { result: terminal('suppressed') };
184
+ }
185
+ if (Number(locked.row.reservations) >= 4)
186
+ return { result: retry('leased') };
187
+ const snapshotStart = performance.now(), data = await snapshot(run, k, true);
188
+ if (!data) {
189
+ await finishTerminal(run, k, 'suppressed');
190
+ return { result: terminal('suppressed') };
191
+ }
192
+ const bytes = body(data);
193
+ if (!bytes) {
194
+ await finishTerminal(run, k, 'suppressed');
195
+ return { result: terminal('suppressed') };
196
+ }
197
+ if (bytes.byteLength > 262144) {
198
+ await finishTerminal(run, k, 'too_large');
199
+ return { result: terminal('too_large') };
200
+ }
201
+ if (typeof data.secret !== 'string' || typeof data.url !== 'string' || !Number.isSafeInteger(data.now))
202
+ return unavailable();
203
+ try {
204
+ const valid = validateMcpEventSubscription(definitions, { name: data.event_name, arguments: data.arguments, delivery: { mode: 'webhook', url: data.url, secret: data.secret } });
205
+ if (valid.url !== data.url || mcpEventSubscriptionIdentity(String(data.owner_key), String(data.event_name), data.arguments, data.url) !== k.subscription_id)
206
+ return unavailable();
207
+ if (data.previous_secret !== null)
208
+ validateMcpEventSubscription(definitions, { name: data.event_name, arguments: data.arguments, delivery: { mode: 'webhook', url: data.url, secret: data.previous_secret } });
209
+ }
210
+ catch {
211
+ return unavailable();
212
+ }
213
+ if (session.remaining() < 16000 || Number(locked.row.lease_until) - Number(data.now) - (performance.now() - snapshotStart) < 16000)
214
+ return { result: retry('deadline') };
215
+ const reservation = randomUUID(), attempt = Number(locked.row.reservations) + 1;
216
+ await run(`INSERT INTO public.emseepea_event_delivery_attempts(${columns},attempt,reservation_id,lease_id,reserved_at,outcome)
217
+ VALUES($1,$2,$3,$4,$5,$6,$7,$8,pg_catalog.to_timestamp($9::pg_catalog.float8/1000),'reserved')`, [...values(k), attempt, reservation, claim.lease, data.now]);
218
+ await run(`UPDATE public.emseepea_event_delivery_state SET reservations=$6 WHERE ${predicate}`, [...values(k), attempt]);
219
+ return { reservation, attempt, data, bytes, snapshotStart, leaseUntil: Number(locked.row.lease_until) };
220
+ });
221
+ if ('result' in reserved)
222
+ return reserved.result;
223
+ session.check();
224
+ if (session.remaining() < 15000 || reserved.leaseUntil - Number(reserved.data.now) - (performance.now() - reserved.snapshotStart) < 15000)
225
+ return retry('deadline');
226
+ const timestamp = Math.floor(Number(reserved.data.now) / 1000), eventId = String(reserved.data.event_id);
227
+ const primary = signWebhook(String(reserved.data.secret), eventId, timestamp, reserved.bytes);
228
+ const previous = typeof reserved.data.previous_secret === 'string' && Number(reserved.data.previous_until) > Number(reserved.data.now) ? ` ${signWebhook(reserved.data.previous_secret, eventId, timestamp, reserved.bytes)}` : '';
229
+ let status = 0;
230
+ try {
231
+ const response = await session.wait(() => { sendStarted = true; return send(String(reserved.data.url), reserved.bytes, { 'webhook-id': eventId, 'webhook-timestamp': String(timestamp), 'webhook-signature': primary + previous, 'X-MCP-Subscription-Id': String(k.subscription_id) }); }, 10000);
232
+ if (!Number.isInteger(response.status) || response.status < 100 || response.status > 599)
233
+ return retry('unknown_outcome');
234
+ status = response.status;
235
+ }
236
+ catch {
237
+ return retry('unknown_outcome');
238
+ }
239
+ return session.transaction(async (run) => {
240
+ const locked = await lock(run, k);
241
+ if (!locked)
242
+ return terminal('missing');
243
+ const old = acceptedOrTerminal(locked.row.terminal);
244
+ if (old)
245
+ return old;
246
+ if (locked.row.lease_id !== claim.lease || Number(locked.row.lease_until) <= Number(locked.row.now))
247
+ return retry('leased');
248
+ const attemptRow = (await run(`SELECT reservation_id FROM public.emseepea_event_delivery_attempts WHERE ${predicate} AND attempt=$6 FOR UPDATE`, [...values(k), reserved.attempt])).rows[0];
249
+ if (attemptRow?.reservation_id !== reserved.reservation)
250
+ return retry('leased');
251
+ const accepted = status >= 200 && status < 300;
252
+ await run(`UPDATE public.emseepea_event_delivery_attempts SET outcome=$7,status=$8 WHERE ${predicate} AND attempt=$6`, [...values(k), reserved.attempt, accepted ? 'accepted' : status === 410 || status === 413 ? 'terminal' : 'failed', status >= 100 && status <= 599 ? status : null]);
253
+ if (locked.intent.state !== 'pending') {
254
+ await finishTerminal(run, k, 'suppressed');
255
+ return terminal('suppressed');
256
+ }
257
+ if (accepted) {
258
+ await finishTerminal(run, k, 'accepted');
259
+ return terminal('callback_accepted');
260
+ }
261
+ if (status === 410 || status === 413) {
262
+ await finishTerminal(run, k, status === 410 ? 'gone' : 'too_large');
263
+ return terminal(status === 410 ? 'gone' : 'too_large');
264
+ }
265
+ if (reserved.attempt >= 4) {
266
+ await finishTerminal(run, k, 'exhausted');
267
+ return terminal('attempts_exhausted');
268
+ }
269
+ const delay = [1000, 5000, 25000][reserved.attempt - 1];
270
+ await run(`UPDATE public.emseepea_event_delivery_state SET lease_id=NULL,lease_until=NULL,due_at=pg_catalog.to_timestamp(($6::pg_catalog.float8+$7::pg_catalog.int4)/1000) WHERE ${predicate}`, [...values(k), locked.row.now, delay]);
271
+ return retry('callback_failed');
272
+ });
273
+ });
274
+ }
275
+ catch (error) {
276
+ if (sendStarted)
277
+ return retry('unknown_outcome');
278
+ if (error instanceof ExternalMcpEventError) {
279
+ if (error.code === 'INVALID_INPUT')
280
+ throw error;
281
+ if (error.code === 'OUTCOME_UNKNOWN')
282
+ return retry('unknown_outcome');
283
+ if (error.code === 'DEADLINE')
284
+ return retry('deadline');
285
+ if (error.code === 'ABORTED')
286
+ return retry(closing ? 'stopping' : 'aborted');
287
+ }
288
+ return retry('unavailable');
289
+ }
290
+ finally {
291
+ // Visible UNKNOWN can precede raw policy/SQL/HTTP settlement. Retain private admission.
292
+ void owner.quiesce().then(drained => { if (drained)
293
+ busy = false; }, () => { });
294
+ }
295
+ },
296
+ settle(invocation) { closing = true; return owner.settle(invocation); },
297
+ });
298
+ }
299
+ //# sourceMappingURL=events-postgres-delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-postgres-delivery.js","sourceRoot":"","sources":["../src/events-postgres-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AACvH,OAAO,EAAE,qBAAqB,EAAmC,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EACL,mCAAmC,EACnC,mCAAmC,GACpC,MAAM,0CAA0C,CAAC;AAalD,MAAM,OAAO,GAAC,4DAA4D,CAAC;AAC3E,MAAM,SAAS,GAAC,2FAA2F,CAAC;AAC5G,MAAM,MAAM,GAAC,CAAC,CAAK,EAAC,EAAE,CAAA,CAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,WAAW,EAAC,CAAC,CAAC,SAAS,EAAC,CAAC,CAAC,eAAe,EAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAC7F,MAAM,MAAM,GAAC,4FAA4F,CAAC;AAC1G,MAAM,QAAQ,GAAC,CAAC,MAA2E,EAA8B,EAAE,CAAA,CAAC,EAAC,OAAO,EAAC,UAAU,EAAC,MAAM,EAAC,CAAC,CAAC;AACzJ,MAAM,KAAK,GAAC,CAAC,MAAgF,EAA8B,EAAE,CAAA,CAAC,EAAC,OAAO,EAAC,eAAe,EAAC,MAAM,EAAC,CAAC,CAAC;AAChK,MAAM,WAAW,GAAC,GAAQ,EAAE,GAAC,MAAM,IAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAA,CAAC,CAAC;AAC9E,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAG,OAAO,KAAK,KAAG,QAAQ,IAAE,CAAC,KAAK,IAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAC,GAAG,IAAE,gFAAgF,CAAC,IAAI,CAAC,KAAK,CAAC;QAAC,MAAM,IAAI,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAChN,OAAO,KAAK,CAAC;AACf,CAAC;AACD,SAAS,SAAS,CAAC,KAAa,EAAC,KAAK,GAAC,CAAC;IACtC,IAAG,KAAK,GAAC,EAAE;QAAC,OAAO,WAAW,EAAE,CAAC;IACjC,IAAG,KAAK,KAAG,IAAI,IAAE,OAAO,KAAK,KAAG,QAAQ,IAAE,OAAO,KAAK,KAAG,SAAS,IAAE,OAAO,KAAK,KAAG,QAAQ,IAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAC,OAAO,KAAK,CAAC;IACjI,IAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,SAAS,CAAC,CAAC,EAAC,KAAK,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,IAAG,CAAC,KAAK,IAAE,OAAO,KAAK,KAAG,QAAQ,IAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAG,MAAM,CAAC,SAAS;QAAC,OAAO,WAAW,EAAE,CAAC;IACzG,MAAM,MAAM,GAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,KAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;QAAC,MAAM,CAAC,GAAG,CAAC,GAAC,SAAS,CAAE,KAAa,CAAC,GAAG,CAAC,EAAC,KAAK,GAAC,CAAC,CAAC,CAAC;IAC9F,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AACD,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAG,KAAK,KAAG,IAAI;QAAC,OAAO,IAAI,CAAC;IAC5B,MAAM,OAAO,GAAqF,EAAC,QAAQ,EAAC,mBAAmB,EAAC,UAAU,EAAC,YAAY,EAAC,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,SAAS,EAAC,oBAAoB,EAAC,CAAC;IAC1N,IAAG,OAAO,KAAK,KAAG,QAAQ,IAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAC,KAAK,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;IAC/E,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,CAAC;AACnC,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAoC;IAC9E,OAAO,kCAAkC,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AACD,uEAAuE;AACvE,MAAM,UAAU,kCAAkC,CAAC,OAAoC,EAAC,OAA+B,kBAAkB;IACvI,MAAM,SAAS,GAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC/C,IAAG,CAAC,OAAO,CAAC,IAAI,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,KAAG,UAAU,IAAE,OAAO,OAAO,CAAC,SAAS,KAAG,UAAU,IAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAE,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM;QAAC,MAAM,IAAI,qBAAqB,CAAC,eAAe,CAAC,CAAC;IACrN,MAAM,WAAW,GAAC,4BAA4B,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,KAAK,GAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnH,IAAI,OAAO,GAAC,KAAK,EAAC,IAAI,GAAC,KAAK,CAAC;IAC7B,KAAK,UAAU,IAAI,CAAC,GAAY,EAAC,CAAK;QACpC,MAAM,GAAG,CAAC,uGAAuG,EAAC,CAAC,SAAS,EAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QACjJ,MAAM,MAAM,GAAC,CAAC,MAAM,GAAG,CAAC,kEAAkE,SAAS,aAAa,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrI,IAAG,CAAC,MAAM;YAAC,OAAO,IAAI,CAAC;QACvB,MAAM,GAAG,CAAC,oDAAoD,OAAO,wCAAwC,OAAO,cAAc,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9I,MAAM,GAAG,GAAC,CAAC,MAAM,GAAG,CAAC;;;wDAG+B,SAAS,aAAa,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAG,CAAC,GAAG;YAAC,OAAO,WAAW,EAAE,CAAC;QAC7B,GAAG,CAAC,GAAG,GAAC,CAAC,MAAM,GAAG,CAAC,UAAU,MAAM,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QAC5D,IAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,IAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,GAAC,CAAC,IAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,GAAC,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;QACpJ,OAAO,EAAC,MAAM,EAAC,GAAG,EAAC,CAAC;IACtB,CAAC;IACD,KAAK,UAAU,QAAQ,CAAC,GAAY,EAAC,CAAK,EAAC,WAAmB;QAC5D,MAAM,SAAS,GAAC,WAAW,CAAA,CAAC,CAAA,oIAAoI,CAAA,CAAC,CAAA,EAAE,CAAC;QACpK,MAAM,OAAO,GAAC,WAAW,CAAA,CAAC,CAAA,4IAA4I,CAAA,CAAC,CAAA,EAAE,CAAC;QAC1K,MAAM,IAAI,GAAC,CAAC,MAAM,GAAG,CAAC;;0BAEA,MAAM,WAAW,SAAS;;;4IAGwF,OAAO;;;uFAG5D,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrG,OAAO,IAAI,CAAC,MAAM,KAAG,CAAC,CAAA,CAAC,CAAA,IAAI,CAAC,CAAC,CAAE,CAAA,CAAC,CAAA,IAAI,CAAC;IACvC,CAAC;IACD,SAAS,IAAI,CAAC,GAAO;QACnB,MAAM,UAAU,GAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,IAAI,KAAG,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAG,CAAC,UAAU,IAAE,OAAO,GAAG,CAAC,SAAS,KAAG,QAAQ,IAAE,OAAO,GAAG,CAAC,QAAQ,KAAG,QAAQ,IAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,IAAE,CAAC,GAAG,CAAC,OAAO,IAAE,OAAO,GAAG,CAAC,OAAO,KAAG,QAAQ,IAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAE,CAAC,GAAG,CAAC,SAAS,IAAE,OAAO,GAAG,CAAC,SAAS,KAAG,QAAQ,IAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAAC,OAAO,IAAI,CAAC;QAC5R,MAAM,OAAO,GAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAC,IAAI,GAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnE,IAAG,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,IAAE,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO;YAAC,OAAO,IAAI,CAAC;QACrH,MAAM,OAAO,GAAS,UAAU,CAAC,OAAO,CAAC,IAAW,EAAC,OAAc,EAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnF,IAAG,OAAO,OAAO,KAAG,SAAS,EAAE,CAAC;YAC9B,IAAG,OAAO,IAAE,OAAO,OAAgC,CAAC,IAAI,KAAG,UAAU;gBAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5G,OAAO,WAAW,EAAE,CAAC;QACvB,CAAC;QACD,IAAG,CAAC,OAAO;YAAC,OAAO,IAAI,CAAC;QACxB,wEAAwE;QACxE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAC,GAAG,CAAC,QAAQ,EAAC,IAAI,EAAC,GAAG,CAAC,UAAU,EAAC,SAAS,EAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,EAAC,IAAI,EAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,CAAC,CAAC,CAAC;IACpK,CAAC;IACD,KAAK,UAAU,cAAc,CAAC,GAAY,EAAC,CAAK,EAAC,QAA+D;QAC9G,MAAM,GAAG,CAAC,2DAA2D,SAAS,sBAAsB,EAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAC,QAAQ,KAAG,YAAY,CAAA,CAAC,CAAA,SAAS,CAAA,CAAC,CAAA,WAAW,CAAC,CAAC,CAAC;QACnK,MAAM,GAAG,CAAC,oGAAoG,SAAS,uBAAuB,EAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,CAAC,CAAC;IAC1K,CAAC;IACD,KAAK,UAAU,gBAAgB,CAAC,GAAY,EAAC,CAAK,EAAC,KAAY;QAC7D,MAAM,MAAM,GAAC,MAAM,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC;QAAA,IAAG,CAAC,MAAM;YAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAAA,IAAG,QAAQ;YAAC,OAAO,QAAQ,CAAC;QACnF,IAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,KAAG,KAAK,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC9G,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,YAAY,CAAC,CAAC;QAAA,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAwB;QAC1C,KAAK,CAAC,OAAO,CAAC,UAAU,EAAC,UAAU;YACjC,UAAU,CAAC,UAAU,CAAC,CAAC;YAAA,IAAG,OAAO;gBAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;YAAA,IAAG,IAAI;gBAAC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC;YAAA,IAAI,GAAC,IAAI,CAAC;YACzG,IAAI,WAAW,GAAC,KAAK,CAAC;YACtB,IAAG,CAAC;gBAAA,OAAO,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,EAAC,KAAK,EAAC,OAAO,EAAA,EAAE;oBACnD,MAAM,KAAK,GAAC,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAC,GAAG,EAAA,EAAE;wBAC/C,MAAM,CAAC,GAAC,CAAC,MAAM,GAAG,CAAC,UAAU,OAAO,2EAA2E,EAAC,CAAC,SAAS,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjJ,IAAG,CAAC,CAAC;4BAAC,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,EAAC,CAAC;wBAC1C,KAAI,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;4BAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC7D,MAAM,MAAM,GAAC,MAAM,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC;wBAAA,IAAG,CAAC,MAAM;4BAAC,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,EAAC,CAAC;wBAC9E,MAAM,QAAQ,GAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAAA,IAAG,QAAQ;4BAAC,OAAO,EAAC,MAAM,EAAC,QAAQ,EAAC,CAAC;wBAC5F,IAAG,MAAM,CAAC,MAAM,CAAC,KAAK,KAAG,SAAS,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,YAAY,CAAC,CAAC;4BAAA,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,YAAY,CAAC,EAAC,CAAC;wBAAA,CAAC;wBACrH,IAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,KAAG,IAAI,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;4BAAC,OAAO,EAAC,MAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,EAAC,CAAC;wBACrH,IAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAE,CAAC,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,WAAW,CAAC,CAAC;4BAAA,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAC,CAAC;wBAAA,CAAC;wBAC/H,IAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;4BAAC,OAAO,EAAC,MAAM,EAAC,KAAK,CAAC,SAAS,CAAC,EAAC,CAAC;wBACrF,MAAM,IAAI,GAAC,MAAM,QAAQ,CAAC,GAAG,EAAC,CAAC,EAAC,KAAK,CAAC,CAAC;wBAAA,IAAG,CAAC,IAAI,IAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,YAAY,CAAC,CAAC;4BAAA,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,YAAY,CAAC,EAAC,CAAC;wBAAA,CAAC;wBAC/I,MAAM,KAAK,GAAC,UAAU,EAAE,CAAC;wBAAA,MAAM,GAAG,CAAC,6IAA6I,SAAS,EAAE,EAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAC,KAAK,EAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBACjO,OAAO,EAAC,KAAK,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC;oBACxB,CAAC,CAAC,CAAC;oBACH,IAAG,QAAQ,IAAI,KAAK;wBAAC,OAAO,KAAK,CAAC,MAAO,CAAC;oBAC1C,MAAM,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC;oBAChB,MAAM,OAAO,GAAC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAE,EAAE,CAAA,OAAO,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,SAAS,EAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAQ,EAAC,KAAK,EAAC,UAAU,EAAC,CAAC,EAAC,IAAI,CAAC,CAAC;oBAC3M,IAAG,OAAO,KAAG,IAAI;wBAAC,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,CAAA,EAAE,CAAA,gBAAgB,CAAC,GAAG,EAAC,CAAC,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;oBACvF,IAAG,OAAO,CAAC,SAAS,EAAE,GAAC,KAAK;wBAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;oBACtD,MAAM,QAAQ,GAAC,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAC,GAAG,EAAA,EAAE;wBAClD,MAAM,MAAM,GAAC,MAAM,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC;wBAAA,IAAG,CAAC,MAAM;4BAAC,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,EAAC,CAAC;wBAC9E,MAAM,QAAQ,GAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAAA,IAAG,QAAQ;4BAAC,OAAO,EAAC,MAAM,EAAC,QAAQ,EAAC,CAAC;wBAC5F,IAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,KAAG,KAAK,CAAC,KAAK,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;4BAAC,OAAO,EAAC,MAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,EAAC,CAAC;wBAC7H,IAAG,MAAM,CAAC,MAAM,CAAC,KAAK,KAAG,SAAS,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,YAAY,CAAC,CAAC;4BAAA,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,YAAY,CAAC,EAAC,CAAC;wBAAA,CAAC;wBACrH,IAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAE,CAAC;4BAAC,OAAO,EAAC,MAAM,EAAC,KAAK,CAAC,QAAQ,CAAC,EAAC,CAAC;wBACtE,MAAM,aAAa,GAAC,WAAW,CAAC,GAAG,EAAE,EAAC,IAAI,GAAC,MAAM,QAAQ,CAAC,GAAG,EAAC,CAAC,EAAC,IAAI,CAAC,CAAC;wBACtE,IAAG,CAAC,IAAI,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,YAAY,CAAC,CAAC;4BAAA,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,YAAY,CAAC,EAAC,CAAC;wBAAA,CAAC;wBAC3F,MAAM,KAAK,GAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAAA,IAAG,CAAC,KAAK,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,YAAY,CAAC,CAAC;4BAAA,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,YAAY,CAAC,EAAC,CAAC;wBAAA,CAAC;wBACnH,IAAG,KAAK,CAAC,UAAU,GAAC,MAAM,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,WAAW,CAAC,CAAC;4BAAA,OAAO,EAAC,MAAM,EAAC,QAAQ,CAAC,WAAW,CAAC,EAAC,CAAC;wBAAA,CAAC;wBAC3G,IAAG,OAAO,IAAI,CAAC,MAAM,KAAG,QAAQ,IAAE,OAAO,IAAI,CAAC,GAAG,KAAG,QAAQ,IAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;4BAAC,OAAO,WAAW,EAAE,CAAC;wBACnH,IAAI,CAAC;4BACH,MAAM,KAAK,GAAC,4BAA4B,CAAC,WAAW,EAAC,EAAC,IAAI,EAAC,IAAI,CAAC,UAAU,EAAC,SAAS,EAAC,IAAI,CAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,IAAI,EAAC,SAAS,EAAC,GAAG,EAAC,IAAI,CAAC,GAAG,EAAC,MAAM,EAAC,IAAI,CAAC,MAAM,EAAC,EAAC,CAAC,CAAC;4BAChK,IAAG,KAAK,CAAC,GAAG,KAAG,IAAI,CAAC,GAAG,IAAE,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAC,IAAI,CAAC,SAAgB,EAAC,IAAI,CAAC,GAAG,CAAC,KAAG,CAAC,CAAC,eAAe;gCAAC,OAAO,WAAW,EAAE,CAAC;4BAC9K,IAAG,IAAI,CAAC,eAAe,KAAG,IAAI;gCAAC,4BAA4B,CAAC,WAAW,EAAC,EAAC,IAAI,EAAC,IAAI,CAAC,UAAU,EAAC,SAAS,EAAC,IAAI,CAAC,SAAS,EAAC,QAAQ,EAAC,EAAC,IAAI,EAAC,SAAS,EAAC,GAAG,EAAC,IAAI,CAAC,GAAG,EAAC,MAAM,EAAC,IAAI,CAAC,eAAe,EAAC,EAAC,CAAC,CAAC;wBAC9L,CAAC;wBAAC,MAAM,CAAC;4BAAA,OAAO,WAAW,EAAE,CAAC;wBAAA,CAAC;wBAC/B,IAAG,OAAO,CAAC,SAAS,EAAE,GAAC,KAAK,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAC,aAAa,CAAC,GAAC,KAAK;4BAAC,OAAO,EAAC,MAAM,EAAC,KAAK,CAAC,UAAU,CAAC,EAAC,CAAC;wBACxJ,MAAM,WAAW,GAAC,UAAU,EAAE,EAAC,OAAO,GAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,GAAC,CAAC,CAAC;wBACzE,MAAM,GAAG,CAAC,uDAAuD,OAAO;2GACyB,EAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,CAAC,KAAK,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC3J,MAAM,GAAG,CAAC,yEAAyE,SAAS,EAAE,EAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAC,OAAO,CAAC,CAAC,CAAC;wBACvH,OAAO,EAAC,WAAW,EAAC,OAAO,EAAC,IAAI,EAAC,KAAK,EAAC,aAAa,EAAC,UAAU,EAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAC,CAAC;oBAClG,CAAC,CAAC,CAAC;oBACH,IAAG,QAAQ,IAAI,QAAQ;wBAAC,OAAO,QAAQ,CAAC,MAAO,CAAC;oBAChD,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,IAAG,OAAO,CAAC,SAAS,EAAE,GAAC,KAAK,IAAE,QAAQ,CAAC,UAAU,GAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAC,QAAQ,CAAC,aAAa,CAAC,GAAC,KAAK;wBAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;oBACtJ,MAAM,SAAS,GAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAC,IAAI,CAAC,EAAC,OAAO,GAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAClG,MAAM,OAAO,GAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACzF,MAAM,QAAQ,GAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,eAAe,KAAG,QAAQ,IAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,GAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAC,CAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAA,CAAC,CAAA,EAAE,CAAC;oBACpN,IAAI,MAAM,GAAC,CAAC,CAAC;oBACb,IAAG,CAAC;wBAAA,MAAM,QAAQ,GAAC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAE,EAAE,GAAC,WAAW,GAAC,IAAI,CAAC,CAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAC,QAAQ,CAAC,KAAK,EAAC,EAAC,YAAY,EAAC,OAAO,EAAC,mBAAmB,EAAC,MAAM,CAAC,SAAS,CAAC,EAAC,mBAAmB,EAAC,OAAO,GAAC,QAAQ,EAAC,uBAAuB,EAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,EAAC,CAAC,CAAC,CAAA,CAAC,EAAC,KAAK,CAAC,CAAC;wBAAA,IAAG,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAE,QAAQ,CAAC,MAAM,GAAC,GAAG,IAAE,QAAQ,CAAC,MAAM,GAAC,GAAG;4BAAC,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;wBAAA,MAAM,GAAC,QAAQ,CAAC,MAAM,CAAC;oBAAA,CAAC;oBACvZ,MAAM,CAAC;wBAAA,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBAAA,CAAC;oBACxC,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,EAAC,GAAG,EAAA,EAAE;wBACpC,MAAM,MAAM,GAAC,MAAM,IAAI,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC;wBAAA,IAAG,CAAC,MAAM;4BAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;wBACrE,MAAM,GAAG,GAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAAA,IAAG,GAAG;4BAAC,OAAO,GAAG,CAAC;wBACpE,IAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,KAAG,KAAK,CAAC,KAAK,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;4BAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;wBACpH,MAAM,UAAU,GAAC,CAAC,MAAM,GAAG,CAAC,4EAA4E,SAAS,4BAA4B,EAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACxL,IAAG,UAAU,EAAE,cAAc,KAAG,QAAQ,CAAC,WAAW;4BAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAC5E,MAAM,QAAQ,GAAC,MAAM,IAAE,GAAG,IAAE,MAAM,GAAC,GAAG,CAAC;wBACvC,MAAM,GAAG,CAAC,iFAAiF,SAAS,iBAAiB,EAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,OAAO,EAAC,QAAQ,CAAA,CAAC,CAAA,UAAU,CAAA,CAAC,CAAA,MAAM,KAAG,GAAG,IAAE,MAAM,KAAG,GAAG,CAAA,CAAC,CAAA,UAAU,CAAA,CAAC,CAAA,QAAQ,EAAC,MAAM,IAAE,GAAG,IAAE,MAAM,IAAE,GAAG,CAAA,CAAC,CAAA,MAAM,CAAA,CAAC,CAAA,IAAI,CAAC,CAAC,CAAC;wBAC/P,IAAG,MAAM,CAAC,MAAM,CAAC,KAAK,KAAG,SAAS,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,YAAY,CAAC,CAAC;4BAAA,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;wBAAA,CAAC;wBAC5G,IAAG,QAAQ,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,UAAU,CAAC,CAAC;4BAAA,OAAO,QAAQ,CAAC,mBAAmB,CAAC,CAAC;wBAAA,CAAC;wBAC1F,IAAG,MAAM,KAAG,GAAG,IAAE,MAAM,KAAG,GAAG,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,MAAM,KAAG,GAAG,CAAA,CAAC,CAAA,MAAM,CAAA,CAAC,CAAA,WAAW,CAAC,CAAC;4BAAA,OAAO,QAAQ,CAAC,MAAM,KAAG,GAAG,CAAA,CAAC,CAAA,MAAM,CAAA,CAAC,CAAA,WAAW,CAAC,CAAC;wBAAA,CAAC;wBAC7I,IAAG,QAAQ,CAAC,OAAO,IAAE,CAAC,EAAC,CAAC;4BAAA,MAAM,cAAc,CAAC,GAAG,EAAC,CAAC,EAAC,WAAW,CAAC,CAAC;4BAAA,OAAO,QAAQ,CAAC,oBAAoB,CAAC,CAAC;wBAAA,CAAC;wBACvG,MAAM,KAAK,GAAC,CAAC,IAAI,EAAC,IAAI,EAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAC,CAAC,CAAE,CAAC;wBACnD,MAAM,GAAG,CAAC,yKAAyK,SAAS,EAAE,EAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAC,KAAK,CAAC,CAAC,CAAC;wBACpO,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBAClC,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YAAA,CAAC;YAAA,OAAM,KAAK,EAAC,CAAC;gBACf,IAAG,WAAW;oBAAC,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC/C,IAAG,KAAK,YAAY,qBAAqB,EAAC,CAAC;oBAAA,IAAG,KAAK,CAAC,IAAI,KAAG,eAAe;wBAAC,MAAM,KAAK,CAAC;oBAAA,IAAG,KAAK,CAAC,IAAI,KAAG,iBAAiB;wBAAC,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBAAA,IAAG,KAAK,CAAC,IAAI,KAAG,UAAU;wBAAC,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;oBAAA,IAAG,KAAK,CAAC,IAAI,KAAG,SAAS;wBAAC,OAAO,KAAK,CAAC,OAAO,CAAA,CAAC,CAAA,UAAU,CAAA,CAAC,CAAA,SAAS,CAAC,CAAC;gBAAA,CAAC;gBACnR,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;oBAAO,CAAC;gBACP,wFAAwF;gBACxF,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA,EAAE,GAAC,IAAG,OAAO;oBAAC,IAAI,GAAC,KAAK,CAAC,CAAA,CAAC,EAAC,GAAE,EAAE,GAAC,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,MAAM,CAAC,UAAU,IAAE,OAAO,GAAC,IAAI,CAAC,CAAA,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAA,CAAC;KAClE,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type OwnedEventPool } from './events-postgres-owned.js';
2
+ import type { ExternalMcpEventInvocation } from './events-external.js';
3
+ export declare class PostgresEventDispatchMigrationError extends Error {
4
+ readonly code: 'INCOMPATIBLE_SCHEMA' | 'UNAVAILABLE' | 'OUTCOME_UNKNOWN';
5
+ readonly phase: 'capture' | 'lifecycle' | 'delivery' | 'dispatch';
6
+ readonly captureCommitted: boolean;
7
+ readonly lifecycleCommitted: boolean;
8
+ readonly deliveryCommitted: boolean;
9
+ constructor(code: 'INCOMPATIBLE_SCHEMA' | 'UNAVAILABLE' | 'OUTCOME_UNKNOWN', phase?: 'capture' | 'lifecycle' | 'delivery' | 'dispatch', captureCommitted?: boolean, lifecycleCommitted?: boolean, deliveryCommitted?: boolean);
10
+ }
11
+ /** Runs the capture, lifecycle, and delivery migrations before the dispatch
12
+ * migration. If a later migration fails, earlier prerequisite schemas can
13
+ * remain installed. Serving constructors never call this function.
14
+ */
15
+ export declare function createPostgresEventDispatchMigrator(pool: OwnedEventPool): Readonly<{
16
+ migrate(invocation: ExternalMcpEventInvocation): Promise<void>;
17
+ settle(invocation: ExternalMcpEventInvocation): Promise<boolean>;
18
+ }>;
19
+ //# sourceMappingURL=events-postgres-dispatch-migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-postgres-dispatch-migrations.d.ts","sourceRoot":"","sources":["../src/events-postgres-dispatch-migrations.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8B,KAAK,cAAc,EAAiB,MAAM,4BAA4B,CAAC;AAC5G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,qBAAa,mCAAoC,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAC,qBAAqB,GAAC,aAAa,GAAC,iBAAiB;IAC9E,QAAQ,CAAC,KAAK,EAAC,SAAS,GAAC,WAAW,GAAC,UAAU,GAAC,UAAU;IAC1D,QAAQ,CAAC,gBAAgB;IAAO,QAAQ,CAAC,kBAAkB;IAAO,QAAQ,CAAC,iBAAiB;gBAFxE,IAAI,EAAC,qBAAqB,GAAC,aAAa,GAAC,iBAAiB,EACrE,KAAK,GAAC,SAAS,GAAC,WAAW,GAAC,UAAU,GAAC,UAAqB,EAC5D,gBAAgB,UAAM,EAAU,kBAAkB,UAAM,EAAU,iBAAiB,UAAM;CAGnG;AA4ED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAC,cAAc;wBAoClD,0BAA0B;uBACrB,0BAA0B;GAEnD"}