@eratu/common 1.0.22 → 1.0.23

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 (161) hide show
  1. package/build/__tests__/enum/roles.test.d.ts +1 -0
  2. package/build/__tests__/enum/roles.test.js +31 -0
  3. package/build/__tests__/errors/bad-request-error.test.d.ts +1 -0
  4. package/build/__tests__/errors/bad-request-error.test.js +30 -0
  5. package/build/__tests__/errors/database-connection-error.test.d.ts +1 -0
  6. package/build/__tests__/errors/database-connection-error.test.js +28 -0
  7. package/build/__tests__/errors/forbidden-error.test.d.ts +1 -0
  8. package/build/__tests__/errors/forbidden-error.test.js +39 -0
  9. package/build/__tests__/errors/not-authorized-error.test.d.ts +1 -0
  10. package/build/__tests__/errors/not-authorized-error.test.js +39 -0
  11. package/build/__tests__/errors/not-found-error.test.d.ts +1 -0
  12. package/build/__tests__/errors/not-found-error.test.js +39 -0
  13. package/build/__tests__/errors/request-validation-error.test.d.ts +1 -0
  14. package/build/__tests__/errors/request-validation-error.test.js +99 -0
  15. package/build/__tests__/events/base-listener.test.d.ts +1 -0
  16. package/build/__tests__/events/base-listener.test.js +223 -0
  17. package/build/__tests__/events/base-publisher.test.d.ts +1 -0
  18. package/build/__tests__/events/base-publisher.test.js +85 -0
  19. package/build/__tests__/events/streams.test.d.ts +1 -0
  20. package/build/__tests__/events/streams.test.js +18 -0
  21. package/build/__tests__/events/subjects.test.d.ts +1 -0
  22. package/build/__tests__/events/subjects.test.js +79 -0
  23. package/build/__tests__/middlewares/allow-roles.test.d.ts +1 -0
  24. package/build/__tests__/middlewares/allow-roles.test.js +112 -0
  25. package/build/__tests__/middlewares/current-user.test.d.ts +1 -0
  26. package/build/__tests__/middlewares/current-user.test.js +261 -0
  27. package/build/__tests__/middlewares/error-handler.test.d.ts +1 -0
  28. package/build/__tests__/middlewares/error-handler.test.js +102 -0
  29. package/build/__tests__/middlewares/require-auth.test.d.ts +1 -0
  30. package/build/__tests__/middlewares/require-auth.test.js +57 -0
  31. package/build/__tests__/middlewares/validation.test.d.ts +1 -0
  32. package/build/__tests__/middlewares/validation.test.js +198 -0
  33. package/build/__tests__/nats-wrapper.test.d.ts +1 -0
  34. package/build/__tests__/nats-wrapper.test.js +159 -0
  35. package/build/__tests__/redis-wrapper.test.d.ts +1 -0
  36. package/build/__tests__/redis-wrapper.test.js +159 -0
  37. package/build/enum/image.d.ts +14 -0
  38. package/build/enum/image.js +18 -0
  39. package/build/enum/roles.d.ts +6 -0
  40. package/build/enum/roles.js +10 -0
  41. package/build/errors/bad-request-error.d.ts +9 -0
  42. package/build/errors/bad-request-error.js +16 -0
  43. package/build/errors/conflict-error.d.ts +9 -0
  44. package/build/errors/conflict-error.js +16 -0
  45. package/build/errors/custom-error.d.ts +8 -0
  46. package/build/errors/custom-error.js +10 -0
  47. package/build/errors/database-connection-error.d.ts +9 -0
  48. package/build/errors/database-connection-error.js +16 -0
  49. package/build/errors/forbidden-error.d.ts +9 -0
  50. package/build/errors/forbidden-error.js +16 -0
  51. package/build/errors/internal-error.d.ts +9 -0
  52. package/build/errors/internal-error.js +16 -0
  53. package/build/errors/not-authorized-error.d.ts +8 -0
  54. package/build/errors/not-authorized-error.js +15 -0
  55. package/build/errors/not-found-error.d.ts +9 -0
  56. package/build/errors/not-found-error.js +16 -0
  57. package/build/errors/request-validation-error.d.ts +14 -0
  58. package/build/errors/request-validation-error.js +22 -0
  59. package/build/events/event-types/auth/admin-deleted-event.d.ts +11 -0
  60. package/build/events/event-types/auth/admin-deleted-event.js +2 -0
  61. package/build/events/event-types/auth/admin-signed-up-event.d.ts +13 -0
  62. package/build/events/event-types/auth/admin-signed-up-event.js +2 -0
  63. package/build/events/event-types/auth/admin-updated-event.d.ts +14 -0
  64. package/build/events/event-types/auth/admin-updated-event.js +2 -0
  65. package/build/events/event-types/auth/author-deleted-event.d.ts +11 -0
  66. package/build/events/event-types/auth/author-deleted-event.js +2 -0
  67. package/build/events/event-types/auth/author-signed-in-event.d.ts +12 -0
  68. package/build/events/event-types/auth/author-signed-in-event.js +2 -0
  69. package/build/events/event-types/auth/author-signed-out-event.d.ts +11 -0
  70. package/build/events/event-types/auth/author-signed-out-event.js +2 -0
  71. package/build/events/event-types/auth/author-signed-up-event.d.ts +13 -0
  72. package/build/events/event-types/auth/author-signed-up-event.js +2 -0
  73. package/build/events/event-types/auth/author-updated-event.d.ts +14 -0
  74. package/build/events/event-types/auth/author-updated-event.js +2 -0
  75. package/build/events/event-types/auth/author-verified-event.d.ts +14 -0
  76. package/build/events/event-types/auth/author-verified-event.js +2 -0
  77. package/build/events/event-types/auth/reader-deleted-event.d.ts +11 -0
  78. package/build/events/event-types/auth/reader-deleted-event.js +2 -0
  79. package/build/events/event-types/auth/reader-signed-in-event.d.ts +13 -0
  80. package/build/events/event-types/auth/reader-signed-in-event.js +2 -0
  81. package/build/events/event-types/auth/reader-signed-out-event.d.ts +11 -0
  82. package/build/events/event-types/auth/reader-signed-out-event.js +2 -0
  83. package/build/events/event-types/auth/reader-signed-up-event.d.ts +13 -0
  84. package/build/events/event-types/auth/reader-signed-up-event.js +2 -0
  85. package/build/events/event-types/auth/reader-updated-event.d.ts +14 -0
  86. package/build/events/event-types/auth/reader-updated-event.js +2 -0
  87. package/build/events/event-types/auth/reader-verified-event.d.ts +14 -0
  88. package/build/events/event-types/auth/reader-verified-event.js +2 -0
  89. package/build/events/event-types/books/book-created-event.d.ts +34 -0
  90. package/build/events/event-types/books/book-created-event.js +2 -0
  91. package/build/events/event-types/books/book-deleted-event.d.ts +10 -0
  92. package/build/events/event-types/books/book-deleted-event.js +2 -0
  93. package/build/events/event-types/books/book-updated-event.d.ts +35 -0
  94. package/build/events/event-types/books/book-updated-event.js +2 -0
  95. package/build/events/event-types/books/chapter-created-event.d.ts +16 -0
  96. package/build/events/event-types/books/chapter-created-event.js +2 -0
  97. package/build/events/event-types/books/chapter-deleted-event.d.ts +10 -0
  98. package/build/events/event-types/books/chapter-deleted-event.js +2 -0
  99. package/build/events/event-types/books/chapter-updated-event.d.ts +17 -0
  100. package/build/events/event-types/books/chapter-updated-event.js +2 -0
  101. package/build/events/event-types/books/genre-created-event.d.ts +13 -0
  102. package/build/events/event-types/books/genre-created-event.js +2 -0
  103. package/build/events/event-types/books/genre-deleted-event.d.ts +9 -0
  104. package/build/events/event-types/books/genre-deleted-event.js +2 -0
  105. package/build/events/event-types/books/genre-updated-event.d.ts +13 -0
  106. package/build/events/event-types/books/genre-updated-event.js +2 -0
  107. package/build/events/event-types/books/subgenre-created-event.d.ts +14 -0
  108. package/build/events/event-types/books/subgenre-created-event.js +2 -0
  109. package/build/events/event-types/books/subgenre-deleted-event.d.ts +9 -0
  110. package/build/events/event-types/books/subgenre-deleted-event.js +2 -0
  111. package/build/events/event-types/books/subgenre-updated-event.d.ts +14 -0
  112. package/build/events/event-types/books/subgenre-updated-event.js +2 -0
  113. package/build/events/event-types/books/tag-created-event.d.ts +12 -0
  114. package/build/events/event-types/books/tag-created-event.js +2 -0
  115. package/build/events/event-types/books/tag-deleted-event.d.ts +9 -0
  116. package/build/events/event-types/books/tag-deleted-event.js +2 -0
  117. package/build/events/event-types/books/tag-updated-event.d.ts +12 -0
  118. package/build/events/event-types/books/tag-updated-event.js +2 -0
  119. package/build/events/event-types/books/trigger-created-event.d.ts +12 -0
  120. package/build/events/event-types/books/trigger-created-event.js +2 -0
  121. package/build/events/event-types/books/trigger-deleted-event.d.ts +9 -0
  122. package/build/events/event-types/books/trigger-deleted-event.js +2 -0
  123. package/build/events/event-types/books/trigger-updated-event.d.ts +12 -0
  124. package/build/events/event-types/books/trigger-updated-event.js +2 -0
  125. package/build/events/event-types/books/trope-created-event.d.ts +12 -0
  126. package/build/events/event-types/books/trope-created-event.js +2 -0
  127. package/build/events/event-types/books/trope-deleted-event.d.ts +9 -0
  128. package/build/events/event-types/books/trope-deleted-event.js +2 -0
  129. package/build/events/event-types/books/trope-updated-event.d.ts +12 -0
  130. package/build/events/event-types/books/trope-updated-event.js +2 -0
  131. package/build/events/event-types/media/avatar-uploaded-event.d.ts +14 -0
  132. package/build/events/event-types/media/avatar-uploaded-event.js +2 -0
  133. package/build/events/event-types/orders/order-created-event.d.ts +12 -0
  134. package/build/events/event-types/orders/order-created-event.js +2 -0
  135. package/build/events/listeners/base-listener.d.ts +23 -0
  136. package/build/events/listeners/base-listener.js +97 -0
  137. package/build/events/publishers/base-publisher.d.ts +14 -0
  138. package/build/events/publishers/base-publisher.js +27 -0
  139. package/build/events/streams.d.ts +6 -0
  140. package/build/events/streams.js +10 -0
  141. package/build/events/subjects.d.ts +41 -0
  142. package/build/events/subjects.js +52 -0
  143. package/build/index.d.ts +60 -0
  144. package/build/index.js +89 -0
  145. package/build/middlewares/allow-roles.d.ts +3 -0
  146. package/build/middlewares/allow-roles.js +18 -0
  147. package/build/middlewares/current-user.d.ts +40 -0
  148. package/build/middlewares/current-user.js +88 -0
  149. package/build/middlewares/error-handler.d.ts +2 -0
  150. package/build/middlewares/error-handler.js +14 -0
  151. package/build/middlewares/require-auth.d.ts +2 -0
  152. package/build/middlewares/require-auth.js +11 -0
  153. package/build/middlewares/validation.d.ts +3 -0
  154. package/build/middlewares/validation.js +56 -0
  155. package/build/nats-wrapper.d.ts +17 -0
  156. package/build/nats-wrapper.js +92 -0
  157. package/build/redis-wrapper.d.ts +20 -0
  158. package/build/redis-wrapper.js +77 -0
  159. package/build/test/setup.d.ts +8 -0
  160. package/build/test/setup.js +45 -0
  161. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface GenreUpdatedEvent {
4
+ subject: Subjects.GenreUpdated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ sortOrder: number;
11
+ isActive: boolean;
12
+ };
13
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface SubgenreCreatedEvent {
4
+ subject: Subjects.SubgenreCreated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ sortOrder: number;
11
+ isActive: boolean;
12
+ genreId: string;
13
+ };
14
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface SubgenreDeletedEvent {
4
+ subject: Subjects.SubgenreDeleted;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ };
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface SubgenreUpdatedEvent {
4
+ subject: Subjects.SubgenreUpdated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ sortOrder: number;
11
+ isActive: boolean;
12
+ genreId: string;
13
+ };
14
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TagCreatedEvent {
4
+ subject: Subjects.TagCreated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ isActive: boolean;
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TagDeletedEvent {
4
+ subject: Subjects.TagDeleted;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ };
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TagUpdatedEvent {
4
+ subject: Subjects.TagUpdated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ isActive: boolean;
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TriggerCreatedEvent {
4
+ subject: Subjects.TriggerCreated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ isActive: boolean;
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TriggerDeletedEvent {
4
+ subject: Subjects.TriggerDeleted;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ };
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TriggerUpdatedEvent {
4
+ subject: Subjects.TriggerUpdated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ isActive: boolean;
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TropeCreatedEvent {
4
+ subject: Subjects.TropeCreated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ isActive: boolean;
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TropeDeletedEvent {
4
+ subject: Subjects.TropeDeleted;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ };
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface TropeUpdatedEvent {
4
+ subject: Subjects.TropeUpdated;
5
+ stream: Streams.BookServiceStream;
6
+ data: {
7
+ id: string;
8
+ name: string;
9
+ description: string | null;
10
+ isActive: boolean;
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface AvatarUploadedEvent {
4
+ subject: Subjects.AvatarUploaded;
5
+ stream: Streams.MediaServiceStream;
6
+ data: {
7
+ userId: string;
8
+ imageId: string;
9
+ variants: {
10
+ original: string;
11
+ thumbnail: string;
12
+ };
13
+ };
14
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,12 @@
1
+ import { Streams } from '../../streams';
2
+ import { Subjects } from '../../subjects';
3
+ export interface OrderCreatedEvent {
4
+ subject: Subjects.OrderCreated;
5
+ stream: Streams.OrderServiceStream;
6
+ data: {
7
+ id: string;
8
+ version: number;
9
+ userId: string;
10
+ expiresAt: string;
11
+ };
12
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,23 @@
1
+ import { JetStreamManager, JsMsg, Consumer, JetStreamClient } from 'nats';
2
+ interface Event {
3
+ subject: string;
4
+ stream: string;
5
+ data: any;
6
+ }
7
+ export declare abstract class Listener<T extends Event> {
8
+ abstract subject: T['subject'];
9
+ abstract stream: T['stream'];
10
+ abstract durableName: string;
11
+ abstract onMessage(data: T['data'], msg: JsMsg): void;
12
+ protected jsm: JetStreamManager;
13
+ protected js: JetStreamClient;
14
+ protected consumer: Consumer;
15
+ protected ackWait: number;
16
+ protected codec: import("nats").Codec<unknown>;
17
+ constructor(js: JetStreamClient, jsm: JetStreamManager);
18
+ private waitForStream;
19
+ private createConsumerIfNotExists;
20
+ listen(): Promise<void>;
21
+ private parseMessage;
22
+ }
23
+ export {};
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
12
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
13
+ var m = o[Symbol.asyncIterator], i;
14
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
15
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
16
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.Listener = void 0;
20
+ const nats_1 = require("nats");
21
+ class Listener {
22
+ constructor(js, jsm) {
23
+ this.ackWait = 5 * 1000;
24
+ this.codec = (0, nats_1.JSONCodec)();
25
+ this.jsm = jsm;
26
+ this.js = js;
27
+ }
28
+ waitForStream() {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ let retryCount = 0;
31
+ // eslint-disable-next-line no-constant-condition
32
+ while (true) {
33
+ try {
34
+ yield this.jsm.streams.info(this.stream);
35
+ console.log(`✅ Stream "${this.stream}" is ready`);
36
+ return;
37
+ }
38
+ catch (_a) {
39
+ console.log(`⏳ Waiting for stream "${this.stream}"...`);
40
+ yield new Promise(res => setTimeout(res, 2000));
41
+ }
42
+ retryCount++;
43
+ if (retryCount > 5) {
44
+ console.error(`❌ Stream "${this.stream}" is not ready after 5 attempts`);
45
+ throw new Error(`Stream "${this.stream}" is not ready`);
46
+ }
47
+ }
48
+ });
49
+ }
50
+ createConsumerIfNotExists() {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ yield this.waitForStream();
53
+ // Ensure durable consumer exists
54
+ try {
55
+ yield this.jsm.consumers.info(this.stream, this.durableName);
56
+ }
57
+ catch (_a) {
58
+ yield this.jsm.consumers.add(this.stream, {
59
+ durable_name: this.durableName,
60
+ ack_policy: nats_1.AckPolicy.Explicit,
61
+ ack_wait: this.ackWait * 1000000, // nanoseconds
62
+ filter_subject: this.subject,
63
+ });
64
+ }
65
+ // Get the consumer object
66
+ this.consumer = yield this.js.consumers.get(this.stream, this.durableName);
67
+ });
68
+ }
69
+ listen() {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ var _a, e_1, _b, _c;
72
+ yield this.createConsumerIfNotExists();
73
+ const messages = yield this.consumer.consume();
74
+ try {
75
+ for (var _d = true, messages_1 = __asyncValues(messages), messages_1_1; messages_1_1 = yield messages_1.next(), _a = messages_1_1.done, !_a; _d = true) {
76
+ _c = messages_1_1.value;
77
+ _d = false;
78
+ const msg = _c;
79
+ const data = this.parseMessage(msg);
80
+ yield this.onMessage(data, msg);
81
+ }
82
+ }
83
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
84
+ finally {
85
+ try {
86
+ if (!_d && !_a && (_b = messages_1.return)) yield _b.call(messages_1);
87
+ }
88
+ finally { if (e_1) throw e_1.error; }
89
+ }
90
+ });
91
+ }
92
+ parseMessage(msg) {
93
+ const decoded = this.codec.decode(msg.data);
94
+ return decoded;
95
+ }
96
+ }
97
+ exports.Listener = Listener;
@@ -0,0 +1,14 @@
1
+ import { JetStreamClient } from 'nats';
2
+ export interface Event {
3
+ subject: string;
4
+ stream: string;
5
+ data: any;
6
+ }
7
+ export declare abstract class Publisher<T extends Event> {
8
+ abstract subject: T['subject'];
9
+ abstract stream: T['stream'];
10
+ protected jsClient: JetStreamClient;
11
+ protected codec: import("nats").Codec<unknown>;
12
+ constructor(js: JetStreamClient);
13
+ publish(data: T['data']): Promise<void>;
14
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Publisher = void 0;
13
+ const nats_1 = require("nats");
14
+ class Publisher {
15
+ constructor(js) {
16
+ this.codec = (0, nats_1.JSONCodec)();
17
+ this.jsClient = js;
18
+ }
19
+ publish(data) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const message = this.codec.encode(data);
22
+ yield this.jsClient.publish(this.subject, message);
23
+ console.log(`Message published to ${this.subject}:`, data);
24
+ });
25
+ }
26
+ }
27
+ exports.Publisher = Publisher;
@@ -0,0 +1,6 @@
1
+ export declare enum Streams {
2
+ OrderServiceStream = "orders",
3
+ BookServiceStream = "books",
4
+ AuthServiceStream = "auth",
5
+ MediaServiceStream = "media"
6
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Streams = void 0;
4
+ var Streams;
5
+ (function (Streams) {
6
+ Streams["OrderServiceStream"] = "orders";
7
+ Streams["BookServiceStream"] = "books";
8
+ Streams["AuthServiceStream"] = "auth";
9
+ Streams["MediaServiceStream"] = "media";
10
+ })(Streams || (exports.Streams = Streams = {}));
@@ -0,0 +1,41 @@
1
+ export declare enum Subjects {
2
+ AuthorUpdated = "author:updated",
3
+ AuthorDeleted = "author:deleted",
4
+ AuthorSignedUp = "author:signed-up",
5
+ AuthorSignedIn = "author:signed-in",
6
+ AuthorSignedOut = "author:signed-out",
7
+ AuthorVerified = "author:verified",
8
+ ReaderSignedUp = "reader:signed-up",
9
+ ReaderSignedIn = "reader:signed-in",
10
+ ReaderSignedOut = "reader:signed-out",
11
+ ReaderUpdated = "reader:updated",
12
+ ReaderDeleted = "reader:deleted",
13
+ ReaderVerified = "reader:verified",
14
+ AdminSignedUp = "admin:signed-up",
15
+ AdminDeleted = "admin:deleted",
16
+ AdminUpdated = "admin:updated",
17
+ AvatarUploaded = "avatar:uploaded",
18
+ BookCreated = "book:created",
19
+ BookUpdated = "book:updated",
20
+ BookDeleted = "book:deleted",
21
+ GenreCreated = "genre:created",
22
+ GenreUpdated = "genre:updated",
23
+ GenreDeleted = "genre:deleted",
24
+ SubgenreCreated = "subgenre:created",
25
+ SubgenreUpdated = "subgenre:updated",
26
+ SubgenreDeleted = "subgenre:deleted",
27
+ TagCreated = "tag:created",
28
+ TagUpdated = "tag:updated",
29
+ TagDeleted = "tag:deleted",
30
+ TropeCreated = "trope:created",
31
+ TropeUpdated = "trope:updated",
32
+ TropeDeleted = "trope:deleted",
33
+ TriggerCreated = "trigger:created",
34
+ TriggerUpdated = "trigger:updated",
35
+ TriggerDeleted = "trigger:deleted",
36
+ ChapterCreated = "chapter:created",
37
+ ChapterUpdated = "chapter:updated",
38
+ ChapterDeleted = "chapter:deleted",
39
+ OrderCreated = "order:created",
40
+ OrderCancelled = "order:cancelled"
41
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Subjects = void 0;
4
+ var Subjects;
5
+ (function (Subjects) {
6
+ // Authors related event subjects
7
+ Subjects["AuthorUpdated"] = "author:updated";
8
+ Subjects["AuthorDeleted"] = "author:deleted";
9
+ Subjects["AuthorSignedUp"] = "author:signed-up";
10
+ Subjects["AuthorSignedIn"] = "author:signed-in";
11
+ Subjects["AuthorSignedOut"] = "author:signed-out";
12
+ Subjects["AuthorVerified"] = "author:verified";
13
+ // Readers related event subjects
14
+ Subjects["ReaderSignedUp"] = "reader:signed-up";
15
+ Subjects["ReaderSignedIn"] = "reader:signed-in";
16
+ Subjects["ReaderSignedOut"] = "reader:signed-out";
17
+ Subjects["ReaderUpdated"] = "reader:updated";
18
+ Subjects["ReaderDeleted"] = "reader:deleted";
19
+ Subjects["ReaderVerified"] = "reader:verified";
20
+ // Admins related event subjects
21
+ Subjects["AdminSignedUp"] = "admin:signed-up";
22
+ Subjects["AdminDeleted"] = "admin:deleted";
23
+ Subjects["AdminUpdated"] = "admin:updated";
24
+ // Media event subjects
25
+ Subjects["AvatarUploaded"] = "avatar:uploaded";
26
+ // Books related event subjects
27
+ Subjects["BookCreated"] = "book:created";
28
+ Subjects["BookUpdated"] = "book:updated";
29
+ Subjects["BookDeleted"] = "book:deleted";
30
+ Subjects["GenreCreated"] = "genre:created";
31
+ Subjects["GenreUpdated"] = "genre:updated";
32
+ Subjects["GenreDeleted"] = "genre:deleted";
33
+ Subjects["SubgenreCreated"] = "subgenre:created";
34
+ Subjects["SubgenreUpdated"] = "subgenre:updated";
35
+ Subjects["SubgenreDeleted"] = "subgenre:deleted";
36
+ Subjects["TagCreated"] = "tag:created";
37
+ Subjects["TagUpdated"] = "tag:updated";
38
+ Subjects["TagDeleted"] = "tag:deleted";
39
+ Subjects["TropeCreated"] = "trope:created";
40
+ Subjects["TropeUpdated"] = "trope:updated";
41
+ Subjects["TropeDeleted"] = "trope:deleted";
42
+ Subjects["TriggerCreated"] = "trigger:created";
43
+ Subjects["TriggerUpdated"] = "trigger:updated";
44
+ Subjects["TriggerDeleted"] = "trigger:deleted";
45
+ // Chapters related event subjects
46
+ Subjects["ChapterCreated"] = "chapter:created";
47
+ Subjects["ChapterUpdated"] = "chapter:updated";
48
+ Subjects["ChapterDeleted"] = "chapter:deleted";
49
+ // Orders related event subjects
50
+ Subjects["OrderCreated"] = "order:created";
51
+ Subjects["OrderCancelled"] = "order:cancelled";
52
+ })(Subjects || (exports.Subjects = Subjects = {}));
@@ -0,0 +1,60 @@
1
+ export * from './errors/bad-request-error';
2
+ export * from './errors/custom-error';
3
+ export * from './errors/database-connection-error';
4
+ export * from './errors/not-authorized-error';
5
+ export * from './errors/not-found-error';
6
+ export * from './errors/request-validation-error';
7
+ export * from './errors/forbidden-error';
8
+ export * from './errors/internal-error';
9
+ export * from './errors/conflict-error';
10
+ export * from './middlewares/current-user';
11
+ export * from './middlewares/require-auth';
12
+ export * from './middlewares/validation';
13
+ export * from './middlewares/error-handler';
14
+ export * from './middlewares/allow-roles';
15
+ export * from './enum/roles';
16
+ export * from './enum/image';
17
+ export * from './events/listeners/base-listener';
18
+ export * from './events/publishers/base-publisher';
19
+ export * from './events/event-types/books/book-created-event';
20
+ export * from './events/event-types/books/book-updated-event';
21
+ export * from './events/event-types/books/book-deleted-event';
22
+ export * from './events/event-types/books/genre-created-event';
23
+ export * from './events/event-types/books/genre-updated-event';
24
+ export * from './events/event-types/books/genre-deleted-event';
25
+ export * from './events/event-types/books/subgenre-created-event';
26
+ export * from './events/event-types/books/subgenre-updated-event';
27
+ export * from './events/event-types/books/subgenre-deleted-event';
28
+ export * from './events/event-types/books/tag-created-event';
29
+ export * from './events/event-types/books/tag-updated-event';
30
+ export * from './events/event-types/books/tag-deleted-event';
31
+ export * from './events/event-types/books/trope-created-event';
32
+ export * from './events/event-types/books/trope-updated-event';
33
+ export * from './events/event-types/books/trope-deleted-event';
34
+ export * from './events/event-types/books/trigger-created-event';
35
+ export * from './events/event-types/books/trigger-updated-event';
36
+ export * from './events/event-types/books/trigger-deleted-event';
37
+ export * from './events/event-types/books/chapter-created-event';
38
+ export * from './events/event-types/books/chapter-updated-event';
39
+ export * from './events/event-types/books/chapter-deleted-event';
40
+ export * from './events/event-types/auth/author-updated-event';
41
+ export * from './events/event-types/auth/author-deleted-event';
42
+ export * from './events/event-types/auth/author-verified-event';
43
+ export * from './events/event-types/auth/author-signed-up-event';
44
+ export * from './events/event-types/auth/author-signed-in-event';
45
+ export * from './events/event-types/auth/author-signed-out-event';
46
+ export * from './events/event-types/auth/reader-updated-event';
47
+ export * from './events/event-types/auth/reader-deleted-event';
48
+ export * from './events/event-types/auth/reader-signed-up-event';
49
+ export * from './events/event-types/auth/reader-signed-in-event';
50
+ export * from './events/event-types/auth/reader-signed-out-event';
51
+ export * from './events/event-types/auth/reader-verified-event';
52
+ export * from './events/event-types/auth/admin-signed-up-event';
53
+ export * from './events/event-types/auth/admin-deleted-event';
54
+ export * from './events/event-types/auth/admin-updated-event';
55
+ export * from './events/event-types/media/avatar-uploaded-event';
56
+ export * from './events/event-types/orders/order-created-event';
57
+ export * from './events/subjects';
58
+ export * from './events/streams';
59
+ export * from './nats-wrapper';
60
+ export * from './redis-wrapper';