@emseepea/server 0.24.0 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/events-cloud-tasks-transport.d.ts +34 -0
- package/dist/events-cloud-tasks-transport.d.ts.map +1 -0
- package/dist/events-cloud-tasks-transport.js +232 -0
- package/dist/events-cloud-tasks-transport.js.map +1 -0
- package/dist/events-google-sdk-lifetime.d.ts +7 -0
- package/dist/events-google-sdk-lifetime.d.ts.map +1 -0
- package/dist/events-google-sdk-lifetime.js +70 -0
- package/dist/events-google-sdk-lifetime.js.map +1 -0
- package/dist/events-postgres-delivery-migrations.d.ts +18 -0
- package/dist/events-postgres-delivery-migrations.d.ts.map +1 -0
- package/dist/events-postgres-delivery-migrations.js +146 -0
- package/dist/events-postgres-delivery-migrations.js.map +1 -0
- package/dist/events-postgres-delivery-owned.d.ts +16 -0
- package/dist/events-postgres-delivery-owned.d.ts.map +1 -0
- package/dist/events-postgres-delivery-owned.js +178 -0
- package/dist/events-postgres-delivery-owned.js.map +1 -0
- package/dist/events-postgres-delivery.d.ts +29 -0
- package/dist/events-postgres-delivery.d.ts.map +1 -0
- package/dist/events-postgres-delivery.js +299 -0
- package/dist/events-postgres-delivery.js.map +1 -0
- package/dist/events-postgres-dispatch-migrations.d.ts +19 -0
- package/dist/events-postgres-dispatch-migrations.d.ts.map +1 -0
- package/dist/events-postgres-dispatch-migrations.js +162 -0
- package/dist/events-postgres-dispatch-migrations.js.map +1 -0
- package/dist/events-postgres-dispatch.d.ts +39 -0
- package/dist/events-postgres-dispatch.d.ts.map +1 -0
- package/dist/events-postgres-dispatch.js +270 -0
- package/dist/events-postgres-dispatch.js.map +1 -0
- package/dist/events-postgres-lifecycle-migrations.d.ts +17 -0
- package/dist/events-postgres-lifecycle-migrations.d.ts.map +1 -0
- package/dist/events-postgres-lifecycle-migrations.js +125 -0
- package/dist/events-postgres-lifecycle-migrations.js.map +1 -0
- package/dist/events-postgres-lifecycle.d.ts +13 -0
- package/dist/events-postgres-lifecycle.d.ts.map +1 -0
- package/dist/events-postgres-lifecycle.js +176 -0
- package/dist/events-postgres-lifecycle.js.map +1 -0
- package/dist/events-postgres-migrations.d.ts +32 -0
- package/dist/events-postgres-migrations.d.ts.map +1 -0
- package/dist/events-postgres-migrations.js +329 -0
- package/dist/events-postgres-migrations.js.map +1 -0
- package/dist/events-postgres-owned.d.ts +16 -0
- package/dist/events-postgres-owned.d.ts.map +1 -0
- package/dist/events-postgres-owned.js +161 -0
- package/dist/events-postgres-owned.js.map +1 -0
- package/dist/events-postgres.d.ts +53 -0
- package/dist/events-postgres.d.ts.map +1 -0
- package/dist/events-postgres.js +289 -0
- package/dist/events-postgres.js.map +1 -0
- package/dist/index.js +58 -9
- package/dist/index.js.map +1 -1
- package/package.json +29 -5
|
@@ -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/index.js
CHANGED
|
@@ -2783,20 +2783,69 @@ function requestId(value) {
|
|
|
2783
2783
|
}
|
|
2784
2784
|
async function runWithDeadline(requestSignal, deadlineMs, work) {
|
|
2785
2785
|
const remainingMs = deadlineMs - Date.now();
|
|
2786
|
-
const deadlineSignal = remainingMs > 0 ? AbortSignal.timeout(remainingMs) : AbortSignal.abort();
|
|
2787
2786
|
const invocationSignal = requestOperations.getStore()?.signal;
|
|
2788
|
-
const signal = AbortSignal.any([
|
|
2789
|
-
requestSignal,
|
|
2790
|
-
deadlineSignal,
|
|
2791
|
-
...(invocationSignal ? [invocationSignal] : []),
|
|
2792
|
-
]);
|
|
2793
2787
|
return new Promise((resolve, reject) => {
|
|
2794
|
-
const
|
|
2788
|
+
const controller = new AbortController();
|
|
2789
|
+
const signal = controller.signal;
|
|
2790
|
+
let timer;
|
|
2791
|
+
let settled = false;
|
|
2792
|
+
const abortFrom = (source) => {
|
|
2793
|
+
if (!signal.aborted)
|
|
2794
|
+
controller.abort(source.reason);
|
|
2795
|
+
};
|
|
2796
|
+
const onRequestAbort = () => abortFrom(requestSignal);
|
|
2797
|
+
const onInvocationAbort = () => {
|
|
2798
|
+
if (invocationSignal)
|
|
2799
|
+
abortFrom(invocationSignal);
|
|
2800
|
+
};
|
|
2801
|
+
const onAbort = () => finishReject(new Error("Tool execution cancelled"));
|
|
2802
|
+
const cleanup = () => {
|
|
2803
|
+
if (timer !== undefined)
|
|
2804
|
+
clearTimeout(timer);
|
|
2805
|
+
requestSignal.removeEventListener("abort", onRequestAbort);
|
|
2806
|
+
if (invocationSignal && invocationSignal !== requestSignal) {
|
|
2807
|
+
invocationSignal.removeEventListener("abort", onInvocationAbort);
|
|
2808
|
+
}
|
|
2809
|
+
signal.removeEventListener("abort", onAbort);
|
|
2810
|
+
};
|
|
2811
|
+
function finishResolve(value) {
|
|
2812
|
+
if (settled)
|
|
2813
|
+
return;
|
|
2814
|
+
settled = true;
|
|
2815
|
+
cleanup();
|
|
2816
|
+
resolve(value);
|
|
2817
|
+
}
|
|
2818
|
+
function finishReject(error) {
|
|
2819
|
+
if (settled)
|
|
2820
|
+
return;
|
|
2821
|
+
settled = true;
|
|
2822
|
+
cleanup();
|
|
2823
|
+
reject(error);
|
|
2824
|
+
}
|
|
2825
|
+
if (requestSignal.aborted) {
|
|
2826
|
+
abortFrom(requestSignal);
|
|
2827
|
+
}
|
|
2828
|
+
else if (remainingMs <= 0) {
|
|
2829
|
+
controller.abort(new DOMException("The operation was aborted due to timeout", "TimeoutError"));
|
|
2830
|
+
}
|
|
2831
|
+
else if (invocationSignal?.aborted) {
|
|
2832
|
+
abortFrom(invocationSignal);
|
|
2833
|
+
}
|
|
2834
|
+
else {
|
|
2835
|
+
requestSignal.addEventListener("abort", onRequestAbort, { once: true });
|
|
2836
|
+
if (invocationSignal && invocationSignal !== requestSignal) {
|
|
2837
|
+
invocationSignal.addEventListener("abort", onInvocationAbort, { once: true });
|
|
2838
|
+
}
|
|
2839
|
+
timer = setTimeout(() => {
|
|
2840
|
+
if (!signal.aborted) {
|
|
2841
|
+
controller.abort(new DOMException("The operation was aborted due to timeout", "TimeoutError"));
|
|
2842
|
+
}
|
|
2843
|
+
}, remainingMs);
|
|
2844
|
+
}
|
|
2795
2845
|
if (signal.aborted)
|
|
2796
2846
|
return onAbort();
|
|
2797
2847
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
2798
|
-
Promise.resolve().then(() => work(signal)).then(
|
|
2799
|
-
.finally(() => signal.removeEventListener("abort", onAbort));
|
|
2848
|
+
Promise.resolve().then(() => work(signal)).then(finishResolve, finishReject);
|
|
2800
2849
|
});
|
|
2801
2850
|
}
|
|
2802
2851
|
function assertUniqueToolNames(tools) {
|