@warlock.js/herald 4.0.111 → 4.0.112
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/cjs/index.js +1 -1
- package/cjs/message-managers/event-consumer.d.ts +19 -1
- package/cjs/message-managers/event-consumer.d.ts.map +1 -1
- package/cjs/message-managers/event-consumer.js +16 -2
- package/cjs/message-managers/event-consumer.js.map +1 -1
- package/cjs/message-managers/event-message.d.ts +16 -0
- package/cjs/message-managers/event-message.d.ts.map +1 -1
- package/cjs/message-managers/event-message.js +18 -1
- package/cjs/message-managers/event-message.js.map +1 -1
- package/esm/index.js +1 -1
- package/esm/message-managers/event-consumer.d.ts +19 -1
- package/esm/message-managers/event-consumer.d.ts.map +1 -1
- package/esm/message-managers/event-consumer.js +16 -2
- package/esm/message-managers/event-consumer.js.map +1 -1
- package/esm/message-managers/event-message.d.ts +16 -0
- package/esm/message-managers/event-message.d.ts.map +1 -1
- package/esm/message-managers/event-message.js +18 -1
- package/esm/message-managers/event-message.js.map +1 -1
- package/package.json +3 -3
package/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var communicator=require('./communicators/communicator.js'),communicatorRegistry=require('./communicators/communicator-registry.js'),rabbitmqDriver=require('./drivers/rabbitmq/rabbitmq-driver.js'),rabbitmqChannel=require('./drivers/rabbitmq/rabbitmq-channel.js'),connectToCommunicator=require('./utils/connect-to-communicator.js'),eventConsumer=require('./message-managers/event-consumer.js'),eventMessage=require('./message-managers/event-message.js'),consumable=require('./decorators/consumable.js');exports.Communicator=communicator.Communicator;exports.MissingCommunicatorError=communicatorRegistry.MissingCommunicatorError;exports.communicatorRegistry=communicatorRegistry.communicatorRegistry;exports.RabbitMQDriver=rabbitmqDriver.RabbitMQDriver;exports.RabbitMQChannel=rabbitmqChannel.RabbitMQChannel;exports.communicatorChannel=connectToCommunicator.communicatorChannel;exports.communicators=connectToCommunicator.communicators;exports.connectToCommunicator=connectToCommunicator.connectToCommunicator;exports.publishEvent=connectToCommunicator.publishEvent;exports.subscribeConsumer=connectToCommunicator.subscribeConsumer;exports.EventConsumer=eventConsumer.EventConsumer;exports.EventMessage=eventMessage.EventMessage;exports.Consumable=consumable.Consumable;exports.pendingSubscribers=consumable.pendingSubscribers;//# sourceMappingURL=index.js.map
|
|
1
|
+
'use strict';var communicator=require('./communicators/communicator.js'),communicatorRegistry=require('./communicators/communicator-registry.js'),rabbitmqDriver=require('./drivers/rabbitmq/rabbitmq-driver.js'),rabbitmqChannel=require('./drivers/rabbitmq/rabbitmq-channel.js'),connectToCommunicator=require('./utils/connect-to-communicator.js'),eventConsumer=require('./message-managers/event-consumer.js'),eventMessage=require('./message-managers/event-message.js'),consumable=require('./decorators/consumable.js');exports.Communicator=communicator.Communicator;exports.MissingCommunicatorError=communicatorRegistry.MissingCommunicatorError;exports.communicatorRegistry=communicatorRegistry.communicatorRegistry;exports.RabbitMQDriver=rabbitmqDriver.RabbitMQDriver;exports.RabbitMQChannel=rabbitmqChannel.RabbitMQChannel;exports.communicatorChannel=connectToCommunicator.communicatorChannel;exports.communicators=connectToCommunicator.communicators;exports.connectToCommunicator=connectToCommunicator.connectToCommunicator;exports.publishEvent=connectToCommunicator.publishEvent;exports.subscribeConsumer=connectToCommunicator.subscribeConsumer;exports.EventConsumer=eventConsumer.EventConsumer;exports.defineConsumer=eventConsumer.defineConsumer;exports.EventMessage=eventMessage.EventMessage;exports.defineEvent=eventMessage.defineEvent;exports.Consumable=consumable.Consumable;exports.pendingSubscribers=consumable.pendingSubscribers;//# sourceMappingURL=index.js.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* It's highly recommended using it instead of declaring manual channel namd and subscribing to event
|
|
6
6
|
*/
|
|
7
7
|
import { ValidationResult, type ObjectValidator } from "@warlock.js/seal";
|
|
8
|
-
import { ConsumedEventMessage } from "./types";
|
|
8
|
+
import { ConsumedEventMessage, EventConsumerClass } from "./types";
|
|
9
9
|
export declare abstract class EventConsumer<Payload = Record<string, any>> {
|
|
10
10
|
/**
|
|
11
11
|
* Event name
|
|
@@ -38,4 +38,22 @@ export declare abstract class EventConsumer<Payload = Record<string, any>> {
|
|
|
38
38
|
*/
|
|
39
39
|
validate(data: Payload): Promise<ValidationResult | void>;
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Define Consumer options
|
|
43
|
+
*/
|
|
44
|
+
type ConsumerOptions<Payload> = {
|
|
45
|
+
/**
|
|
46
|
+
* Payload validation to auto reject the received event before accessing it in the handle method
|
|
47
|
+
*/
|
|
48
|
+
schema?: ObjectValidator;
|
|
49
|
+
/**
|
|
50
|
+
* Handle data
|
|
51
|
+
*/
|
|
52
|
+
handle: (payload: Payload, event: ConsumedEventMessage) => Promise<void>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* A shorthand to define an event consumer without declaring an entire class
|
|
56
|
+
*/
|
|
57
|
+
export declare function defineConsumer<Payload = Record<string, any>>(eventName: string, options: ConsumerOptions<Payload>): EventConsumerClass;
|
|
58
|
+
export {};
|
|
41
59
|
//# sourceMappingURL=event-consumer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-consumer.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"event-consumer.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEnE,8BAAsB,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC/D;;OAEG;IACH,OAAc,SAAS,EAAE,MAAM,CAAC;IAEhC,OAAc,UAAU,sDAAgB;IAExC,IAAW,SAAS,WAEnB;IAED;;OAEG;IACH,OAAc,UAAU,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,OAAc,UAAU,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACI,MAAM,CAAC,EAAE,eAAe,CAAC;IAEhC;;OAEG;aACa,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpF;;OAEG;WACW,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD;;OAEG;IACU,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAKvE;AAED;;GAEG;AACH,KAAK,eAAe,CAAC,OAAO,IAAI;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,GAChC,kBAAkB,CAapB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var seal=require('@warlock.js/seal'),crypto=require('crypto');/**
|
|
1
|
+
'use strict';var seal=require('@warlock.js/seal'),crypto=require('crypto'),consumable=require('../decorators/consumable.js');/**
|
|
2
2
|
* This class is used to be part of the Herald Event Consumer Manager.
|
|
3
3
|
* It should be used to consume events from Either RabbitMQ or Kafka through Herald
|
|
4
4
|
*
|
|
@@ -43,4 +43,18 @@ class EventConsumer {
|
|
|
43
43
|
return;
|
|
44
44
|
return await seal.v.validate(this.schema, data);
|
|
45
45
|
}
|
|
46
|
-
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A shorthand to define an event consumer without declaring an entire class
|
|
49
|
+
*/
|
|
50
|
+
function defineConsumer(eventName, options) {
|
|
51
|
+
const Class = class AnnouncedConsumer extends EventConsumer {
|
|
52
|
+
static eventName = eventName;
|
|
53
|
+
schema = options.schema;
|
|
54
|
+
handle(payload, event) {
|
|
55
|
+
return options.handle(payload, event);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
consumable.Consumable()(Class);
|
|
59
|
+
return Class;
|
|
60
|
+
}exports.EventConsumer=EventConsumer;exports.defineConsumer=defineConsumer;//# sourceMappingURL=event-consumer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-consumer.js","sources":["../../src/message-managers/event-consumer.ts"],"sourcesContent":[null],"names":["randomUUID","v"],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-consumer.js","sources":["../../src/message-managers/event-consumer.ts"],"sourcesContent":[null],"names":["randomUUID","v","Consumable"],"mappings":"6HAAA;;;;;AAKG;MAMmB,aAAa,CAAA;AACjC;;AAEG;IACI,OAAO,SAAS,CAAS;AAEzB,IAAA,OAAO,UAAU,GAAGA,iBAAU,EAAE,CAAC;AAExC,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAQ,IAAI,CAAC,WAAoC,CAAC,SAAS,CAAC;KAC7D;AAED;;AAEG;IACI,OAAO,UAAU,CAAU;AAElC;;AAEG;IACI,OAAO,UAAU,CAAU;AAElC;;AAEG;AACI,IAAA,MAAM,CAAmB;AAOhC;;AAEG;IACI,OAAO,iBAAiB,CAAC,OAAe,EAAA;QAC7C,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK,CAAC;QAC/D,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK,CAAC;AAE/D,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACI,MAAM,QAAQ,CAAC,IAAa,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,OAAO,MAAMC,MAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC5C;;AAiBH;;AAEG;AACa,SAAA,cAAc,CAC5B,SAAiB,EACjB,OAAiC,EAAA;AAEjC,IAAA,MAAM,KAAK,GAAG,MAAM,iBAAkB,SAAQ,aAAsB,CAAA;AAC3D,QAAA,OAAO,SAAS,GAAG,SAAS,CAAC;AAC7B,QAAA,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAExB,MAAM,CAAC,OAAgB,EAAE,KAA2B,EAAA;YACzD,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACvC;KACF,CAAC;AAEF,IAAAC,qBAAU,EAAE,CAAC,KAA2B,CAAC,CAAC;AAE1C,IAAA,OAAO,KAA2B,CAAC;AACrC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* It's highly recommended using it instead of declaring manual channel namd and publishing data
|
|
6
6
|
*/
|
|
7
|
+
import { GenericObject } from "@mongez/reinforcements";
|
|
7
8
|
import { type ObjectValidator } from "@warlock.js/seal";
|
|
8
9
|
export declare abstract class EventMessage<TPayload = Record<string, any>> {
|
|
9
10
|
protected data?: TPayload;
|
|
@@ -45,4 +46,19 @@ export declare abstract class EventMessage<TPayload = Record<string, any>> {
|
|
|
45
46
|
__through: string;
|
|
46
47
|
};
|
|
47
48
|
}
|
|
49
|
+
type EventOptions<T> = {
|
|
50
|
+
/**
|
|
51
|
+
* Shapen the data that will be used
|
|
52
|
+
*/
|
|
53
|
+
toJSON?: (data: T) => GenericObject;
|
|
54
|
+
/**
|
|
55
|
+
* Validation schema
|
|
56
|
+
*/
|
|
57
|
+
schema?: ObjectValidator;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* A shorthand to define an event without declaring an entire class
|
|
61
|
+
*/
|
|
62
|
+
export declare function defineEvent<IncomingData = unknown, OutcomingData = unknown>(eventName: string, options?: EventOptions<IncomingData>): typeof EventMessage<OutcomingData>;
|
|
63
|
+
export {};
|
|
48
64
|
//# sourceMappingURL=event-message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-message.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,8BAAsB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"event-message.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,8BAAsB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAqC5C,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ;IApC5C;;OAEG;IACH,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC;;OAEG;IACI,OAAO,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACI,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEtC;;OAEG;IACI,SAAS,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACI,MAAM,CAAC,EAAE,eAAe,CAAC;IAEhC;;OAEG;IACI,MAAM,IAAI,QAAQ;gBAQI,IAAI,CAAC,EAAE,QAAQ;IAE5C;;OAEG;IACI,SAAS;;;;;;;;;CAiBjB;AAED,KAAK,YAAY,CAAC,CAAC,IAAI;IACrB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,aAAa,CAAC;IACpC;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,GAAG,OAAO,EAAE,aAAa,GAAG,OAAO,EACzE,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,YAAY,CAAC,YAAY,CAAM,GACvC,OAAO,YAAY,CAAC,aAAa,CAAC,CAWpC"}
|
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
* Data that will be sent with the event (Payload)
|
|
21
21
|
*/
|
|
22
22
|
toJSON() {
|
|
23
|
+
if (!this.data) {
|
|
24
|
+
throw new Error(`no Data is defined for Event: ${this.eventName}`);
|
|
25
|
+
}
|
|
23
26
|
return this.data;
|
|
24
27
|
}
|
|
25
28
|
constructor(data) {
|
|
@@ -43,4 +46,18 @@
|
|
|
43
46
|
__through: "EventMessage",
|
|
44
47
|
};
|
|
45
48
|
}
|
|
46
|
-
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A shorthand to define an event without declaring an entire class
|
|
52
|
+
*/
|
|
53
|
+
function defineEvent(eventName, options = {}) {
|
|
54
|
+
return class AnnouncedEvent extends EventMessage {
|
|
55
|
+
eventName = eventName;
|
|
56
|
+
schema = options.schema;
|
|
57
|
+
toJSON() {
|
|
58
|
+
if (!options.toJSON)
|
|
59
|
+
return super.toJSON();
|
|
60
|
+
return options.toJSON(this.data);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}exports.EventMessage=EventMessage;exports.defineEvent=defineEvent;//# sourceMappingURL=event-message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-message.js","sources":["../../src/message-managers/event-message.ts"],"sourcesContent":[null],"names":["randomUUID"],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-message.js","sources":["../../src/message-managers/event-message.ts"],"sourcesContent":[null],"names":["randomUUID"],"mappings":"gDAUsB,YAAY,CAAA;AAqCH,IAAA,IAAA,CAAA;AA/B7B;;AAEG;AACI,IAAA,OAAO,CAAU;AAExB;;AAEG;AACI,IAAA,QAAQ,CAAuB;AAEtC;;AAEG;AACI,IAAA,SAAS,CAAU;AAE1B;;AAEG;AACI,IAAA,MAAM,CAAmB;AAEhC;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,CAAA,8BAAA,EAAiC,IAAI,CAAC,SAAS,CAAE,CAAA,CAAC,CAAC;AACpE,SAAA;QAED,OAAO,IAAI,CAAC,IAAgB,CAAC;KAC9B;AAED,IAAA,WAAA,CAA6B,IAAe,EAAA;QAAf,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAW;KAAI;AAEhD;;AAEG;IACI,SAAS,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACtD,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE9B,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAIA,iBAAU,EAAE;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,IAAI,EAAE;AACtB,YAAA,SAAS,EAAE,cAAc;SAC1B,CAAC;KACH;AACF,CAAA;AAaD;;AAEG;SACa,WAAW,CACzB,SAAiB,EACjB,UAAsC,EAAE,EAAA;IAExC,OAAO,MAAM,cAAe,SAAQ,YAA2B,CAAA;QACtD,SAAS,GAAG,SAAS,CAAC;AACtB,QAAA,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAExB,MAAM,GAAA;YACX,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,gBAAA,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YAE3C,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAoB,CAAkB,CAAC;SACnE;KACF,CAAC;AACJ"}
|
package/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{Communicator}from'./communicators/communicator.js';export{MissingCommunicatorError,communicatorRegistry}from'./communicators/communicator-registry.js';export{RabbitMQDriver}from'./drivers/rabbitmq/rabbitmq-driver.js';export{RabbitMQChannel}from'./drivers/rabbitmq/rabbitmq-channel.js';export{communicatorChannel,communicators,connectToCommunicator,publishEvent,subscribeConsumer}from'./utils/connect-to-communicator.js';export{EventConsumer}from'./message-managers/event-consumer.js';export{EventMessage}from'./message-managers/event-message.js';export{Consumable,pendingSubscribers}from'./decorators/consumable.js';//# sourceMappingURL=index.js.map
|
|
1
|
+
export{Communicator}from'./communicators/communicator.js';export{MissingCommunicatorError,communicatorRegistry}from'./communicators/communicator-registry.js';export{RabbitMQDriver}from'./drivers/rabbitmq/rabbitmq-driver.js';export{RabbitMQChannel}from'./drivers/rabbitmq/rabbitmq-channel.js';export{communicatorChannel,communicators,connectToCommunicator,publishEvent,subscribeConsumer}from'./utils/connect-to-communicator.js';export{EventConsumer,defineConsumer}from'./message-managers/event-consumer.js';export{EventMessage,defineEvent}from'./message-managers/event-message.js';export{Consumable,pendingSubscribers}from'./decorators/consumable.js';//# sourceMappingURL=index.js.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* It's highly recommended using it instead of declaring manual channel namd and subscribing to event
|
|
6
6
|
*/
|
|
7
7
|
import { ValidationResult, type ObjectValidator } from "@warlock.js/seal";
|
|
8
|
-
import { ConsumedEventMessage } from "./types";
|
|
8
|
+
import { ConsumedEventMessage, EventConsumerClass } from "./types";
|
|
9
9
|
export declare abstract class EventConsumer<Payload = Record<string, any>> {
|
|
10
10
|
/**
|
|
11
11
|
* Event name
|
|
@@ -38,4 +38,22 @@ export declare abstract class EventConsumer<Payload = Record<string, any>> {
|
|
|
38
38
|
*/
|
|
39
39
|
validate(data: Payload): Promise<ValidationResult | void>;
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Define Consumer options
|
|
43
|
+
*/
|
|
44
|
+
type ConsumerOptions<Payload> = {
|
|
45
|
+
/**
|
|
46
|
+
* Payload validation to auto reject the received event before accessing it in the handle method
|
|
47
|
+
*/
|
|
48
|
+
schema?: ObjectValidator;
|
|
49
|
+
/**
|
|
50
|
+
* Handle data
|
|
51
|
+
*/
|
|
52
|
+
handle: (payload: Payload, event: ConsumedEventMessage) => Promise<void>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* A shorthand to define an event consumer without declaring an entire class
|
|
56
|
+
*/
|
|
57
|
+
export declare function defineConsumer<Payload = Record<string, any>>(eventName: string, options: ConsumerOptions<Payload>): EventConsumerClass;
|
|
58
|
+
export {};
|
|
41
59
|
//# sourceMappingURL=event-consumer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-consumer.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"event-consumer.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-consumer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEnE,8BAAsB,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC/D;;OAEG;IACH,OAAc,SAAS,EAAE,MAAM,CAAC;IAEhC,OAAc,UAAU,sDAAgB;IAExC,IAAW,SAAS,WAEnB;IAED;;OAEG;IACH,OAAc,UAAU,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACH,OAAc,UAAU,CAAC,EAAE,MAAM,CAAC;IAElC;;OAEG;IACI,MAAM,CAAC,EAAE,eAAe,CAAC;IAEhC;;OAEG;aACa,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpF;;OAEG;WACW,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOzD;;OAEG;IACU,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAKvE;AAED;;GAEG;AACH,KAAK,eAAe,CAAC,OAAO,IAAI;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1D,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,GAChC,kBAAkB,CAapB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {v}from'@warlock.js/seal';import {randomUUID}from'crypto';/**
|
|
1
|
+
import {v}from'@warlock.js/seal';import {randomUUID}from'crypto';import {Consumable}from'../decorators/consumable.js';/**
|
|
2
2
|
* This class is used to be part of the Herald Event Consumer Manager.
|
|
3
3
|
* It should be used to consume events from Either RabbitMQ or Kafka through Herald
|
|
4
4
|
*
|
|
@@ -43,4 +43,18 @@ class EventConsumer {
|
|
|
43
43
|
return;
|
|
44
44
|
return await v.validate(this.schema, data);
|
|
45
45
|
}
|
|
46
|
-
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A shorthand to define an event consumer without declaring an entire class
|
|
49
|
+
*/
|
|
50
|
+
function defineConsumer(eventName, options) {
|
|
51
|
+
const Class = class AnnouncedConsumer extends EventConsumer {
|
|
52
|
+
static eventName = eventName;
|
|
53
|
+
schema = options.schema;
|
|
54
|
+
handle(payload, event) {
|
|
55
|
+
return options.handle(payload, event);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
Consumable()(Class);
|
|
59
|
+
return Class;
|
|
60
|
+
}export{EventConsumer,defineConsumer};//# sourceMappingURL=event-consumer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-consumer.js","sources":["../../src/message-managers/event-consumer.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-consumer.js","sources":["../../src/message-managers/event-consumer.ts"],"sourcesContent":[null],"names":[],"mappings":"sHAAA;;;;;AAKG;MAMmB,aAAa,CAAA;AACjC;;AAEG;IACI,OAAO,SAAS,CAAS;AAEzB,IAAA,OAAO,UAAU,GAAG,UAAU,EAAE,CAAC;AAExC,IAAA,IAAW,SAAS,GAAA;AAClB,QAAA,OAAQ,IAAI,CAAC,WAAoC,CAAC,SAAS,CAAC;KAC7D;AAED;;AAEG;IACI,OAAO,UAAU,CAAU;AAElC;;AAEG;IACI,OAAO,UAAU,CAAU;AAElC;;AAEG;AACI,IAAA,MAAM,CAAmB;AAOhC;;AAEG;IACI,OAAO,iBAAiB,CAAC,OAAe,EAAA;QAC7C,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK,CAAC;QAC/D,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,KAAK,CAAC;AAE/D,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACI,MAAM,QAAQ,CAAC,IAAa,EAAA;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,OAAO,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAC5C;;AAiBH;;AAEG;AACa,SAAA,cAAc,CAC5B,SAAiB,EACjB,OAAiC,EAAA;AAEjC,IAAA,MAAM,KAAK,GAAG,MAAM,iBAAkB,SAAQ,aAAsB,CAAA;AAC3D,QAAA,OAAO,SAAS,GAAG,SAAS,CAAC;AAC7B,QAAA,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAExB,MAAM,CAAC,OAAgB,EAAE,KAA2B,EAAA;YACzD,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACvC;KACF,CAAC;AAEF,IAAA,UAAU,EAAE,CAAC,KAA2B,CAAC,CAAC;AAE1C,IAAA,OAAO,KAA2B,CAAC;AACrC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* It's highly recommended using it instead of declaring manual channel namd and publishing data
|
|
6
6
|
*/
|
|
7
|
+
import { GenericObject } from "@mongez/reinforcements";
|
|
7
8
|
import { type ObjectValidator } from "@warlock.js/seal";
|
|
8
9
|
export declare abstract class EventMessage<TPayload = Record<string, any>> {
|
|
9
10
|
protected data?: TPayload;
|
|
@@ -45,4 +46,19 @@ export declare abstract class EventMessage<TPayload = Record<string, any>> {
|
|
|
45
46
|
__through: string;
|
|
46
47
|
};
|
|
47
48
|
}
|
|
49
|
+
type EventOptions<T> = {
|
|
50
|
+
/**
|
|
51
|
+
* Shapen the data that will be used
|
|
52
|
+
*/
|
|
53
|
+
toJSON?: (data: T) => GenericObject;
|
|
54
|
+
/**
|
|
55
|
+
* Validation schema
|
|
56
|
+
*/
|
|
57
|
+
schema?: ObjectValidator;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* A shorthand to define an event without declaring an entire class
|
|
61
|
+
*/
|
|
62
|
+
export declare function defineEvent<IncomingData = unknown, OutcomingData = unknown>(eventName: string, options?: EventOptions<IncomingData>): typeof EventMessage<OutcomingData>;
|
|
63
|
+
export {};
|
|
48
64
|
//# sourceMappingURL=event-message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-message.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,8BAAsB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"event-message.d.ts","sourceRoot":"","sources":["../../src/message-managers/event-message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,8BAAsB,YAAY,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAqC5C,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ;IApC5C;;OAEG;IACH,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC;;OAEG;IACI,OAAO,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACI,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEtC;;OAEG;IACI,SAAS,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACI,MAAM,CAAC,EAAE,eAAe,CAAC;IAEhC;;OAEG;IACI,MAAM,IAAI,QAAQ;gBAQI,IAAI,CAAC,EAAE,QAAQ;IAE5C;;OAEG;IACI,SAAS;;;;;;;;;CAiBjB;AAED,KAAK,YAAY,CAAC,CAAC,IAAI;IACrB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,aAAa,CAAC;IACpC;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,YAAY,GAAG,OAAO,EAAE,aAAa,GAAG,OAAO,EACzE,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,YAAY,CAAC,YAAY,CAAM,GACvC,OAAO,YAAY,CAAC,aAAa,CAAC,CAWpC"}
|
|
@@ -20,6 +20,9 @@ import {randomUUID}from'crypto';class EventMessage {
|
|
|
20
20
|
* Data that will be sent with the event (Payload)
|
|
21
21
|
*/
|
|
22
22
|
toJSON() {
|
|
23
|
+
if (!this.data) {
|
|
24
|
+
throw new Error(`no Data is defined for Event: ${this.eventName}`);
|
|
25
|
+
}
|
|
23
26
|
return this.data;
|
|
24
27
|
}
|
|
25
28
|
constructor(data) {
|
|
@@ -43,4 +46,18 @@ import {randomUUID}from'crypto';class EventMessage {
|
|
|
43
46
|
__through: "EventMessage",
|
|
44
47
|
};
|
|
45
48
|
}
|
|
46
|
-
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A shorthand to define an event without declaring an entire class
|
|
52
|
+
*/
|
|
53
|
+
function defineEvent(eventName, options = {}) {
|
|
54
|
+
return class AnnouncedEvent extends EventMessage {
|
|
55
|
+
eventName = eventName;
|
|
56
|
+
schema = options.schema;
|
|
57
|
+
toJSON() {
|
|
58
|
+
if (!options.toJSON)
|
|
59
|
+
return super.toJSON();
|
|
60
|
+
return options.toJSON(this.data);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}export{EventMessage,defineEvent};//# sourceMappingURL=event-message.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-message.js","sources":["../../src/message-managers/event-message.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-message.js","sources":["../../src/message-managers/event-message.ts"],"sourcesContent":[null],"names":[],"mappings":"sCAUsB,YAAY,CAAA;AAqCH,IAAA,IAAA,CAAA;AA/B7B;;AAEG;AACI,IAAA,OAAO,CAAU;AAExB;;AAEG;AACI,IAAA,QAAQ,CAAuB;AAEtC;;AAEG;AACI,IAAA,SAAS,CAAU;AAE1B;;AAEG;AACI,IAAA,MAAM,CAAmB;AAEhC;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,CAAA,8BAAA,EAAiC,IAAI,CAAC,SAAS,CAAE,CAAA,CAAC,CAAC;AACpE,SAAA;QAED,OAAO,IAAI,CAAC,IAAgB,CAAC;KAC9B;AAED,IAAA,WAAA,CAA6B,IAAe,EAAA;QAAf,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAW;KAAI;AAEhD;;AAEG;IACI,SAAS,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;AACtD,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE9B,OAAO;YACL,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,UAAU,EAAE;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,IAAI,EAAE;AACtB,YAAA,SAAS,EAAE,cAAc;SAC1B,CAAC;KACH;AACF,CAAA;AAaD;;AAEG;SACa,WAAW,CACzB,SAAiB,EACjB,UAAsC,EAAE,EAAA;IAExC,OAAO,MAAM,cAAe,SAAQ,YAA2B,CAAA;QACtD,SAAS,GAAG,SAAS,CAAC;AACtB,QAAA,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAExB,MAAM,GAAA;YACX,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,gBAAA,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YAE3C,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAoB,CAAkB,CAAC;SACnE;KACF,CAAC;AACJ"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@warlock.js/herald",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.112",
|
|
4
4
|
"description": "Message bus/communicators for RabbitMQ, Kafka, and more",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@mongez/copper": "^1.0.1",
|
|
8
8
|
"@mongez/events": "^2.1.0",
|
|
9
9
|
"@mongez/reinforcements": "^2.3.17",
|
|
10
|
-
"@warlock.js/logger": "4.0.
|
|
11
|
-
"@warlock.js/seal": "4.0.
|
|
10
|
+
"@warlock.js/logger": "4.0.112",
|
|
11
|
+
"@warlock.js/seal": "4.0.112"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
14
|
"update": "npx ncu -u",
|