mongodb-dynamic-api 4.0.0 → 4.1.1

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 (44) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +14 -12
  3. package/package.json +1 -1
  4. package/src/adapters/socket-adapter.d.ts +1 -0
  5. package/src/adapters/socket-adapter.js +8 -1
  6. package/src/adapters/socket-adapter.js.map +1 -1
  7. package/src/dynamic-api.module.js +9 -7
  8. package/src/dynamic-api.module.js.map +1 -1
  9. package/src/gateways/base.gateway.js +10 -2
  10. package/src/gateways/base.gateway.js.map +1 -1
  11. package/src/gateways/dynamic-api-broadcast.gateway.d.ts +13 -1
  12. package/src/gateways/dynamic-api-broadcast.gateway.js +32 -0
  13. package/src/gateways/dynamic-api-broadcast.gateway.js.map +1 -1
  14. package/src/helpers/index.d.ts +1 -0
  15. package/src/helpers/index.js +1 -0
  16. package/src/helpers/index.js.map +1 -1
  17. package/src/helpers/resolve-rooms.helper.d.ts +3 -0
  18. package/src/helpers/resolve-rooms.helper.js +18 -0
  19. package/src/helpers/resolve-rooms.helper.js.map +1 -0
  20. package/src/interfaces/dynamic-api-ability.interface.d.ts +2 -1
  21. package/src/interfaces/dynamic-api-broadcast-config.interface.d.ts +2 -1
  22. package/src/modules/auth/auth.helper.d.ts +1 -1
  23. package/src/modules/auth/auth.helper.js +14 -3
  24. package/src/modules/auth/auth.helper.js.map +1 -1
  25. package/src/modules/auth/auth.module.js +1 -1
  26. package/src/modules/auth/auth.module.js.map +1 -1
  27. package/src/modules/auth/interfaces/auth-options.interface.d.ts +5 -1
  28. package/src/modules/auth/mixins/auth-controller.mixin.js +2 -0
  29. package/src/modules/auth/mixins/auth-controller.mixin.js.map +1 -1
  30. package/src/services/dynamic-api-broadcast/dynamic-api-broadcast.service.js +10 -2
  31. package/src/services/dynamic-api-broadcast/dynamic-api-broadcast.service.js.map +1 -1
  32. package/src/version.json +1 -1
  33. package/test/e2e.setup.d.ts +22 -0
  34. package/test/e2e.setup.js +145 -0
  35. package/test/e2e.setup.js.map +1 -1
  36. package/test/for-feature/room-broadcast.e2e-spec.d.ts +1 -0
  37. package/test/for-feature/room-broadcast.e2e-spec.js +192 -0
  38. package/test/for-feature/room-broadcast.e2e-spec.js.map +1 -0
  39. package/test/for-root/auth-api-login.e2e-spec.js +206 -0
  40. package/test/for-root/auth-api-login.e2e-spec.js.map +1 -1
  41. package/test/test-socket-adapter.d.ts +1 -0
  42. package/test/test-socket-adapter.js +11 -4
  43. package/test/test-socket-adapter.js.map +1 -1
  44. package/tsconfig.tsbuildinfo +1 -1
@@ -1,7 +1,21 @@
1
1
  "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
2
14
  Object.defineProperty(exports, "__esModule", { value: true });
3
15
  const common_1 = require("@nestjs/common");
16
+ const passport_1 = require("@nestjs/passport");
4
17
  const mongoose_1 = require("mongoose");
18
+ const passport_local_1 = require("passport-local");
5
19
  const src_1 = require("../../src");
6
20
  const e2e_setup_1 = require("../e2e.setup");
7
21
  require("dotenv/config");
@@ -100,4 +114,196 @@ describe('DynamicApiModule forRoot - POST /auth/login with login options (e2e)',
100
114
  });
101
115
  });
102
116
  });
117
+ describe('DynamicApiModule forRoot - POST /auth/login with customValidate (e2e)', () => {
118
+ const User = (0, shared_1.createLoginUserEntity)();
119
+ const admin = shared_1.LOGIN_ADMIN;
120
+ const user = shared_1.LOGIN_USER;
121
+ beforeEach(() => {
122
+ src_1.DynamicApiModule.state['resetState']();
123
+ });
124
+ afterEach(async () => {
125
+ await (0, e2e_setup_1.closeTestingApp)(mongoose_1.default.connections);
126
+ });
127
+ describe('when customValidate returns a user', () => {
128
+ beforeEach(async () => {
129
+ const bcryptService = new src_1.BcryptService();
130
+ const fixtures = async (_) => {
131
+ const model = await (0, utils_1.getModelFromEntity)(User);
132
+ await model.insertMany([
133
+ { ...admin, pass: await bcryptService.hashPassword(admin.pass) },
134
+ { ...user, pass: await bcryptService.hashPassword(user.pass) },
135
+ ]);
136
+ };
137
+ await (0, shared_1.initModule)({
138
+ useAuth: {
139
+ userEntity: User,
140
+ login: {
141
+ loginField: 'username',
142
+ passwordField: 'pass',
143
+ additionalFields: ['role', 'isVerified'],
144
+ customValidate: async (req) => {
145
+ const deviceToken = req.body?.deviceToken;
146
+ if (!deviceToken) {
147
+ return null;
148
+ }
149
+ if (deviceToken === 'valid-device-token') {
150
+ return {
151
+ id: 'device-user-id',
152
+ username: 'device-user',
153
+ role: 'admin',
154
+ isVerified: true,
155
+ };
156
+ }
157
+ return null;
158
+ },
159
+ },
160
+ },
161
+ }, fixtures);
162
+ });
163
+ it('should login via customValidate without password check when device token is valid', async () => {
164
+ const { body, status } = await e2e_setup_1.server.post('/auth/login', {
165
+ username: 'any',
166
+ pass: 'any',
167
+ deviceToken: 'valid-device-token',
168
+ });
169
+ expect(status).toBe(200);
170
+ expect(body).toHaveProperty('accessToken');
171
+ });
172
+ it('should fall back to normal password validation when customValidate returns null', async () => {
173
+ const { username, pass } = admin;
174
+ const { body, status } = await e2e_setup_1.server.post('/auth/login', { username, pass });
175
+ expect(status).toBe(200);
176
+ expect(body).toHaveProperty('accessToken');
177
+ });
178
+ it('should return 401 when customValidate returns null and password is wrong', async () => {
179
+ const { body, status } = await e2e_setup_1.server.post('/auth/login', {
180
+ username: admin.username,
181
+ pass: 'wrong-password',
182
+ });
183
+ expect(status).toBe(401);
184
+ expect(body).toEqual({
185
+ error: 'Unauthorized',
186
+ message: 'Invalid credentials',
187
+ statusCode: 401,
188
+ });
189
+ });
190
+ });
191
+ describe('when customValidate is combined with abilityPredicate', () => {
192
+ beforeEach(async () => {
193
+ const bcryptService = new src_1.BcryptService();
194
+ const fixtures = async (_) => {
195
+ const model = await (0, utils_1.getModelFromEntity)(User);
196
+ await model.insertMany([
197
+ { ...admin, pass: await bcryptService.hashPassword(admin.pass) },
198
+ ]);
199
+ };
200
+ await (0, shared_1.initModule)({
201
+ useAuth: {
202
+ userEntity: User,
203
+ login: {
204
+ loginField: 'username',
205
+ passwordField: 'pass',
206
+ abilityPredicate: (u) => u.role === 'admin',
207
+ customValidate: async (req) => {
208
+ const deviceToken = req.body?.deviceToken;
209
+ if (deviceToken === 'client-device') {
210
+ return {
211
+ id: 'client-id',
212
+ username: 'client-device-user',
213
+ role: 'client',
214
+ isVerified: true,
215
+ };
216
+ }
217
+ return null;
218
+ },
219
+ },
220
+ },
221
+ }, fixtures);
222
+ });
223
+ it('should return 403 when customValidate user is rejected by abilityPredicate', async () => {
224
+ const { body, status } = await e2e_setup_1.server.post('/auth/login', {
225
+ username: 'any',
226
+ pass: 'any',
227
+ deviceToken: 'client-device',
228
+ });
229
+ expect(status).toBe(403);
230
+ expect(body).toEqual({
231
+ error: 'Forbidden',
232
+ message: 'Access denied',
233
+ statusCode: 403,
234
+ });
235
+ });
236
+ });
237
+ });
238
+ describe('DynamicApiModule forRoot - POST /auth/login with useStrategy (e2e)', () => {
239
+ const User = (0, shared_1.createLoginUserEntity)();
240
+ const admin = shared_1.LOGIN_ADMIN;
241
+ beforeEach(() => {
242
+ src_1.DynamicApiModule.state['resetState']();
243
+ });
244
+ afterEach(async () => {
245
+ await (0, e2e_setup_1.closeTestingApp)(mongoose_1.default.connections);
246
+ });
247
+ describe('when a custom Passport strategy is provided', () => {
248
+ beforeEach(async () => {
249
+ const bcryptService = new src_1.BcryptService();
250
+ const fixtures = async (_) => {
251
+ const model = await (0, utils_1.getModelFromEntity)(User);
252
+ await model.insertMany([
253
+ { ...admin, pass: await bcryptService.hashPassword(admin.pass) },
254
+ ]);
255
+ };
256
+ let CustomLocalStrategy = class CustomLocalStrategy extends (0, passport_1.PassportStrategy)(passport_local_1.Strategy, 'local') {
257
+ constructor(authService) {
258
+ super({ usernameField: 'username', passwordField: 'pass' });
259
+ this.authService = authService;
260
+ }
261
+ async validate(username, pass) {
262
+ const user = await this.authService.validateUser(username, pass);
263
+ if (!user) {
264
+ throw new common_1.UnauthorizedException('Custom strategy: invalid credentials');
265
+ }
266
+ if (user.role !== 'admin') {
267
+ throw new common_1.ForbiddenException('Custom strategy: admins only');
268
+ }
269
+ return user;
270
+ }
271
+ };
272
+ CustomLocalStrategy = __decorate([
273
+ (0, common_1.Injectable)(),
274
+ __param(0, (0, common_1.Inject)('DynamicApiAuthService')),
275
+ __metadata("design:paramtypes", [Object])
276
+ ], CustomLocalStrategy);
277
+ await (0, shared_1.initModule)({
278
+ useAuth: {
279
+ userEntity: User,
280
+ login: {
281
+ loginField: 'username',
282
+ passwordField: 'pass',
283
+ additionalFields: ['role', 'isVerified'],
284
+ useStrategy: CustomLocalStrategy,
285
+ },
286
+ },
287
+ }, fixtures);
288
+ });
289
+ it('should login successfully using the custom strategy', async () => {
290
+ const { username, pass } = admin;
291
+ const { body, status } = await e2e_setup_1.server.post('/auth/login', { username, pass });
292
+ expect(status).toBe(200);
293
+ expect(body).toHaveProperty('accessToken');
294
+ });
295
+ it('should return 401 when custom strategy rejects credentials', async () => {
296
+ const { body, status } = await e2e_setup_1.server.post('/auth/login', {
297
+ username: 'unknown',
298
+ pass: 'wrong',
299
+ });
300
+ expect(status).toBe(401);
301
+ expect(body).toEqual({
302
+ error: 'Unauthorized',
303
+ message: 'Custom strategy: invalid credentials',
304
+ statusCode: 401,
305
+ });
306
+ });
307
+ });
308
+ });
103
309
  //# sourceMappingURL=auth-api-login.e2e-spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-api-login.e2e-spec.js","sourceRoot":"","sources":["../../../libs/dynamic-api/test/for-root/auth-api-login.e2e-spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-api-login.e2e-spec.js","sourceRoot":"","sources":["../../../libs/dynamic-api/test/for-root/auth-api-login.e2e-spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { IoAdapter } from '@nestjs/platform-socket.io';
2
2
  import { ServerOptions } from 'socket.io';
3
3
  export declare class TestSocketAdapter extends IoAdapter {
4
+ private ioServer;
4
5
  createIOServer(port: number, options?: ServerOptions & {
5
6
  namespace?: string;
6
7
  server?: any;
@@ -3,8 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TestSocketAdapter = void 0;
4
4
  const platform_socket_io_1 = require("@nestjs/platform-socket.io");
5
5
  class TestSocketAdapter extends platform_socket_io_1.IoAdapter {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.ioServer = null;
9
+ }
6
10
  createIOServer(port, options) {
7
- const server = super.createIOServer(port, {
11
+ if (this.ioServer) {
12
+ return this.ioServer;
13
+ }
14
+ this.ioServer = super.createIOServer(port, {
8
15
  ...options,
9
16
  cors: options?.cors ?? {
10
17
  origin: '*',
@@ -12,11 +19,11 @@ class TestSocketAdapter extends platform_socket_io_1.IoAdapter {
12
19
  credentials: false,
13
20
  },
14
21
  });
15
- server.sockets.setMaxListeners(50);
16
- server.on('connection', (socket) => {
22
+ this.ioServer.sockets.setMaxListeners(50);
23
+ this.ioServer.on('connection', (socket) => {
17
24
  socket.setMaxListeners(50);
18
25
  });
19
- return server;
26
+ return this.ioServer;
20
27
  }
21
28
  }
22
29
  exports.TestSocketAdapter = TestSocketAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"test-socket-adapter.js","sourceRoot":"","sources":["../../libs/dynamic-api/test/test-socket-adapter.ts"],"names":[],"mappings":";;;AAAA,mEAAuD;AAGvD,MAAa,iBAAkB,SAAQ,8BAAS;IAC9C,cAAc,CACZ,IAAY,EACZ,OAGC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE;YACxC,GAAG,OAAO;YACV,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI;gBACrB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;gBACxB,WAAW,EAAE,KAAK;aACnB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAEnC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACjC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAzBD,8CAyBC"}
1
+ {"version":3,"file":"test-socket-adapter.js","sourceRoot":"","sources":["../../libs/dynamic-api/test/test-socket-adapter.ts"],"names":[],"mappings":";;;AAAA,mEAAuD;AAGvD,MAAa,iBAAkB,SAAQ,8BAAS;IAAhD;;QACU,aAAQ,GAAkB,IAAI,CAAC;IA8BzC,CAAC;IA5BC,cAAc,CACZ,IAAY,EACZ,OAGC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE;YACzC,GAAG,OAAO;YACV,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI;gBACrB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;gBACxB,WAAW,EAAE,KAAK;aACnB;SACF,CAAW,CAAC;QAEb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACxC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AA/BD,8CA+BC"}