@emseepea/server 0.23.1 → 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 (65) hide show
  1. package/dist/app-shutdown.d.ts +11 -0
  2. package/dist/app-shutdown.d.ts.map +1 -0
  3. package/dist/app-shutdown.js +46 -0
  4. package/dist/app-shutdown.js.map +1 -0
  5. package/dist/events-cloud-tasks-transport.d.ts +34 -0
  6. package/dist/events-cloud-tasks-transport.d.ts.map +1 -0
  7. package/dist/events-cloud-tasks-transport.js +232 -0
  8. package/dist/events-cloud-tasks-transport.js.map +1 -0
  9. package/dist/events-external.d.ts +62 -0
  10. package/dist/events-external.d.ts.map +1 -0
  11. package/dist/events-external.js +289 -0
  12. package/dist/events-external.js.map +1 -0
  13. package/dist/events-google-sdk-lifetime.d.ts +7 -0
  14. package/dist/events-google-sdk-lifetime.d.ts.map +1 -0
  15. package/dist/events-google-sdk-lifetime.js +70 -0
  16. package/dist/events-google-sdk-lifetime.js.map +1 -0
  17. package/dist/events-postgres-delivery-migrations.d.ts +18 -0
  18. package/dist/events-postgres-delivery-migrations.d.ts.map +1 -0
  19. package/dist/events-postgres-delivery-migrations.js +146 -0
  20. package/dist/events-postgres-delivery-migrations.js.map +1 -0
  21. package/dist/events-postgres-delivery-owned.d.ts +16 -0
  22. package/dist/events-postgres-delivery-owned.d.ts.map +1 -0
  23. package/dist/events-postgres-delivery-owned.js +178 -0
  24. package/dist/events-postgres-delivery-owned.js.map +1 -0
  25. package/dist/events-postgres-delivery.d.ts +29 -0
  26. package/dist/events-postgres-delivery.d.ts.map +1 -0
  27. package/dist/events-postgres-delivery.js +299 -0
  28. package/dist/events-postgres-delivery.js.map +1 -0
  29. package/dist/events-postgres-dispatch-migrations.d.ts +19 -0
  30. package/dist/events-postgres-dispatch-migrations.d.ts.map +1 -0
  31. package/dist/events-postgres-dispatch-migrations.js +162 -0
  32. package/dist/events-postgres-dispatch-migrations.js.map +1 -0
  33. package/dist/events-postgres-dispatch.d.ts +39 -0
  34. package/dist/events-postgres-dispatch.d.ts.map +1 -0
  35. package/dist/events-postgres-dispatch.js +270 -0
  36. package/dist/events-postgres-dispatch.js.map +1 -0
  37. package/dist/events-postgres-lifecycle-migrations.d.ts +17 -0
  38. package/dist/events-postgres-lifecycle-migrations.d.ts.map +1 -0
  39. package/dist/events-postgres-lifecycle-migrations.js +125 -0
  40. package/dist/events-postgres-lifecycle-migrations.js.map +1 -0
  41. package/dist/events-postgres-lifecycle.d.ts +13 -0
  42. package/dist/events-postgres-lifecycle.d.ts.map +1 -0
  43. package/dist/events-postgres-lifecycle.js +176 -0
  44. package/dist/events-postgres-lifecycle.js.map +1 -0
  45. package/dist/events-postgres-migrations.d.ts +32 -0
  46. package/dist/events-postgres-migrations.d.ts.map +1 -0
  47. package/dist/events-postgres-migrations.js +329 -0
  48. package/dist/events-postgres-migrations.js.map +1 -0
  49. package/dist/events-postgres-owned.d.ts +16 -0
  50. package/dist/events-postgres-owned.d.ts.map +1 -0
  51. package/dist/events-postgres-owned.js +161 -0
  52. package/dist/events-postgres-owned.js.map +1 -0
  53. package/dist/events-postgres.d.ts +53 -0
  54. package/dist/events-postgres.d.ts.map +1 -0
  55. package/dist/events-postgres.js +289 -0
  56. package/dist/events-postgres.js.map +1 -0
  57. package/dist/events.d.ts +30 -1
  58. package/dist/events.d.ts.map +1 -1
  59. package/dist/events.js +146 -134
  60. package/dist/events.js.map +1 -1
  61. package/dist/index.d.ts +7 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +219 -90
  64. package/dist/index.js.map +1 -1
  65. package/package.json +31 -6
@@ -0,0 +1,289 @@
1
+ import { performance } from "node:perf_hooks";
2
+ import { checkedListWire, McpEventInputError, mcpEventSubscriptionIdentity, normalizeMcpEventDefinitions, validateMcpEventSubscription, validateMcpEventUnsubscribe, verifyMcpEventCallback, } from "./events.js";
3
+ import { postCheckedWebhook } from "./events-webhook.js";
4
+ export class ExternalMcpEventError extends Error {
5
+ code;
6
+ constructor(code) {
7
+ super(code);
8
+ this.code = code;
9
+ this.name = "ExternalMcpEventError";
10
+ }
11
+ }
12
+ function fail(code) { throw new ExternalMcpEventError(code); }
13
+ function text(value) { return typeof value === "string" && !!value && Buffer.byteLength(value) <= 8192; }
14
+ function token(value) { return text(value) && Buffer.byteLength(value) <= 240; }
15
+ function epoch(value) { return Number.isSafeInteger(value) && Number(value) > 0 && Number(value) < 8640000000000000; }
16
+ function copy(value, depth = 0) {
17
+ if (depth > 32)
18
+ fail("UNAVAILABLE");
19
+ if (value === null || typeof value === "string" || typeof value === "boolean" || typeof value === "number" && Number.isFinite(value))
20
+ return value;
21
+ if (!value || typeof value !== "object" || ![Object.prototype, Array.prototype].includes(Object.getPrototypeOf(value)))
22
+ fail("UNAVAILABLE");
23
+ const descriptors = Object.getOwnPropertyDescriptors(value);
24
+ const array = Array.isArray(value);
25
+ const result = array ? [] : Object.create(null);
26
+ if (array && Reflect.ownKeys(descriptors).length !== value.length + 1)
27
+ fail("UNAVAILABLE");
28
+ for (const key of Reflect.ownKeys(descriptors)) {
29
+ if (typeof key !== "string")
30
+ fail("UNAVAILABLE");
31
+ const field = descriptors[key];
32
+ if (!("value" in field) || !field.enumerable && !(array && key === "length"))
33
+ fail("UNAVAILABLE");
34
+ if (array && key === "length")
35
+ continue;
36
+ if (array && !/^(0|[1-9][0-9]*)$/.test(key))
37
+ fail("UNAVAILABLE");
38
+ result[key] = copy(field.value, depth + 1);
39
+ }
40
+ return Object.freeze(result);
41
+ }
42
+ function makeClock(invocation) {
43
+ const signal = invocation?.signal ?? new AbortController().signal;
44
+ const deadlineMs = invocation?.deadlineMs ?? Date.now() + 30000;
45
+ if (!Number.isFinite(deadlineMs))
46
+ fail("INVALID_INPUT");
47
+ if (signal.aborted)
48
+ fail("ABORTED");
49
+ const remaining = Math.min(30000, deadlineMs - Date.now());
50
+ if (remaining <= 0)
51
+ fail("DEADLINE");
52
+ return { signal, end: performance.now() + remaining, deadlineMs: Date.now() + remaining };
53
+ }
54
+ function admit(time) {
55
+ if (time.signal.aborted)
56
+ fail("ABORTED");
57
+ if (performance.now() >= time.end)
58
+ fail("DEADLINE");
59
+ }
60
+ function observed(value, identity) {
61
+ const snapshot = copy(value);
62
+ if (!snapshot || snapshot.id !== identity.id || snapshot.ownerKey !== identity.ownerKey ||
63
+ !(snapshot.revision === null || token(snapshot.revision)) || !(snapshot.generation === null || token(snapshot.generation)) ||
64
+ typeof snapshot.active !== "boolean" || !epoch(snapshot.observedAt))
65
+ fail("UNAVAILABLE");
66
+ if (snapshot.revision === null && (snapshot.generation !== null || snapshot.active || snapshot.subscription !== null))
67
+ fail("UNAVAILABLE");
68
+ const prior = snapshot.subscription;
69
+ if (prior !== null) {
70
+ if (!snapshot.revision || !snapshot.generation || !epoch(prior.expiresAt) || prior.id !== identity.id ||
71
+ prior.ownerKey !== identity.ownerKey || prior.name !== identity.name || prior.url !== identity.url ||
72
+ mcpEventSubscriptionIdentity(prior.ownerKey, prior.name, prior.arguments, prior.url) !== identity.id)
73
+ fail("UNAVAILABLE");
74
+ }
75
+ if (snapshot.active && (!prior || prior.expiresAt <= snapshot.observedAt))
76
+ fail("UNAVAILABLE");
77
+ if (!snapshot.active && prior && prior.expiresAt > snapshot.observedAt)
78
+ fail("UNAVAILABLE");
79
+ return snapshot;
80
+ }
81
+ /** No SQL/provider implementation and no legacy queue are created by this runtime. */
82
+ export function createExternalMcpEventRuntime(options, webhookPost = postCheckedWebhook) {
83
+ if (!options || options.mode !== "external" || "store" in options || !Array.isArray(options.definitions) ||
84
+ !options.definitions.length || options.definitions.length > 100 || typeof options.ownerKey !== "function" ||
85
+ typeof options.authorize !== "function" || typeof options.health !== "function" || !options.lifecycle ||
86
+ ["observe", "activate", "revoke"].some((key) => typeof options.lifecycle[key] !== "function")) {
87
+ throw new TypeError("External Events require an explicit lifecycle and cannot include a legacy store");
88
+ }
89
+ const callbackMs = options.callbackTimeoutMs ?? 5000;
90
+ if (!Number.isSafeInteger(callbackMs) || callbackMs < 1 || callbackMs > 10000)
91
+ throw new TypeError("events.callbackTimeoutMs must be between 1 and 10000");
92
+ const definitions = normalizeMcpEventDefinitions(options.definitions);
93
+ const pendingOperations = new Set();
94
+ let closing = false;
95
+ function bound(time) {
96
+ async function step(work, effect = false) {
97
+ if (closing)
98
+ fail("ABORTED");
99
+ admit(time);
100
+ let started = false;
101
+ let timer;
102
+ let stop;
103
+ const deadline = new AbortController();
104
+ const signal = AbortSignal.any([time.signal, deadline.signal]);
105
+ const stageEnd = Math.min(time.end, performance.now() + callbackMs);
106
+ const stageDeadlineMs = Date.now() + Math.max(0, stageEnd - performance.now());
107
+ try {
108
+ const operation = Promise.resolve().then(() => {
109
+ if (closing)
110
+ fail("ABORTED");
111
+ admit(time);
112
+ started = true;
113
+ if (performance.now() >= stageEnd)
114
+ fail("DEADLINE");
115
+ return work({ signal, deadlineMs: stageDeadlineMs });
116
+ });
117
+ pendingOperations.add(operation);
118
+ void operation.then(() => pendingOperations.delete(operation), () => pendingOperations.delete(operation));
119
+ const result = await Promise.race([
120
+ operation,
121
+ new Promise((_resolve, reject) => {
122
+ timer = setTimeout(() => { deadline.abort(); reject(new ExternalMcpEventError("DEADLINE")); }, Math.max(1, stageEnd - performance.now()));
123
+ stop = () => reject(new ExternalMcpEventError("ABORTED"));
124
+ time.signal.addEventListener("abort", stop, { once: true });
125
+ if (time.signal.aborted)
126
+ stop();
127
+ }),
128
+ ]);
129
+ if (performance.now() >= stageEnd) {
130
+ deadline.abort();
131
+ fail("DEADLINE");
132
+ }
133
+ admit(time);
134
+ return result;
135
+ }
136
+ catch (error) {
137
+ if (error instanceof ExternalMcpEventError && error.code === "SUBSCRIPTION_CHANGED")
138
+ throw error;
139
+ if (effect && started)
140
+ fail("OUTCOME_UNKNOWN");
141
+ if (error instanceof ExternalMcpEventError || error instanceof McpEventInputError)
142
+ throw error;
143
+ return fail("UNAVAILABLE");
144
+ }
145
+ finally {
146
+ if (timer)
147
+ clearTimeout(timer);
148
+ if (stop)
149
+ time.signal.removeEventListener("abort", stop);
150
+ }
151
+ }
152
+ const runtime = {
153
+ definitions,
154
+ async ownerKey(auth) {
155
+ const owner = await step(() => options.ownerKey(auth));
156
+ if (typeof owner !== "string" || !owner.trim() || Buffer.byteLength(owner) > 256)
157
+ fail("UNAVAILABLE");
158
+ return owner;
159
+ },
160
+ async list(ownerKey) {
161
+ const allowed = [];
162
+ for (const definition of definitions) {
163
+ if (await step(() => options.authorize({ ownerKey, name: definition.name, arguments: {}, phase: "list" })) !== true)
164
+ continue;
165
+ if (definition.listWire) {
166
+ const wire = await step(() => definition.listWire(ownerKey, definition.wire));
167
+ if (wire)
168
+ allowed.push(checkedListWire(definition, wire));
169
+ }
170
+ else
171
+ allowed.push(definition.wire);
172
+ }
173
+ return allowed;
174
+ },
175
+ validateSubscription(params) { return validateMcpEventSubscription(definitions, params); },
176
+ async subscribe(ownerKey, params) {
177
+ admit(time);
178
+ const valid = runtime.validateSubscription(params);
179
+ const suppliedTtl = params.ttlMs;
180
+ if (suppliedTtl !== undefined && suppliedTtl !== null && (!Number.isSafeInteger(suppliedTtl) || Number(suppliedTtl) <= 0))
181
+ throw new McpEventInputError(-32602, "invalid_ttl");
182
+ const ttlMs = Math.min(typeof suppliedTtl === "number" ? suppliedTtl : 86400000, 86400000);
183
+ const arguments_ = copy(valid.arguments);
184
+ const id = mcpEventSubscriptionIdentity(ownerKey, valid.definition.name, arguments_, valid.url);
185
+ const identity = Object.freeze({ id, ownerKey, name: valid.definition.name, arguments: arguments_, url: valid.url });
186
+ const snapshot = observed(await step((context) => options.lifecycle.observe(identity, context)), identity);
187
+ const phase = snapshot.active ? "refresh" : "subscribe";
188
+ const authorize = async () => {
189
+ if (await step(() => options.authorize({ ownerKey, name: identity.name, arguments: arguments_, phase })) !== true)
190
+ throw new McpEventInputError(-32602, "capability_not_found");
191
+ };
192
+ await authorize(); // No outbound challenge precedes current business authority.
193
+ await step(() => verifyMcpEventCallback(valid.url, valid.secret, id, Date.now(), webhookPost));
194
+ await authorize();
195
+ const rawActivation = await step((context) => options.lifecycle.activate(Object.freeze({
196
+ ...identity, expectedRevision: snapshot.revision, intent: snapshot.active ? "renew" : "new", secret: valid.secret, ttlMs,
197
+ }), context), true);
198
+ let activation;
199
+ try {
200
+ activation = copy(rawActivation);
201
+ }
202
+ catch {
203
+ fail("OUTCOME_UNKNOWN");
204
+ }
205
+ if (!activation || activation.id !== id || !token(activation.revision) || !token(activation.generation) ||
206
+ !epoch(activation.observedAt) || activation.observedAt < snapshot.observedAt || !epoch(activation.expiresAt) || activation.expiresAt <= activation.observedAt ||
207
+ activation.expiresAt - activation.observedAt > ttlMs || activation.revision === snapshot.revision ||
208
+ (snapshot.active ? activation.generation !== snapshot.generation : activation.generation === snapshot.generation))
209
+ fail("OUTCOME_UNKNOWN");
210
+ return { id, refreshBefore: new Date(activation.expiresAt).toISOString(), cursor: null, truncated: false };
211
+ },
212
+ async unsubscribe(ownerKey, params) {
213
+ admit(time);
214
+ const valid = validateMcpEventUnsubscribe(definitions, params);
215
+ const arguments_ = copy(valid.arguments);
216
+ const id = mcpEventSubscriptionIdentity(ownerKey, valid.definition.name, arguments_, valid.url);
217
+ await step((context) => options.lifecycle.revoke(Object.freeze({ id, ownerKey, name: valid.definition.name, arguments: arguments_, url: valid.url }), context), true);
218
+ },
219
+ async publish() { fail("EXTERNAL_PUBLICATION_REQUIRES_CAPTURE"); },
220
+ async ready() { try {
221
+ return await step(() => options.health()) === true;
222
+ }
223
+ catch {
224
+ return false;
225
+ } },
226
+ };
227
+ return Object.freeze(runtime);
228
+ }
229
+ // Unbound calls are for bounded readiness/diagnostics. RPC uses one shared invocation clock.
230
+ const unbound = {
231
+ definitions,
232
+ ownerKey: (auth) => bound(makeClock()).ownerKey(auth),
233
+ list: (owner) => bound(makeClock()).list(owner),
234
+ validateSubscription: (params) => validateMcpEventSubscription(definitions, params),
235
+ subscribe: (owner, params) => bound(makeClock()).subscribe(owner, params),
236
+ unsubscribe: (owner, params) => bound(makeClock()).unsubscribe(owner, params),
237
+ publish: async () => fail("EXTERNAL_PUBLICATION_REQUIRES_CAPTURE"),
238
+ ready: () => bound(makeClock()).ready(),
239
+ };
240
+ return Object.freeze({ ...unbound,
241
+ forInvocation(invocation) {
242
+ if (closing)
243
+ fail("ABORTED");
244
+ return bound(makeClock(invocation));
245
+ },
246
+ async settle(input) {
247
+ closing = true;
248
+ const controller = new AbortController();
249
+ if (input && (!input.signal || !Number.isFinite(input.deadlineMs)))
250
+ return false;
251
+ const duration = Math.max(0, Math.min(10000, input ? input.deadlineMs - Date.now() : 10000));
252
+ const end = performance.now() + duration;
253
+ const invocation = { signal: controller.signal, deadlineMs: input ? Math.min(input.deadlineMs, Date.now() + duration) : Date.now() + duration };
254
+ const abort = () => controller.abort();
255
+ input?.signal.addEventListener('abort', abort, { once: true });
256
+ if (input?.signal.aborted || duration === 0)
257
+ controller.abort();
258
+ let timer, stopJoin;
259
+ try {
260
+ const settled = await Promise.race([
261
+ Promise.all([
262
+ Promise.allSettled(pendingOperations),
263
+ Promise.resolve().then(() => options.lifecycle.settle ? options.lifecycle.settle(invocation) : true),
264
+ ]).then(([, adapterSettled]) => adapterSettled === true, () => false),
265
+ new Promise((resolve) => {
266
+ stopJoin = () => resolve(false);
267
+ controller.signal.addEventListener('abort', stopJoin, { once: true });
268
+ timer = setTimeout(() => { controller.abort(); resolve(false); }, duration);
269
+ if (controller.signal.aborted)
270
+ stopJoin();
271
+ }),
272
+ ]);
273
+ if (!settled || controller.signal.aborted || performance.now() >= end) {
274
+ controller.abort();
275
+ return false;
276
+ }
277
+ return settled;
278
+ }
279
+ finally {
280
+ if (timer)
281
+ clearTimeout(timer);
282
+ input?.signal.removeEventListener('abort', abort);
283
+ if (stopJoin)
284
+ controller.signal.removeEventListener('abort', stopJoin);
285
+ }
286
+ },
287
+ });
288
+ }
289
+ //# sourceMappingURL=events-external.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-external.js","sourceRoot":"","sources":["../src/events-external.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,eAAe,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,4BAA4B,EAC/F,4BAA4B,EAAE,2BAA2B,EAAE,sBAAsB,GAElF,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAkCzD,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACzB;IAArB,YAAqB,IAA+B;QAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAA/C,SAAI,GAAJ,IAAI,CAA2B;QAAiB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IAAC,CAAC;CAC5G;AAOD,SAAS,IAAI,CAAC,IAA+B,IAAW,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChG,SAAS,IAAI,CAAC,KAAc,IAAqB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AACnI,SAAS,KAAK,CAAC,KAAc,IAAqB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAC1G,SAAS,KAAK,CAAC,KAAc,IAAqB,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;AAChJ,SAAS,IAAI,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;IACrC,IAAI,KAAK,GAAG,EAAE;QAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnJ,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5I,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,MAAM,GAAwC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrF,IAAI,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3F,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAE,CAAC;QAChC,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,KAAK,QAAQ,CAAC;YAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAClG,IAAI,KAAK,IAAI,GAAG,KAAK,QAAQ;YAAE,SAAS;QACxC,IAAI,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAChE,MAAkC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AACD,SAAS,SAAS,CAAC,UAAuC;IACxD,MAAM,MAAM,GAAG,UAAU,EAAE,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;IAClE,MAAM,UAAU,GAAG,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,OAAO;QAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3D,IAAI,SAAS,IAAI,CAAC;QAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;AAC5F,CAAC;AACD,SAAS,KAAK,CAAC,IAAW;IACxB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG;QAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACtD,CAAC;AACD,SAAS,QAAQ,CAAC,KAAc,EAAE,QAAkC;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAgC,CAAC;IAC5D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;QACrF,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1H,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3F,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;QAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3I,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC;IACpC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;YACnG,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;YAClG,4BAA4B,CAAC,KAAK,CAAC,QAAQ,EAAC,KAAK,CAAC,IAAI,EAAC,KAAK,CAAC,SAAS,EAAC,KAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,EAAE;YAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC;QAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC/F,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU;QAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5F,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD,sFAAsF;AACtF,MAAM,UAAU,6BAA6B,CAAC,OAAiC,EAC7E,cAAyC,kBAAkB;IAC3D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QACtG,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU;QACzG,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS;QACrG,CAAC,SAAS,EAAC,UAAU,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,GAAsC,CAAC,KAAK,UAAU,CAAC,EAAE,CAAC;QACjI,MAAM,IAAI,SAAS,CAAC,iFAAiF,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAC;IAC3J,MAAM,WAAW,GAAG,4BAA4B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACtD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,SAAS,KAAK,CAAC,IAAW;QACxB,KAAK,UAAU,IAAI,CAAI,IAAgE,EAAE,MAAM,GAAG,KAAK;YACrG,IAAI,OAAO;gBAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAC;YACZ,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,KAAgD,CAAC;YACrD,IAAI,IAA8B,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAC,WAAW,CAAC,GAAG,EAAE,GAAC,UAAU,CAAC,CAAC;YACjE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,QAAQ,GAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC5C,IAAI,OAAO;wBAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,CAAC;oBAAC,OAAO,GAAG,IAAI,CAAC;oBAC5B,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,QAAQ;wBAAE,IAAI,CAAC,UAAU,CAAC,CAAC;oBACpD,OAAO,IAAI,CAAC,EAAC,MAAM,EAAC,UAAU,EAAC,eAAe,EAAC,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;gBACH,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjC,KAAK,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;gBACzG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBAChC,SAAS;oBACT,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAC,MAAM,EAAE,EAAE;wBACrC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,QAAQ,GAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;wBACtI,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;wBAC1D,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAC,IAAI,EAAC,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,CAAC;wBACvD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;4BAAE,IAAI,EAAE,CAAC;oBAClC,CAAC,CAAC;iBACH,CAAC,CAAC;gBACH,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAAC,CAAC;gBAC1E,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO,MAAM,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,qBAAqB,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB;oBAAE,MAAM,KAAK,CAAC;gBACjG,IAAI,MAAM,IAAI,OAAO;oBAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC/C,IAAI,KAAK,YAAY,qBAAqB,IAAI,KAAK,YAAY,kBAAkB;oBAAE,MAAM,KAAK,CAAC;gBAC/F,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,CAAC;oBAAS,CAAC;gBACT,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC/B,IAAI,IAAI;oBAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAC,IAAI,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAoB;YAC/B,WAAW;YACX,KAAK,CAAC,QAAQ,CAAC,IAAc;gBAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG;oBAAE,IAAI,CAAC,aAAa,CAAC,CAAC;gBACtG,OAAO,KAAK,CAAC;YACf,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,QAAQ;gBACjB,MAAM,OAAO,GAAG,EAAE,CAAC;gBACnB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;oBACrC,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,CAAC,IAAI,EAAC,SAAS,EAAC,EAAE,EAAC,KAAK,EAAC,MAAM,EAAC,CAAC,CAAC,KAAK,IAAI;wBAAE,SAAS;oBACtH,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;wBACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,QAAS,CAAC,QAAQ,EAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC9E,IAAI,IAAI;4BAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAC,IAAI,CAAC,CAAC,CAAC;oBAC3D,CAAC;;wBAAM,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACvC,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,oBAAoB,CAAC,MAAM,IAAI,OAAO,4BAA4B,CAAC,WAAW,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzF,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAC,MAAM;gBAC7B,KAAK,CAAC,IAAI,CAAC,CAAC;gBACZ,MAAM,KAAK,GAAG,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM,WAAW,GAAI,MAAiC,CAAC,KAAK,CAAC;gBAC7D,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAAE,MAAM,IAAI,kBAAkB,CAAC,CAAC,KAAK,EAAC,aAAa,CAAC,CAAC;gBAC9K,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAC,QAAQ,CAAC,CAAC;gBAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAqC,CAAC;gBAC7E,MAAM,EAAE,GAAG,4BAA4B,CAAC,QAAQ,EAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAC,UAAU,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7F,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAC,EAAE,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAC,SAAS,EAAC,UAAU,EAAC,GAAG,EAAC,KAAK,CAAC,GAAG,EAAC,CAAC,CAAC;gBAC5G,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAC,OAAO,CAAC,CAAC,EAAC,QAAQ,CAAC,CAAC;gBACzG,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;gBACxD,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;oBAC3B,IAAI,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,CAAC,IAAI,EAAC,SAAS,EAAC,UAAU,EAAC,KAAK,EAAC,CAAC,CAAC,KAAK,IAAI;wBAAE,MAAM,IAAI,kBAAkB,CAAC,CAAC,KAAK,EAAC,sBAAsB,CAAC,CAAC;gBAC1K,CAAC,CAAC;gBACF,MAAM,SAAS,EAAE,CAAC,CAAC,6DAA6D;gBAChF,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC,GAAG,EAAC,KAAK,CAAC,MAAM,EAAC,EAAE,EAAC,IAAI,CAAC,GAAG,EAAE,EAAC,WAAW,CAAC,CAAC,CAAC;gBAC3F,MAAM,SAAS,EAAE,CAAC;gBAClB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;oBACrF,GAAG,QAAQ,EAAC,gBAAgB,EAAC,QAAQ,CAAC,QAAQ,EAAC,MAAM,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAC,MAAM,EAAC,KAAK,CAAC,MAAM,EAAC,KAAK;iBAClH,CAAC,EAAC,OAAO,CAAC,EAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,UAAsC,CAAC;gBAC3C,IAAI,CAAC;oBAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAA+B,CAAC;gBAAC,CAAC;gBACvE,MAAM,CAAC;oBAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAAC,CAAC;gBAClC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;oBACrG,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,UAAU;oBAC7J,UAAU,CAAC,SAAS,GAAC,UAAU,CAAC,UAAU,GAAG,KAAK,IAAI,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;oBAC/F,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,CAAC;oBAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC7I,OAAO,EAAC,EAAE,EAAC,aAAa,EAAC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAC,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,KAAK,EAAC,CAAC;YACrG,CAAC;YACD,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAC,MAAM;gBAC/B,KAAK,CAAC,IAAI,CAAC,CAAC;gBACZ,MAAM,KAAK,GAAG,2BAA2B,CAAC,WAAW,EAAC,MAAM,CAAC,CAAC;gBAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAqC,CAAC;gBAC7E,MAAM,EAAE,GAAG,4BAA4B,CAAC,QAAQ,EAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAC,UAAU,EAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7F,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC,EAAE,EAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAC,SAAS,EAAC,UAAU,EAAC,GAAG,EAAC,KAAK,CAAC,GAAG,EAAC,CAAC,EAAC,OAAO,CAAC,EAAC,IAAI,CAAC,CAAC;YAC7J,CAAC;YACD,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC;YAClE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;gBAAC,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,KAAK,CAAC;YAAC,CAAC,CAAC,CAAC;SACtG,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,6FAA6F;IAC7F,MAAM,OAAO,GAAoB;QAC/B,WAAW;QACX,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACrD,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/C,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,4BAA4B,CAAC,WAAW,EAAC,MAAM,CAAC;QAClF,SAAS,EAAE,CAAC,KAAK,EAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,EAAC,MAAM,CAAC;QACvE,WAAW,EAAE,CAAC,KAAK,EAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,EAAC,MAAM,CAAC;QAC3E,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC;QAClE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE;KACxC,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,EAAC,GAAG,OAAO;QAC9B,aAAa,CAAC,UAAqC;YACjD,IAAI,OAAO;gBAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAiC;YAC5C,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,IAAG,KAAK,IAAE,CAAC,CAAC,KAAK,CAAC,MAAM,IAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAAC,OAAO,KAAK,CAAC;YAC3E,MAAM,QAAQ,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,KAAK,CAAA,CAAC,CAAA,KAAK,CAAC,UAAU,GAAC,IAAI,CAAC,GAAG,EAAE,CAAA,CAAC,CAAA,KAAK,CAAC,CAAC,CAAC;YACnF,MAAM,GAAG,GAAC,WAAW,CAAC,GAAG,EAAE,GAAC,QAAQ,CAAC;YACrC,MAAM,UAAU,GAAG,EAAC,MAAM,EAAC,UAAU,CAAC,MAAM,EAAC,UAAU,EAAC,KAAK,CAAA,CAAC,CAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAC,IAAI,CAAC,GAAG,EAAE,GAAC,QAAQ,CAAC,CAAA,CAAC,CAAA,IAAI,CAAC,GAAG,EAAE,GAAC,QAAQ,EAAC,CAAC;YAClI,MAAM,KAAK,GAAC,GAAE,EAAE,CAAA,UAAU,CAAC,KAAK,EAAE,CAAC;YAAA,KAAK,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAC,KAAK,EAAC,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,CAAC;YAC7F,IAAG,KAAK,EAAE,MAAM,CAAC,OAAO,IAAE,QAAQ,KAAG,CAAC;gBAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC1D,IAAI,KAAgD,EAAC,QAA6B,CAAC;YACnF,IAAI,CAAC;gBACH,MAAM,OAAO,GAAC,MAAM,OAAO,CAAC,IAAI,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC;wBACV,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC;wBACrC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;qBACrG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAE,EAAE,CAAC,cAAc,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;oBACpE,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,EAAE;wBAC7B,QAAQ,GAAC,GAAE,EAAE,CAAA,OAAO,CAAC,KAAK,CAAC,CAAC;wBAAA,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAC,QAAQ,EAAC,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,CAAC;wBAC7F,KAAK,GAAC,UAAU,CAAC,GAAE,EAAE,GAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA,CAAC,EAAC,QAAQ,CAAC,CAAC;wBACpE,IAAG,UAAU,CAAC,MAAM,CAAC,OAAO;4BAAC,QAAQ,EAAE,CAAC;oBAC1C,CAAC,CAAC;iBACH,CAAC,CAAC;gBACH,IAAG,CAAC,OAAO,IAAE,UAAU,CAAC,MAAM,CAAC,OAAO,IAAE,WAAW,CAAC,GAAG,EAAE,IAAE,GAAG,EAAC,CAAC;oBAAA,UAAU,CAAC,KAAK,EAAE,CAAC;oBAAA,OAAO,KAAK,CAAC;gBAAA,CAAC;gBACjG,OAAO,OAAO,CAAC;YACjB,CAAC;oBAAS,CAAC;gBAAC,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAAA,KAAK,EAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAC,KAAK,CAAC,CAAC;gBAAA,IAAG,QAAQ;oBAAC,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;QACpK,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ExternalMcpEventInvocation } from './events-external.js';
2
+ /** Private ownership of exposed credential/fetch/body promises, never a cancellation guarantee. */
3
+ export declare function createGoogleApiLifetime(): {
4
+ invoke<T>(invocation: ExternalMcpEventInvocation, unavailable: T, work: (signal: AbortSignal, check: () => void) => Promise<T>): Promise<T>;
5
+ settle(invocation: ExternalMcpEventInvocation): Promise<boolean>;
6
+ };
7
+ //# sourceMappingURL=events-google-sdk-lifetime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-sdk-lifetime.d.ts","sourceRoot":"","sources":["../src/events-google-sdk-lifetime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,mGAAmG;AACnG,wBAAgB,uBAAuB;WAGxB,CAAC,cAAa,0BAA0B,eAAa,CAAC,QAAM,CAAC,MAAM,EAAC,WAAW,EAAC,KAAK,EAAC,MAAI,IAAI,KAAG,OAAO,CAAC,CAAC,CAAC,GAAE,OAAO,CAAC,CAAC,CAAC;uBAgB5G,0BAA0B,GAAE,OAAO,CAAC,OAAO,CAAC;EAYrE"}
@@ -0,0 +1,70 @@
1
+ import { performance } from 'node:perf_hooks';
2
+ /** Private ownership of exposed credential/fetch/body promises, never a cancellation guarantee. */
3
+ export function createGoogleApiLifetime() {
4
+ const pending = new Set();
5
+ let closing = false;
6
+ return {
7
+ async invoke(invocation, unavailable, work) {
8
+ if (!invocation?.signal || !Number.isFinite(invocation.deadlineMs) || closing || invocation.signal.aborted || pending.size >= 2)
9
+ return unavailable;
10
+ const end = performance.now() + Math.min(3000, invocation.deadlineMs - Date.now());
11
+ if (end <= performance.now())
12
+ return unavailable;
13
+ const controller = new AbortController();
14
+ const check = () => { if (closing || controller.signal.aborted || invocation.signal.aborted || performance.now() >= end)
15
+ throw new Error('GOOGLE_OPERATION_UNAVAILABLE'); };
16
+ let timer, stop;
17
+ const actual = Promise.resolve().then(async () => { check(); return work(controller.signal, check); }).catch(() => { controller.abort(); return unavailable; });
18
+ pending.add(actual);
19
+ void actual.then(() => pending.delete(actual));
20
+ try {
21
+ const value = await Promise.race([actual, new Promise(resolve => {
22
+ timer = setTimeout(() => { controller.abort(); resolve(unavailable); }, Math.max(1, end - performance.now()));
23
+ stop = () => { controller.abort(); resolve(unavailable); };
24
+ invocation.signal.addEventListener('abort', stop, { once: true });
25
+ if (invocation.signal.aborted)
26
+ stop();
27
+ })]);
28
+ if (closing || invocation.signal.aborted || performance.now() >= end)
29
+ return unavailable;
30
+ return value;
31
+ }
32
+ finally {
33
+ if (timer)
34
+ clearTimeout(timer);
35
+ if (stop)
36
+ invocation.signal.removeEventListener('abort', stop);
37
+ }
38
+ },
39
+ async settle(invocation) {
40
+ closing = true;
41
+ if (!invocation?.signal || !Number.isFinite(invocation.deadlineMs))
42
+ return false;
43
+ const end = performance.now() + Math.max(0, invocation.deadlineMs - Date.now());
44
+ while (pending.size) {
45
+ if (invocation.signal.aborted || performance.now() >= end)
46
+ return false;
47
+ let timer, stop;
48
+ try {
49
+ const complete = await Promise.race([Promise.allSettled(pending).then(() => true), new Promise(resolve => {
50
+ timer = setTimeout(() => resolve(false), Math.max(1, end - performance.now()));
51
+ stop = () => resolve(false);
52
+ invocation.signal.addEventListener('abort', stop, { once: true });
53
+ if (invocation.signal.aborted)
54
+ stop();
55
+ })]);
56
+ if (!complete)
57
+ return false;
58
+ }
59
+ finally {
60
+ if (timer)
61
+ clearTimeout(timer);
62
+ if (stop)
63
+ invocation.signal.removeEventListener('abort', stop);
64
+ }
65
+ }
66
+ return true;
67
+ },
68
+ };
69
+ }
70
+ //# sourceMappingURL=events-google-sdk-lifetime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-google-sdk-lifetime.js","sourceRoot":"","sources":["../src/events-google-sdk-lifetime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type OwnedEventPool } from './events-postgres-owned.js';
2
+ import type { ExternalMcpEventInvocation } from './events-external.js';
3
+ export declare class PostgresEventDeliveryMigrationError extends Error {
4
+ readonly code: 'INCOMPATIBLE_SCHEMA' | 'UNAVAILABLE' | 'OUTCOME_UNKNOWN';
5
+ readonly phase: 'capture' | 'lifecycle' | 'delivery';
6
+ readonly captureCommitted: boolean;
7
+ readonly lifecycleCommitted: boolean;
8
+ constructor(code: 'INCOMPATIBLE_SCHEMA' | 'UNAVAILABLE' | 'OUTCOME_UNKNOWN', phase?: 'capture' | 'lifecycle' | 'delivery', captureCommitted?: boolean, lifecycleCommitted?: boolean);
9
+ }
10
+ /** Runs the capture and lifecycle migrations before the delivery migration. If a
11
+ * later migration fails, earlier prerequisite schemas can remain installed.
12
+ * Serving constructors never call this function.
13
+ */
14
+ export declare function createPostgresEventDeliveryMigrator(pool: OwnedEventPool): Readonly<{
15
+ migrate(invocation: ExternalMcpEventInvocation): Promise<void>;
16
+ settle(invocation: ExternalMcpEventInvocation): Promise<boolean>;
17
+ }>;
18
+ //# sourceMappingURL=events-postgres-delivery-migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-postgres-delivery-migrations.d.ts","sourceRoot":"","sources":["../src/events-postgres-delivery-migrations.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8B,KAAK,cAAc,EAAiB,MAAM,4BAA4B,CAAC;AAC5G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACvE,qBAAa,mCAAoC,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAC,qBAAqB,GAAC,aAAa,GAAC,iBAAiB;IAC7E,QAAQ,CAAC,KAAK,EAAC,SAAS,GAAC,WAAW,GAAC,UAAU;IAC/C,QAAQ,CAAC,gBAAgB;IAAO,QAAQ,CAAC,kBAAkB;gBAFxC,IAAI,EAAC,qBAAqB,GAAC,aAAa,GAAC,iBAAiB,EACpE,KAAK,GAAC,SAAS,GAAC,WAAW,GAAC,UAAqB,EACjD,gBAAgB,UAAM,EAAU,kBAAkB,UAAM;CAGpE;AAiED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAC,cAAc;wBAoClD,0BAA0B;uBACrB,0BAA0B;GAEnD"}
@@ -0,0 +1,146 @@
1
+ import { createPostgresEventLifecycleMigrator, PostgresEventLifecycleMigrationError, } from './events-postgres-lifecycle-migrations.js';
2
+ import { createOwnedEventOperations } from './events-postgres-owned.js';
3
+ export class PostgresEventDeliveryMigrationError extends Error {
4
+ code;
5
+ phase;
6
+ captureCommitted;
7
+ lifecycleCommitted;
8
+ constructor(code, phase = 'delivery', captureCommitted = false, lifecycleCommitted = false) {
9
+ super(code);
10
+ this.code = code;
11
+ this.phase = phase;
12
+ this.captureCommitted = captureCommitted;
13
+ this.lifecycleCommitted = lifecycleCommitted;
14
+ this.name = 'PostgresEventDeliveryMigrationError';
15
+ }
16
+ }
17
+ const incompatible = () => { throw new PostgresEventDeliveryMigrationError('INCOMPATIBLE_SCHEMA'); };
18
+ const tables = ['emseepea_event_delivery_migrations', 'emseepea_event_delivery_state', 'emseepea_event_delivery_attempts'];
19
+ const names = 'namespace,source_kind,source_id,subscription_id,generation';
20
+ const keyColumns = names.split(',').map(name => `${name} pg_catalog.text NOT NULL`).join(',');
21
+ const keyTypes = names.split(',').map(name => `${name}:25:-1:true`);
22
+ const ddl = [
23
+ `CREATE TABLE public.emseepea_event_delivery_migrations(singleton pg_catalog.bool PRIMARY KEY DEFAULT true CHECK(singleton),version pg_catalog.int4 NOT NULL,revision pg_catalog.text NOT NULL)`,
24
+ `CREATE TABLE public.emseepea_event_delivery_state(${keyColumns},reservations pg_catalog.int4 NOT NULL DEFAULT 0 CHECK(reservations>=0 AND reservations<=4),
25
+ lease_id pg_catalog.text,lease_until pg_catalog.timestamptz,due_at pg_catalog.timestamptz NOT NULL DEFAULT pg_catalog.clock_timestamp(),terminal pg_catalog.text CHECK(terminal IN('accepted','suppressed','gone','too_large','exhausted')),
26
+ PRIMARY KEY(${names}),FOREIGN KEY(${names}) REFERENCES public.emseepea_event_intents(${names}) ON DELETE RESTRICT,CHECK((lease_id IS NULL)=(lease_until IS NULL)))`,
27
+ `CREATE TABLE public.emseepea_event_delivery_attempts(${keyColumns},attempt pg_catalog.int4 NOT NULL CHECK(attempt>=1 AND attempt<=4),reservation_id pg_catalog.text NOT NULL UNIQUE,
28
+ lease_id pg_catalog.text NOT NULL,reserved_at pg_catalog.timestamptz NOT NULL,outcome pg_catalog.text NOT NULL CHECK(outcome IN('reserved','accepted','failed','terminal')),
29
+ status pg_catalog.int4 CHECK(status>=100 AND status<=599),PRIMARY KEY(${names},attempt),FOREIGN KEY(${names}) REFERENCES public.emseepea_event_delivery_state(${names}) ON DELETE RESTRICT)`,
30
+ ];
31
+ const expected = {
32
+ emseepea_event_delivery_migrations: ['singleton:16:-1:true', 'version:23:-1:true', 'revision:25:-1:true'],
33
+ emseepea_event_delivery_state: [...keyTypes, 'reservations:23:-1:true', 'lease_id:25:-1:false', 'lease_until:1184:-1:false', 'due_at:1184:-1:true', 'terminal:25:-1:false'],
34
+ emseepea_event_delivery_attempts: [...keyTypes, 'attempt:23:-1:true', 'reservation_id:25:-1:true', 'lease_id:25:-1:true', 'reserved_at:1184:-1:true', 'outcome:25:-1:true', 'status:23:-1:false'],
35
+ };
36
+ const catalog = `SELECT c.relname,c.relkind,c.relrowsecurity,c.relforcerowsecurity,pg_catalog.pg_get_userbyid(c.relowner)=current_user AS owned,
37
+ pg_catalog.array_agg(a.attname::pg_catalog.text||':'||a.atttypid::pg_catalog.text||':'||a.atttypmod::pg_catalog.text||':'||a.attnotnull::pg_catalog.text ORDER BY a.attnum) AS columns,
38
+ pg_catalog.jsonb_object_agg(a.attname,pg_catalog.pg_get_expr(d.adbin,d.adrelid)) AS defaults
39
+ FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace JOIN pg_catalog.pg_attribute a ON a.attrelid=c.oid AND a.attnum>0 AND NOT a.attisdropped
40
+ LEFT JOIN pg_catalog.pg_attrdef d ON d.adrelid=c.oid AND d.adnum=a.attnum
41
+ WHERE n.nspname='public' AND c.relname=ANY($1::pg_catalog.text[])
42
+ GROUP BY c.oid,c.relname,c.relkind,c.relrowsecurity,c.relforcerowsecurity,c.relowner`;
43
+ const spaced = names.split(',').join(', ');
44
+ const expectedConstraints = [
45
+ [tables[0], 'p', 'PRIMARY KEY (singleton)'], [tables[0], 'c', 'CHECK (singleton)'],
46
+ [tables[1], 'p', `PRIMARY KEY (${spaced})`],
47
+ [tables[1], 'f', `FOREIGN KEY (${spaced}) REFERENCES emseepea_event_intents(${spaced}) ON DELETE RESTRICT`],
48
+ [tables[1], 'c', 'CHECK (((reservations >= 0) AND (reservations <= 4)))'],
49
+ [tables[1], 'c', "CHECK ((terminal = ANY (ARRAY['accepted'::text, 'suppressed'::text, 'gone'::text, 'too_large'::text, 'exhausted'::text])))"],
50
+ [tables[1], 'c', 'CHECK (((lease_id IS NULL) = (lease_until IS NULL)))'],
51
+ [tables[2], 'p', `PRIMARY KEY (${spaced}, attempt)`], [tables[2], 'u', 'UNIQUE (reservation_id)'],
52
+ [tables[2], 'f', `FOREIGN KEY (${spaced}) REFERENCES emseepea_event_delivery_state(${spaced}) ON DELETE RESTRICT`],
53
+ [tables[2], 'c', 'CHECK (((attempt >= 1) AND (attempt <= 4)))'],
54
+ [tables[2], 'c', "CHECK ((outcome = ANY (ARRAY['reserved'::text, 'accepted'::text, 'failed'::text, 'terminal'::text])))"],
55
+ [tables[2], 'c', 'CHECK (((status >= 100) AND (status <= 599)))'],
56
+ ];
57
+ async function verify(run) {
58
+ const rows = (await run(catalog, [tables])).rows;
59
+ if (rows.length !== 3)
60
+ incompatible();
61
+ for (const row of rows) {
62
+ if (typeof row.relname !== 'string' || row.relkind !== 'r' || row.owned !== true || row.relrowsecurity !== false || row.relforcerowsecurity !== false || JSON.stringify(row.columns) !== JSON.stringify(expected[row.relname]))
63
+ incompatible();
64
+ const defaults = row.defaults;
65
+ if (!defaults || typeof defaults !== 'object')
66
+ incompatible();
67
+ for (const column of expected[String(row.relname)] ?? []) {
68
+ const name = column.split(':')[0];
69
+ const wanted = row.relname === tables[0] && name === 'singleton' ? 'true' : row.relname === tables[1] && name === 'reservations' ? '0' : row.relname === tables[1] && name === 'due_at' ? 'clock_timestamp()' : null;
70
+ if (defaults[name] !== wanted)
71
+ incompatible();
72
+ }
73
+ }
74
+ const wanted = new Set(expectedConstraints.map(row => JSON.stringify(row)));
75
+ const constraints = (await run(`SELECT c.relname,t.contype,pg_catalog.pg_get_constraintdef(t.oid) AS definition,t.convalidated,t.condeferrable,t.condeferred,
76
+ CASE WHEN t.contype IN('p','u') THEN i.indisvalid AND i.indisready AND i.indisunique ELSE true END AS key_valid
77
+ FROM pg_catalog.pg_constraint t JOIN pg_catalog.pg_class c ON c.oid=t.conrelid JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace
78
+ LEFT JOIN pg_catalog.pg_index i ON i.indexrelid=t.conindid WHERE n.nspname='public' AND c.relname=ANY($1::pg_catalog.text[])`, [tables])).rows;
79
+ for (const row of constraints)
80
+ if (row.convalidated !== true || row.condeferrable !== false || row.condeferred !== false || row.key_valid !== true || !wanted.delete(JSON.stringify([row.relname, row.contype, row.definition])))
81
+ incompatible();
82
+ if (wanted.size)
83
+ incompatible();
84
+ const indexes = (await run(`SELECT i.indexrelid FROM pg_catalog.pg_index i JOIN pg_catalog.pg_class c ON c.oid=i.indrelid JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace WHERE n.nspname='public' AND c.relname=ANY($1::pg_catalog.text[])`, [tables])).rows;
85
+ if (indexes.length !== 4)
86
+ incompatible();
87
+ const triggers = (await run(`SELECT t.oid FROM pg_catalog.pg_trigger t JOIN pg_catalog.pg_class c ON c.oid=t.tgrelid JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace WHERE n.nspname='public' AND c.relname=ANY($1::pg_catalog.text[]) AND NOT t.tgisinternal`, [tables])).rows;
88
+ if (triggers.length)
89
+ incompatible();
90
+ const marker = (await run('SELECT singleton,version,revision FROM public.emseepea_event_delivery_migrations')).rows;
91
+ if (marker.length !== 1 || marker[0]?.singleton !== true || marker[0].version !== 1 || marker[0].revision !== 'delivery-v1')
92
+ incompatible();
93
+ }
94
+ /** Runs the capture and lifecycle migrations before the delivery migration. If a
95
+ * later migration fails, earlier prerequisite schemas can remain installed.
96
+ * Serving constructors never call this function.
97
+ */
98
+ export function createPostgresEventDeliveryMigrator(pool) {
99
+ let prerequisite;
100
+ try {
101
+ prerequisite = createPostgresEventLifecycleMigrator(pool);
102
+ }
103
+ catch (error) {
104
+ if (error instanceof PostgresEventLifecycleMigrationError) {
105
+ throw new PostgresEventDeliveryMigrationError(error.code, error.phase, error.captureCommitted, false);
106
+ }
107
+ throw new PostgresEventDeliveryMigrationError('UNAVAILABLE');
108
+ }
109
+ const owned = createOwnedEventOperations();
110
+ let closing = false;
111
+ async function migrate(invocation) {
112
+ if (closing)
113
+ throw new PostgresEventDeliveryMigrationError('UNAVAILABLE');
114
+ let captureCommitted = false, lifecycleCommitted = false;
115
+ try {
116
+ await prerequisite.migrate(invocation);
117
+ captureCommitted = true;
118
+ lifecycleCommitted = true;
119
+ await owned.run(pool, invocation, async (run) => {
120
+ await run('SELECT pg_catalog.pg_advisory_xact_lock(1740126,2)');
121
+ const found = (await run(catalog, [tables])).rows;
122
+ if (found.length === 0) {
123
+ for (const statement of ddl)
124
+ await run(statement);
125
+ await run("INSERT INTO public.emseepea_event_delivery_migrations VALUES(true,1,'delivery-v1')");
126
+ }
127
+ await verify(run);
128
+ }, false, error => error instanceof PostgresEventDeliveryMigrationError);
129
+ }
130
+ catch (error) {
131
+ if (error instanceof PostgresEventDeliveryMigrationError) {
132
+ throw new PostgresEventDeliveryMigrationError(error.code, 'delivery', captureCommitted, lifecycleCommitted);
133
+ }
134
+ if (error instanceof PostgresEventLifecycleMigrationError) {
135
+ throw new PostgresEventDeliveryMigrationError(error.code, error.phase, error.captureCommitted, false);
136
+ }
137
+ const code = error && typeof error === 'object' && 'code' in error ? error.code : undefined;
138
+ throw new PostgresEventDeliveryMigrationError(code === 'INCOMPATIBLE_SCHEMA' ? 'INCOMPATIBLE_SCHEMA' : code === 'OUTCOME_UNKNOWN' ? 'OUTCOME_UNKNOWN' : 'UNAVAILABLE', 'delivery', captureCommitted, lifecycleCommitted);
139
+ }
140
+ }
141
+ return Object.freeze({
142
+ migrate(invocation) { return owned.track(migrate(invocation)); },
143
+ async settle(invocation) { closing = true; const results = await Promise.allSettled([prerequisite.settle(invocation), owned.settle(invocation)]); return results.every(result => result.status === 'fulfilled' && result.value === true); },
144
+ });
145
+ }
146
+ //# sourceMappingURL=events-postgres-delivery-migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-postgres-delivery-migrations.js","sourceRoot":"","sources":["../src/events-postgres-delivery-migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oCAAoC,EACpC,oCAAoC,GACpC,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAsC,MAAM,4BAA4B,CAAC;AAE5G,MAAM,OAAO,mCAAoC,SAAQ,KAAK;IACvC;IACV;IACA;IAAgC;IAF3C,YAAqB,IAA0D,EACpE,QAAuC,UAAU,EACjD,mBAAiB,KAAK,EAAU,qBAAmB,KAAK;QACjE,KAAK,CAAC,IAAI,CAAC,CAAC;QAHO,SAAI,GAAJ,IAAI,CAAsD;QACpE,UAAK,GAAL,KAAK,CAA4C;QACjD,qBAAgB,GAAhB,gBAAgB,CAAM;QAAU,uBAAkB,GAAlB,kBAAkB,CAAM;QACrD,IAAI,CAAC,IAAI,GAAC,qCAAqC,CAAC;IAC9D,CAAC;CACF;AACD,MAAM,YAAY,GAAC,GAAQ,EAAE,GAAC,MAAM,IAAI,mCAAmC,CAAC,qBAAqB,CAAC,CAAC,CAAA,CAAC,CAAC;AACrG,MAAM,MAAM,GAAC,CAAC,oCAAoC,EAAC,+BAA+B,EAAC,kCAAkC,CAAC,CAAC;AACvH,MAAM,KAAK,GAAC,4DAA4D,CAAC;AACzE,MAAM,UAAU,GAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA,EAAE,CAAA,GAAG,IAAI,2BAA2B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1F,MAAM,QAAQ,GAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA,EAAE,CAAA,GAAG,IAAI,aAAa,CAAC,CAAC;AAChE,MAAM,GAAG,GAAC;IACT,gMAAgM;IAChM,qDAAqD,UAAU;;eAEjD,KAAK,iBAAiB,KAAK,8CAA8C,KAAK,uEAAuE;IACnK,wDAAwD,UAAU;;yEAEM,KAAK,yBAAyB,KAAK,qDAAqD,KAAK,uBAAuB;CAC5L,CAAC;AACF,MAAM,QAAQ,GAAkC;IAC/C,kCAAkC,EAAC,CAAC,sBAAsB,EAAC,oBAAoB,EAAC,qBAAqB,CAAC;IACtG,6BAA6B,EAAC,CAAC,GAAG,QAAQ,EAAC,yBAAyB,EAAC,sBAAsB,EAAC,2BAA2B,EAAC,qBAAqB,EAAC,sBAAsB,CAAC;IACrK,gCAAgC,EAAC,CAAC,GAAG,QAAQ,EAAC,oBAAoB,EAAC,2BAA2B,EAAC,qBAAqB,EAAC,0BAA0B,EAAC,oBAAoB,EAAC,oBAAoB,CAAC;CAC1L,CAAC;AACF,MAAM,OAAO,GAAC;;;;;;sFAMwE,CAAC;AACvF,MAAM,MAAM,GAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,MAAM,mBAAmB,GAAC;IACzB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,yBAAyB,CAAC,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,mBAAmB,CAAC;IAC7E,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,gBAAgB,MAAM,GAAG,CAAC;IACzC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,gBAAgB,MAAM,uCAAuC,MAAM,sBAAsB,CAAC;IACzG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,uDAAuD,CAAC;IACvE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,4HAA4H,CAAC;IAC5I,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,sDAAsD,CAAC;IACtE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,gBAAgB,MAAM,YAAY,CAAC,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,yBAAyB,CAAC;IAC5F,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,gBAAgB,MAAM,8CAA8C,MAAM,sBAAsB,CAAC;IAChH,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,6CAA6C,CAAC;IAC7D,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,uGAAuG,CAAC;IACvH,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,GAAG,EAAC,+CAA+C,CAAC;CAC/D,CAAC;AACF,KAAK,UAAU,MAAM,CAAC,GAAY;IACjC,MAAM,IAAI,GAAC,CAAC,MAAM,GAAG,CAAC,OAAO,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAAA,IAAG,IAAI,CAAC,MAAM,KAAG,CAAC;QAAC,YAAY,EAAE,CAAC;IAChF,KAAI,MAAM,GAAG,IAAI,IAAI,EAAC,CAAC;QACtB,IAAG,OAAO,GAAG,CAAC,OAAO,KAAG,QAAQ,IAAE,GAAG,CAAC,OAAO,KAAG,GAAG,IAAE,GAAG,CAAC,KAAK,KAAG,IAAI,IAAE,GAAG,CAAC,cAAc,KAAG,KAAK,IAAE,GAAG,CAAC,mBAAmB,KAAG,KAAK,IAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,YAAY,EAAE,CAAC;QACvN,MAAM,QAAQ,GAAC,GAAG,CAAC,QAAkC,CAAC;QAAA,IAAG,CAAC,QAAQ,IAAE,OAAO,QAAQ,KAAG,QAAQ;YAAC,YAAY,EAAE,CAAC;QAC9G,KAAI,MAAM,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAE,EAAE,EAAC,CAAC;YAAA,MAAM,IAAI,GAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;YACvF,MAAM,MAAM,GAAC,GAAG,CAAC,OAAO,KAAG,MAAM,CAAC,CAAC,CAAC,IAAE,IAAI,KAAG,WAAW,CAAA,CAAC,CAAA,MAAM,CAAA,CAAC,CAAA,GAAG,CAAC,OAAO,KAAG,MAAM,CAAC,CAAC,CAAC,IAAE,IAAI,KAAG,cAAc,CAAA,CAAC,CAAA,GAAG,CAAA,CAAC,CAAA,GAAG,CAAC,OAAO,KAAG,MAAM,CAAC,CAAC,CAAC,IAAE,IAAI,KAAG,QAAQ,CAAA,CAAC,CAAA,mBAAmB,CAAA,CAAC,CAAA,IAAI,CAAC;YACrL,IAAG,QAAQ,CAAC,IAAI,CAAC,KAAG,MAAM;gBAAC,YAAY,EAAE,CAAC;QAC3C,CAAC;IACF,CAAC;IACD,MAAM,MAAM,GAAC,IAAI,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAA,EAAE,CAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GAAC,CAAC,MAAM,GAAG,CAAC;;;8HAGgG,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9I,KAAI,MAAM,GAAG,IAAI,WAAW;QAAC,IAAG,GAAG,CAAC,YAAY,KAAG,IAAI,IAAE,GAAG,CAAC,aAAa,KAAG,KAAK,IAAE,GAAG,CAAC,WAAW,KAAG,KAAK,IAAE,GAAG,CAAC,SAAS,KAAG,IAAI,IAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,OAAO,EAAC,GAAG,CAAC,OAAO,EAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAAC,YAAY,EAAE,CAAC;IAC3N,IAAG,MAAM,CAAC,IAAI;QAAC,YAAY,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAC,CAAC,MAAM,GAAG,CAAC,wNAAwN,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClQ,IAAG,OAAO,CAAC,MAAM,KAAG,CAAC;QAAC,YAAY,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAC,CAAC,MAAM,GAAG,CAAC,yOAAyO,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpR,IAAG,QAAQ,CAAC,MAAM;QAAC,YAAY,EAAE,CAAC;IAClC,MAAM,MAAM,GAAC,CAAC,MAAM,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC,IAAI,CAAC;IAClH,IAAG,MAAM,CAAC,MAAM,KAAG,CAAC,IAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,KAAG,IAAI,IAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,KAAG,CAAC,IAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAG,aAAa;QAAC,YAAY,EAAE,CAAC;AAC7H,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,mCAAmC,CAAC,IAAmB;IACtE,IAAI,YAAoE,CAAC;IACzE,IAAG,CAAC;QAAA,YAAY,GAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC;IAAA,CAAC;IAC7D,OAAM,KAAK,EAAC,CAAC;QACZ,IAAG,KAAK,YAAY,oCAAoC,EAAC,CAAC;YACzD,MAAM,IAAI,mCAAmC,CAAC,KAAK,CAAC,IAAI,EAAC,KAAK,CAAC,KAAK,EAAC,KAAK,CAAC,gBAAgB,EAAC,KAAK,CAAC,CAAC;QACpG,CAAC;QACD,MAAM,IAAI,mCAAmC,CAAC,aAAa,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,KAAK,GAAC,0BAA0B,EAAE,CAAC;IAAA,IAAI,OAAO,GAAC,KAAK,CAAC;IAC3D,KAAK,UAAU,OAAO,CAAC,UAAqC;QAC3D,IAAG,OAAO;YAAC,MAAM,IAAI,mCAAmC,CAAC,aAAa,CAAC,CAAC;QACxE,IAAI,gBAAgB,GAAC,KAAK,EAAC,kBAAkB,GAAC,KAAK,CAAC;QACpD,IAAG,CAAC;YACH,MAAM,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACvC,gBAAgB,GAAC,IAAI,CAAC;YAAA,kBAAkB,GAAC,IAAI,CAAC;YAC9C,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,GAAG,EAAA,EAAE;gBAC1C,MAAM,GAAG,CAAC,oDAAoD,CAAC,CAAC;gBAChE,MAAM,KAAK,GAAC,CAAC,MAAM,GAAG,CAAC,OAAO,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC/C,IAAG,KAAK,CAAC,MAAM,KAAG,CAAC,EAAC,CAAC;oBAAA,KAAI,MAAM,SAAS,IAAI,GAAG;wBAAC,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;oBAAA,MAAM,GAAG,CAAC,oFAAoF,CAAC,CAAC;gBAAA,CAAC;gBACtK,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC,EAAC,KAAK,EAAC,KAAK,CAAA,EAAE,CAAA,KAAK,YAAY,mCAAmC,CAAC,CAAC;QACtE,CAAC;QAAA,OAAM,KAAK,EAAC,CAAC;YACb,IAAG,KAAK,YAAY,mCAAmC,EAAC,CAAC;gBACxD,MAAM,IAAI,mCAAmC,CAAC,KAAK,CAAC,IAAI,EAAC,UAAU,EAAC,gBAAgB,EAAC,kBAAkB,CAAC,CAAC;YAC1G,CAAC;YACD,IAAG,KAAK,YAAY,oCAAoC,EAAC,CAAC;gBACzD,MAAM,IAAI,mCAAmC,CAAC,KAAK,CAAC,IAAI,EAAC,KAAK,CAAC,KAAK,EAAC,KAAK,CAAC,gBAAgB,EAAC,KAAK,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,IAAI,GAAC,KAAK,IAAE,OAAO,KAAK,KAAG,QAAQ,IAAE,MAAM,IAAI,KAAK,CAAA,CAAC,CAAA,KAAK,CAAC,IAAI,CAAA,CAAC,CAAA,SAAS,CAAC;YAChF,MAAM,IAAI,mCAAmC,CAC5C,IAAI,KAAG,qBAAqB,CAAA,CAAC,CAAA,qBAAqB,CAAA,CAAC,CAAA,IAAI,KAAG,iBAAiB,CAAA,CAAC,CAAA,iBAAiB,CAAA,CAAC,CAAA,aAAa,EAC3G,UAAU,EAAC,gBAAgB,EAAC,kBAAkB,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACpB,OAAO,CAAC,UAAqC,IAAE,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,CAAC;QACxF,KAAK,CAAC,MAAM,CAAC,UAAqC,IAAE,OAAO,GAAC,IAAI,CAAC,CAAA,MAAM,OAAO,GAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA,EAAE,CAAA,MAAM,CAAC,MAAM,KAAG,WAAW,IAAE,MAAM,CAAC,KAAK,KAAG,IAAI,CAAC,CAAC,CAAA,CAAC;KACpP,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type ExternalMcpEventInvocation } from './events-external.js';
2
+ import type { OwnedEventPool, EventSql } from './events-postgres-owned.js';
3
+ export interface DeliverySession {
4
+ readonly remaining: () => number;
5
+ check(): void;
6
+ transaction<T>(work: (sql: EventSql) => Promise<T>): Promise<T>;
7
+ wait<T>(work: () => T | Promise<T>, maximumMs: number): Promise<T>;
8
+ }
9
+ /** One owned connection, multiple short transactions; no caller-owned client is accepted. */
10
+ export declare function createDeliverySessionOwner(pool: OwnedEventPool): {
11
+ track: <T>(promise: Promise<T>) => Promise<T>;
12
+ run<T>(invocation: ExternalMcpEventInvocation, work: (session: DeliverySession) => Promise<T>): Promise<T>;
13
+ quiesce(): Promise<boolean>;
14
+ settle(invocation: ExternalMcpEventInvocation): Promise<boolean>;
15
+ };
16
+ //# sourceMappingURL=events-postgres-delivery-owned.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-postgres-delivery-owned.d.ts","sourceRoot":"","sources":["../src/events-postgres-delivery-owned.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,EAAoB,cAAc,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC7F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAC,MAAI,MAAM,CAAC;IAC9B,KAAK,IAAG,IAAI,CAAC;IACb,WAAW,CAAC,CAAC,EAAE,IAAI,EAAC,CAAC,GAAG,EAAC,QAAQ,KAAG,OAAO,CAAC,CAAC,CAAC,GAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAC,MAAI,CAAC,GAAC,OAAO,CAAC,CAAC,CAAC,EAAC,SAAS,EAAC,MAAM,GAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5D;AACD,6FAA6F;AAC7F,wBAAgB,0BAA0B,CAAC,IAAI,EAAC,cAAc;YAG7C,CAAC,WAAU,OAAO,CAAC,CAAC,CAAC,KAAE,OAAO,CAAC,CAAC,CAAC;QAsE1C,CAAC,cAAa,0BAA0B,QAAM,CAAC,OAAO,EAAC,eAAe,KAAG,OAAO,CAAC,CAAC,CAAC;eAGvE,OAAO,CAAC,OAAO,CAAC;uBAIR,0BAA0B,GAAE,OAAO,CAAC,OAAO,CAAC;EASvE"}