@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 { createHash } from "node:crypto";
2
+ import { performance } from "node:perf_hooks";
3
+ export { postgresEventCaptureMigrations, migratePostgresEventCapture } from "./events-postgres-migrations.js";
4
+ export { createPostgresEventDelivery, createPostgresEventDeliveryMigrator, PostgresEventDeliveryMigrationError, } from "./events-postgres-delivery.js";
5
+ export { createPostgresEventDispatchMigrator, PostgresEventDispatchMigrationError, } from "./events-postgres-dispatch-migrations.js";
6
+ export class PostgresEventCaptureError extends Error {
7
+ code;
8
+ constructor(code) {
9
+ super(code);
10
+ this.code = code;
11
+ this.name = "PostgresEventCaptureError";
12
+ }
13
+ }
14
+ function fail(code) { throw new PostgresEventCaptureError(code); }
15
+ function checkedText(value) {
16
+ if (typeof value !== "string" || /\u0000|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(value))
17
+ fail("INVALID_INPUT");
18
+ return value;
19
+ }
20
+ function identifier(value) {
21
+ const text = checkedText(value);
22
+ if (!text || Buffer.byteLength(text) > 240)
23
+ fail("INVALID_INPUT");
24
+ return text;
25
+ }
26
+ function ownValues(value, array = false) {
27
+ if (!value || typeof value !== "object" || Object.getPrototypeOf(value) !== (array ? Array.prototype : Object.prototype))
28
+ fail("INVALID_INPUT");
29
+ const descriptors = Object.getOwnPropertyDescriptors(value);
30
+ for (const key of Reflect.ownKeys(descriptors)) {
31
+ if (typeof key !== "string")
32
+ fail("INVALID_INPUT");
33
+ const property = descriptors[key];
34
+ if (!property || !("value" in property) || (!property.enumerable && !(array && key === "length")))
35
+ fail("INVALID_INPUT");
36
+ checkedText(key);
37
+ }
38
+ return descriptors;
39
+ }
40
+ function canonical(value, depth = 0) {
41
+ if (depth > 32)
42
+ fail("INVALID_INPUT");
43
+ if (value === null || typeof value === "boolean")
44
+ return value;
45
+ if (typeof value === "string")
46
+ return checkedText(value);
47
+ if (typeof value === "number" && Number.isFinite(value) && !Object.is(value, -0))
48
+ return value;
49
+ if (Array.isArray(value)) {
50
+ const fields = ownValues(value, true);
51
+ if (Reflect.ownKeys(fields).length !== value.length + 1)
52
+ fail("INVALID_INPUT");
53
+ const result = [];
54
+ for (let i = 0; i < value.length; i++) {
55
+ if (!Object.hasOwn(fields, String(i)))
56
+ fail("INVALID_INPUT");
57
+ result.push(canonical(fields[String(i)].value, depth + 1));
58
+ }
59
+ return result;
60
+ }
61
+ const fields = ownValues(value);
62
+ const result = Object.create(null);
63
+ for (const key of Object.keys(fields).sort())
64
+ result[key] = canonical(fields[key].value, depth + 1);
65
+ return result;
66
+ }
67
+ function freezeJson(value) {
68
+ if (value && typeof value === "object") {
69
+ for (const child of Object.values(value))
70
+ freezeJson(child);
71
+ Object.freeze(value);
72
+ }
73
+ }
74
+ const hash = (value) => createHash("sha256").update(JSON.stringify(value)).digest("hex");
75
+ function clock(invocation) {
76
+ if (!invocation?.signal || !Number.isFinite(invocation.deadlineMs))
77
+ fail("INVALID_INPUT");
78
+ if (invocation.signal.aborted)
79
+ fail("ABORTED");
80
+ const remaining = Math.min(4000, invocation.deadlineMs - Date.now());
81
+ if (remaining <= 0)
82
+ fail("DEADLINE");
83
+ return { signal: invocation.signal, end: performance.now() + remaining };
84
+ }
85
+ function check(time, sent = false) {
86
+ if (time.signal.aborted || performance.now() >= time.end)
87
+ fail(sent ? "OUTCOME_UNKNOWN" : time.signal.aborted ? "ABORTED" : "DEADLINE");
88
+ }
89
+ const IDENTITY = `SELECT pg_catalog.pg_backend_pid()::pg_catalog.text AS backend,pg_catalog.pg_current_xact_id()::pg_catalog.text AS xid,
90
+ pg_catalog.current_setting('transaction_isolation') AS isolation,
91
+ (SELECT setting::pg_catalog.int8 FROM pg_catalog.pg_settings WHERE name OPERATOR(pg_catalog.=) 'statement_timeout') AS statement_ms,
92
+ (SELECT setting::pg_catalog.int8 FROM pg_catalog.pg_settings WHERE name OPERATOR(pg_catalog.=) 'lock_timeout') AS lock_ms`;
93
+ const GUARD = `WITH guard AS MATERIALIZED (SELECT
94
+ pg_catalog.pg_backend_pid()::pg_catalog.text OPERATOR(pg_catalog.=) $1 AND pg_catalog.pg_current_xact_id()::pg_catalog.text OPERATOR(pg_catalog.=) $2
95
+ AND pg_catalog.current_setting('transaction_isolation') OPERATOR(pg_catalog.=) $3
96
+ AND (pg_catalog.current_setting('transaction_isolation') OPERATOR(pg_catalog.=) 'repeatable read' OR pg_catalog.current_setting('transaction_isolation') OPERATOR(pg_catalog.=) 'serializable')
97
+ AND (SELECT setting::pg_catalog.int8 FROM pg_catalog.pg_settings WHERE name OPERATOR(pg_catalog.=) 'statement_timeout') OPERATOR(pg_catalog.>=) 1
98
+ AND (SELECT setting::pg_catalog.int8 FROM pg_catalog.pg_settings WHERE name OPERATOR(pg_catalog.=) 'statement_timeout') OPERATOR(pg_catalog.<=) 1500
99
+ AND (SELECT setting::pg_catalog.int8 FROM pg_catalog.pg_settings WHERE name OPERATOR(pg_catalog.=) 'lock_timeout') OPERATOR(pg_catalog.>=) 1
100
+ AND (SELECT setting::pg_catalog.int8 FROM pg_catalog.pg_settings WHERE name OPERATOR(pg_catalog.=) 'lock_timeout') OPERATOR(pg_catalog.<=) 500
101
+ AND $4::pg_catalog.text OPERATOR(pg_catalog.=) $5::pg_catalog.text AS valid)`;
102
+ const READ_SOURCE = `${GUARD} SELECT valid,
103
+ (SELECT pg_catalog.jsonb_build_object('fingerprint',fingerprint,'eventId',event_id,'deliveryCount',recipient_count,
104
+ 'eligibilityAt',pg_catalog.to_char(eligibility_at AT TIME ZONE 'UTC','YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'))
105
+ FROM public.emseepea_event_sources WHERE namespace OPERATOR(pg_catalog.=) $5 AND source_kind OPERATOR(pg_catalog.=) $6 AND source_id OPERATOR(pg_catalog.=) $7) AS saved
106
+ FROM guard`;
107
+ const TICK = `${GUARD} SELECT valid,pg_catalog.clock_timestamp() AS eligibility_at FROM guard`;
108
+ const CANDIDATES = `SELECT subscription_id,generation,arguments FROM public.emseepea_event_capture_subscriptions
109
+ WHERE namespace OPERATOR(pg_catalog.=) $1 AND owner_key OPERATOR(pg_catalog.=) $2 AND event_name OPERATOR(pg_catalog.=) $3 AND active AND expires_at OPERATOR(pg_catalog.>) $4::pg_catalog.timestamptz
110
+ ORDER BY subscription_id,generation`;
111
+ const SOURCE = `${GUARD}, written AS (
112
+ INSERT INTO public.emseepea_event_sources(namespace,source_kind,source_id,source_version,fingerprint,event_id,
113
+ owner_key,event_name,occurred_at,eligibility_at,recipient_count,payload)
114
+ SELECT $5,$6,$7,$8,$9,$10,$11,$12,$13::pg_catalog.timestamptz,$14::pg_catalog.timestamptz,$15::pg_catalog.int4,$16::pg_catalog.jsonb
115
+ FROM guard WHERE valid RETURNING source_id)
116
+ SELECT valid,(SELECT pg_catalog.count(*)::pg_catalog.int4 FROM written) AS n FROM guard`;
117
+ const INTENTS = `${GUARD}, written AS (
118
+ INSERT INTO public.emseepea_event_intents(namespace,source_kind,source_id,subscription_id,generation,delivery_id,event_id)
119
+ SELECT $5,$6,$7,j.subscription_id,j.generation,j.delivery_id,$8 FROM guard,
120
+ pg_catalog.jsonb_to_recordset($9::pg_catalog.jsonb) AS j(subscription_id pg_catalog.text,generation pg_catalog.text,delivery_id pg_catalog.text)
121
+ WHERE valid RETURNING delivery_id)
122
+ SELECT valid,(SELECT pg_catalog.count(*)::pg_catalog.int4 FROM written) AS n FROM guard`;
123
+ function policy(value) {
124
+ return !!value && typeof value.backend === "string" && typeof value.xid === "string"
125
+ && ["repeatable read", "serializable"].includes(value.isolation)
126
+ && Number(value.statement_ms) > 0 && Number(value.statement_ms) <= 1500
127
+ && Number(value.lock_ms) > 0 && Number(value.lock_ms) <= 500;
128
+ }
129
+ function valid(row) {
130
+ if (row?.valid !== true)
131
+ fail("TRANSACTION_CHANGED");
132
+ }
133
+ function sqlError(error) {
134
+ if (error instanceof PostgresEventCaptureError)
135
+ throw error;
136
+ const code = error && typeof error === "object" && "code" in error ? error.code : undefined;
137
+ if (code === "40001" || code === "55P03")
138
+ fail("WHOLE_TRANSACTION_RETRY_REQUIRED");
139
+ if (code === "23505")
140
+ fail("PUBLICATION_CONFLICT");
141
+ fail("UNAVAILABLE");
142
+ }
143
+ /** Captures publication state only. It does not configure or deliver native Events.
144
+ * Registered schemas and matchers must be side-effect-free and synchronous. A deadline
145
+ * check cannot interrupt a matcher after it starts. The caller exclusively owns the
146
+ * transaction. Ordinary deletion must retain deduplication identities. Administrative
147
+ * ledger erasure is governed separately and is not provided by this capture-only API.
148
+ */
149
+ export function createPostgresEventCapture(options) {
150
+ const namespace = identifier(options?.namespace);
151
+ const sourceKind = identifier(options?.sourceKind);
152
+ if (!Array.isArray(options.definitions) || !options.definitions.length)
153
+ fail("INVALID_INPUT");
154
+ const definitions = new Map();
155
+ for (const definition of options.definitions) {
156
+ identifier(definition?.name);
157
+ if (!/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)+$/.test(definition.name) || definitions.has(definition.name) || typeof definition.matches !== "function" ||
158
+ typeof definition.payloadSchema?.safeParse !== "function" || typeof definition.inputSchema?.safeParse !== "function")
159
+ fail("INVALID_INPUT");
160
+ definitions.set(definition.name, Object.freeze({ ...definition }));
161
+ }
162
+ const bindings = new WeakMap();
163
+ async function query(client, time, sql, values) {
164
+ check(time);
165
+ const result = await client.query(sql, values);
166
+ check(time, true); // A late response is not rollback/cancellation evidence.
167
+ return result;
168
+ }
169
+ return Object.freeze({
170
+ async bindTransaction(client, invocation) {
171
+ const time = clock(invocation);
172
+ if (!client || typeof client.query !== "function")
173
+ fail("INVALID_INPUT");
174
+ try {
175
+ const first = (await query(client, time, IDENTITY)).rows[0];
176
+ const second = (await query(client, time, IDENTITY)).rows[0];
177
+ if (!policy(first) || !policy(second))
178
+ fail("UNSUPPORTED_TRANSACTION_POLICY");
179
+ if (first.backend !== second.backend || first.xid !== second.xid || first.isolation !== second.isolation)
180
+ fail("TRANSACTION_NOT_BOUND");
181
+ const handle = Object.freeze({});
182
+ bindings.set(handle, { ...second, client, namespace, active: false, invalid: false });
183
+ return handle;
184
+ }
185
+ catch (error) {
186
+ return sqlError(error);
187
+ }
188
+ },
189
+ async captureInTransaction(handle, publication, invocation) {
190
+ const state = handle && bindings.get(handle);
191
+ if (!state || state.invalid)
192
+ fail("TRANSACTION_NOT_BOUND");
193
+ if (state.active) {
194
+ state.invalid = true;
195
+ fail("CONCURRENT_USE");
196
+ }
197
+ state.active = true;
198
+ try {
199
+ const time = clock(invocation);
200
+ const fields = ownValues(publication);
201
+ const get = (key) => fields[key]?.value;
202
+ const sourceId = identifier(get("sourceEventId"));
203
+ const sourceVersion = identifier(get("sourceVersion"));
204
+ const eventName = identifier(get("eventName"));
205
+ const ownerKey = identifier(get("ownerKey"));
206
+ const occurredAt = checkedText(get("occurredAt"));
207
+ if (!/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$/.test(occurredAt) || !Number.isFinite(Date.parse(occurredAt))
208
+ || new Date(occurredAt).toISOString() !== occurredAt)
209
+ fail("INVALID_INPUT");
210
+ const definition = definitions.get(eventName);
211
+ if (!definition)
212
+ fail("INVALID_INPUT");
213
+ const raw = get("data");
214
+ ownValues(raw);
215
+ const rawCanonical = canonical(raw);
216
+ if (Buffer.byteLength(JSON.stringify(rawCanonical)) > 262144)
217
+ fail("INVALID_INPUT");
218
+ freezeJson(rawCanonical);
219
+ const parsedPayload = definition.payloadSchema.safeParse(rawCanonical);
220
+ if (!parsedPayload.success)
221
+ fail("INVALID_INPUT");
222
+ ownValues(parsedPayload.data);
223
+ const data = canonical(parsedPayload.data);
224
+ freezeJson(data);
225
+ const body = JSON.stringify(data);
226
+ if (Buffer.byteLength(body) > 262144)
227
+ fail("INVALID_INPUT");
228
+ const fingerprint = hash([namespace, sourceKind, sourceId, sourceVersion, eventName, ownerKey, occurredAt, data]);
229
+ const base = [state.backend, state.xid, state.isolation, state.namespace, namespace];
230
+ const existing = (await query(state.client, time, READ_SOURCE, [...base, sourceKind, sourceId])).rows[0];
231
+ valid(existing);
232
+ if (existing.saved !== null) {
233
+ const saved = existing.saved;
234
+ if (saved.fingerprint !== fingerprint)
235
+ fail("PUBLICATION_CONFLICT");
236
+ return Object.freeze({ outcome: "replayed", eventId: saved.eventId, deliveryCount: saved.deliveryCount, eligibilityAt: saved.eligibilityAt });
237
+ }
238
+ const tick = (await query(state.client, time, TICK, base)).rows[0];
239
+ valid(tick);
240
+ const eligibility = tick.eligibility_at;
241
+ if (!(eligibility instanceof Date) || !Number.isFinite(eligibility.getTime()))
242
+ fail("UNAVAILABLE");
243
+ const candidates = (await query(state.client, time, CANDIDATES, [namespace, ownerKey, eventName, eligibility])).rows;
244
+ const eventId = hash(["event", namespace, sourceKind, sourceId]);
245
+ const recipients = [];
246
+ for (const candidate of candidates) {
247
+ check(time);
248
+ ownValues(candidate.arguments);
249
+ const rawArguments = canonical(candidate.arguments);
250
+ freezeJson(rawArguments);
251
+ const parsedArguments = definition.inputSchema.safeParse(rawArguments);
252
+ if (!parsedArguments.success)
253
+ fail("INVALID_INPUT");
254
+ ownValues(parsedArguments.data);
255
+ const arguments_ = canonical(parsedArguments.data);
256
+ freezeJson(arguments_);
257
+ const matches = definition.matches(arguments_, data, ownerKey);
258
+ if (typeof matches !== "boolean")
259
+ fail("INVALID_INPUT");
260
+ if (matches) {
261
+ const subscriptionId = identifier(candidate.subscription_id);
262
+ const generation = identifier(candidate.generation);
263
+ recipients.push({ subscription_id: subscriptionId, generation,
264
+ delivery_id: hash(["delivery", eventId, subscriptionId, generation]) });
265
+ }
266
+ }
267
+ const source = (await query(state.client, time, SOURCE, [...base, sourceKind, sourceId, sourceVersion,
268
+ fingerprint, eventId, ownerKey, eventName, occurredAt, eligibility, recipients.length, body])).rows[0];
269
+ valid(source);
270
+ if (source.n !== 1)
271
+ fail("UNAVAILABLE");
272
+ const intents = (await query(state.client, time, INTENTS, [...base, sourceKind, sourceId, eventId,
273
+ JSON.stringify(recipients)])).rows[0];
274
+ valid(intents);
275
+ if (intents.n !== recipients.length)
276
+ fail("UNAVAILABLE");
277
+ return Object.freeze({ outcome: "captured", eventId, deliveryCount: recipients.length, eligibilityAt: eligibility.toISOString() });
278
+ }
279
+ catch (error) {
280
+ state.invalid = true;
281
+ return sqlError(error);
282
+ }
283
+ finally {
284
+ state.active = false;
285
+ }
286
+ },
287
+ });
288
+ }
289
+ //# sourceMappingURL=events-postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-postgres.js","sourceRoot":"","sources":["../src/events-postgres.ts"],"names":[],"mappings":"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"}
package/dist/events.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { AuthInfo } from "@modelcontextprotocol/server";
2
- import { type ZodType } from "zod";
2
+ import { z, type ZodType } from "zod";
3
3
  import { postCheckedWebhook } from "./events-webhook.js";
4
4
  export interface McpEventDefinition {
5
5
  readonly name: string;
@@ -97,4 +97,33 @@ export declare class McpEventInputError extends Error {
97
97
  constructor(code: number, reason: string);
98
98
  }
99
99
  export declare function createMcpEventRuntime(options: McpEventsOptions, webhookPost?: typeof postCheckedWebhook): McpEventRuntime;
100
+ export declare function checkedListWire(definition: NormalizedEventDefinition, wire: NormalizedEventDefinition["wire"]): NormalizedEventDefinition["wire"];
101
+ export declare function normalizeMcpEventDefinitions(inputs: readonly McpEventDefinition[]): readonly Readonly<{
102
+ wire: Readonly<{
103
+ name: string;
104
+ description: string;
105
+ delivery: readonly ["webhook"];
106
+ inputSchema: z.core.ZodStandardJSONSchemaPayload<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
107
+ payloadSchema: z.core.ZodStandardJSONSchemaPayload<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
108
+ }>;
109
+ name: string;
110
+ description: string;
111
+ inputSchema: ZodType;
112
+ payloadSchema: ZodType;
113
+ listWire?: (ownerKey: string, wire: NormalizedEventDefinition["wire"]) => NormalizedEventDefinition["wire"] | undefined | Promise<NormalizedEventDefinition["wire"] | undefined>;
114
+ matches: (arguments_: Readonly<Record<string, unknown>>, data: Readonly<Record<string, unknown>>, ownerKey: string) => boolean;
115
+ }>[];
116
+ export declare function mcpEventSubscriptionIdentity(ownerKey: string, name: string, args: Readonly<Record<string, unknown>>, url: string): string;
117
+ export declare function validateMcpEventUnsubscribe(definitions: readonly NormalizedEventDefinition[], params: unknown): {
118
+ definition: NormalizedEventDefinition;
119
+ arguments: Record<string, unknown>;
120
+ url: string;
121
+ };
122
+ export declare function validateMcpEventSubscription(definitions: readonly NormalizedEventDefinition[], params: unknown): {
123
+ definition: NormalizedEventDefinition;
124
+ arguments: Record<string, unknown>;
125
+ url: string;
126
+ secret: string;
127
+ };
128
+ export declare function verifyMcpEventCallback(url: string, secret: string, id: string, now: number, webhookPost: typeof postCheckedWebhook): Promise<void>;
100
129
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}