@emseepea/server 0.24.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/events-cloud-tasks-transport.d.ts +30 -0
  2. package/dist/events-cloud-tasks-transport.d.ts.map +1 -0
  3. package/dist/events-cloud-tasks-transport.js +213 -0
  4. package/dist/events-cloud-tasks-transport.js.map +1 -0
  5. package/dist/events-google-sdk-guards.d.ts +8 -0
  6. package/dist/events-google-sdk-guards.d.ts.map +1 -0
  7. package/dist/events-google-sdk-guards.js +31 -0
  8. package/dist/events-google-sdk-guards.js.map +1 -0
  9. package/dist/events-google-sdk-lifetime.d.ts +7 -0
  10. package/dist/events-google-sdk-lifetime.d.ts.map +1 -0
  11. package/dist/events-google-sdk-lifetime.js +70 -0
  12. package/dist/events-google-sdk-lifetime.js.map +1 -0
  13. package/dist/events-google-worker-runtime.d.ts +21 -0
  14. package/dist/events-google-worker-runtime.d.ts.map +1 -0
  15. package/dist/events-google-worker-runtime.js +149 -0
  16. package/dist/events-google-worker-runtime.js.map +1 -0
  17. package/dist/events-google-worker.d.ts +4 -0
  18. package/dist/events-google-worker.d.ts.map +1 -0
  19. package/dist/events-google-worker.js +3 -0
  20. package/dist/events-google-worker.js.map +1 -0
  21. package/dist/events-postgres-delivery-migrations.d.ts +18 -0
  22. package/dist/events-postgres-delivery-migrations.d.ts.map +1 -0
  23. package/dist/events-postgres-delivery-migrations.js +146 -0
  24. package/dist/events-postgres-delivery-migrations.js.map +1 -0
  25. package/dist/events-postgres-delivery-owned.d.ts +16 -0
  26. package/dist/events-postgres-delivery-owned.d.ts.map +1 -0
  27. package/dist/events-postgres-delivery-owned.js +178 -0
  28. package/dist/events-postgres-delivery-owned.js.map +1 -0
  29. package/dist/events-postgres-delivery.d.ts +29 -0
  30. package/dist/events-postgres-delivery.d.ts.map +1 -0
  31. package/dist/events-postgres-delivery.js +299 -0
  32. package/dist/events-postgres-delivery.js.map +1 -0
  33. package/dist/events-postgres-dispatch-migrations.d.ts +19 -0
  34. package/dist/events-postgres-dispatch-migrations.d.ts.map +1 -0
  35. package/dist/events-postgres-dispatch-migrations.js +162 -0
  36. package/dist/events-postgres-dispatch-migrations.js.map +1 -0
  37. package/dist/events-postgres-dispatch.d.ts +39 -0
  38. package/dist/events-postgres-dispatch.d.ts.map +1 -0
  39. package/dist/events-postgres-dispatch.js +270 -0
  40. package/dist/events-postgres-dispatch.js.map +1 -0
  41. package/dist/events-postgres-lifecycle-migrations.d.ts +17 -0
  42. package/dist/events-postgres-lifecycle-migrations.d.ts.map +1 -0
  43. package/dist/events-postgres-lifecycle-migrations.js +125 -0
  44. package/dist/events-postgres-lifecycle-migrations.js.map +1 -0
  45. package/dist/events-postgres-lifecycle.d.ts +13 -0
  46. package/dist/events-postgres-lifecycle.d.ts.map +1 -0
  47. package/dist/events-postgres-lifecycle.js +176 -0
  48. package/dist/events-postgres-lifecycle.js.map +1 -0
  49. package/dist/events-postgres-migrations.d.ts +32 -0
  50. package/dist/events-postgres-migrations.d.ts.map +1 -0
  51. package/dist/events-postgres-migrations.js +329 -0
  52. package/dist/events-postgres-migrations.js.map +1 -0
  53. package/dist/events-postgres-owned.d.ts +16 -0
  54. package/dist/events-postgres-owned.d.ts.map +1 -0
  55. package/dist/events-postgres-owned.js +161 -0
  56. package/dist/events-postgres-owned.js.map +1 -0
  57. package/dist/events-postgres.d.ts +53 -0
  58. package/dist/events-postgres.d.ts.map +1 -0
  59. package/dist/events-postgres.js +289 -0
  60. package/dist/events-postgres.js.map +1 -0
  61. package/dist/index.js +58 -9
  62. package/dist/index.js.map +1 -1
  63. package/package.json +33 -5
@@ -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":"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"}
@@ -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"}
@@ -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"}