@eratu/common 1.0.19 → 1.0.21

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 (97) hide show
  1. package/build/__tests__/enum/roles.test.js +1 -1
  2. package/build/__tests__/errors/request-validation-error.test.js +1 -3
  3. package/build/__tests__/events/base-listener.test.js +4 -3
  4. package/build/__tests__/events/streams.test.js +1 -7
  5. package/build/__tests__/events/subjects.test.js +1 -1
  6. package/build/__tests__/middlewares/current-user.test.js +1 -1
  7. package/build/__tests__/middlewares/require-auth.test.js +2 -2
  8. package/build/__tests__/nats-wrapper.test.js +2 -1
  9. package/build/__tests__/redis-wrapper.test.js +2 -1
  10. package/build/enum/image.d.ts +14 -0
  11. package/build/enum/image.js +18 -0
  12. package/build/errors/conflict-error.d.ts +9 -0
  13. package/build/errors/conflict-error.js +16 -0
  14. package/build/errors/forbidden-error.d.ts +1 -1
  15. package/build/errors/forbidden-error.js +1 -1
  16. package/build/errors/internal-error.d.ts +9 -0
  17. package/build/errors/internal-error.js +16 -0
  18. package/build/errors/not-authorized-error.d.ts +1 -1
  19. package/build/errors/not-authorized-error.js +1 -1
  20. package/build/errors/not-found-error.d.ts +1 -1
  21. package/build/errors/not-found-error.js +2 -2
  22. package/build/errors/request-validation-error.js +1 -1
  23. package/build/events/event-types/auth/admin-deleted-event.d.ts +2 -2
  24. package/build/events/event-types/auth/admin-signed-up-event.d.ts +2 -2
  25. package/build/events/event-types/auth/admin-updated-event.d.ts +2 -2
  26. package/build/events/event-types/auth/author-deleted-event.d.ts +2 -2
  27. package/build/events/event-types/auth/author-signed-in-event.d.ts +2 -2
  28. package/build/events/event-types/auth/author-signed-out-event.d.ts +2 -2
  29. package/build/events/event-types/auth/author-signed-up-event.d.ts +2 -2
  30. package/build/events/event-types/auth/author-updated-event.d.ts +2 -2
  31. package/build/events/event-types/auth/author-verified-event.d.ts +2 -2
  32. package/build/events/event-types/auth/reader-deleted-event.d.ts +2 -2
  33. package/build/events/event-types/auth/reader-signed-in-event.d.ts +2 -2
  34. package/build/events/event-types/auth/reader-signed-out-event.d.ts +2 -2
  35. package/build/events/event-types/auth/reader-signed-up-event.d.ts +2 -2
  36. package/build/events/event-types/auth/reader-updated-event.d.ts +2 -2
  37. package/build/events/event-types/auth/reader-verified-event.d.ts +2 -2
  38. package/build/events/event-types/books/book-created-event.d.ts +25 -2
  39. package/build/events/event-types/books/book-deleted-event.d.ts +2 -2
  40. package/build/events/event-types/books/book-updated-event.d.ts +26 -2
  41. package/build/events/event-types/books/chapter-created-event.d.ts +16 -0
  42. package/build/events/event-types/books/chapter-created-event.js +2 -0
  43. package/build/events/event-types/books/chapter-deleted-event.d.ts +10 -0
  44. package/build/events/event-types/books/chapter-deleted-event.js +2 -0
  45. package/build/events/event-types/books/chapter-updated-event.d.ts +17 -0
  46. package/build/events/event-types/books/chapter-updated-event.js +2 -0
  47. package/build/events/event-types/books/genre-created-event.d.ts +13 -0
  48. package/build/events/event-types/books/genre-created-event.js +2 -0
  49. package/build/events/event-types/books/genre-deleted-event.d.ts +9 -0
  50. package/build/events/event-types/books/genre-deleted-event.js +2 -0
  51. package/build/events/event-types/books/genre-updated-event.d.ts +13 -0
  52. package/build/events/event-types/books/genre-updated-event.js +2 -0
  53. package/build/events/event-types/books/subgenre-created-event.d.ts +14 -0
  54. package/build/events/event-types/books/subgenre-created-event.js +2 -0
  55. package/build/events/event-types/books/subgenre-deleted-event.d.ts +9 -0
  56. package/build/events/event-types/books/subgenre-deleted-event.js +2 -0
  57. package/build/events/event-types/books/subgenre-updated-event.d.ts +14 -0
  58. package/build/events/event-types/books/subgenre-updated-event.js +2 -0
  59. package/build/events/event-types/books/tag-created-event.d.ts +12 -0
  60. package/build/events/event-types/books/tag-created-event.js +2 -0
  61. package/build/events/event-types/books/tag-deleted-event.d.ts +9 -0
  62. package/build/events/event-types/books/tag-deleted-event.js +2 -0
  63. package/build/events/event-types/books/tag-updated-event.d.ts +12 -0
  64. package/build/events/event-types/books/tag-updated-event.js +2 -0
  65. package/build/events/event-types/books/trigger-created-event.d.ts +12 -0
  66. package/build/events/event-types/books/trigger-created-event.js +2 -0
  67. package/build/events/event-types/books/trigger-deleted-event.d.ts +9 -0
  68. package/build/events/event-types/books/trigger-deleted-event.js +2 -0
  69. package/build/events/event-types/books/trigger-updated-event.d.ts +12 -0
  70. package/build/events/event-types/books/trigger-updated-event.js +2 -0
  71. package/build/events/event-types/books/trope-created-event.d.ts +12 -0
  72. package/build/events/event-types/books/trope-created-event.js +2 -0
  73. package/build/events/event-types/books/trope-deleted-event.d.ts +9 -0
  74. package/build/events/event-types/books/trope-deleted-event.js +2 -0
  75. package/build/events/event-types/books/trope-updated-event.d.ts +12 -0
  76. package/build/events/event-types/books/trope-updated-event.js +2 -0
  77. package/build/events/event-types/media/avatar-uploaded-event.d.ts +14 -0
  78. package/build/events/event-types/media/avatar-uploaded-event.js +2 -0
  79. package/build/events/event-types/orders/order-created-event.d.ts +2 -2
  80. package/build/events/listeners/base-listener.d.ts +4 -4
  81. package/build/events/listeners/base-listener.js +2 -1
  82. package/build/events/publishers/base-publisher.d.ts +4 -4
  83. package/build/events/streams.d.ts +2 -3
  84. package/build/events/streams.js +1 -2
  85. package/build/events/subjects.d.ts +16 -0
  86. package/build/events/subjects.js +17 -0
  87. package/build/index.d.ts +60 -38
  88. package/build/index.js +29 -0
  89. package/build/middlewares/allow-roles.d.ts +2 -2
  90. package/build/middlewares/current-user.d.ts +4 -4
  91. package/build/middlewares/current-user.js +6 -4
  92. package/build/middlewares/error-handler.js +2 -1
  93. package/build/middlewares/validation.js +2 -2
  94. package/build/nats-wrapper.js +17 -5
  95. package/build/redis-wrapper.d.ts +1 -1
  96. package/build/redis-wrapper.js +11 -11
  97. package/package.json +12 -5
@@ -39,16 +39,28 @@ class NatsWrapper {
39
39
  }
40
40
  ensureStreamExists() {
41
41
  return __awaiter(this, void 0, void 0, function* () {
42
- var _a, _b;
43
- // Ensure AuthServiceStream exists for auth-specific events
42
+ var _a, _b, _c;
44
43
  try {
45
- yield ((_a = this.jetStreamManager) === null || _a === void 0 ? void 0 : _a.streams.info(this.stream));
44
+ const streamInfo = yield ((_a = this.jetStreamManager) === null || _a === void 0 ? void 0 : _a.streams.info(this.stream));
45
+ // Check if subjects need to be updated
46
+ const existingSubjects = (streamInfo === null || streamInfo === void 0 ? void 0 : streamInfo.config.subjects) || [];
47
+ const missingSubjects = this.subjects.filter(s => !existingSubjects.includes(s));
48
+ if (missingSubjects.length > 0) {
49
+ // Merge existing subjects with new ones and update the stream
50
+ const allSubjects = [...new Set([...existingSubjects, ...this.subjects])];
51
+ yield ((_b = this.jetStreamManager) === null || _b === void 0 ? void 0 : _b.streams.update(this.stream, {
52
+ subjects: allSubjects,
53
+ }));
54
+ console.log(`✅ Updated stream "${this.stream}" with new subjects:`, missingSubjects);
55
+ }
46
56
  }
47
- catch (_c) {
48
- yield ((_b = this.jetStreamManager) === null || _b === void 0 ? void 0 : _b.streams.add({
57
+ catch (_d) {
58
+ // Stream doesn't exist, create it
59
+ yield ((_c = this.jetStreamManager) === null || _c === void 0 ? void 0 : _c.streams.add({
49
60
  name: this.stream,
50
61
  subjects: this.subjects,
51
62
  }));
63
+ console.log(`✅ Created stream "${this.stream}" with subjects:`, this.subjects);
52
64
  }
53
65
  });
54
66
  }
@@ -1,4 +1,4 @@
1
- import { Redis } from "ioredis";
1
+ import { Redis } from 'ioredis';
2
2
  declare class RedisWrapper {
3
3
  private _client;
4
4
  private host;
@@ -14,10 +14,10 @@ const ioredis_1 = require("ioredis");
14
14
  class RedisWrapper {
15
15
  constructor(params) {
16
16
  this._client = null;
17
- this.host = (params === null || params === void 0 ? void 0 : params.host) || "localhost";
17
+ this.host = (params === null || params === void 0 ? void 0 : params.host) || 'localhost';
18
18
  this.port = (params === null || params === void 0 ? void 0 : params.port) || 6379;
19
- this.username = (params === null || params === void 0 ? void 0 : params.username) || "";
20
- this.password = (params === null || params === void 0 ? void 0 : params.password) || "";
19
+ this.username = (params === null || params === void 0 ? void 0 : params.username) || '';
20
+ this.password = (params === null || params === void 0 ? void 0 : params.password) || '';
21
21
  }
22
22
  connect() {
23
23
  return __awaiter(this, void 0, void 0, function* () {
@@ -30,13 +30,13 @@ class RedisWrapper {
30
30
  lazyConnect: true,
31
31
  });
32
32
  yield this._client.connect();
33
- console.log("✅ Connected to Redis");
33
+ console.log('✅ Connected to Redis');
34
34
  return;
35
35
  }
36
36
  catch (e) {
37
- console.error("❌ Error connecting to Redis:", e.message);
37
+ console.error('❌ Error connecting to Redis:', e.message);
38
38
  }
39
- console.log("❌ Failed to connect to Redis");
39
+ console.log('❌ Failed to connect to Redis');
40
40
  });
41
41
  }
42
42
  disconnect() {
@@ -47,29 +47,29 @@ class RedisWrapper {
47
47
  }
48
48
  }
49
49
  catch (e) {
50
- console.error("❌ Error disconnecting from Redis:", e.message);
50
+ console.error('❌ Error disconnecting from Redis:', e.message);
51
51
  }
52
52
  });
53
53
  }
54
54
  set(key, value, expireInSeconds) {
55
55
  return __awaiter(this, void 0, void 0, function* () {
56
56
  if (!this._client) {
57
- throw new Error("Redis not connected");
57
+ throw new Error('Redis not connected');
58
58
  }
59
- yield this._client.set(key, value, "EX", expireInSeconds);
59
+ yield this._client.set(key, value, 'EX', expireInSeconds);
60
60
  });
61
61
  }
62
62
  get(key) {
63
63
  return __awaiter(this, void 0, void 0, function* () {
64
64
  if (!this._client) {
65
- throw new Error("Redis not connected");
65
+ throw new Error('Redis not connected');
66
66
  }
67
67
  return yield this._client.get(key);
68
68
  });
69
69
  }
70
70
  get client() {
71
71
  if (!this._client) {
72
- throw new Error("Cannot access Redis client before connecting");
72
+ throw new Error('Cannot access Redis client before connecting');
73
73
  }
74
74
  return this._client;
75
75
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eratu/common",
3
- "version": "1.0.19",
3
+ "version": "1.0.21",
4
4
  "description": "A package for shared code across microservices",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -12,27 +12,34 @@
12
12
  "build": "npm run clean && tsc",
13
13
  "pub": "git add . && git commit -m \"Updates\" && npm version patch && npm publish",
14
14
  "test": "jest --forceExit --detectOpenHandles",
15
- "test:cov": "jest --coverage --forceExit --detectOpenHandles"
15
+ "test:cov": "jest --coverage --forceExit --detectOpenHandles",
16
+ "lint": "eslint src --ext .ts",
17
+ "lint:fix": "eslint src --ext .ts --fix"
16
18
  },
17
19
  "keywords": [],
18
20
  "author": "",
19
21
  "license": "ISC",
20
22
  "type": "commonjs",
21
23
  "devDependencies": {
24
+ "@types/express": "^5.0.6",
22
25
  "@types/jest": "^29.5.14",
26
+ "@types/jsonwebtoken": "^9.0.10",
23
27
  "@types/node": "^22.13.1",
28
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
29
+ "@typescript-eslint/parser": "^6.0.0",
24
30
  "del-cli": "^6.0.0",
31
+ "eslint": "^8.45.0",
32
+ "eslint-config-prettier": "^8.8.0",
33
+ "eslint-plugin-prettier": "^5.0.0",
25
34
  "jest": "^29.7.0",
26
35
  "ts-jest": "^29.2.5",
27
36
  "typescript": "^5.7.3"
28
37
  },
29
38
  "dependencies": {
30
- "@types/express": "^5.0.3",
31
- "@types/jsonwebtoken": "^9.0.10",
32
39
  "class-transformer": "^0.5.1",
33
40
  "class-validator": "^0.14.2",
34
41
  "cookie-session": "^2.1.0",
35
- "express": "^4.21.2",
42
+ "express": "^5.2.1",
36
43
  "express-validator": "^7.2.1",
37
44
  "ioredis": "^5.8.2",
38
45
  "jsonwebtoken": "^9.0.2",