@seidor-cloud-produtos/orbit-backend-lib 2.0.112 → 2.0.114
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/clean-arch/application/queue/queue.d.ts +8 -0
- package/dist/clean-arch/domain/events/consistency-event/events-enum.d.ts +13 -3
- package/dist/clean-arch/domain/events/consistency-event/events-enum.js +13 -3
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-created.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-created.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-entity-event.d.ts +30 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-entity-event.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-upserted.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/address/address-upserted.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-created.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-created.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-entity-event.d.ts +8 -8
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-upserted.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/branch/branch-upserted.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-created.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-created.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-entity-event.d.ts +26 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-entity-event.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-upserted.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/contact/contact-upserted.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-created.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-created.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-entity-event.d.ts +10 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-entity-event.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-upserted.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/customer/customer-upserted.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/partner/partner-entity-event.d.ts +24 -50
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-associated.d.ts +1 -1
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-entity-event.d.ts +9 -1
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-upserted.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/role/role-upserted.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/supplier/supplier-created.d.ts +9 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/supplier/supplier-created.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/supplier/supplier-entity-event.d.ts +5 -0
- package/dist/clean-arch/domain/events/consistency-event/types/partner-service/supplier/supplier-entity-event.js +2 -0
- package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/role/role-created.d.ts +1 -1
- package/dist/clean-arch/domain/events/consistency-event/types/portal-admin/role/role-updated.d.ts +1 -1
- package/dist/clean-arch/domain/interfaces/country.d.ts +1 -0
- package/dist/clean-arch/infra/consistency-event-dispatcher/exchanges-enum.d.ts +11 -1
- package/dist/clean-arch/infra/consistency-event-dispatcher/exchanges-enum.js +10 -0
- package/dist/clean-arch/infra/queue/in-memory/in-memory-queue.d.ts +4 -0
- package/dist/clean-arch/infra/queue/in-memory/in-memory-queue.js +7 -0
- package/dist/clean-arch/infra/queue/rabbitmq/amqp-lib.d.ts +10 -0
- package/dist/clean-arch/infra/queue/rabbitmq/amqp-lib.js +45 -0
- package/dist/clean-arch/infra/queue/rabbitmq/amqp-lib.spec.js +38 -0
- package/dist/static/countries.js +241 -0
- package/package.json +1 -1
|
@@ -213,6 +213,51 @@ class AmqpQueue {
|
|
|
213
213
|
});
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Convenções aplicadas:
|
|
218
|
+
* - Routing key = `domainEvent.name`.
|
|
219
|
+
* - `persistent: true`.
|
|
220
|
+
* - TTL padrão de 14 dias quando `configs.expiration` é inválido.
|
|
221
|
+
*
|
|
222
|
+
* Se a publicação falhar retorna false. Não armazena mensagens em memória.
|
|
223
|
+
*/
|
|
224
|
+
async publishWaitForConfirms(exchangeName, domainEvent, configs) {
|
|
225
|
+
const buildedConfigs = configs || {};
|
|
226
|
+
const isValidExpiration = configs?.expiration === null || typeof configs?.expiration === 'number';
|
|
227
|
+
if (!isValidExpiration) {
|
|
228
|
+
const fourTeenDaysExpiration = 14 * 24 * 60 * 60 * 1000;
|
|
229
|
+
buildedConfigs.expiration = fourTeenDaysExpiration;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
const promises = [
|
|
233
|
+
this.publishToServerWaitForConfirms(exchangeName, domainEvent, buildedConfigs)
|
|
234
|
+
];
|
|
235
|
+
if (this.socketOptions?.timeoutSeconds) {
|
|
236
|
+
promises.push(AmqpQueue.delayOperation(this.socketOptions.timeoutSeconds));
|
|
237
|
+
}
|
|
238
|
+
const result = await Promise.race(promises);
|
|
239
|
+
if (result instanceof Error) {
|
|
240
|
+
throw result;
|
|
241
|
+
}
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
this.logger.info({
|
|
246
|
+
message: `⛔ Error to publish messages to: ${domainEvent.name}.`,
|
|
247
|
+
error: err,
|
|
248
|
+
});
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
async publishToServerWaitForConfirms(exchangeName, domainEvent, buildedConfigs) {
|
|
253
|
+
const channel = await this.connection.createConfirmChannel();
|
|
254
|
+
channel.publish(exchangeName, domainEvent.name || '', Buffer.from(JSON.stringify(domainEvent)), {
|
|
255
|
+
persistent: true,
|
|
256
|
+
...buildedConfigs,
|
|
257
|
+
});
|
|
258
|
+
await channel.waitForConfirms();
|
|
259
|
+
await channel.close();
|
|
260
|
+
}
|
|
216
261
|
async publishToServer(exchangeName, domainEvent, buildedConfigs) {
|
|
217
262
|
const channel = await this.connection.createChannel();
|
|
218
263
|
channel.publish(exchangeName, domainEvent.name || '', Buffer.from(JSON.stringify(domainEvent)), {
|
|
@@ -24,10 +24,12 @@ const createChannel = () => ({
|
|
|
24
24
|
prefetch: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
25
25
|
publish: vitest_1.vi.fn(),
|
|
26
26
|
reject: vitest_1.vi.fn(),
|
|
27
|
+
waitForConfirms: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
27
28
|
});
|
|
28
29
|
const createConnection = (channel = createChannel()) => ({
|
|
29
30
|
close: vitest_1.vi.fn().mockResolvedValue(undefined),
|
|
30
31
|
createChannel: vitest_1.vi.fn().mockResolvedValue(channel),
|
|
32
|
+
createConfirmChannel: vitest_1.vi.fn().mockResolvedValue(channel),
|
|
31
33
|
on: vitest_1.vi.fn(),
|
|
32
34
|
removeAllListeners: vitest_1.vi.fn(),
|
|
33
35
|
});
|
|
@@ -353,6 +355,42 @@ const createLogger = () => ({
|
|
|
353
355
|
(0, vitest_1.expect)(queue['messagesInMemory']).toHaveLength(1);
|
|
354
356
|
});
|
|
355
357
|
});
|
|
358
|
+
(0, vitest_1.describe)('publishWaitForConfirms', () => {
|
|
359
|
+
(0, vitest_1.it)('should publish, wait for confirms and return true on success', async () => {
|
|
360
|
+
const channel = createChannel();
|
|
361
|
+
const connection = createConnection(channel);
|
|
362
|
+
const queue = new amqp_lib_1.default(undefined, 'amqp://broker', createLogger());
|
|
363
|
+
const event = { name: 'domain.event', payload: { id: '1' } };
|
|
364
|
+
queue['connection'] = connection;
|
|
365
|
+
const result = await queue.publishWaitForConfirms('exchange', event, {
|
|
366
|
+
expiration: 'invalid',
|
|
367
|
+
headers: { source: 'spec' },
|
|
368
|
+
});
|
|
369
|
+
(0, vitest_1.expect)(channel.publish).toHaveBeenCalledWith('exchange', 'domain.event', Buffer.from(JSON.stringify(event)), {
|
|
370
|
+
persistent: true,
|
|
371
|
+
expiration: FOURTEEN_DAYS_IN_MS,
|
|
372
|
+
headers: { source: 'spec' },
|
|
373
|
+
});
|
|
374
|
+
(0, vitest_1.expect)(channel.waitForConfirms).toHaveBeenCalledTimes(1);
|
|
375
|
+
(0, vitest_1.expect)(channel.close).toHaveBeenCalledTimes(1);
|
|
376
|
+
(0, vitest_1.expect)(result).toBe(true);
|
|
377
|
+
});
|
|
378
|
+
(0, vitest_1.it)('should catch error, log it and return false if publishToServerWaitForConfirms fails', async () => {
|
|
379
|
+
const logger = createLogger();
|
|
380
|
+
const channel = createChannel();
|
|
381
|
+
const connection = createConnection(channel);
|
|
382
|
+
const queue = new amqp_lib_1.default(undefined, 'amqp://broker', logger);
|
|
383
|
+
const event = { name: 'domain.event' };
|
|
384
|
+
channel.waitForConfirms.mockRejectedValue(new Error('Broker nacked or channel closed'));
|
|
385
|
+
queue['connection'] = connection;
|
|
386
|
+
const result = await queue.publishWaitForConfirms('exchange', event);
|
|
387
|
+
(0, vitest_1.expect)(logger.info).toHaveBeenCalledWith({
|
|
388
|
+
message: '⛔ Error to publish messages to: domain.event.',
|
|
389
|
+
error: vitest_1.expect.any(Error),
|
|
390
|
+
});
|
|
391
|
+
(0, vitest_1.expect)(result).toBe(false);
|
|
392
|
+
});
|
|
393
|
+
});
|
|
356
394
|
(0, vitest_1.describe)('createConsumers', () => {
|
|
357
395
|
(0, vitest_1.it)('should create exchanges, queues and bindings', async () => {
|
|
358
396
|
const channel = createChannel();
|