@flusys/nestjs-task-manager 7.1.0 → 8.0.0

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 (163) hide show
  1. package/config/index.d.ts +3 -3
  2. package/controllers/index.d.ts +5 -5
  3. package/controllers/task-board.controller.d.ts +3 -3
  4. package/controllers/task-comment.controller.d.ts +2 -2
  5. package/controllers/task-label.controller.d.ts +2 -2
  6. package/controllers/task-list.controller.d.ts +3 -3
  7. package/controllers/task.controller.d.ts +4 -4
  8. package/docs/index.d.ts +1 -1
  9. package/docs/task-manager-swagger.config.d.ts +1 -1
  10. package/dtos/index.d.ts +5 -5
  11. package/dtos/task-board.dto.d.ts +1 -1
  12. package/dtos/task.dto.d.ts +2 -2
  13. package/entities/index.d.ts +19 -19
  14. package/entities/task-board-with-company.entity.d.ts +1 -1
  15. package/fesm/234.js +1393 -0
  16. package/fesm/431.js +981 -0
  17. package/fesm/827.js +1054 -0
  18. package/fesm/988.js +881 -0
  19. package/fesm/config/index.js +156 -3
  20. package/fesm/controllers/index.js +21 -5
  21. package/fesm/docs/index.js +58 -1
  22. package/fesm/dtos/index.js +280 -5
  23. package/fesm/entities/index.js +26 -46
  24. package/fesm/gateways/index.js +288 -1
  25. package/fesm/index.js +440 -9
  26. package/fesm/interfaces/index.js +16 -2
  27. package/fesm/modules/index.js +210 -1
  28. package/fesm/runtime.js +85 -0
  29. package/fesm/services/index.js +53 -8
  30. package/gateways/index.d.ts +1 -1
  31. package/gateways/task-board.gateway.d.ts +3 -3
  32. package/index.d.ts +9 -9
  33. package/interfaces/index.d.ts +2 -2
  34. package/interfaces/task-manager-module.interface.d.ts +3 -3
  35. package/interfaces/task.interface.d.ts +2 -2
  36. package/modules/index.d.ts +1 -1
  37. package/modules/task-manager.module.d.ts +2 -2
  38. package/package.json +26 -36
  39. package/services/index.d.ts +8 -8
  40. package/services/task-activity.service.d.ts +1 -1
  41. package/services/task-board.service.d.ts +5 -5
  42. package/services/task-comment.service.d.ts +4 -4
  43. package/services/task-label.service.d.ts +4 -4
  44. package/services/task-list.service.d.ts +4 -4
  45. package/services/task-manager-config.service.d.ts +3 -3
  46. package/services/task-manager-datasource.provider.d.ts +3 -3
  47. package/services/task.service.d.ts +7 -7
  48. package/cjs/config/event-actions.js +0 -37
  49. package/cjs/config/index.js +0 -20
  50. package/cjs/config/message-keys.js +0 -92
  51. package/cjs/config/task-manager.constants.js +0 -11
  52. package/cjs/controllers/index.js +0 -22
  53. package/cjs/controllers/task-board.controller.js +0 -219
  54. package/cjs/controllers/task-board.controller.spec.js +0 -132
  55. package/cjs/controllers/task-comment.controller.js +0 -103
  56. package/cjs/controllers/task-comment.controller.spec.js +0 -86
  57. package/cjs/controllers/task-label.controller.js +0 -112
  58. package/cjs/controllers/task-label.controller.spec.js +0 -88
  59. package/cjs/controllers/task-list.controller.js +0 -158
  60. package/cjs/controllers/task-list.controller.spec.js +0 -112
  61. package/cjs/controllers/task.controller.js +0 -199
  62. package/cjs/controllers/task.controller.spec.js +0 -131
  63. package/cjs/docs/index.js +0 -18
  64. package/cjs/docs/task-manager-swagger.config.js +0 -43
  65. package/cjs/docs/task-manager-swagger.config.spec.js +0 -28
  66. package/cjs/dtos/index.js +0 -22
  67. package/cjs/dtos/task-board.dto.js +0 -310
  68. package/cjs/dtos/task-comment.dto.js +0 -131
  69. package/cjs/dtos/task-label.dto.js +0 -120
  70. package/cjs/dtos/task-list.dto.js +0 -198
  71. package/cjs/dtos/task.dto.js +0 -367
  72. package/cjs/entities/index.js +0 -72
  73. package/cjs/entities/index.spec.js +0 -30
  74. package/cjs/entities/task-activity.entity.js +0 -98
  75. package/cjs/entities/task-assignee.entity.js +0 -67
  76. package/cjs/entities/task-board-member.entity.js +0 -94
  77. package/cjs/entities/task-board-with-company.entity.js +0 -57
  78. package/cjs/entities/task-board.entity.js +0 -88
  79. package/cjs/entities/task-comment.entity.js +0 -80
  80. package/cjs/entities/task-label.entity.js +0 -72
  81. package/cjs/entities/task-list.entity.js +0 -104
  82. package/cjs/entities/task-task-label.entity.js +0 -67
  83. package/cjs/entities/task.entity.js +0 -151
  84. package/cjs/gateways/index.js +0 -18
  85. package/cjs/gateways/task-board.gateway.js +0 -167
  86. package/cjs/gateways/task-board.gateway.spec.js +0 -243
  87. package/cjs/index.js +0 -26
  88. package/cjs/interfaces/index.js +0 -19
  89. package/cjs/interfaces/task-manager-module.interface.js +0 -4
  90. package/cjs/interfaces/task.interface.js +0 -4
  91. package/cjs/modules/index.js +0 -18
  92. package/cjs/modules/task-manager.module.js +0 -135
  93. package/cjs/modules/task-manager.module.spec.js +0 -144
  94. package/cjs/services/index.js +0 -25
  95. package/cjs/services/task-activity.service.js +0 -76
  96. package/cjs/services/task-activity.service.spec.js +0 -125
  97. package/cjs/services/task-board.service.js +0 -247
  98. package/cjs/services/task-board.service.spec.js +0 -465
  99. package/cjs/services/task-comment.service.js +0 -103
  100. package/cjs/services/task-comment.service.spec.js +0 -160
  101. package/cjs/services/task-label.service.js +0 -97
  102. package/cjs/services/task-label.service.spec.js +0 -138
  103. package/cjs/services/task-list.service.js +0 -130
  104. package/cjs/services/task-list.service.spec.js +0 -284
  105. package/cjs/services/task-manager-config.service.js +0 -69
  106. package/cjs/services/task-manager-config.service.spec.js +0 -98
  107. package/cjs/services/task-manager-datasource.provider.js +0 -84
  108. package/cjs/services/task-manager-datasource.provider.spec.js +0 -131
  109. package/cjs/services/task.service.js +0 -398
  110. package/cjs/services/task.service.spec.js +0 -700
  111. package/fesm/config/event-actions.js +0 -16
  112. package/fesm/config/message-keys.js +0 -65
  113. package/fesm/config/task-manager.constants.js +0 -1
  114. package/fesm/controllers/task-board.controller.js +0 -209
  115. package/fesm/controllers/task-board.controller.spec.js +0 -128
  116. package/fesm/controllers/task-comment.controller.js +0 -93
  117. package/fesm/controllers/task-comment.controller.spec.js +0 -82
  118. package/fesm/controllers/task-label.controller.js +0 -102
  119. package/fesm/controllers/task-label.controller.spec.js +0 -84
  120. package/fesm/controllers/task-list.controller.js +0 -148
  121. package/fesm/controllers/task-list.controller.spec.js +0 -108
  122. package/fesm/controllers/task.controller.js +0 -189
  123. package/fesm/controllers/task.controller.spec.js +0 -127
  124. package/fesm/docs/task-manager-swagger.config.js +0 -33
  125. package/fesm/docs/task-manager-swagger.config.spec.js +0 -24
  126. package/fesm/dtos/task-board.dto.js +0 -277
  127. package/fesm/dtos/task-comment.dto.js +0 -110
  128. package/fesm/dtos/task-label.dto.js +0 -99
  129. package/fesm/dtos/task-list.dto.js +0 -174
  130. package/fesm/dtos/task.dto.js +0 -337
  131. package/fesm/entities/index.spec.js +0 -26
  132. package/fesm/entities/task-activity.entity.js +0 -88
  133. package/fesm/entities/task-assignee.entity.js +0 -57
  134. package/fesm/entities/task-board-member.entity.js +0 -76
  135. package/fesm/entities/task-board-with-company.entity.js +0 -47
  136. package/fesm/entities/task-board.entity.js +0 -78
  137. package/fesm/entities/task-comment.entity.js +0 -70
  138. package/fesm/entities/task-label.entity.js +0 -62
  139. package/fesm/entities/task-list.entity.js +0 -94
  140. package/fesm/entities/task-task-label.entity.js +0 -57
  141. package/fesm/entities/task.entity.js +0 -133
  142. package/fesm/gateways/task-board.gateway.js +0 -157
  143. package/fesm/gateways/task-board.gateway.spec.js +0 -239
  144. package/fesm/interfaces/task-manager-module.interface.js +0 -1
  145. package/fesm/interfaces/task.interface.js +0 -1
  146. package/fesm/modules/task-manager.module.js +0 -125
  147. package/fesm/modules/task-manager.module.spec.js +0 -140
  148. package/fesm/services/task-activity.service.js +0 -66
  149. package/fesm/services/task-activity.service.spec.js +0 -121
  150. package/fesm/services/task-board.service.js +0 -237
  151. package/fesm/services/task-board.service.spec.js +0 -461
  152. package/fesm/services/task-comment.service.js +0 -93
  153. package/fesm/services/task-comment.service.spec.js +0 -156
  154. package/fesm/services/task-label.service.js +0 -87
  155. package/fesm/services/task-label.service.spec.js +0 -134
  156. package/fesm/services/task-list.service.js +0 -120
  157. package/fesm/services/task-list.service.spec.js +0 -280
  158. package/fesm/services/task-manager-config.service.js +0 -59
  159. package/fesm/services/task-manager-config.service.spec.js +0 -94
  160. package/fesm/services/task-manager-datasource.provider.js +0 -74
  161. package/fesm/services/task-manager-datasource.provider.spec.js +0 -127
  162. package/fesm/services/task.service.js +0 -388
  163. package/fesm/services/task.service.spec.js +0 -696
@@ -1,67 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "TaskTaskLabel", {
6
- enumerable: true,
7
- get: function() {
8
- return TaskTaskLabel;
9
- }
10
- });
11
- const _entities = require("@flusys/nestjs-shared/entities");
12
- const _typeorm = require("typeorm");
13
- function _define_property(obj, key, value) {
14
- if (key in obj) {
15
- Object.defineProperty(obj, key, {
16
- value: value,
17
- enumerable: true,
18
- configurable: true,
19
- writable: true
20
- });
21
- } else {
22
- obj[key] = value;
23
- }
24
- return obj;
25
- }
26
- function _ts_decorate(decorators, target, key, desc) {
27
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
28
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
29
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30
- return c > 3 && r && Object.defineProperty(target, key, r), r;
31
- }
32
- function _ts_metadata(k, v) {
33
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34
- }
35
- let TaskTaskLabel = class TaskTaskLabel extends _entities.Identity {
36
- constructor(...args){
37
- super(...args), _define_property(this, "taskId", void 0), _define_property(this, "labelId", void 0);
38
- }
39
- };
40
- _ts_decorate([
41
- (0, _typeorm.Index)(),
42
- (0, _typeorm.Column)({
43
- name: 'task_id',
44
- type: 'uuid',
45
- nullable: false
46
- }),
47
- _ts_metadata("design:type", String)
48
- ], TaskTaskLabel.prototype, "taskId", void 0);
49
- _ts_decorate([
50
- (0, _typeorm.Column)({
51
- name: 'label_id',
52
- type: 'uuid',
53
- nullable: false
54
- }),
55
- _ts_metadata("design:type", String)
56
- ], TaskTaskLabel.prototype, "labelId", void 0);
57
- TaskTaskLabel = _ts_decorate([
58
- (0, _typeorm.Entity)({
59
- name: 'task_task_label'
60
- }),
61
- (0, _typeorm.Index)([
62
- 'taskId',
63
- 'labelId'
64
- ], {
65
- unique: true
66
- })
67
- ], TaskTaskLabel);
@@ -1,151 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get Task () {
13
- return Task;
14
- },
15
- get TaskPriority () {
16
- return TaskPriority;
17
- }
18
- });
19
- const _entities = require("@flusys/nestjs-shared/entities");
20
- const _typeorm = require("typeorm");
21
- function _define_property(obj, key, value) {
22
- if (key in obj) {
23
- Object.defineProperty(obj, key, {
24
- value: value,
25
- enumerable: true,
26
- configurable: true,
27
- writable: true
28
- });
29
- } else {
30
- obj[key] = value;
31
- }
32
- return obj;
33
- }
34
- function _ts_decorate(decorators, target, key, desc) {
35
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
36
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
37
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
38
- return c > 3 && r && Object.defineProperty(target, key, r), r;
39
- }
40
- function _ts_metadata(k, v) {
41
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
42
- }
43
- var TaskPriority = /*#__PURE__*/ function(TaskPriority) {
44
- TaskPriority["LOW"] = "LOW";
45
- TaskPriority["MEDIUM"] = "MEDIUM";
46
- TaskPriority["HIGH"] = "HIGH";
47
- TaskPriority["URGENT"] = "URGENT";
48
- return TaskPriority;
49
- }({});
50
- let Task = class Task extends _entities.Identity {
51
- constructor(...args){
52
- super(...args), _define_property(this, "boardId", void 0), _define_property(this, "listId", void 0), _define_property(this, "title", void 0), _define_property(this, "description", void 0), _define_property(this, "priority", void 0), _define_property(this, "dueDate", void 0), _define_property(this, "position", void 0), _define_property(this, "reporterId", void 0), _define_property(this, "parentTaskId", void 0), _define_property(this, "estimatedHours", void 0), _define_property(this, "assignees", []);
53
- }
54
- };
55
- _ts_decorate([
56
- (0, _typeorm.Index)(),
57
- (0, _typeorm.Column)({
58
- name: 'board_id',
59
- type: 'uuid',
60
- nullable: false
61
- }),
62
- _ts_metadata("design:type", String)
63
- ], Task.prototype, "boardId", void 0);
64
- _ts_decorate([
65
- (0, _typeorm.Index)(),
66
- (0, _typeorm.Column)({
67
- name: 'list_id',
68
- type: 'uuid',
69
- nullable: false
70
- }),
71
- _ts_metadata("design:type", String)
72
- ], Task.prototype, "listId", void 0);
73
- _ts_decorate([
74
- (0, _typeorm.Column)({
75
- type: 'varchar',
76
- length: 500,
77
- nullable: false
78
- }),
79
- _ts_metadata("design:type", String)
80
- ], Task.prototype, "title", void 0);
81
- _ts_decorate([
82
- (0, _typeorm.Column)({
83
- type: 'text',
84
- nullable: true
85
- }),
86
- _ts_metadata("design:type", Object)
87
- ], Task.prototype, "description", void 0);
88
- _ts_decorate([
89
- (0, _typeorm.Column)({
90
- type: 'varchar',
91
- length: 20,
92
- nullable: false,
93
- default: "MEDIUM"
94
- }),
95
- _ts_metadata("design:type", String)
96
- ], Task.prototype, "priority", void 0);
97
- _ts_decorate([
98
- (0, _typeorm.Column)({
99
- name: 'due_date',
100
- type: 'date',
101
- nullable: true
102
- }),
103
- _ts_metadata("design:type", Object)
104
- ], Task.prototype, "dueDate", void 0);
105
- _ts_decorate([
106
- (0, _typeorm.Column)({
107
- type: 'int',
108
- nullable: false,
109
- default: 0
110
- }),
111
- _ts_metadata("design:type", Number)
112
- ], Task.prototype, "position", void 0);
113
- _ts_decorate([
114
- (0, _typeorm.Column)({
115
- name: 'reporter_id',
116
- type: 'uuid',
117
- nullable: true
118
- }),
119
- _ts_metadata("design:type", Object)
120
- ], Task.prototype, "reporterId", void 0);
121
- _ts_decorate([
122
- (0, _typeorm.Column)({
123
- name: 'parent_task_id',
124
- type: 'uuid',
125
- nullable: true
126
- }),
127
- _ts_metadata("design:type", Object)
128
- ], Task.prototype, "parentTaskId", void 0);
129
- _ts_decorate([
130
- (0, _typeorm.Column)({
131
- name: 'estimated_hours',
132
- type: 'decimal',
133
- precision: 5,
134
- scale: 1,
135
- nullable: true
136
- }),
137
- _ts_metadata("design:type", Object)
138
- ], Task.prototype, "estimatedHours", void 0);
139
- Task = _ts_decorate([
140
- (0, _typeorm.Entity)({
141
- name: 'task'
142
- }),
143
- (0, _typeorm.Index)([
144
- 'boardId',
145
- 'listId',
146
- 'position'
147
- ]),
148
- (0, _typeorm.Index)([
149
- 'dueDate'
150
- ])
151
- ], Task);
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./task-board.gateway"), exports);
6
- function _export_star(from, to) {
7
- Object.keys(from).forEach(function(k) {
8
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
- Object.defineProperty(to, k, {
10
- enumerable: true,
11
- get: function() {
12
- return from[k];
13
- }
14
- });
15
- }
16
- });
17
- return from;
18
- }
@@ -1,167 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "TaskBoardGateway", {
6
- enumerable: true,
7
- get: function() {
8
- return TaskBoardGateway;
9
- }
10
- });
11
- const _common = require("@nestjs/common");
12
- const _jwt = require("@nestjs/jwt");
13
- const _websockets = require("@nestjs/websockets");
14
- const _socketio = require("socket.io");
15
- const _taskmanagerconfigservice = require("../services/task-manager-config.service");
16
- function _define_property(obj, key, value) {
17
- if (key in obj) {
18
- Object.defineProperty(obj, key, {
19
- value: value,
20
- enumerable: true,
21
- configurable: true,
22
- writable: true
23
- });
24
- } else {
25
- obj[key] = value;
26
- }
27
- return obj;
28
- }
29
- function _ts_decorate(decorators, target, key, desc) {
30
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
31
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
32
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
33
- return c > 3 && r && Object.defineProperty(target, key, r), r;
34
- }
35
- function _ts_metadata(k, v) {
36
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
37
- }
38
- function _ts_param(paramIndex, decorator) {
39
- return function(target, key) {
40
- decorator(target, key, paramIndex);
41
- };
42
- }
43
- let TaskBoardGateway = class TaskBoardGateway {
44
- async handleConnection(client) {
45
- try {
46
- const token = this.extractToken(client);
47
- if (!token) {
48
- client.disconnect();
49
- return;
50
- }
51
- const payload = this.verifyToken(token);
52
- if (!payload) {
53
- client.disconnect();
54
- return;
55
- }
56
- client.data.userId = payload.id;
57
- client.data.companyId = payload.companyId;
58
- if (!this.connectedUsers.has(payload.id)) {
59
- this.connectedUsers.set(payload.id, new Set());
60
- }
61
- this.connectedUsers.get(payload.id).add(client.id);
62
- client.join(`user:${payload.id}`);
63
- } catch {
64
- client.disconnect();
65
- }
66
- }
67
- handleDisconnect(client) {
68
- const userId = client.data.userId;
69
- if (userId) {
70
- const sockets = this.connectedUsers.get(userId);
71
- sockets?.delete(client.id);
72
- if (sockets?.size === 0) {
73
- this.connectedUsers.delete(userId);
74
- }
75
- }
76
- }
77
- handleJoinBoard(client, data) {
78
- if (data?.boardId) {
79
- client.join(`board:${data.boardId}`);
80
- }
81
- }
82
- handleLeaveBoard(client, data) {
83
- if (data?.boardId) {
84
- client.leave(`board:${data.boardId}`);
85
- }
86
- }
87
- emitToBoardRoom(boardId, event) {
88
- this.server?.to(`board:${boardId}`).emit('board:event', event);
89
- }
90
- isUserOnline(userId) {
91
- return this.connectedUsers.has(userId);
92
- }
93
- extractToken(client) {
94
- const authToken = client.handshake.auth?.token;
95
- if (authToken) return authToken;
96
- const queryToken = client.handshake.query?.token;
97
- if (typeof queryToken === 'string') return queryToken;
98
- const authHeader = client.handshake.headers?.authorization;
99
- if (authHeader?.startsWith('Bearer ')) return authHeader.substring(7);
100
- return null;
101
- }
102
- verifyToken(token) {
103
- try {
104
- const secret = this.configService.getJwtSecret();
105
- if (!secret) return null;
106
- return this.jwtService.verify(token, {
107
- secret,
108
- algorithms: [
109
- 'HS256'
110
- ]
111
- });
112
- } catch {
113
- return null;
114
- }
115
- }
116
- constructor(configService, jwtService){
117
- _define_property(this, "configService", void 0);
118
- _define_property(this, "jwtService", void 0);
119
- _define_property(this, "connectedUsers", void 0);
120
- _define_property(this, "server", void 0);
121
- this.configService = configService;
122
- this.jwtService = jwtService;
123
- this.connectedUsers = new Map();
124
- }
125
- };
126
- _ts_decorate([
127
- (0, _websockets.WebSocketServer)(),
128
- _ts_metadata("design:type", typeof _socketio.Server === "undefined" ? Object : _socketio.Server)
129
- ], TaskBoardGateway.prototype, "server", void 0);
130
- _ts_decorate([
131
- (0, _websockets.SubscribeMessage)('board:join'),
132
- _ts_param(0, (0, _websockets.ConnectedSocket)()),
133
- _ts_param(1, (0, _websockets.MessageBody)()),
134
- _ts_metadata("design:type", Function),
135
- _ts_metadata("design:paramtypes", [
136
- typeof _socketio.Socket === "undefined" ? Object : _socketio.Socket,
137
- Object
138
- ]),
139
- _ts_metadata("design:returntype", void 0)
140
- ], TaskBoardGateway.prototype, "handleJoinBoard", null);
141
- _ts_decorate([
142
- (0, _websockets.SubscribeMessage)('board:leave'),
143
- _ts_param(0, (0, _websockets.ConnectedSocket)()),
144
- _ts_param(1, (0, _websockets.MessageBody)()),
145
- _ts_metadata("design:type", Function),
146
- _ts_metadata("design:paramtypes", [
147
- typeof _socketio.Socket === "undefined" ? Object : _socketio.Socket,
148
- Object
149
- ]),
150
- _ts_metadata("design:returntype", void 0)
151
- ], TaskBoardGateway.prototype, "handleLeaveBoard", null);
152
- TaskBoardGateway = _ts_decorate([
153
- (0, _websockets.WebSocketGateway)({
154
- namespace: '/task-boards',
155
- cors: {
156
- origin: '*',
157
- credentials: true
158
- }
159
- }),
160
- _ts_param(0, (0, _common.Inject)(_taskmanagerconfigservice.TaskManagerConfigService)),
161
- _ts_param(1, (0, _common.Inject)(_jwt.JwtService)),
162
- _ts_metadata("design:type", Function),
163
- _ts_metadata("design:paramtypes", [
164
- typeof _taskmanagerconfigservice.TaskManagerConfigService === "undefined" ? Object : _taskmanagerconfigservice.TaskManagerConfigService,
165
- typeof _jwt.JwtService === "undefined" ? Object : _jwt.JwtService
166
- ])
167
- ], TaskBoardGateway);
@@ -1,243 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- const _taskboardgateway = require("./task-board.gateway");
6
- function buildSocket(overrides = {}) {
7
- return {
8
- id: overrides.id ?? 'socket-1',
9
- handshake: {
10
- auth: overrides.authToken !== undefined ? {
11
- token: overrides.authToken
12
- } : {},
13
- query: overrides.queryToken !== undefined ? {
14
- token: overrides.queryToken
15
- } : {},
16
- headers: overrides.authHeader !== undefined ? {
17
- authorization: overrides.authHeader
18
- } : {}
19
- },
20
- data: {},
21
- join: jest.fn(),
22
- leave: jest.fn(),
23
- disconnect: jest.fn()
24
- };
25
- }
26
- describe('TaskBoardGateway', ()=>{
27
- let gateway;
28
- let mockConfigService;
29
- let mockJwtService;
30
- let mockServer;
31
- beforeEach(()=>{
32
- mockConfigService = {
33
- getJwtSecret: jest.fn().mockReturnValue('test-secret')
34
- };
35
- mockJwtService = {
36
- verify: jest.fn()
37
- };
38
- gateway = new _taskboardgateway.TaskBoardGateway(mockConfigService, mockJwtService);
39
- mockServer = {
40
- to: jest.fn().mockReturnThis(),
41
- emit: jest.fn()
42
- };
43
- gateway.server = mockServer;
44
- });
45
- describe('handleConnection', ()=>{
46
- it('authenticates via handshake.auth.token, joins the user room and tracks the socket', async ()=>{
47
- const socket = buildSocket({
48
- id: 'socket-1',
49
- authToken: 'valid-token'
50
- });
51
- mockJwtService.verify.mockReturnValue({
52
- id: 'user-1',
53
- companyId: 'company-1'
54
- });
55
- await gateway.handleConnection(socket);
56
- expect(mockJwtService.verify).toHaveBeenCalledWith('valid-token', {
57
- secret: 'test-secret',
58
- algorithms: [
59
- 'HS256'
60
- ]
61
- });
62
- expect(socket.data.userId).toBe('user-1');
63
- expect(socket.data.companyId).toBe('company-1');
64
- expect(socket.join).toHaveBeenCalledWith('user:user-1');
65
- expect(gateway.isUserOnline('user-1')).toBe(true);
66
- expect(socket.disconnect).not.toHaveBeenCalled();
67
- });
68
- it('falls back to handshake.query.token when auth.token is absent', async ()=>{
69
- const socket = buildSocket({
70
- queryToken: 'query-token'
71
- });
72
- mockJwtService.verify.mockReturnValue({
73
- id: 'user-2'
74
- });
75
- await gateway.handleConnection(socket);
76
- expect(mockJwtService.verify).toHaveBeenCalledWith('query-token', expect.anything());
77
- expect(socket.data.userId).toBe('user-2');
78
- });
79
- it('falls back to the Authorization header (Bearer token) when other sources are absent', async ()=>{
80
- const socket = buildSocket({
81
- authHeader: 'Bearer header-token'
82
- });
83
- mockJwtService.verify.mockReturnValue({
84
- id: 'user-3'
85
- });
86
- await gateway.handleConnection(socket);
87
- expect(mockJwtService.verify).toHaveBeenCalledWith('header-token', expect.anything());
88
- expect(socket.data.userId).toBe('user-3');
89
- });
90
- it('disconnects the socket when no token is present on the handshake', async ()=>{
91
- const socket = buildSocket();
92
- await gateway.handleConnection(socket);
93
- expect(socket.disconnect).toHaveBeenCalled();
94
- expect(mockJwtService.verify).not.toHaveBeenCalled();
95
- });
96
- it('disconnects the socket when the JWT secret is not configured', async ()=>{
97
- mockConfigService.getJwtSecret.mockReturnValue(undefined);
98
- const socket = buildSocket({
99
- authToken: 'some-token'
100
- });
101
- await gateway.handleConnection(socket);
102
- expect(socket.disconnect).toHaveBeenCalled();
103
- });
104
- it('disconnects the socket when token verification throws (invalid/expired token)', async ()=>{
105
- const socket = buildSocket({
106
- authToken: 'garbage-token'
107
- });
108
- mockJwtService.verify.mockImplementation(()=>{
109
- throw new Error('invalid signature');
110
- });
111
- await gateway.handleConnection(socket);
112
- expect(socket.disconnect).toHaveBeenCalled();
113
- });
114
- it('tracks multiple concurrent sockets for the same authenticated user', async ()=>{
115
- const socketA = buildSocket({
116
- id: 'socket-a',
117
- authToken: 'token'
118
- });
119
- const socketB = buildSocket({
120
- id: 'socket-b',
121
- authToken: 'token'
122
- });
123
- mockJwtService.verify.mockReturnValue({
124
- id: 'user-multi'
125
- });
126
- await gateway.handleConnection(socketA);
127
- await gateway.handleConnection(socketB);
128
- expect(gateway.isUserOnline('user-multi')).toBe(true);
129
- });
130
- });
131
- describe('handleDisconnect', ()=>{
132
- it('removes the socket from the connected-users map and marks the user offline once all sockets are gone', async ()=>{
133
- const socket = buildSocket({
134
- id: 'socket-1',
135
- authToken: 'valid-token'
136
- });
137
- mockJwtService.verify.mockReturnValue({
138
- id: 'user-1'
139
- });
140
- await gateway.handleConnection(socket);
141
- expect(gateway.isUserOnline('user-1')).toBe(true);
142
- gateway.handleDisconnect(socket);
143
- expect(gateway.isUserOnline('user-1')).toBe(false);
144
- });
145
- it('keeps the user marked online while other sockets for that user remain connected', async ()=>{
146
- const socketA = buildSocket({
147
- id: 'socket-a',
148
- authToken: 'token'
149
- });
150
- const socketB = buildSocket({
151
- id: 'socket-b',
152
- authToken: 'token'
153
- });
154
- mockJwtService.verify.mockReturnValue({
155
- id: 'user-1'
156
- });
157
- await gateway.handleConnection(socketA);
158
- await gateway.handleConnection(socketB);
159
- gateway.handleDisconnect(socketA);
160
- expect(gateway.isUserOnline('user-1')).toBe(true);
161
- });
162
- it('does nothing when the disconnecting socket has no tracked userId', ()=>{
163
- const socket = buildSocket({
164
- id: 'never-connected'
165
- });
166
- expect(()=>gateway.handleDisconnect(socket)).not.toThrow();
167
- });
168
- });
169
- describe('handleJoinBoard / handleLeaveBoard', ()=>{
170
- it('joins the board room when a boardId is provided', ()=>{
171
- const socket = buildSocket();
172
- gateway.handleJoinBoard(socket, {
173
- boardId: 'board-1'
174
- });
175
- expect(socket.join).toHaveBeenCalledWith('board:board-1');
176
- });
177
- it('does not attempt to join a room when boardId is missing', ()=>{
178
- const socket = buildSocket();
179
- gateway.handleJoinBoard(socket, {});
180
- expect(socket.join).not.toHaveBeenCalled();
181
- });
182
- it('leaves the board room when a boardId is provided', ()=>{
183
- const socket = buildSocket();
184
- gateway.handleLeaveBoard(socket, {
185
- boardId: 'board-1'
186
- });
187
- expect(socket.leave).toHaveBeenCalledWith('board:board-1');
188
- });
189
- it('does not attempt to leave a room when boardId is missing', ()=>{
190
- const socket = buildSocket();
191
- gateway.handleLeaveBoard(socket, {});
192
- expect(socket.leave).not.toHaveBeenCalled();
193
- });
194
- });
195
- describe('emitToBoardRoom', ()=>{
196
- it('broadcasts the event to the board room', ()=>{
197
- gateway.emitToBoardRoom('board-1', {
198
- type: 'task:moved',
199
- boardId: 'board-1',
200
- payload: {
201
- taskId: 'task-1'
202
- }
203
- });
204
- expect(mockServer.to).toHaveBeenCalledWith('board:board-1');
205
- expect(mockServer.emit).toHaveBeenCalledWith('board:event', {
206
- type: 'task:moved',
207
- boardId: 'board-1',
208
- payload: {
209
- taskId: 'task-1'
210
- }
211
- });
212
- });
213
- it('broadcasts a list:reordered event', ()=>{
214
- gateway.emitToBoardRoom('board-2', {
215
- type: 'list:reordered',
216
- boardId: 'board-2',
217
- payload: {
218
- orderedIds: [
219
- 'a',
220
- 'b'
221
- ]
222
- }
223
- });
224
- expect(mockServer.to).toHaveBeenCalledWith('board:board-2');
225
- expect(mockServer.emit).toHaveBeenCalledWith('board:event', expect.objectContaining({
226
- type: 'list:reordered'
227
- }));
228
- });
229
- it('does not throw when the server instance is not yet attached', ()=>{
230
- gateway.server = undefined;
231
- expect(()=>gateway.emitToBoardRoom('board-1', {
232
- type: 'task:updated',
233
- boardId: 'board-1',
234
- payload: {}
235
- })).not.toThrow();
236
- });
237
- });
238
- describe('isUserOnline', ()=>{
239
- it('returns false for a user that never connected', ()=>{
240
- expect(gateway.isUserOnline('never-seen')).toBe(false);
241
- });
242
- });
243
- });
package/cjs/index.js DELETED
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./config"), exports);
6
- _export_star(require("./controllers"), exports);
7
- _export_star(require("./docs"), exports);
8
- _export_star(require("./dtos"), exports);
9
- _export_star(require("./entities"), exports);
10
- _export_star(require("./gateways"), exports);
11
- _export_star(require("./interfaces"), exports);
12
- _export_star(require("./modules"), exports);
13
- _export_star(require("./services"), exports);
14
- function _export_star(from, to) {
15
- Object.keys(from).forEach(function(k) {
16
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
17
- Object.defineProperty(to, k, {
18
- enumerable: true,
19
- get: function() {
20
- return from[k];
21
- }
22
- });
23
- }
24
- });
25
- return from;
26
- }
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- _export_star(require("./task-manager-module.interface"), exports);
6
- _export_star(require("./task.interface"), exports);
7
- function _export_star(from, to) {
8
- Object.keys(from).forEach(function(k) {
9
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
10
- Object.defineProperty(to, k, {
11
- enumerable: true,
12
- get: function() {
13
- return from[k];
14
- }
15
- });
16
- }
17
- });
18
- return from;
19
- }