@itzworking/events-manager 0.0.94

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/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # ItzWorking (AWS Serverless, Next.js, TypeScript)
2
+
3
+ > **ItzWorking because you built it!**
4
+
5
+ Framework for building AWS Serverless applications with Next.js and TypeScript.
6
+
7
+ - [Intro](#intro)
8
+ - [Key features](#key-features)
9
+ - [Usage](#usage)
10
+
11
+ ## Intro
12
+
13
+ ## Key features
14
+
15
+ ## Usage
package/package.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@itzworking/events-manager",
3
+ "version": "0.0.94",
4
+ "dependencies": {
5
+ "tslib": "^2.3.0"
6
+ },
7
+ "peerDependencies": {
8
+ "@aws-sdk/client-eventbridge": "3.x",
9
+ "@itzworking/decorated-class": "0.0.94",
10
+ "@itzworking/powertools": "0.0.94",
11
+ "uuid": "10.x"
12
+ },
13
+ "type": "commonjs",
14
+ "main": "./src/index.js",
15
+ "typings": "./src/index.d.ts"
16
+ }
@@ -0,0 +1,6 @@
1
+ import { DecoratedClass } from "@itzworking/decorated-class";
2
+ export declare class ApplicationEventMetadata extends DecoratedClass {
3
+ idempotencyKey: string;
4
+ createdAt: number;
5
+ constructor(props?: any);
6
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApplicationEventMetadata = void 0;
4
+ const decorated_class_1 = require("@itzworking/decorated-class");
5
+ const uuid_1 = require("uuid");
6
+ class ApplicationEventMetadata extends decorated_class_1.DecoratedClass {
7
+ constructor(props) {
8
+ super(props);
9
+ if (!(props === null || props === void 0 ? void 0 : props.idempotencyKey)) {
10
+ this.idempotencyKey = (0, uuid_1.v4)();
11
+ }
12
+ if (!(props === null || props === void 0 ? void 0 : props.createdAt)) {
13
+ this.createdAt = Date.now();
14
+ }
15
+ }
16
+ }
17
+ exports.ApplicationEventMetadata = ApplicationEventMetadata;
18
+ //# sourceMappingURL=application-event-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-event-metadata.js","sourceRoot":"","sources":["../../../../libs/events-manager/src/application-event-metadata.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAC7D,+BAAkC;AAElC,MAAa,wBAAyB,SAAQ,gCAAc;IAI1D,YAAY,KAAW;QACrB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAA,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,IAAA,SAAI,GAAE,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,CAAA,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAbD,4DAaC"}
@@ -0,0 +1,7 @@
1
+ import { DecoratedClass } from "@itzworking/decorated-class";
2
+ import { ApplicationEventMetadata } from "./application-event-metadata";
3
+ export declare class ApplicationEvent<T extends DecoratedClass> extends DecoratedClass {
4
+ metadata: ApplicationEventMetadata;
5
+ body?: T;
6
+ constructor(props?: any);
7
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApplicationEvent = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const decorated_class_1 = require("@itzworking/decorated-class");
6
+ const application_event_metadata_1 = require("./application-event-metadata");
7
+ class ApplicationEvent extends decorated_class_1.DecoratedClass {
8
+ constructor(props) {
9
+ super(props);
10
+ this.metadata = new application_event_metadata_1.ApplicationEventMetadata(props === null || props === void 0 ? void 0 : props.metadata);
11
+ }
12
+ }
13
+ exports.ApplicationEvent = ApplicationEvent;
14
+ tslib_1.__decorate([
15
+ decorated_class_1.NotNull,
16
+ (0, decorated_class_1.Attribute)(decorated_class_1.AttributeType.Object, { nestedType: application_event_metadata_1.ApplicationEventMetadata }),
17
+ tslib_1.__metadata("design:type", application_event_metadata_1.ApplicationEventMetadata)
18
+ ], ApplicationEvent.prototype, "metadata", void 0);
19
+ tslib_1.__decorate([
20
+ (0, decorated_class_1.Attribute)(decorated_class_1.AttributeType.Object),
21
+ tslib_1.__metadata("design:type", Object)
22
+ ], ApplicationEvent.prototype, "body", void 0);
23
+ //# sourceMappingURL=application-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-event.js","sourceRoot":"","sources":["../../../../libs/events-manager/src/application-event.ts"],"names":[],"mappings":";;;;AAAA,iEAKqC;AACrC,6EAAwE;AAExE,MAAa,gBAA2C,SAAQ,gCAAc;IAQ5E,YAAY,KAAW;QACrB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,qDAAwB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;CACF;AAZD,4CAYC;AATC;IAFC,yBAAO;IACP,IAAA,2BAAS,EAAC,+BAAa,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,qDAAwB,EAAE,CAAC;sCAChE,qDAAwB;kDAAC;AAGnC;IADC,IAAA,2BAAS,EAAC,+BAAa,CAAC,MAAM,CAAC;;8CACvB"}
@@ -0,0 +1 @@
1
+ export * from "./missing-environment-variables-error";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./missing-environment-variables-error"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/events-manager/src/errors/index.ts"],"names":[],"mappings":";;;AAAA,gFAAsD"}
@@ -0,0 +1,3 @@
1
+ export declare class MissingEnvironmentVariablesError extends Error {
2
+ constructor(missingEnvironmentVariables: string[]);
3
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MissingEnvironmentVariablesError = void 0;
4
+ class MissingEnvironmentVariablesError extends Error {
5
+ constructor(missingEnvironmentVariables) {
6
+ super(JSON.stringify({
7
+ name: "MissingEnvironmentVariablesError",
8
+ message: `Missing environment variables: ${missingEnvironmentVariables.join(", ")}`,
9
+ }));
10
+ this.name = "MissingEnvironmentVariablesError";
11
+ }
12
+ }
13
+ exports.MissingEnvironmentVariablesError = MissingEnvironmentVariablesError;
14
+ //# sourceMappingURL=missing-environment-variables-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-environment-variables-error.js","sourceRoot":"","sources":["../../../../../libs/events-manager/src/errors/missing-environment-variables-error.ts"],"names":[],"mappings":";;;AAAA,MAAa,gCAAiC,SAAQ,KAAK;IACzD,YAAY,2BAAqC;QAC/C,KAAK,CACH,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,kCAAkC;YACxC,OAAO,EAAE,kCAAkC,2BAA2B,CAAC,IAAI,CACzE,IAAI,CACL,EAAE;SACJ,CAAC,CACH,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC;IACjD,CAAC;CACF;AAZD,4EAYC"}
@@ -0,0 +1,2 @@
1
+ import { EventBridgeClient } from "@aws-sdk/client-eventbridge";
2
+ export declare const eventbridge: EventBridgeClient;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.eventbridge = void 0;
4
+ const client_eventbridge_1 = require("@aws-sdk/client-eventbridge");
5
+ exports.eventbridge = new client_eventbridge_1.EventBridgeClient({});
6
+ //# sourceMappingURL=eventbridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventbridge.js","sourceRoot":"","sources":["../../../../../libs/events-manager/src/eventbridge/eventbridge.ts"],"names":[],"mappings":";;;AAAA,oEAAgE;AAEnD,QAAA,WAAW,GAAG,IAAI,sCAAiB,CAAC,EAAE,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./eventbridge";
2
+ export * from "./put-eb-events";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./eventbridge"), exports);
5
+ tslib_1.__exportStar(require("./put-eb-events"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/events-manager/src/eventbridge/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAE9B,0DAAgC"}
@@ -0,0 +1,2 @@
1
+ import { PutEventsCommandInput } from "@aws-sdk/client-eventbridge";
2
+ export declare const putEbEvents: (input: PutEventsCommandInput) => Promise<import("@aws-sdk/client-eventbridge").PutEventsCommandOutput>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.putEbEvents = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const powertools_1 = require("@itzworking/powertools");
6
+ const client_eventbridge_1 = require("@aws-sdk/client-eventbridge");
7
+ const eventbridge_1 = require("./eventbridge");
8
+ const putEbEvents = (input) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
9
+ powertools_1.logger.debug({
10
+ message: "send eventbridge PutEventsCommand",
11
+ awsService: "eventbridge",
12
+ action: "PutEventsCommand",
13
+ input,
14
+ });
15
+ try {
16
+ return eventbridge_1.eventbridge.send(new client_eventbridge_1.PutEventsCommand(input));
17
+ }
18
+ catch (error) {
19
+ powertools_1.logger.error({
20
+ message: "send eventbridge PutEventsCommand",
21
+ awsService: "eventbridge",
22
+ action: "PutEventsCommand",
23
+ input,
24
+ error,
25
+ });
26
+ throw error;
27
+ }
28
+ });
29
+ exports.putEbEvents = putEbEvents;
30
+ //# sourceMappingURL=put-eb-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put-eb-events.js","sourceRoot":"","sources":["../../../../../libs/events-manager/src/eventbridge/put-eb-events.ts"],"names":[],"mappings":";;;;AAAA,uDAAgD;AAChD,oEAGqC;AACrC,+CAA4C;AAErC,MAAM,WAAW,GAAG,CAAO,KAA4B,EAAE,EAAE;IAChE,mBAAM,CAAC,KAAK,CAAC;QACX,OAAO,EAAE,mCAAmC;QAC5C,UAAU,EAAE,aAAa;QACzB,MAAM,EAAE,kBAAkB;QAC1B,KAAK;KACN,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,yBAAW,CAAC,IAAI,CAAC,IAAI,qCAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mBAAM,CAAC,KAAK,CAAC;YACX,OAAO,EAAE,mCAAmC;YAC5C,UAAU,EAAE,aAAa;YACzB,MAAM,EAAE,kBAAkB;YAC1B,KAAK;YACL,KAAK;SACN,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAA,CAAC;AAnBW,QAAA,WAAW,eAmBtB"}
@@ -0,0 +1,10 @@
1
+ import { DecoratedClass } from "@itzworking/decorated-class";
2
+ declare class EventsManagerClass {
3
+ readonly serviceName: string;
4
+ readonly eventBusName: string;
5
+ readonly eventSource: string;
6
+ constructor();
7
+ publishEvent<T extends DecoratedClass>(entityClass: new (props?: any) => T, eventName: string, body: T): Promise<import("@aws-sdk/client-eventbridge").PutEventsCommandOutput>;
8
+ }
9
+ export declare const EventsManager: EventsManagerClass;
10
+ export {};
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventsManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const decorated_class_1 = require("@itzworking/decorated-class");
6
+ const powertools_1 = require("@itzworking/powertools");
7
+ const application_event_1 = require("./application-event");
8
+ const eventbridge_1 = require("./eventbridge");
9
+ const errors_1 = require("./errors");
10
+ class EventsManagerClass {
11
+ constructor() {
12
+ this.serviceName = process.env.SERVICE_NAME || "";
13
+ this.eventBusName = process.env.EVENT_BUS_NAME || "";
14
+ this.eventSource = process.env.NAMESPACE || "";
15
+ const missingEnvironmentVariables = [];
16
+ if (!this.serviceName) {
17
+ missingEnvironmentVariables.push("SERVICE_NAME");
18
+ }
19
+ if (!this.eventBusName) {
20
+ missingEnvironmentVariables.push("EVENT_BUS_NAME");
21
+ }
22
+ if (!this.eventSource) {
23
+ missingEnvironmentVariables.push("NAMESPACE");
24
+ }
25
+ if (missingEnvironmentVariables.length > 0) {
26
+ powertools_1.logger.error("Missing environment variables", {
27
+ missing: missingEnvironmentVariables,
28
+ });
29
+ throw new errors_1.MissingEnvironmentVariablesError(missingEnvironmentVariables);
30
+ }
31
+ powertools_1.logger.debug("EventsManager initialized", {
32
+ serviceName: this.serviceName,
33
+ eventBusName: this.eventBusName,
34
+ eventSource: this.eventSource,
35
+ });
36
+ }
37
+ publishEvent(entityClass, eventName, body) {
38
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
39
+ powertools_1.logger.debug("Publishing event", {
40
+ eventName,
41
+ entityClass: entityClass.name,
42
+ });
43
+ const applicationEvent = new application_event_1.ApplicationEvent({
44
+ body: body instanceof entityClass ? body : new entityClass(body),
45
+ });
46
+ try {
47
+ decorated_class_1.validator.validate(applicationEvent);
48
+ const events = {
49
+ Entries: [
50
+ {
51
+ Detail: JSON.stringify(applicationEvent),
52
+ DetailType: `${this.serviceName}.${eventName}`,
53
+ Source: this.eventSource,
54
+ EventBusName: this.eventBusName,
55
+ },
56
+ ],
57
+ };
58
+ powertools_1.logger.debug("Sending event to EventBridge", {
59
+ detailType: events.Entries[0].DetailType,
60
+ eventBusName: this.eventBusName,
61
+ });
62
+ const result = yield (0, eventbridge_1.putEbEvents)(events);
63
+ powertools_1.logger.info("Event published successfully", {
64
+ eventName,
65
+ detailType: events.Entries[0].DetailType,
66
+ });
67
+ return result;
68
+ }
69
+ catch (error) {
70
+ powertools_1.logger.error("Failed to publish event", {
71
+ eventName,
72
+ error: error.message,
73
+ entityClass: entityClass.name,
74
+ });
75
+ throw error;
76
+ }
77
+ });
78
+ }
79
+ }
80
+ exports.EventsManager = new EventsManagerClass();
81
+ //# sourceMappingURL=events-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events-manager.js","sourceRoot":"","sources":["../../../../libs/events-manager/src/events-manager.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./errors";
2
+ export * from "./eventbridge";
3
+ export * from "./application-event-metadata";
4
+ export * from "./application-event";
5
+ export * from "./events-manager";
package/src/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./errors"), exports);
5
+ tslib_1.__exportStar(require("./eventbridge"), exports);
6
+ tslib_1.__exportStar(require("./application-event-metadata"), exports);
7
+ tslib_1.__exportStar(require("./application-event"), exports);
8
+ tslib_1.__exportStar(require("./events-manager"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/events-manager/src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,wDAA8B;AAE9B,uEAA6C;AAC7C,8DAAoC;AACpC,2DAAiC"}