@coderno/common 1.0.0 → 1.0.2

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.
Files changed (65) hide show
  1. package/build/error/bad-request-error.d.ts +11 -0
  2. package/build/error/bad-request-error.d.ts.map +1 -0
  3. package/build/error/bad-request-error.js +14 -0
  4. package/build/error/bad-request-error.js.map +1 -0
  5. package/build/error/custom-error.d.ts +9 -0
  6. package/build/error/custom-error.d.ts.map +1 -0
  7. package/build/error/custom-error.js +7 -0
  8. package/build/error/custom-error.js.map +1 -0
  9. package/build/error/database-connection-error.d.ts +10 -0
  10. package/build/error/database-connection-error.d.ts.map +1 -0
  11. package/build/error/database-connection-error.js +17 -0
  12. package/build/error/database-connection-error.js.map +1 -0
  13. package/build/error/not-authorized-error.d.ts +10 -0
  14. package/build/error/not-authorized-error.d.ts.map +1 -0
  15. package/build/error/not-authorized-error.js +11 -0
  16. package/build/error/not-authorized-error.js.map +1 -0
  17. package/build/error/not-found-error.d.ts +10 -0
  18. package/build/error/not-found-error.d.ts.map +1 -0
  19. package/build/error/not-found-error.js +16 -0
  20. package/build/error/not-found-error.js.map +1 -0
  21. package/build/error/request-validation-error.d.ts +15 -0
  22. package/build/error/request-validation-error.d.ts.map +1 -0
  23. package/build/error/request-validation-error.js +20 -0
  24. package/build/error/request-validation-error.js.map +1 -0
  25. package/build/event/base-listeners.d.ts +19 -0
  26. package/build/event/base-listeners.d.ts.map +1 -0
  27. package/build/event/base-listeners.js +32 -0
  28. package/build/event/base-listeners.js.map +1 -0
  29. package/build/event/base-publisher.d.ts +14 -0
  30. package/build/event/base-publisher.d.ts.map +1 -0
  31. package/build/event/base-publisher.js +21 -0
  32. package/build/event/base-publisher.js.map +1 -0
  33. package/build/event/subjects.d.ts +5 -0
  34. package/build/event/subjects.d.ts.map +1 -0
  35. package/build/event/subjects.js +6 -0
  36. package/build/event/subjects.js.map +1 -0
  37. package/build/event/ticket-created-event.d.ts +10 -0
  38. package/build/event/ticket-created-event.d.ts.map +1 -0
  39. package/build/event/ticket-created-event.js +2 -0
  40. package/build/event/ticket-created-event.js.map +1 -0
  41. package/build/event/ticket-updated-event.d.ts +11 -0
  42. package/build/event/ticket-updated-event.d.ts.map +1 -0
  43. package/build/event/ticket-updated-event.js +2 -0
  44. package/build/event/ticket-updated-event.js.map +1 -0
  45. package/build/index.d.ts +17 -0
  46. package/build/index.d.ts.map +1 -0
  47. package/build/index.js +17 -0
  48. package/build/index.js.map +1 -0
  49. package/build/middlewares/current-user.d.ts +18 -0
  50. package/build/middlewares/current-user.d.ts.map +1 -0
  51. package/build/middlewares/current-user.js +14 -0
  52. package/build/middlewares/current-user.js.map +1 -0
  53. package/build/middlewares/error-handler.d.ts +3 -0
  54. package/build/middlewares/error-handler.d.ts.map +1 -0
  55. package/build/middlewares/error-handler.js +11 -0
  56. package/build/middlewares/error-handler.js.map +1 -0
  57. package/build/middlewares/require-auth.d.ts +3 -0
  58. package/build/middlewares/require-auth.d.ts.map +1 -0
  59. package/build/middlewares/require-auth.js +8 -0
  60. package/build/middlewares/require-auth.js.map +1 -0
  61. package/build/middlewares/validate-request.d.ts +3 -0
  62. package/build/middlewares/validate-request.d.ts.map +1 -0
  63. package/build/middlewares/validate-request.js +11 -0
  64. package/build/middlewares/validate-request.js.map +1 -0
  65. package/package.json +23 -4
@@ -0,0 +1,11 @@
1
+ import { CustomError } from "./custom-error.js";
2
+ export declare class BadRequestError extends CustomError {
3
+ message: string;
4
+ statusCode: number;
5
+ constructor(message: string);
6
+ serializeErrors(): {
7
+ message: string;
8
+ field?: string;
9
+ }[];
10
+ }
11
+ //# sourceMappingURL=bad-request-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bad-request-error.d.ts","sourceRoot":"","sources":["../../src/error/bad-request-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,eAAgB,SAAQ,WAAW;IAG3B,OAAO,EAAE,MAAM;IAFlC,UAAU,SAAO;IAEjB,YAAmB,OAAO,EAAE,MAAM,EAIjC;IAED,eAAe,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAEvD;CACF"}
@@ -0,0 +1,14 @@
1
+ import { CustomError } from "./custom-error.js";
2
+ export class BadRequestError extends CustomError {
3
+ message;
4
+ statusCode = 400;
5
+ constructor(message) {
6
+ super(message);
7
+ this.message = message;
8
+ Object.setPrototypeOf(this, BadRequestError.prototype);
9
+ }
10
+ serializeErrors() {
11
+ return [{ message: this.message }];
12
+ }
13
+ }
14
+ //# sourceMappingURL=bad-request-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bad-request-error.js","sourceRoot":"","sources":["../../src/error/bad-request-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAG3B,OAAO;IAF1B,UAAU,GAAG,GAAG,CAAC;IAEjB,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;uBADE,OAAO;QAGxB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,eAAe;QACb,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export declare abstract class CustomError extends Error {
2
+ abstract statusCode: number;
3
+ constructor(message: string);
4
+ abstract serializeErrors(): {
5
+ message: string;
6
+ field?: string;
7
+ }[];
8
+ }
9
+ //# sourceMappingURL=custom-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-error.d.ts","sourceRoot":"","sources":["../../src/error/custom-error.ts"],"names":[],"mappings":"AAAA,8BAAsB,WAAY,SAAQ,KAAK;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,YAAY,OAAO,EAAE,MAAM,EAI1B;IAED,QAAQ,CAAC,eAAe,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACnE"}
@@ -0,0 +1,7 @@
1
+ export class CustomError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ Object.setPrototypeOf(this, CustomError.prototype);
5
+ }
6
+ }
7
+ //# sourceMappingURL=custom-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-error.js","sourceRoot":"","sources":["../../src/error/custom-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,WAAY,SAAQ,KAAK;IAG7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;CAGF"}
@@ -0,0 +1,10 @@
1
+ import { CustomError } from "./custom-error.js";
2
+ export declare class DatabaseConnectionError extends CustomError {
3
+ reason: string;
4
+ statusCode: number;
5
+ constructor();
6
+ serializeErrors(): {
7
+ message: string;
8
+ }[];
9
+ }
10
+ //# sourceMappingURL=database-connection-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-connection-error.d.ts","sourceRoot":"","sources":["../../src/error/database-connection-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,uBAAwB,SAAQ,WAAW;IACtD,MAAM,SAAkC;IACxC,UAAU,SAAO;IAEjB,cAIC;IAED,eAAe;;QAMd;CACF"}
@@ -0,0 +1,17 @@
1
+ import { CustomError } from "./custom-error.js";
2
+ export class DatabaseConnectionError extends CustomError {
3
+ reason = "Error connection to database";
4
+ statusCode = 500;
5
+ constructor() {
6
+ super("Error connection to database");
7
+ Object.setPrototypeOf(this, DatabaseConnectionError.prototype);
8
+ }
9
+ serializeErrors() {
10
+ return [
11
+ {
12
+ message: this.reason,
13
+ },
14
+ ];
15
+ }
16
+ }
17
+ //# sourceMappingURL=database-connection-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-connection-error.js","sourceRoot":"","sources":["../../src/error/database-connection-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,uBAAwB,SAAQ,WAAW;IACtD,MAAM,GAAG,8BAA8B,CAAC;IACxC,UAAU,GAAG,GAAG,CAAC;IAEjB;QACE,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAEtC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACjE,CAAC;IAED,eAAe;QACb,OAAO;YACL;gBACE,OAAO,EAAE,IAAI,CAAC,MAAM;aACrB;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { CustomError } from "./custom-error.js";
2
+ export declare class NotAuthorizedError extends CustomError {
3
+ statusCode: number;
4
+ constructor();
5
+ serializeErrors(): {
6
+ message: string;
7
+ field?: string;
8
+ }[];
9
+ }
10
+ //# sourceMappingURL=not-authorized-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-authorized-error.d.ts","sourceRoot":"","sources":["../../src/error/not-authorized-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,UAAU,SAAO;IAEjB,cAEC;IAED,eAAe,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAEvD;CACF"}
@@ -0,0 +1,11 @@
1
+ import { CustomError } from "./custom-error.js";
2
+ export class NotAuthorizedError extends CustomError {
3
+ statusCode = 401;
4
+ constructor() {
5
+ super("Not authorized");
6
+ }
7
+ serializeErrors() {
8
+ return [{ message: "Not authorized" }];
9
+ }
10
+ }
11
+ //# sourceMappingURL=not-authorized-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-authorized-error.js","sourceRoot":"","sources":["../../src/error/not-authorized-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACjD,UAAU,GAAG,GAAG,CAAC;IAEjB;QACE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1B,CAAC;IAED,eAAe;QACb,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { CustomError } from "./custom-error.js";
2
+ export declare class NotFoundError extends CustomError {
3
+ statusCode: number;
4
+ constructor();
5
+ serializeErrors(): {
6
+ message: string;
7
+ field?: string;
8
+ }[];
9
+ }
10
+ //# sourceMappingURL=not-found-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-found-error.d.ts","sourceRoot":"","sources":["../../src/error/not-found-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,aAAc,SAAQ,WAAW;IAC5C,UAAU,SAAO;IAEjB,cAIC;IAED,eAAe,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAMvD;CACF"}
@@ -0,0 +1,16 @@
1
+ import { CustomError } from "./custom-error.js";
2
+ export class NotFoundError extends CustomError {
3
+ statusCode = 404;
4
+ constructor() {
5
+ super("Route not found");
6
+ Object.setPrototypeOf(this, NotFoundError.prototype);
7
+ }
8
+ serializeErrors() {
9
+ return [
10
+ {
11
+ message: "Page couldn't be found",
12
+ },
13
+ ];
14
+ }
15
+ }
16
+ //# sourceMappingURL=not-found-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-found-error.js","sourceRoot":"","sources":["../../src/error/not-found-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,aAAc,SAAQ,WAAW;IAC5C,UAAU,GAAG,GAAG,CAAC;IAEjB;QACE,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,eAAe;QACb,OAAO;YACL;gBACE,OAAO,EAAE,wBAAwB;aAClC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { type ValidationError } from "express-validator";
2
+ import { CustomError } from "./custom-error.js";
3
+ export declare class RequestValidationError extends CustomError {
4
+ errors: ValidationError[];
5
+ statusCode: number;
6
+ constructor(errors: ValidationError[]);
7
+ serializeErrors(): ({
8
+ message: any;
9
+ field: string;
10
+ } | {
11
+ field?: never;
12
+ message: any;
13
+ })[];
14
+ }
15
+ //# sourceMappingURL=request-validation-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-validation-error.d.ts","sourceRoot":"","sources":["../../src/error/request-validation-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qBAAa,sBAAuB,SAAQ,WAAW;IAGlC,MAAM,EAAE,eAAe,EAAE;IAF5C,UAAU,SAAO;IAEjB,YAAmB,MAAM,EAAE,eAAe,EAAE,EAI3C;IAED,eAAe;;;;;;SAQd;CACF"}
@@ -0,0 +1,20 @@
1
+ import {} from "express-validator";
2
+ import { CustomError } from "./custom-error.js";
3
+ export class RequestValidationError extends CustomError {
4
+ errors;
5
+ statusCode = 400;
6
+ constructor(errors) {
7
+ super("Request validator ");
8
+ this.errors = errors;
9
+ Object.setPrototypeOf(this, RequestValidationError.prototype);
10
+ }
11
+ serializeErrors() {
12
+ return this.errors.map((err) => {
13
+ if (err.type === "field") {
14
+ return { message: err.msg, field: err.path };
15
+ }
16
+ return { message: err.msg };
17
+ });
18
+ }
19
+ }
20
+ //# sourceMappingURL=request-validation-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-validation-error.js","sourceRoot":"","sources":["../../src/error/request-validation-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IAGlC,MAAM;IAFzB,UAAU,GAAG,GAAG,CAAC;IAEjB,YAAmB,MAAyB;QAC1C,KAAK,CAAC,oBAAoB,CAAC,CAAC;sBADX,MAAM;QAGvB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzB,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;YAC/C,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { type Message, type Stan } from "node-nats-streaming";
2
+ import { Subjects } from "./subjects";
3
+ interface Event {
4
+ subject: Subjects;
5
+ data: any;
6
+ }
7
+ export declare abstract class Listener<T extends Event> {
8
+ private client;
9
+ abstract onMessage(data: T["data"], msg: Message): void;
10
+ abstract subject: T["subject"];
11
+ abstract queueGroupName: string;
12
+ protected ackWait: number;
13
+ constructor(client: Stan);
14
+ subscriptionOptions(): import("node-nats-streaming").SubscriptionOptions;
15
+ listen(): void;
16
+ parseMessage(msg: Message): any;
17
+ }
18
+ export {};
19
+ //# sourceMappingURL=base-listeners.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-listeners.d.ts","sourceRoot":"","sources":["../../src/event/base-listeners.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,UAAU,KAAK;IACb,OAAO,EAAE,QAAQ,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;CACX;AAED,8BAAsB,QAAQ,CAAC,CAAC,SAAS,KAAK;IAOhC,OAAO,CAAC,MAAM;IAN1B,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC,SAAS,CAAC,OAAO,SAAY;IAE7B,YAAoB,MAAM,EAAE,IAAI,EAAI;IAEpC,mBAAmB,sDAOlB;IAED,MAAM,IAAI,IAAI,CAcb;IAED,YAAY,CAAC,GAAG,EAAE,OAAO,OAMxB;CACF"}
@@ -0,0 +1,32 @@
1
+ import {} from "node-nats-streaming";
2
+ import { Subjects } from "./subjects";
3
+ export class Listener {
4
+ client;
5
+ ackWait = 5 * 1000;
6
+ constructor(client) {
7
+ this.client = client;
8
+ }
9
+ subscriptionOptions() {
10
+ return this.client
11
+ .subscriptionOptions()
12
+ .setDeliverAllAvailable()
13
+ .setManualAckMode(true)
14
+ .setAckWait(this.ackWait)
15
+ .setDurableName(this.queueGroupName);
16
+ }
17
+ listen() {
18
+ const subscription = this.client.subscribe(this.subject, this.queueGroupName, this.subscriptionOptions());
19
+ subscription.on("message", (msg) => {
20
+ console.log(`Message received: ${this.subject} / ${this.queueGroupName}`);
21
+ const parsedData = this.parseMessage(msg);
22
+ this.onMessage(parsedData, msg);
23
+ });
24
+ }
25
+ parseMessage(msg) {
26
+ const data = msg.getData();
27
+ return typeof data === "string"
28
+ ? JSON.parse(data)
29
+ : JSON.parse(data.toString("utf-8"));
30
+ }
31
+ }
32
+ //# sourceMappingURL=base-listeners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-listeners.js","sourceRoot":"","sources":["../../src/event/base-listeners.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtC,MAAM,OAAgB,QAAQ;IAOR,MAAM;IAFhB,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC;IAE7B,YAAoB,MAAY;sBAAZ,MAAM;IAAS,CAAC;IAEpC,mBAAmB;QACjB,OAAO,IAAI,CAAC,MAAM;aACf,mBAAmB,EAAE;aACrB,sBAAsB,EAAE;aACxB,gBAAgB,CAAC,IAAI,CAAC;aACtB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;aACxB,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAED,MAAM;QACJ,MAAM,YAAY,GAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAC7C,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,mBAAmB,EAAE,CAC3B,CAAC;QAEF,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,EAAE;YAC1C,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,OAAO,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAE1E,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAE1C,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,CAAC,GAAY;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QAE3B,OAAO,OAAO,IAAI,KAAK,QAAQ;YAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAClB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import { type Stan } from "node-nats-streaming";
2
+ import { Subjects } from "./subjects";
3
+ interface Event {
4
+ subject: Subjects;
5
+ data: any;
6
+ }
7
+ export declare abstract class Publisher<T extends Event> {
8
+ private client;
9
+ abstract subject: T["subject"];
10
+ constructor(client: Stan);
11
+ publish(data: T["data"]): Promise<void>;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=base-publisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-publisher.d.ts","sourceRoot":"","sources":["../../src/event/base-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,UAAU,KAAK;IACb,OAAO,EAAE,QAAQ,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC;CACX;AAED,8BAAsB,SAAS,CAAC,CAAC,SAAS,KAAK;IAGjC,OAAO,CAAC,MAAM;IAF1B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAE/B,YAAoB,MAAM,EAAE,IAAI,EAAI;IAEpC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYtC;CACF"}
@@ -0,0 +1,21 @@
1
+ import {} from "node-nats-streaming";
2
+ import { Subjects } from "./subjects";
3
+ export class Publisher {
4
+ client;
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ publish(data) {
9
+ return new Promise((resolve, reject) => {
10
+ this.client.publish(this.subject, JSON.stringify(data), (err) => {
11
+ if (err) {
12
+ console.error("Failed to publish event:", err);
13
+ return reject(err);
14
+ }
15
+ console.log("Event published.");
16
+ resolve();
17
+ });
18
+ });
19
+ }
20
+ }
21
+ //# sourceMappingURL=base-publisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-publisher.js","sourceRoot":"","sources":["../../src/event/base-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtC,MAAM,OAAgB,SAAS;IAGT,MAAM;IAA1B,YAAoB,MAAY;sBAAZ,MAAM;IAAS,CAAC;IAEpC,OAAO,CAAC,IAAe;QACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC9D,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;oBAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export declare enum Subjects {
2
+ TicketCreated = "ticket:created",
3
+ TicketUpdated = "ticket:updated"
4
+ }
5
+ //# sourceMappingURL=subjects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subjects.d.ts","sourceRoot":"","sources":["../../src/event/subjects.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,aAAa,mBAAmB;IAEhC,aAAa,mBAAmB;CACjC"}
@@ -0,0 +1,6 @@
1
+ export var Subjects;
2
+ (function (Subjects) {
3
+ Subjects["TicketCreated"] = "ticket:created";
4
+ Subjects["TicketUpdated"] = "ticket:updated";
5
+ })(Subjects || (Subjects = {}));
6
+ //# sourceMappingURL=subjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subjects.js","sourceRoot":"","sources":["../../src/event/subjects.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,4CAAgC,CAAA;IAEhC,4CAAgC,CAAA;AAClC,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB"}
@@ -0,0 +1,10 @@
1
+ import { Subjects } from "./subjects";
2
+ export interface TicketCreatdEvent {
3
+ subject: Subjects.TicketCreated;
4
+ data: {
5
+ id: string;
6
+ title: string;
7
+ price: number;
8
+ };
9
+ }
10
+ //# sourceMappingURL=ticket-created-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-created-event.d.ts","sourceRoot":"","sources":["../../src/event/ticket-created-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ import { Subjects } from "./subjects";
2
+ //# sourceMappingURL=ticket-created-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-created-event.js","sourceRoot":"","sources":["../../src/event/ticket-created-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Subjects } from "./subjects";
2
+ export interface TicketUpdatedEvent {
3
+ subject: Subjects.TicketUpdated;
4
+ data: {
5
+ id: string;
6
+ title: string;
7
+ price: number;
8
+ userId: string;
9
+ };
10
+ }
11
+ //# sourceMappingURL=ticket-updated-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-updated-event.d.ts","sourceRoot":"","sources":["../../src/event/ticket-updated-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH"}
@@ -0,0 +1,2 @@
1
+ import { Subjects } from "./subjects";
2
+ //# sourceMappingURL=ticket-updated-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticket-updated-event.js","sourceRoot":"","sources":["../../src/event/ticket-updated-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,17 @@
1
+ export * from "./error/bad-request-error";
2
+ export * from "./error/custom-error";
3
+ export * from "./error/database-connection-error";
4
+ export * from "./error/not-authorized-error";
5
+ export * from "./error/not-found-error";
6
+ export * from "./error/request-validation-error";
7
+ export * from "./middlewares/current-user";
8
+ export * from "./middlewares/error-handler";
9
+ export * from "./middlewares/require-auth";
10
+ export * from "./middlewares/validate-request";
11
+ export * from "./event/base-listeners";
12
+ export * from "./event/base-publisher";
13
+ export * from "./event/subjects";
14
+ export * from "./event/ticket-created-event";
15
+ export * from "./event/ticket-created-event";
16
+ export * from "./event/ticket-updated-event";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AAEjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAE/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
package/build/index.js ADDED
@@ -0,0 +1,17 @@
1
+ export * from "./error/bad-request-error";
2
+ export * from "./error/custom-error";
3
+ export * from "./error/database-connection-error";
4
+ export * from "./error/not-authorized-error";
5
+ export * from "./error/not-found-error";
6
+ export * from "./error/request-validation-error";
7
+ export * from "./middlewares/current-user";
8
+ export * from "./middlewares/error-handler";
9
+ export * from "./middlewares/require-auth";
10
+ export * from "./middlewares/validate-request";
11
+ export * from "./event/base-listeners";
12
+ export * from "./event/base-publisher";
13
+ export * from "./event/subjects";
14
+ export * from "./event/ticket-created-event";
15
+ export * from "./event/ticket-created-event";
16
+ export * from "./event/ticket-updated-event";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AAEjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAE/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type Request, type Response, type NextFunction } from "express";
2
+ interface UserPayload {
3
+ email: string;
4
+ id: string;
5
+ }
6
+ declare global {
7
+ namespace Express {
8
+ interface Request {
9
+ currentUser?: UserPayload;
10
+ session?: {
11
+ jwt?: string;
12
+ };
13
+ }
14
+ }
15
+ }
16
+ export declare const currentUser: (req: Request, res: Response, next: NextFunction) => void;
17
+ export {};
18
+ //# sourceMappingURL=current-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-user.d.ts","sourceRoot":"","sources":["../../src/middlewares/current-user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAGzE,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,OAAO;YACf,WAAW,CAAC,EAAE,WAAW,CAAC;YAC1B,OAAO,CAAC,EAAE;gBACR,GAAG,CAAC,EAAE,MAAM,CAAC;aACd,CAAC;SACH;KACF;CACF;AAED,eAAO,MAAM,WAAW,QACjB,OAAO,OACP,QAAQ,QACP,YAAY,SAgBnB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import {} from "express";
2
+ import jwt from "jsonwebtoken";
3
+ export const currentUser = (req, res, next) => {
4
+ if (!req.session?.jwt) {
5
+ return next();
6
+ }
7
+ try {
8
+ const payload = jwt.verify(req.session.jwt, process.env.JWT_KEY);
9
+ req.currentUser = payload;
10
+ }
11
+ catch (err) { }
12
+ next();
13
+ };
14
+ //# sourceMappingURL=current-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-user.js","sourceRoot":"","sources":["../../src/middlewares/current-user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,MAAM,SAAS,CAAC;AACzE,OAAO,GAAG,MAAM,cAAc,CAAC;AAkB/B,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,EAAE;IACF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;QACtB,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CACxB,GAAG,CAAC,OAAO,CAAC,GAAG,EACf,OAAO,CAAC,GAAG,CAAC,OAAQ,CACN,CAAC;QAEjB,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC,CAAA,CAAC;IAEhB,IAAI,EAAE,CAAC;AACT,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Request, type Response, type NextFunction } from "express";
2
+ export declare const errorHandler: (err: Error, req: Request, res: Response, next: NextFunction) => Response<any, Record<string, any>> | undefined;
3
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/middlewares/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAGzE,eAAO,MAAM,YAAY,QAClB,KAAK,OACL,OAAO,OACP,QAAQ,QACP,YAAY,mDASnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import {} from "express";
2
+ import { CustomError } from "../error/custom-error.js";
3
+ export const errorHandler = (err, req, res, next) => {
4
+ if (err instanceof CustomError) {
5
+ return res.status(err.statusCode).send({ errors: err.serializeErrors() });
6
+ }
7
+ res.status(500).send({
8
+ errors: [{ message: "Ooops something went wrong!!!" }],
9
+ });
10
+ };
11
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/middlewares/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,GAAU,EACV,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,EAAE;IACF,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;KACvD,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Request, type Response, type NextFunction } from "express";
2
+ export declare const requireAuth: (req: Request, res: Response, next: NextFunction) => void;
3
+ //# sourceMappingURL=require-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-auth.d.ts","sourceRoot":"","sources":["../../src/middlewares/require-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAGzE,eAAO,MAAM,WAAW,QACjB,OAAO,OACP,QAAQ,QACP,YAAY,SAKnB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import {} from "express";
2
+ import { NotAuthorizedError } from "../error/not-authorized-error.js";
3
+ export const requireAuth = (req, res, next) => {
4
+ if (!req.currentUser)
5
+ throw new NotAuthorizedError();
6
+ next();
7
+ };
8
+ //# sourceMappingURL=require-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-auth.js","sourceRoot":"","sources":["../../src/middlewares/require-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,EAAE;IACF,IAAI,CAAC,GAAG,CAAC,WAAW;QAAE,MAAM,IAAI,kBAAkB,EAAE,CAAC;IAErD,IAAI,EAAE,CAAC;AACT,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type Request, type Response, type NextFunction } from "express";
2
+ export declare const validateRequest: (req: Request, res: Response, next: NextFunction) => void;
3
+ //# sourceMappingURL=validate-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-request.d.ts","sourceRoot":"","sources":["../../src/middlewares/validate-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAIzE,eAAO,MAAM,eAAe,QACrB,OAAO,OACP,QAAQ,QACP,YAAY,SASnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import {} from "express";
2
+ import { RequestValidationError } from "../error/request-validation-error.js";
3
+ import { validationResult } from "express-validator";
4
+ export const validateRequest = (req, res, next) => {
5
+ const errors = validationResult(req);
6
+ if (!errors.isEmpty()) {
7
+ throw new RequestValidationError(errors.array());
8
+ }
9
+ next();
10
+ };
11
+ //# sourceMappingURL=validate-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-request.js","sourceRoot":"","sources":["../../src/middlewares/validate-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,EAAE;IACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,EAAE,CAAC;AACT,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,32 @@
1
1
  {
2
2
  "name": "@coderno/common",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "",
5
- "main": "index.js",
5
+ "main": "./build/index.js",
6
+ "types": "./build/index.d.ts",
7
+ "files": [
8
+ "build/**/*"
9
+ ],
6
10
  "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1"
11
+ "build": "npm run clean && tsc",
12
+ "clean": "del-cli build"
8
13
  },
9
14
  "keywords": [],
10
15
  "author": "",
11
16
  "license": "ISC",
12
- "type": "commonjs"
17
+ "type": "module",
18
+ "devDependencies": {
19
+ "del-cli": "^7.0.0",
20
+ "typescript": "^7.0.2"
21
+ },
22
+ "dependencies": {
23
+ "@types/cookie-session": "^2.0.49",
24
+ "@types/express": "^5.0.6",
25
+ "@types/jsonwebtoken": "^9.0.10",
26
+ "cookie-session": "^2.1.1",
27
+ "express": "^5.2.1",
28
+ "express-validator": "^7.3.2",
29
+ "jsonwebtoken": "^9.0.3",
30
+ "node-nats-streaming": "^0.3.2"
31
+ }
13
32
  }