@generazioneai/events 0.0.1 → 0.1.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.
- package/CHANGELOG.md +21 -0
- package/README.md +106 -1
- package/dist/connection.d.ts +23 -0
- package/dist/connection.d.ts.map +1 -0
- package/dist/connection.js +113 -0
- package/dist/connection.js.map +1 -0
- package/dist/consumers.service.d.ts +54 -0
- package/dist/consumers.service.d.ts.map +1 -0
- package/dist/consumers.service.js +346 -0
- package/dist/consumers.service.js.map +1 -0
- package/dist/decorators.d.ts +12 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +14 -0
- package/dist/decorators.js.map +1 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +24 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.module.d.ts +20 -0
- package/dist/events.module.d.ts.map +1 -0
- package/dist/events.module.js +98 -0
- package/dist/events.module.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics.d.ts +18 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +64 -0
- package/dist/metrics.js.map +1 -0
- package/dist/outbox.service.d.ts +24 -0
- package/dist/outbox.service.d.ts.map +1 -0
- package/dist/outbox.service.js +88 -0
- package/dist/outbox.service.js.map +1 -0
- package/dist/prisma-resolver.d.ts +11 -0
- package/dist/prisma-resolver.d.ts.map +1 -0
- package/dist/prisma-resolver.js +46 -0
- package/dist/prisma-resolver.js.map +1 -0
- package/dist/relay.service.d.ts +32 -0
- package/dist/relay.service.d.ts.map +1 -0
- package/dist/relay.service.js +153 -0
- package/dist/relay.service.js.map +1 -0
- package/dist/tokens.d.ts +4 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +7 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +116 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +34 -0
- package/dist/types.js.map +1 -0
- package/dist/uuid.d.ts +7 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +32 -0
- package/dist/uuid.js.map +1 -0
- package/package.json +65 -4
- package/prisma/events.prisma +30 -0
- package/sql/001-events-outbox-inbox-rientro.sql +3 -0
- package/sql/001-events-outbox-inbox.sql +28 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.EventsConsumers = exports.durableName = void 0;
|
|
16
|
+
exports.streamForSubject = streamForSubject;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const core_1 = require("@nestjs/core");
|
|
19
|
+
const transport_node_1 = require("@nats-io/transport-node");
|
|
20
|
+
const jetstream_1 = require("@nats-io/jetstream");
|
|
21
|
+
const connection_1 = require("./connection");
|
|
22
|
+
const errors_1 = require("./errors");
|
|
23
|
+
const metrics_1 = require("./metrics");
|
|
24
|
+
const prisma_resolver_1 = require("./prisma-resolver");
|
|
25
|
+
const tokens_1 = require("./tokens");
|
|
26
|
+
const uuid_1 = require("./uuid");
|
|
27
|
+
const NS = 1_000_000;
|
|
28
|
+
/** Durable di NATS non ammette il punto: `hr.employment-changed` → `hr_employment-changed`. Il nome logico resta quello originale. */
|
|
29
|
+
const durableName = (consumer) => consumer.replace(/[.\s*>/\\]/g, '_');
|
|
30
|
+
exports.durableName = durableName;
|
|
31
|
+
/** `evt.<svc>.…` → `EVT_<SVC>`. */
|
|
32
|
+
function streamForSubject(subject) {
|
|
33
|
+
if (subject.startsWith('audit.'))
|
|
34
|
+
return 'AUDIT';
|
|
35
|
+
const svc = subject.split('.')[1];
|
|
36
|
+
return `EVT_${String(svc).toUpperCase()}`;
|
|
37
|
+
}
|
|
38
|
+
/** Trova i gestori `@OnEvent`, crea i consumer durevoli e li serve: transazione + inbox + gestore + ack. */
|
|
39
|
+
let EventsConsumers = class EventsConsumers {
|
|
40
|
+
constructor(opts, conn, prisma, metrics, discovery, scanner) {
|
|
41
|
+
this.opts = opts;
|
|
42
|
+
this.conn = conn;
|
|
43
|
+
this.prisma = prisma;
|
|
44
|
+
this.metrics = metrics;
|
|
45
|
+
this.discovery = discovery;
|
|
46
|
+
this.scanner = scanner;
|
|
47
|
+
this.log = new common_1.Logger('EventsConsumers');
|
|
48
|
+
this.registered = [];
|
|
49
|
+
this.stopped = true;
|
|
50
|
+
this.loops = [];
|
|
51
|
+
this.advisorySubs = [];
|
|
52
|
+
this.consumers = new Map();
|
|
53
|
+
}
|
|
54
|
+
/** Cerca i `@OnEvent` fra i provider. Ripetibile (non duplica). */
|
|
55
|
+
discover() {
|
|
56
|
+
const found = [];
|
|
57
|
+
for (const w of this.discovery.getProviders()) {
|
|
58
|
+
const inst = w.instance;
|
|
59
|
+
if (!inst || typeof inst !== 'object')
|
|
60
|
+
continue;
|
|
61
|
+
const proto = Object.getPrototypeOf(inst);
|
|
62
|
+
if (!proto)
|
|
63
|
+
continue;
|
|
64
|
+
for (const name of this.scanner.getAllMethodNames(proto)) {
|
|
65
|
+
const meta = Reflect.getMetadata(tokens_1.ON_EVENT_METADATA, inst[name]);
|
|
66
|
+
if (!meta)
|
|
67
|
+
continue;
|
|
68
|
+
if (!/^(evt\.[a-z0-9_-]+\.[A-Za-z0-9_.*>-]+|audit\.[a-z0-9_-]+(\.[A-Za-z0-9_.*>-]+)?)$/.test(meta.subject)) {
|
|
69
|
+
throw new Error(`@OnEvent: subject non valido «${meta.subject}» (evt.<servizio>.<entità>.<fatto>)`);
|
|
70
|
+
}
|
|
71
|
+
found.push({
|
|
72
|
+
...meta,
|
|
73
|
+
handler: inst[name].bind(inst),
|
|
74
|
+
stream: meta.subject.startsWith(`evt.${this.opts.service}.`) ? this.opts.stream : streamForSubject(meta.subject),
|
|
75
|
+
durable: (0, exports.durableName)(meta.consumer),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const seen = new Set();
|
|
80
|
+
for (const r of found) {
|
|
81
|
+
if (seen.has(r.consumer))
|
|
82
|
+
throw new Error(`@OnEvent: il consumer «${r.consumer}» è usato da due gestori`);
|
|
83
|
+
seen.add(r.consumer);
|
|
84
|
+
}
|
|
85
|
+
this.registered = found;
|
|
86
|
+
return found;
|
|
87
|
+
}
|
|
88
|
+
get handlers() {
|
|
89
|
+
return this.registered;
|
|
90
|
+
}
|
|
91
|
+
/** Registra a mano un gestore (senza decoratore): per i test e per codice non Nest. */
|
|
92
|
+
register(meta, handler) {
|
|
93
|
+
this.registered.push({
|
|
94
|
+
...meta,
|
|
95
|
+
handler,
|
|
96
|
+
stream: meta.subject.startsWith(`evt.${this.opts.service}.`) ? this.opts.stream : streamForSubject(meta.subject),
|
|
97
|
+
durable: (0, exports.durableName)(meta.consumer),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async start() {
|
|
101
|
+
this.stopped = false;
|
|
102
|
+
const jsm = this.conn.manager;
|
|
103
|
+
for (const r of this.registered) {
|
|
104
|
+
this.loops.push(this.runWithRetry(r));
|
|
105
|
+
}
|
|
106
|
+
// dead letter per le consegne esaurite senza il nostro gestore (pod morto a metà): avviso MAX_DELIVERIES, un solo ricevente per servizio
|
|
107
|
+
const streams = [...new Set(this.registered.map((r) => r.stream))];
|
|
108
|
+
for (const s of streams) {
|
|
109
|
+
const sub = this.conn.client.subscribe(`$JS.EVENT.ADVISORY.CONSUMER.MAX_DELIVERIES.${s}.>`, {
|
|
110
|
+
queue: `genai-events-dlq-${this.opts.service}`,
|
|
111
|
+
callback: (err, m) => {
|
|
112
|
+
if (err)
|
|
113
|
+
return;
|
|
114
|
+
void this.onMaxDeliveries(m.json()).catch((e) => this.log.warn(`dead letter da avviso fallita: ${e?.message ?? e}`));
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
this.advisorySubs.push(sub);
|
|
118
|
+
}
|
|
119
|
+
void jsm;
|
|
120
|
+
this.lagTimer = setInterval(() => void this.refreshLag(), 15_000);
|
|
121
|
+
this.lagTimer.unref?.();
|
|
122
|
+
}
|
|
123
|
+
async stop() {
|
|
124
|
+
this.stopped = true;
|
|
125
|
+
if (this.lagTimer)
|
|
126
|
+
clearInterval(this.lagTimer);
|
|
127
|
+
for (const s of this.advisorySubs)
|
|
128
|
+
s.unsubscribe();
|
|
129
|
+
this.advisorySubs = [];
|
|
130
|
+
await Promise.allSettled(this.loops);
|
|
131
|
+
this.loops = [];
|
|
132
|
+
this.consumers.clear();
|
|
133
|
+
}
|
|
134
|
+
// --- consumer e ciclo di lettura -----------------------------------------------------------------------------------
|
|
135
|
+
async runWithRetry(r) {
|
|
136
|
+
while (!this.stopped) {
|
|
137
|
+
try {
|
|
138
|
+
await this.ensureConsumer(r);
|
|
139
|
+
await this.loop(r);
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
if (this.stopped)
|
|
143
|
+
return;
|
|
144
|
+
this.log.warn(`consumer ${r.consumer}: ${e?.message ?? e} — riprovo fra 5 s`);
|
|
145
|
+
await new Promise((res) => setTimeout(res, 5_000));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
consumerConfig(r) {
|
|
150
|
+
const schedule = this.opts.retryScheduleMs;
|
|
151
|
+
return {
|
|
152
|
+
durable_name: r.durable,
|
|
153
|
+
ack_policy: jetstream_1.AckPolicy.Explicit,
|
|
154
|
+
deliver_policy: jetstream_1.DeliverPolicy.All,
|
|
155
|
+
filter_subject: r.subject,
|
|
156
|
+
ack_wait: 30_000 * NS,
|
|
157
|
+
max_deliver: schedule.length + 1,
|
|
158
|
+
backoff: schedule.map((ms) => ms * NS),
|
|
159
|
+
max_ack_pending: r.maxAckPending ?? 100,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
async ensureConsumer(r) {
|
|
163
|
+
const jsm = this.conn.manager;
|
|
164
|
+
const cfg = this.consumerConfig(r);
|
|
165
|
+
try {
|
|
166
|
+
await jsm.consumers.add(r.stream, cfg);
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
if (/not found/i.test(String(e?.message)) && /stream/i.test(String(e?.message)))
|
|
170
|
+
throw e; // lo stream del proprietario non c'è ancora
|
|
171
|
+
await jsm.consumers.update(r.stream, r.durable, {
|
|
172
|
+
filter_subject: cfg.filter_subject,
|
|
173
|
+
ack_wait: cfg.ack_wait,
|
|
174
|
+
max_deliver: cfg.max_deliver,
|
|
175
|
+
backoff: cfg.backoff,
|
|
176
|
+
max_ack_pending: cfg.max_ack_pending,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
this.consumers.set(r.consumer, await this.conn.jetstream.consumers.get(r.stream, r.durable));
|
|
180
|
+
}
|
|
181
|
+
async loop(r) {
|
|
182
|
+
const consumer = this.consumers.get(r.consumer);
|
|
183
|
+
while (!this.stopped) {
|
|
184
|
+
const m = await consumer.next({ expires: Math.max(1_000, this.opts.pollMs) });
|
|
185
|
+
if (!m)
|
|
186
|
+
continue;
|
|
187
|
+
await this.handle(r, m);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** Una consegna: verifica, transazione con inbox, ack/nak/term. Pubblico per i test. */
|
|
191
|
+
async handle(r, m) {
|
|
192
|
+
const label = { consumer: r.consumer };
|
|
193
|
+
const deliveryCount = m.info.deliveryCount;
|
|
194
|
+
const beat = setInterval(() => {
|
|
195
|
+
try {
|
|
196
|
+
m.working();
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
/* messaggio già chiuso */
|
|
200
|
+
}
|
|
201
|
+
}, 3_000);
|
|
202
|
+
try {
|
|
203
|
+
const evt = this.parse(m);
|
|
204
|
+
await this.verify(m, evt);
|
|
205
|
+
let duplicate = false;
|
|
206
|
+
await this.prisma.get().$transaction(async (tx) => {
|
|
207
|
+
const n = await tx.$executeRawUnsafe(`INSERT INTO inbox_processed ("consumer","eventId") VALUES ($1,$2::uuid) ON CONFLICT DO NOTHING`, r.consumer, evt.id);
|
|
208
|
+
if (n === 0) {
|
|
209
|
+
duplicate = true;
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
await r.handler(evt, tx);
|
|
213
|
+
}, { timeout: 60_000, maxWait: 10_000 });
|
|
214
|
+
m.ack();
|
|
215
|
+
this.metrics.inc('events_delivered_total', label);
|
|
216
|
+
if (duplicate)
|
|
217
|
+
this.metrics.inc('events_duplicates_total', label);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
const permanent = err instanceof errors_1.EventValidationError || err?.name === 'EventsEnvelopeError' || err?.name === 'EventsSignatureError';
|
|
221
|
+
const exhausted = deliveryCount >= this.opts.retryScheduleMs.length + 1;
|
|
222
|
+
if (permanent || exhausted) {
|
|
223
|
+
try {
|
|
224
|
+
await this.toDlq(r.stream, r.consumer, m, permanent ? err.message : `consegne esaurite (${deliveryCount}): ${err?.message ?? err}`, deliveryCount);
|
|
225
|
+
m.term(String(err?.message ?? err).slice(0, 200));
|
|
226
|
+
this.metrics.inc('events_term_total', label);
|
|
227
|
+
}
|
|
228
|
+
catch (dlqErr) {
|
|
229
|
+
// la dead letter non è raggiungibile: il messaggio resta, non si perde
|
|
230
|
+
this.log.error(`dead letter di ${r.consumer} non scritta (${dlqErr?.message ?? dlqErr}): il messaggio resta in coda`);
|
|
231
|
+
m.nak(this.delayFor(deliveryCount));
|
|
232
|
+
this.metrics.inc('events_nak_total', label);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
this.log.warn(`${r.consumer}: gestore fallito alla consegna ${deliveryCount}: ${err?.message ?? err}`);
|
|
237
|
+
m.nak(this.delayFor(deliveryCount));
|
|
238
|
+
this.metrics.inc('events_nak_total', label);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
clearInterval(beat);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
delayFor(deliveryCount) {
|
|
246
|
+
const s = this.opts.retryScheduleMs;
|
|
247
|
+
return s[Math.min(Math.max(deliveryCount, 1), s.length) - 1];
|
|
248
|
+
}
|
|
249
|
+
parse(m) {
|
|
250
|
+
let e;
|
|
251
|
+
try {
|
|
252
|
+
e = JSON.parse(m.string());
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
throw Object.assign(new Error('corpo non JSON'), { name: 'EventsEnvelopeError' });
|
|
256
|
+
}
|
|
257
|
+
const bad = (why) => Object.assign(new Error(`busta non valida: ${why}`), { name: 'EventsEnvelopeError' });
|
|
258
|
+
if (!e || typeof e !== 'object')
|
|
259
|
+
throw bad('non è un oggetto');
|
|
260
|
+
if (e.v !== 1)
|
|
261
|
+
throw bad(`versione ${e.v} sconosciuta`);
|
|
262
|
+
if (typeof e.id !== 'string' || !uuid_1.UUID_RE.test(e.id))
|
|
263
|
+
throw bad('id non è un UUID');
|
|
264
|
+
if (typeof e.subject !== 'string' || typeof e.aggregateType !== 'string' || typeof e.aggregateId !== 'string')
|
|
265
|
+
throw bad('campi mancanti');
|
|
266
|
+
if (!Number.isInteger(e.aggregateVersion) || typeof e.occurredAt !== 'string')
|
|
267
|
+
throw bad('versione/occurredAt');
|
|
268
|
+
const hdrId = m.headers?.get('Nats-Msg-Id');
|
|
269
|
+
if (hdrId && hdrId !== e.id)
|
|
270
|
+
throw bad('Nats-Msg-Id diverso da id');
|
|
271
|
+
return e;
|
|
272
|
+
}
|
|
273
|
+
async verify(m, evt) {
|
|
274
|
+
const mode = this.opts.signatureMode;
|
|
275
|
+
if (mode === 'off')
|
|
276
|
+
return;
|
|
277
|
+
const token = m.headers?.get('Gen-Sig') || undefined;
|
|
278
|
+
if (!this.opts.verifier) {
|
|
279
|
+
if (mode === 'enforce')
|
|
280
|
+
throw Object.assign(new Error('firma richiesta ma nessun verifier configurato'), { name: 'EventsSignatureError' });
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
await this.opts.verifier(token, { eventId: evt.id, subject: evt.subject, mode });
|
|
285
|
+
}
|
|
286
|
+
catch (e) {
|
|
287
|
+
if (mode === 'enforce')
|
|
288
|
+
throw Object.assign(new Error(`firma non valida: ${e?.message ?? e}`), { name: 'EventsSignatureError' });
|
|
289
|
+
this.log.warn(`firma di ${evt.subject} (${evt.id}) non valida (shadow): ${e?.message ?? e}`);
|
|
290
|
+
this.metrics.inc('events_signature_invalid_total', { mode: 'shadow' });
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// --- dead letter ---------------------------------------------------------------------------------------------------
|
|
294
|
+
async toDlq(stream, consumer, m, reason, deliveries, streamSeq) {
|
|
295
|
+
const seq = streamSeq ?? m.info?.streamSequence ?? m.seq;
|
|
296
|
+
const h = (0, transport_node_1.headers)();
|
|
297
|
+
const orig = m.headers;
|
|
298
|
+
if (orig)
|
|
299
|
+
for (const k of orig.keys())
|
|
300
|
+
for (const v of orig.values(k))
|
|
301
|
+
h.append(k, v);
|
|
302
|
+
h.set('Nats-Msg-Id', `dlq-${stream}-${consumer}-${seq}`);
|
|
303
|
+
h.set('Gen-Dlq-Reason', reason.replace(/[\r\n]+/g, ' ').slice(0, 500));
|
|
304
|
+
h.set('Gen-Dlq-Stream', stream);
|
|
305
|
+
h.set('Gen-Dlq-Consumer', consumer);
|
|
306
|
+
h.set('Gen-Dlq-Seq', String(seq));
|
|
307
|
+
h.set('Gen-Dlq-Deliveries', String(deliveries));
|
|
308
|
+
if (orig?.get('Nats-Msg-Id'))
|
|
309
|
+
h.set('Gen-Original-Id', orig.get('Nats-Msg-Id'));
|
|
310
|
+
h.set('Gen-Original-Subject', m.subject ?? '');
|
|
311
|
+
await this.conn.jetstream.publish(`dlq.${stream}.${consumer}`, m.data, { msgID: `dlq-${stream}-${consumer}-${seq}`, headers: h, timeout: 10_000 });
|
|
312
|
+
}
|
|
313
|
+
async onMaxDeliveries(a) {
|
|
314
|
+
const r = this.registered.find((x) => x.stream === a.stream && x.durable === a.consumer);
|
|
315
|
+
if (!r)
|
|
316
|
+
return;
|
|
317
|
+
const stored = await this.conn.manager.streams.getMessage(a.stream, { seq: a.stream_seq });
|
|
318
|
+
if (!stored)
|
|
319
|
+
return;
|
|
320
|
+
await this.toDlq(a.stream, r.consumer, { data: stored.data, headers: stored.header, seq: a.stream_seq, subject: stored.subject }, 'consegne esaurite (avviso MAX_DELIVERIES)', a.deliveries, a.stream_seq);
|
|
321
|
+
this.metrics.inc('events_term_total', { consumer: r.consumer });
|
|
322
|
+
}
|
|
323
|
+
async refreshLag() {
|
|
324
|
+
for (const r of this.registered) {
|
|
325
|
+
try {
|
|
326
|
+
const info = await this.consumers.get(r.consumer)?.info(true);
|
|
327
|
+
if (info)
|
|
328
|
+
this.metrics.set('events_consumer_lag', info.num_pending + info.num_ack_pending, { consumer: r.consumer });
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
/* al prossimo giro */
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
exports.EventsConsumers = EventsConsumers;
|
|
337
|
+
exports.EventsConsumers = EventsConsumers = __decorate([
|
|
338
|
+
(0, common_1.Injectable)(),
|
|
339
|
+
__param(0, (0, common_1.Inject)(tokens_1.EVENTS_OPTIONS)),
|
|
340
|
+
__metadata("design:paramtypes", [Object, connection_1.EventsConnection,
|
|
341
|
+
prisma_resolver_1.PrismaResolver,
|
|
342
|
+
metrics_1.EventsMetrics,
|
|
343
|
+
core_1.DiscoveryService,
|
|
344
|
+
core_1.MetadataScanner])
|
|
345
|
+
], EventsConsumers);
|
|
346
|
+
//# sourceMappingURL=consumers.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumers.service.js","sourceRoot":"","sources":["../src/consumers.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { OnEventOptions } from './types';
|
|
2
|
+
export interface OnEventMetadata extends OnEventOptions {
|
|
3
|
+
subject: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Registra il metodo come gestore di un evento con un consumer durevole.
|
|
7
|
+
* `@OnEvent('evt.id.employment.changed', { consumer: 'hr.employment-changed' })` su `(evt, tx) => Promise<void>`.
|
|
8
|
+
* La libreria apre la transazione, controlla `inbox_processed`, chiama il gestore con il `tx`, scrive l'inbox, fa COMMIT e poi ack.
|
|
9
|
+
* Lanciare `EventValidationError` manda subito in dead letter; ogni altro errore fa riprovare con l'attesa crescente.
|
|
10
|
+
*/
|
|
11
|
+
export declare const OnEvent: (subject: string, options: OnEventOptions) => MethodDecorator;
|
|
12
|
+
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,SAAS,MAAM,EAAE,SAAS,cAAc,KAAG,eACgB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OnEvent = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const tokens_1 = require("./tokens");
|
|
6
|
+
/**
|
|
7
|
+
* Registra il metodo come gestore di un evento con un consumer durevole.
|
|
8
|
+
* `@OnEvent('evt.id.employment.changed', { consumer: 'hr.employment-changed' })` su `(evt, tx) => Promise<void>`.
|
|
9
|
+
* La libreria apre la transazione, controlla `inbox_processed`, chiama il gestore con il `tx`, scrive l'inbox, fa COMMIT e poi ack.
|
|
10
|
+
* Lanciare `EventValidationError` manda subito in dead letter; ogni altro errore fa riprovare con l'attesa crescente.
|
|
11
|
+
*/
|
|
12
|
+
const OnEvent = (subject, options) => (0, common_1.SetMetadata)(tokens_1.ON_EVENT_METADATA, { subject, ...options });
|
|
13
|
+
exports.OnEvent = OnEvent;
|
|
14
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../src/decorators.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,qCAA6C;AAO7C;;;;;GAKG;AACI,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,OAAuB,EAAmB,EAAE,CACnF,IAAA,oBAAW,EAAC,0BAAiB,EAAE,EAAE,OAAO,EAAE,GAAG,OAAO,EAA4B,CAAC,CAAC;AADvE,QAAA,OAAO,WACgE"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Errori della libreria. `code` è stabile (compare nei contratti NATS/log). */
|
|
2
|
+
export declare class EventsError extends Error {
|
|
3
|
+
readonly code: 'EVENTS_OUTSIDE_TX' | 'EVENTS_CONFIG' | 'EVENTS_INVALID';
|
|
4
|
+
constructor(code: 'EVENTS_OUTSIDE_TX' | 'EVENTS_CONFIG' | 'EVENTS_INVALID', message: string);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Lanciata da un gestore (`@OnEvent`) quando l'evento non è valido per lui (payload malformato, versione sconosciuta):
|
|
8
|
+
* riprovare non serve. Il messaggio va subito in dead letter (`term`), senza consumare le 8 consegne.
|
|
9
|
+
*/
|
|
10
|
+
export declare class EventValidationError extends Error {
|
|
11
|
+
constructor(message: string);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,qBAAa,WAAY,SAAQ,KAAK;aAElB,IAAI,EAAE,mBAAmB,GAAG,eAAe,GAAG,gBAAgB;gBAA9D,IAAI,EAAE,mBAAmB,GAAG,eAAe,GAAG,gBAAgB,EAC9E,OAAO,EAAE,MAAM;CAKlB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EventValidationError = exports.EventsError = void 0;
|
|
4
|
+
/** Errori della libreria. `code` è stabile (compare nei contratti NATS/log). */
|
|
5
|
+
class EventsError extends Error {
|
|
6
|
+
constructor(code, message) {
|
|
7
|
+
super(`${code}: ${message}`);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.name = 'EventsError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.EventsError = EventsError;
|
|
13
|
+
/**
|
|
14
|
+
* Lanciata da un gestore (`@OnEvent`) quando l'evento non è valido per lui (payload malformato, versione sconosciuta):
|
|
15
|
+
* riprovare non serve. Il messaggio va subito in dead letter (`term`), senza consumare le 8 consegne.
|
|
16
|
+
*/
|
|
17
|
+
class EventValidationError extends Error {
|
|
18
|
+
constructor(message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = 'EventValidationError';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.EventValidationError = EventValidationError;
|
|
24
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAA,gFAAgF;AAChF,MAAa,WAAY,SAAQ,KAAK;IACpC,YACkB,IAA8D,EAC9E,OAAe;QAEf,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAHb,SAAI,GAAJ,IAAI,CAA0D;QAI9E,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AARD,kCAQC;AAED;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AALD,oDAKC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DynamicModule, OnApplicationBootstrap, OnApplicationShutdown } from '@nestjs/common';
|
|
2
|
+
import { EventsConnection } from './connection';
|
|
3
|
+
import { EventsConsumers } from './consumers.service';
|
|
4
|
+
import { OutboxRelay } from './relay.service';
|
|
5
|
+
import { type EventsModuleOptions, type ResolvedEventsOptions } from './types';
|
|
6
|
+
export declare class EventsModule implements OnApplicationBootstrap, OnApplicationShutdown {
|
|
7
|
+
private readonly opts;
|
|
8
|
+
private readonly conn;
|
|
9
|
+
private readonly relay;
|
|
10
|
+
private readonly consumers;
|
|
11
|
+
private readonly log;
|
|
12
|
+
private bootAbort;
|
|
13
|
+
constructor(opts: ResolvedEventsOptions, conn: EventsConnection, relay: OutboxRelay, consumers: EventsConsumers);
|
|
14
|
+
static forRoot(options: EventsModuleOptions): DynamicModule;
|
|
15
|
+
/** Con `off` e `outbox` non si apre nessuna connessione. Con `on` si connette in background: NATS giù non ferma l'avvio. */
|
|
16
|
+
onApplicationBootstrap(): void;
|
|
17
|
+
private boot;
|
|
18
|
+
onApplicationShutdown(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=events.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.module.d.ts","sourceRoot":"","sources":["../src/events.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkC,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE9H,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAkB,KAAK,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE/F,qBAEa,YAAa,YAAW,sBAAsB,EAAE,qBAAqB;IAKtD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAwB;IAC5C,OAAO,CAAC,SAAS,CAAS;gBAGiB,IAAI,EAAE,qBAAqB,EACnD,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,eAAe;IAG7C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa;IAoB3D,4HAA4H;IAC5H,sBAAsB,IAAI,IAAI;YAWhB,IAAI;IAeZ,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7C"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var EventsModule_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.EventsModule = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const core_1 = require("@nestjs/core");
|
|
19
|
+
const connection_1 = require("./connection");
|
|
20
|
+
const consumers_service_1 = require("./consumers.service");
|
|
21
|
+
const metrics_1 = require("./metrics");
|
|
22
|
+
const outbox_service_1 = require("./outbox.service");
|
|
23
|
+
const prisma_resolver_1 = require("./prisma-resolver");
|
|
24
|
+
const relay_service_1 = require("./relay.service");
|
|
25
|
+
const tokens_1 = require("./tokens");
|
|
26
|
+
const types_1 = require("./types");
|
|
27
|
+
let EventsModule = EventsModule_1 = class EventsModule {
|
|
28
|
+
constructor(opts, conn, relay, consumers) {
|
|
29
|
+
this.opts = opts;
|
|
30
|
+
this.conn = conn;
|
|
31
|
+
this.relay = relay;
|
|
32
|
+
this.consumers = consumers;
|
|
33
|
+
this.log = new common_1.Logger('Events');
|
|
34
|
+
this.bootAbort = false;
|
|
35
|
+
}
|
|
36
|
+
static forRoot(options) {
|
|
37
|
+
const resolved = (0, types_1.resolveOptions)(options);
|
|
38
|
+
return {
|
|
39
|
+
module: EventsModule_1,
|
|
40
|
+
global: true,
|
|
41
|
+
imports: [core_1.DiscoveryModule],
|
|
42
|
+
providers: [
|
|
43
|
+
{ provide: tokens_1.EVENTS_RAW_OPTIONS, useValue: options },
|
|
44
|
+
{ provide: tokens_1.EVENTS_OPTIONS, useValue: resolved },
|
|
45
|
+
metrics_1.EventsMetrics,
|
|
46
|
+
connection_1.EventsConnection,
|
|
47
|
+
prisma_resolver_1.PrismaResolver,
|
|
48
|
+
outbox_service_1.OutboxService,
|
|
49
|
+
relay_service_1.OutboxRelay,
|
|
50
|
+
consumers_service_1.EventsConsumers,
|
|
51
|
+
],
|
|
52
|
+
exports: [outbox_service_1.OutboxService, metrics_1.EventsMetrics, tokens_1.EVENTS_OPTIONS],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** Con `off` e `outbox` non si apre nessuna connessione. Con `on` si connette in background: NATS giù non ferma l'avvio. */
|
|
56
|
+
onApplicationBootstrap() {
|
|
57
|
+
const { mode, signatureMode, verifier, signer } = this.opts;
|
|
58
|
+
this.log.log(`EVENTS_MODE=${mode} EVENTS_SIGNATURE=${signatureMode}`);
|
|
59
|
+
if (signatureMode === 'enforce' && (!verifier || !signer)) {
|
|
60
|
+
throw new Error('EVENTS_SIGNATURE=enforce richiede signer e verifier in EventsModule.forRoot');
|
|
61
|
+
}
|
|
62
|
+
if (mode !== 'on')
|
|
63
|
+
return;
|
|
64
|
+
this.consumers.discover();
|
|
65
|
+
void this.boot();
|
|
66
|
+
}
|
|
67
|
+
async boot() {
|
|
68
|
+
while (!this.bootAbort) {
|
|
69
|
+
try {
|
|
70
|
+
await this.conn.ensure();
|
|
71
|
+
await this.conn.ensureOwnStream();
|
|
72
|
+
this.relay.start();
|
|
73
|
+
await this.consumers.start();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
this.log.warn(`avvio degli eventi fallito: ${e?.message ?? e} — riprovo fra 5 s`);
|
|
78
|
+
await new Promise((r) => setTimeout(r, 5_000));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async onApplicationShutdown() {
|
|
83
|
+
this.bootAbort = true;
|
|
84
|
+
await this.relay.stop();
|
|
85
|
+
await this.consumers.stop();
|
|
86
|
+
await this.conn.close();
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
exports.EventsModule = EventsModule;
|
|
90
|
+
exports.EventsModule = EventsModule = EventsModule_1 = __decorate([
|
|
91
|
+
(0, common_1.Global)(),
|
|
92
|
+
(0, common_1.Module)({}),
|
|
93
|
+
__param(0, (0, common_1.Inject)(tokens_1.EVENTS_OPTIONS)),
|
|
94
|
+
__metadata("design:paramtypes", [Object, connection_1.EventsConnection,
|
|
95
|
+
relay_service_1.OutboxRelay,
|
|
96
|
+
consumers_service_1.EventsConsumers])
|
|
97
|
+
], EventsModule);
|
|
98
|
+
//# sourceMappingURL=events.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.module.js","sourceRoot":"","sources":["../src/events.module.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { EventsModule } from './events.module';
|
|
2
|
+
export { OutboxService, OUTBOX_INSERT } from './outbox.service';
|
|
3
|
+
export { OutboxRelay } from './relay.service';
|
|
4
|
+
export { EventsConsumers, durableName, streamForSubject } from './consumers.service';
|
|
5
|
+
export { EventsConnection } from './connection';
|
|
6
|
+
export { EventsMetrics } from './metrics';
|
|
7
|
+
export { OnEvent, type OnEventMetadata } from './decorators';
|
|
8
|
+
export { EventsError, EventValidationError } from './errors';
|
|
9
|
+
export { uuidv7 } from './uuid';
|
|
10
|
+
export { DEFAULT_RETRY_SCHEDULE_MS, resolveOptions, type EnqueueParams, type EventEnvelope, type EventHandler, type EventSigner, type EventVerifier, type EventsMode, type EventsModuleOptions, type EventsService, type EventsSignatureMode, type OnEventOptions, type PrismaLike, type PrismaTx, type SignParams, type VerifyParams, } from './types';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveOptions = exports.DEFAULT_RETRY_SCHEDULE_MS = exports.uuidv7 = exports.EventValidationError = exports.EventsError = exports.OnEvent = exports.EventsMetrics = exports.EventsConnection = exports.streamForSubject = exports.durableName = exports.EventsConsumers = exports.OutboxRelay = exports.OUTBOX_INSERT = exports.OutboxService = exports.EventsModule = void 0;
|
|
4
|
+
var events_module_1 = require("./events.module");
|
|
5
|
+
Object.defineProperty(exports, "EventsModule", { enumerable: true, get: function () { return events_module_1.EventsModule; } });
|
|
6
|
+
var outbox_service_1 = require("./outbox.service");
|
|
7
|
+
Object.defineProperty(exports, "OutboxService", { enumerable: true, get: function () { return outbox_service_1.OutboxService; } });
|
|
8
|
+
Object.defineProperty(exports, "OUTBOX_INSERT", { enumerable: true, get: function () { return outbox_service_1.OUTBOX_INSERT; } });
|
|
9
|
+
var relay_service_1 = require("./relay.service");
|
|
10
|
+
Object.defineProperty(exports, "OutboxRelay", { enumerable: true, get: function () { return relay_service_1.OutboxRelay; } });
|
|
11
|
+
var consumers_service_1 = require("./consumers.service");
|
|
12
|
+
Object.defineProperty(exports, "EventsConsumers", { enumerable: true, get: function () { return consumers_service_1.EventsConsumers; } });
|
|
13
|
+
Object.defineProperty(exports, "durableName", { enumerable: true, get: function () { return consumers_service_1.durableName; } });
|
|
14
|
+
Object.defineProperty(exports, "streamForSubject", { enumerable: true, get: function () { return consumers_service_1.streamForSubject; } });
|
|
15
|
+
var connection_1 = require("./connection");
|
|
16
|
+
Object.defineProperty(exports, "EventsConnection", { enumerable: true, get: function () { return connection_1.EventsConnection; } });
|
|
17
|
+
var metrics_1 = require("./metrics");
|
|
18
|
+
Object.defineProperty(exports, "EventsMetrics", { enumerable: true, get: function () { return metrics_1.EventsMetrics; } });
|
|
19
|
+
var decorators_1 = require("./decorators");
|
|
20
|
+
Object.defineProperty(exports, "OnEvent", { enumerable: true, get: function () { return decorators_1.OnEvent; } });
|
|
21
|
+
var errors_1 = require("./errors");
|
|
22
|
+
Object.defineProperty(exports, "EventsError", { enumerable: true, get: function () { return errors_1.EventsError; } });
|
|
23
|
+
Object.defineProperty(exports, "EventValidationError", { enumerable: true, get: function () { return errors_1.EventValidationError; } });
|
|
24
|
+
var uuid_1 = require("./uuid");
|
|
25
|
+
Object.defineProperty(exports, "uuidv7", { enumerable: true, get: function () { return uuid_1.uuidv7; } });
|
|
26
|
+
var types_1 = require("./types");
|
|
27
|
+
Object.defineProperty(exports, "DEFAULT_RETRY_SCHEDULE_MS", { enumerable: true, get: function () { return types_1.DEFAULT_RETRY_SCHEDULE_MS; } });
|
|
28
|
+
Object.defineProperty(exports, "resolveOptions", { enumerable: true, get: function () { return types_1.resolveOptions; } });
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AACrB,mDAAgE;AAAvD,+GAAA,aAAa,OAAA;AAAE,+GAAA,aAAa,OAAA;AACrC,iDAA8C;AAArC,4GAAA,WAAW,OAAA;AACpB,yDAAqF;AAA5E,oHAAA,eAAe,OAAA;AAAE,gHAAA,WAAW,OAAA;AAAE,qHAAA,gBAAgB,OAAA;AACvD,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA;AACzB,qCAA0C;AAAjC,wGAAA,aAAa,OAAA;AACtB,2CAA6D;AAApD,qGAAA,OAAO,OAAA;AAChB,mCAA6D;AAApD,qGAAA,WAAW,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AAC1C,+BAAgC;AAAvB,8FAAA,MAAM,OAAA;AACf,iCAiBiB;AAhBf,kHAAA,yBAAyB,OAAA;AACzB,uGAAA,cAAc,OAAA"}
|