@edifice.io/edifice-nestjs-core 1.0.0 → 1.0.3

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 (50) hide show
  1. package/README.md +41 -0
  2. package/dist/bin/generate-rest-clients.d.ts +2 -0
  3. package/dist/bin/generate-rest-clients.js +581 -0
  4. package/dist/bin/generate-rest-clients.js.map +1 -0
  5. package/dist/bin/generate-swagger-pdf.d.ts +1 -0
  6. package/dist/bin/generate-swagger-pdf.js +172 -0
  7. package/dist/bin/generate-swagger-pdf.js.map +1 -0
  8. package/dist/config/configuration.d.ts +6 -0
  9. package/dist/config/configuration.js +12 -0
  10. package/dist/config/configuration.js.map +1 -1
  11. package/dist/config/postgres.config.js +2 -0
  12. package/dist/config/postgres.config.js.map +1 -1
  13. package/dist/core.module.js +8 -0
  14. package/dist/core.module.js.map +1 -1
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/performance/copy-metadata.utils.d.ts +1 -0
  19. package/dist/performance/copy-metadata.utils.js +9 -0
  20. package/dist/performance/copy-metadata.utils.js.map +1 -0
  21. package/dist/performance/correlation.interceptor.d.ts +5 -0
  22. package/dist/performance/correlation.interceptor.js +28 -0
  23. package/dist/performance/correlation.interceptor.js.map +1 -0
  24. package/dist/performance/index.d.ts +4 -0
  25. package/dist/performance/index.js +16 -0
  26. package/dist/performance/index.js.map +1 -0
  27. package/dist/performance/performance-stats.d.ts +26 -0
  28. package/dist/performance/performance-stats.js +57 -0
  29. package/dist/performance/performance-stats.js.map +1 -0
  30. package/dist/performance/performance.decorator.d.ts +11 -0
  31. package/dist/performance/performance.decorator.js +56 -0
  32. package/dist/performance/performance.decorator.js.map +1 -0
  33. package/dist/performance/performance.module.d.ts +5 -0
  34. package/dist/performance/performance.module.js +38 -0
  35. package/dist/performance/performance.module.js.map +1 -0
  36. package/dist/session/query-param-token.middleware.d.ts +11 -0
  37. package/dist/session/query-param-token.middleware.js +68 -0
  38. package/dist/session/query-param-token.middleware.js.map +1 -0
  39. package/dist/session/session-middleware.utils.d.ts +17 -0
  40. package/dist/session/session-middleware.utils.js +82 -0
  41. package/dist/session/session-middleware.utils.js.map +1 -0
  42. package/dist/session/session.middleware.d.ts +0 -4
  43. package/dist/session/session.middleware.js +9 -45
  44. package/dist/session/session.middleware.js.map +1 -1
  45. package/dist/session/session.module.js +3 -2
  46. package/dist/session/session.module.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/dist/utils/static-assets.utils.js +1 -1
  49. package/dist/utils/static-assets.utils.js.map +1 -1
  50. package/package.json +13 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.module.js","sourceRoot":"","sources":["../../src/performance/performance.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwC;AACxC,uCAA+C;AAC/C,2CAA+C;AAE/C,mCAAwE;AAsBjE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACC;IAA7B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAEvD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAU,aAAa,CAAC,IAAI,KAAK,CAAC;QAC5E,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,kBAAkB,CAAC,CAAC;QAC5E,IAAA,6BAAqB,EAAC,WAAW,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzE,CAAC;CACF,CAAA;AAPY,8CAAiB;4BAAjB,iBAAiB;IAR7B,IAAA,eAAM,EAAC;QACN,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,8BAAsB;aACjC;SACF;KACF,CAAC;qCAE4C,sBAAa;GAD9C,iBAAiB,CAO7B"}
@@ -0,0 +1,11 @@
1
+ import { NestMiddleware } from '@nestjs/common';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import { PinoLogger } from 'nestjs-pino';
4
+ import { SessionService } from './session.service';
5
+ export { QUERY_PARAM_TOKEN_KEY } from './session-middleware.utils';
6
+ export declare class QueryParamTokenMiddleware implements NestMiddleware {
7
+ private readonly logger;
8
+ private readonly sessionService;
9
+ constructor(logger: PinoLogger, sessionService: SessionService);
10
+ use(req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void>;
11
+ }
@@ -0,0 +1,68 @@
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
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.QueryParamTokenMiddleware = exports.QUERY_PARAM_TOKEN_KEY = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const nestjs_pino_1 = require("nestjs-pino");
18
+ const session_service_1 = require("./session.service");
19
+ const session_middleware_utils_1 = require("./session-middleware.utils");
20
+ var session_middleware_utils_2 = require("./session-middleware.utils");
21
+ Object.defineProperty(exports, "QUERY_PARAM_TOKEN_KEY", { enumerable: true, get: function () { return session_middleware_utils_2.QUERY_PARAM_TOKEN_KEY; } });
22
+ let QueryParamTokenMiddleware = class QueryParamTokenMiddleware {
23
+ logger;
24
+ sessionService;
25
+ constructor(logger, sessionService) {
26
+ this.logger = logger;
27
+ this.sessionService = sessionService;
28
+ }
29
+ async use(req, res, next) {
30
+ const token = (0, session_middleware_utils_1.extractQueryParamToken)(req.url);
31
+ if (!token) {
32
+ return next();
33
+ }
34
+ try {
35
+ const { path, pathPrefix, headers } = (0, session_middleware_utils_1.parseIncomingRequest)(req);
36
+ this.logger.debug({ path }, 'queryparam_token detected — attempting session bootstrap');
37
+ const result = await this.sessionService.findSession({
38
+ cookies: req.headers.cookie,
39
+ headers,
40
+ params: { [session_middleware_utils_1.QUERY_PARAM_TOKEN_KEY]: token },
41
+ pathPrefix,
42
+ path,
43
+ });
44
+ if (result?.session) {
45
+ (0, session_middleware_utils_1.setSession)(result.session, req);
46
+ if (result?.cookies && result.cookies.length > 0) {
47
+ (0, session_middleware_utils_1.mergeSetCookieHeaders)(result.cookies, res);
48
+ this.logger.info({ cookieCount: result.cookies.length, token }, 'Set Session cookies after queryparam_token exchange');
49
+ }
50
+ else {
51
+ this.logger.warn({ token }, 'queryparam_token resolved to a valid session but no Set-Cookie headers were returned');
52
+ }
53
+ }
54
+ }
55
+ catch (error) {
56
+ this.logger.warn({ error: String(error) }, 'queryparam_token session bootstrap failed — continuing silently');
57
+ }
58
+ return next();
59
+ }
60
+ };
61
+ exports.QueryParamTokenMiddleware = QueryParamTokenMiddleware;
62
+ exports.QueryParamTokenMiddleware = QueryParamTokenMiddleware = __decorate([
63
+ (0, common_1.Injectable)(),
64
+ __param(0, (0, nestjs_pino_1.InjectPinoLogger)(QueryParamTokenMiddleware.name)),
65
+ __metadata("design:paramtypes", [nestjs_pino_1.PinoLogger,
66
+ session_service_1.SessionService])
67
+ ], QueryParamTokenMiddleware);
68
+ //# sourceMappingURL=query-param-token.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-param-token.middleware.js","sourceRoot":"","sources":["../../src/session/query-param-token.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4D;AAG5D,6CAA2D;AAC3D,uDAAmD;AACnD,yEAMoC;AAEpC,uEAAmE;AAA1D,iIAAA,qBAAqB,OAAA;AAgBvB,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IAGjB;IACA;IAHnB,YAEmB,MAAkB,EAClB,cAA8B;QAD9B,WAAM,GAAN,MAAM,CAAY;QAClB,mBAAc,GAAd,cAAc,CAAgB;IAC9C,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAgB;QACnE,MAAM,KAAK,GAAG,IAAA,iDAAsB,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAG9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,IAAA,+CAAoB,EAAC,GAAG,CAAC,CAAC;YAEhE,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,IAAI,EAAE,EACR,0DAA0D,CAC3D,CAAC;YAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;gBACnD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO;gBACP,MAAM,EAAE,EAAE,CAAC,gDAAqB,CAAC,EAAE,KAAK,EAAE;gBAC1C,UAAU;gBACV,IAAI;aACL,CAAC,CAAC;YAEH,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBAEpB,IAAA,qCAAU,EAAC,MAAM,CAAC,OAAO,EAAE,GAAgC,CAAC,CAAC;gBAE7D,IAAI,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjD,IAAA,gDAAqB,EAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAC7C,qDAAqD,CACtD,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,EACT,sFAAsF,CACvF,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EACxB,iEAAiE,CAClE,CAAC;QACJ,CAAC;QAGD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CACF,CAAA;AA3DY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,8BAAgB,EAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;qCACxB,wBAAU;QACF,gCAAc;GAJtC,yBAAyB,CA2DrC"}
@@ -0,0 +1,17 @@
1
+ import { FastifyRequest } from 'fastify';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import { SessionDto } from '@edifice.io/edifice-ent-client';
4
+ export declare const QUERY_PARAM_TOKEN_KEY = "queryparam_token";
5
+ export declare function extractQueryParamToken(rawUrl: string | undefined): string | null;
6
+ export declare function setSession(session: SessionDto, req: FastifyRequest): void;
7
+ export interface ParsedRequest {
8
+ urlObj: URL;
9
+ path: string;
10
+ pathPrefix: string;
11
+ headers: Record<string, string>;
12
+ safeQueryParams: Record<string, string>;
13
+ }
14
+ export declare function parseIncomingRequest(req: IncomingMessage): ParsedRequest;
15
+ export declare function mergeSetCookieHeaders(cookies: string[], res: ServerResponse): void;
16
+ export declare function getOneSessionIdFromHeaders(req: IncomingMessage): string | undefined;
17
+ export declare function send401(res: ServerResponse, detail?: string): void;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QUERY_PARAM_TOKEN_KEY = void 0;
4
+ exports.extractQueryParamToken = extractQueryParamToken;
5
+ exports.setSession = setSession;
6
+ exports.parseIncomingRequest = parseIncomingRequest;
7
+ exports.mergeSetCookieHeaders = mergeSetCookieHeaders;
8
+ exports.getOneSessionIdFromHeaders = getOneSessionIdFromHeaders;
9
+ exports.send401 = send401;
10
+ exports.QUERY_PARAM_TOKEN_KEY = 'queryparam_token';
11
+ function extractQueryParamToken(rawUrl) {
12
+ if (!rawUrl) {
13
+ return null;
14
+ }
15
+ try {
16
+ const token = new URL(rawUrl, 'http://localhost').searchParams.get(exports.QUERY_PARAM_TOKEN_KEY);
17
+ return token && token.length > 0 ? token : null;
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ function setSession(session, req) {
24
+ req.entSession = session;
25
+ }
26
+ function parseIncomingRequest(req) {
27
+ const request = req;
28
+ const queryParams = (request.query || {});
29
+ const url = req.url || '';
30
+ const urlObj = new URL(url, `http://${req.headers.host || 'localhost'}`);
31
+ const path = urlObj.pathname;
32
+ const headers = {};
33
+ Object.keys(req.headers).forEach((key) => {
34
+ const headerValue = req.headers[key];
35
+ headers[key] = Array.isArray(headerValue)
36
+ ? headerValue[0]
37
+ : headerValue;
38
+ });
39
+ const safeQueryParams = {};
40
+ Object.keys(queryParams).forEach((key) => {
41
+ const queryValue = queryParams[key];
42
+ safeQueryParams[key] = Array.isArray(queryValue)
43
+ ? queryValue[0]
44
+ : queryValue;
45
+ });
46
+ const pathPrefix = path.split('/')[0] || '';
47
+ return { urlObj, path, pathPrefix, headers, safeQueryParams };
48
+ }
49
+ function mergeSetCookieHeaders(cookies, res) {
50
+ if (!cookies || cookies.length === 0) {
51
+ return;
52
+ }
53
+ const existing = res.getHeader('Set-Cookie');
54
+ const existingArray = existing
55
+ ? Array.isArray(existing)
56
+ ? existing
57
+ : [String(existing)]
58
+ : [];
59
+ res.setHeader('Set-Cookie', [...existingArray, ...cookies]);
60
+ }
61
+ function getOneSessionIdFromHeaders(req) {
62
+ const cookieHeader = req.headers.cookie ?? '';
63
+ for (const cookie of cookieHeader.split(';')) {
64
+ const trimmed = cookie.trim();
65
+ if (trimmed.startsWith('oneSessionId=')) {
66
+ return trimmed.slice('oneSessionId='.length);
67
+ }
68
+ }
69
+ return undefined;
70
+ }
71
+ function send401(res, detail) {
72
+ res.statusCode = 401;
73
+ res.setHeader('Content-Type', 'application/json');
74
+ const body = {
75
+ message: 'invalid.session',
76
+ };
77
+ if (detail !== undefined) {
78
+ body.detail = detail;
79
+ }
80
+ res.end(JSON.stringify(body));
81
+ }
82
+ //# sourceMappingURL=session-middleware.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-middleware.utils.js","sourceRoot":"","sources":["../../src/session/session-middleware.utils.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import { NestMiddleware } from '@nestjs/common';
2
2
  import { ConfigService } from '@nestjs/config';
3
- import { FastifyRequest } from 'fastify';
4
3
  import { IncomingMessage, ServerResponse } from 'http';
5
4
  import { PinoLogger } from 'nestjs-pino';
6
- import { SessionDto } from '@edifice.io/edifice-ent-client';
7
5
  import { SessionService } from './session.service';
8
6
  import { AccessLogger } from '../logger/access-logger.service';
9
7
  export declare class SessionMiddleware implements NestMiddleware {
@@ -13,6 +11,4 @@ export declare class SessionMiddleware implements NestMiddleware {
13
11
  entBaseUrl: string;
14
12
  constructor(configService: ConfigService, logger: PinoLogger, sessionService: SessionService, accessLogger: AccessLogger);
15
13
  use(req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void>;
16
- setSession(session: SessionDto, req: FastifyRequest): void;
17
- getOnSessionIdFromHeaders(req: IncomingMessage): string | undefined;
18
14
  }
@@ -18,6 +18,7 @@ const config_1 = require("@nestjs/config");
18
18
  const nestjs_pino_1 = require("nestjs-pino");
19
19
  const session_service_1 = require("./session.service");
20
20
  const access_logger_service_1 = require("../logger/access-logger.service");
21
+ const session_middleware_utils_1 = require("./session-middleware.utils");
21
22
  let SessionMiddleware = class SessionMiddleware {
22
23
  logger;
23
24
  sessionService;
@@ -32,25 +33,7 @@ let SessionMiddleware = class SessionMiddleware {
32
33
  async use(req, res, next) {
33
34
  const request = req;
34
35
  try {
35
- const queryParams = (request.query || {});
36
- const url = req.url || '';
37
- const urlObj = new URL(url, `http://${req.headers.host || 'localhost'}`);
38
- const path = urlObj.pathname;
39
- const headers = {};
40
- Object.keys(req.headers).forEach((key) => {
41
- const headerValue = req.headers[key];
42
- headers[key] = Array.isArray(headerValue)
43
- ? headerValue[0]
44
- : headerValue;
45
- });
46
- const safeQueryParams = {};
47
- Object.keys(queryParams).forEach((key) => {
48
- const queryValue = queryParams[key];
49
- safeQueryParams[key] = Array.isArray(queryValue)
50
- ? queryValue[0]
51
- : queryValue;
52
- });
53
- const pathPrefix = path.split('/')[0] || '';
36
+ const { path, pathPrefix, headers, safeQueryParams } = (0, session_middleware_utils_1.parseIncomingRequest)(req);
54
37
  const session = await this.sessionService.findSession({
55
38
  cookies: req.headers.cookie,
56
39
  headers,
@@ -59,43 +42,24 @@ let SessionMiddleware = class SessionMiddleware {
59
42
  path,
60
43
  });
61
44
  if (session?.session) {
62
- this.setSession(session.session, request);
45
+ (0, session_middleware_utils_1.setSession)(session.session, request);
46
+ if (session.cookies && session.cookies.length > 0) {
47
+ (0, session_middleware_utils_1.mergeSetCookieHeaders)(session.cookies, res);
48
+ }
63
49
  this.accessLogger.logRequest(request, session.session);
64
50
  next();
65
51
  }
66
52
  else {
67
53
  this.logger.debug('Session validation failed');
68
54
  this.accessLogger.logRequest(request, undefined, 401);
69
- res.statusCode = 401;
70
- res.setHeader('Content-Type', 'application/json');
71
- res.end(JSON.stringify({ message: 'invalid.session' }));
55
+ (0, session_middleware_utils_1.send401)(res);
72
56
  }
73
57
  }
74
58
  catch (error) {
75
59
  this.accessLogger.logRequest(request, undefined, 401);
76
60
  this.logger.error({ error: String(error) }, 'Session validation error');
77
- res.statusCode = 401;
78
- res.setHeader('Content-Type', 'application/json');
79
- res.end(JSON.stringify({
80
- message: 'invalid.session',
81
- detail: error.message,
82
- }));
83
- }
84
- }
85
- setSession(session, req) {
86
- req.entSession = session;
87
- }
88
- getOnSessionIdFromHeaders(req) {
89
- const cookies = req.headers.cookie || '';
90
- if (cookies) {
91
- const parts = cookies.split(';');
92
- for (const cookie of parts) {
93
- const trimmed = cookie.trim();
94
- const cookieValue = trimmed.slice(trimmed.indexOf('=') + 1);
95
- if (trimmed.startsWith('oneSessionId')) {
96
- return cookieValue;
97
- }
98
- }
61
+ const detail = error instanceof Error ? error.message : String(error);
62
+ (0, session_middleware_utils_1.send401)(res, detail);
99
63
  }
100
64
  }
101
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"session.middleware.js","sourceRoot":"","sources":["../../src/session/session.middleware.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.middleware.js","sourceRoot":"","sources":["../../src/session/session.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4D;AAC5D,2CAA+C;AAG/C,6CAA2D;AAE3D,uDAAmD;AACnD,2EAA+D;AAC/D,yEAKoC;AAG7B,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAMT;IACA;IACA;IAPnB,UAAU,CAAS;IAEnB,YACE,aAA4B,EAEX,MAAkB,EAClB,cAA8B,EAC9B,YAA0B;QAF1B,WAAM,GAAN,MAAM,CAAY;QAClB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;QAE3C,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC,GAAG,CACjC,aAAa,EACb,uBAAuB,CACxB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAgB;QACnE,MAAM,OAAO,GAAG,GAAgC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,GAClD,IAAA,+CAAoB,EAAC,GAAG,CAAC,CAAC;YAE5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;gBACpD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO;gBACP,MAAM,EAAE,eAAe;gBACvB,UAAU;gBACV,IAAI;aACL,CAAC,CAAC;YAEH,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;gBACrB,IAAA,qCAAU,EAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAGrC,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClD,IAAA,gDAAqB,EAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAC9C,CAAC;gBAED,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,EAAE,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC/C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;gBACtD,IAAA,kCAAO,EAAC,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,IAAA,kCAAO,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;CACF,CAAA;AApDY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,8BAAgB,EAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;qCAD1B,sBAAa;QAEH,wBAAU;QACF,gCAAc;QAChB,oCAAY;GARlC,iBAAiB,CAoD7B"}
@@ -12,14 +12,15 @@ const config_1 = require("@nestjs/config");
12
12
  const nats_1 = require("../nats");
13
13
  const session_service_1 = require("./session.service");
14
14
  const logger_module_1 = require("../logger/logger.module");
15
+ const query_param_token_middleware_1 = require("./query-param-token.middleware");
15
16
  let SessionModule = class SessionModule {
16
17
  };
17
18
  exports.SessionModule = SessionModule;
18
19
  exports.SessionModule = SessionModule = __decorate([
19
20
  (0, common_1.Module)({
20
21
  imports: [nats_1.NatsModule, config_1.ConfigModule, logger_module_1.LoggerModule],
21
- providers: [session_service_1.SessionService],
22
- exports: [session_service_1.SessionService],
22
+ providers: [session_service_1.SessionService, query_param_token_middleware_1.QueryParamTokenMiddleware],
23
+ exports: [session_service_1.SessionService, query_param_token_middleware_1.QueryParamTokenMiddleware],
23
24
  })
24
25
  ], SessionModule);
25
26
  //# sourceMappingURL=session.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.module.js","sourceRoot":"","sources":["../../src/session/session.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,kCAAqC;AACrC,uDAAmD;AACnD,2DAAuD;AAOhD,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IALzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,iBAAU,EAAE,qBAAY,EAAE,4BAAY,CAAC;QACjD,SAAS,EAAE,CAAC,gCAAc,CAAC;QAC3B,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAAG"}
1
+ {"version":3,"file":"session.module.js","sourceRoot":"","sources":["../../src/session/session.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,kCAAqC;AACrC,uDAAmD;AACnD,2DAAuD;AACvD,iFAA2E;AAOpE,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IALzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,iBAAU,EAAE,qBAAY,EAAE,4BAAY,CAAC;QACjD,SAAS,EAAE,CAAC,gCAAc,EAAE,wDAAyB,CAAC;QACtD,OAAO,EAAE,CAAC,gCAAc,EAAE,wDAAyB,CAAC;KACrD,CAAC;GACW,aAAa,CAAG"}