@edifice.io/edifice-nestjs-core 1.0.2 → 1.0.3-develop.20260513125613

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 (94) hide show
  1. package/README.md +6 -6
  2. package/dist/appregistry/appregistry.service.js +2 -2
  3. package/dist/appregistry/appregistry.service.js.map +1 -1
  4. package/dist/config/configuration.d.ts +17 -0
  5. package/dist/config/configuration.js +27 -0
  6. package/dist/config/configuration.js.map +1 -1
  7. package/dist/core.module.js +18 -13
  8. package/dist/core.module.js.map +1 -1
  9. package/dist/database/migration.service.js +3 -3
  10. package/dist/database/migration.service.js.map +1 -1
  11. package/dist/frontend.controller.js +6 -6
  12. package/dist/frontend.controller.js.map +1 -1
  13. package/dist/health/health.controller.js +2 -2
  14. package/dist/health/health.controller.js.map +1 -1
  15. package/dist/i18n/i18n-bootstrap.service.d.ts +13 -0
  16. package/dist/i18n/i18n-bootstrap.service.js +54 -0
  17. package/dist/i18n/i18n-bootstrap.service.js.map +1 -0
  18. package/dist/i18n/i18n-lifecycle.controller.d.ts +17 -0
  19. package/dist/i18n/i18n-lifecycle.controller.js +55 -0
  20. package/dist/i18n/i18n-lifecycle.controller.js.map +1 -0
  21. package/dist/i18n/i18n.module.js +4 -1
  22. package/dist/i18n/i18n.module.js.map +1 -1
  23. package/dist/i18n/i18n.service.d.ts +1 -0
  24. package/dist/i18n/i18n.service.js +8 -0
  25. package/dist/i18n/i18n.service.js.map +1 -1
  26. package/dist/i18n/index.d.ts +2 -3
  27. package/dist/i18n/index.js +2 -2
  28. package/dist/i18n/index.js.map +1 -1
  29. package/dist/logger/request-logger.service.js +3 -2
  30. package/dist/logger/request-logger.service.js.map +1 -1
  31. package/dist/permission/admc.guard.d.ts +0 -3
  32. package/dist/permission/admc.guard.js +1 -18
  33. package/dist/permission/admc.guard.js.map +1 -1
  34. package/dist/permission/basicauth.guard.d.ts +12 -0
  35. package/dist/permission/basicauth.guard.js +54 -0
  36. package/dist/permission/basicauth.guard.js.map +1 -0
  37. package/dist/permission/decorators.d.ts +10 -0
  38. package/dist/permission/decorators.js +20 -0
  39. package/dist/permission/decorators.js.map +1 -0
  40. package/dist/permission/global.guard.d.ts +16 -0
  41. package/dist/permission/global.guard.js +68 -0
  42. package/dist/permission/global.guard.js.map +1 -0
  43. package/dist/permission/index.d.ts +4 -3
  44. package/dist/permission/index.js +4 -3
  45. package/dist/permission/index.js.map +1 -1
  46. package/dist/permission/permission.guard.d.ts +1 -1
  47. package/dist/permission/permission.guard.js +2 -18
  48. package/dist/permission/permission.guard.js.map +1 -1
  49. package/dist/permission/require-login.guard.d.ts +8 -0
  50. package/dist/permission/require-login.guard.js +49 -0
  51. package/dist/permission/require-login.guard.js.map +1 -0
  52. package/dist/redirect/redirect-lifecycle.controller.d.ts +15 -0
  53. package/dist/redirect/redirect-lifecycle.controller.js +48 -0
  54. package/dist/redirect/redirect-lifecycle.controller.js.map +1 -0
  55. package/dist/redirect/redirect.module.d.ts +2 -0
  56. package/dist/redirect/redirect.module.js +25 -0
  57. package/dist/redirect/redirect.module.js.map +1 -0
  58. package/dist/redirect/redirect.service.d.ts +28 -0
  59. package/dist/redirect/redirect.service.js +154 -0
  60. package/dist/redirect/redirect.service.js.map +1 -0
  61. package/dist/session/frontend-session.middleware.d.ts +10 -0
  62. package/dist/session/frontend-session.middleware.js +40 -0
  63. package/dist/session/frontend-session.middleware.js.map +1 -0
  64. package/dist/session/session.middleware.d.ts +8 -4
  65. package/dist/session/session.middleware.js +24 -6
  66. package/dist/session/session.middleware.js.map +1 -1
  67. package/dist/session/session.module.js +13 -2
  68. package/dist/session/session.module.js.map +1 -1
  69. package/dist/timeline/index.d.ts +2 -3
  70. package/dist/timeline/index.js +2 -2
  71. package/dist/timeline/index.js.map +1 -1
  72. package/dist/timeline/timeline-i18n-bootstrap.service.d.ts +13 -0
  73. package/dist/timeline/timeline-i18n-bootstrap.service.js +54 -0
  74. package/dist/timeline/timeline-i18n-bootstrap.service.js.map +1 -0
  75. package/dist/timeline/timeline-lifecycle.controller.d.ts +17 -0
  76. package/dist/timeline/timeline-lifecycle.controller.js +55 -0
  77. package/dist/timeline/timeline-lifecycle.controller.js.map +1 -0
  78. package/dist/timeline/timeline.module.js +4 -1
  79. package/dist/timeline/timeline.module.js.map +1 -1
  80. package/dist/timeline/timeline.service.d.ts +11 -0
  81. package/dist/timeline/timeline.service.js +98 -13
  82. package/dist/timeline/timeline.service.js.map +1 -1
  83. package/dist/timeline/timeline.types.d.ts +8 -0
  84. package/dist/tsconfig.tsbuildinfo +1 -1
  85. package/package.json +8 -8
  86. package/dist/permission/admc.decorator.d.ts +0 -2
  87. package/dist/permission/admc.decorator.js +0 -11
  88. package/dist/permission/admc.decorator.js.map +0 -1
  89. package/dist/permission/permission.decorator.d.ts +0 -2
  90. package/dist/permission/permission.decorator.js +0 -8
  91. package/dist/permission/permission.decorator.js.map +0 -1
  92. package/dist/permission/public.decorator.d.ts +0 -2
  93. package/dist/permission/public.decorator.js +0 -8
  94. package/dist/permission/public.decorator.js.map +0 -1
@@ -0,0 +1,154 @@
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 RedirectService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.RedirectService = void 0;
14
+ const config_1 = require("@nestjs/config");
15
+ const common_1 = require("@nestjs/common");
16
+ const edifice_ent_client_1 = require("@edifice.io/edifice-ent-client");
17
+ let RedirectService = RedirectService_1 = class RedirectService {
18
+ natsClient;
19
+ configService;
20
+ logger = new common_1.Logger(RedirectService_1.name);
21
+ defaults = {
22
+ loginUri: '/auth/login',
23
+ callbackParam: 'callback',
24
+ };
25
+ configCache = null;
26
+ appPrefix;
27
+ constructor(natsClient, configService) {
28
+ this.natsClient = natsClient;
29
+ this.configService = configService;
30
+ const appName = this.configService.get('app.name');
31
+ const appNameLowerCase = appName?.toLowerCase();
32
+ this.appPrefix =
33
+ this.configService.get('app.prefix') ?? appNameLowerCase ?? '';
34
+ }
35
+ async onModuleInit() {
36
+ await this.refreshConfig();
37
+ }
38
+ async refreshConfig() {
39
+ try {
40
+ const config = await this.natsClient.getRedirectConfig({});
41
+ if (config) {
42
+ this.configCache = config;
43
+ this.logger.debug({ config }, 'Redirect config refreshed from broker');
44
+ }
45
+ }
46
+ catch (error) {
47
+ this.logger.warn({ error: String(error) }, 'Failed to fetch redirect config from broker, using defaults');
48
+ this.configCache = {
49
+ loginUri: this.defaults.loginUri,
50
+ callbackParam: this.defaults.callbackParam,
51
+ authLocations: undefined,
52
+ allowedHosts: undefined,
53
+ };
54
+ }
55
+ }
56
+ buildRedirectUrl(request) {
57
+ const host = this.getHost(request);
58
+ const scheme = this.getScheme(request);
59
+ const fullPath = this.getFullPath(request);
60
+ const currentUrl = `${scheme}://${host}${fullPath}`;
61
+ const encodedCallback = encodeURIComponent(currentUrl);
62
+ const { loginUri, callbackParam } = this.getConfigForHost(host);
63
+ let location;
64
+ if (loginUri.startsWith('http')) {
65
+ location = loginUri;
66
+ }
67
+ else {
68
+ location = `${scheme}://${host}${loginUri}`;
69
+ }
70
+ location += `${location.includes('?') ? '&' : '?'}${callbackParam}=${encodedCallback}`;
71
+ this.logger.debug({
72
+ host,
73
+ scheme,
74
+ currentUrl,
75
+ loginUri,
76
+ callbackParam,
77
+ location,
78
+ headers: request.headers,
79
+ config: this.configCache,
80
+ }, 'Built redirect URL');
81
+ return {
82
+ location,
83
+ statusCode: 302,
84
+ };
85
+ }
86
+ getConfigForHost(host) {
87
+ if (!this.configCache) {
88
+ return this.defaults;
89
+ }
90
+ const loginUri = this.configCache.loginUri ?? this.defaults.loginUri;
91
+ const callbackParam = this.configCache.callbackParam ?? this.defaults.callbackParam;
92
+ if (this.configCache.authLocations) {
93
+ const locationConfig = this.configCache.authLocations.find((loc) => loc.host === host);
94
+ if (locationConfig) {
95
+ return {
96
+ loginUri: locationConfig.loginUri ?? loginUri,
97
+ callbackParam: locationConfig.callbackParam ?? callbackParam,
98
+ };
99
+ }
100
+ }
101
+ return { loginUri, callbackParam };
102
+ }
103
+ getFullPath(request) {
104
+ return `${this.appPrefix}${request.url}`;
105
+ }
106
+ getHost(request) {
107
+ const forwardedHost = request.headers['x-forwarded-host'];
108
+ if (forwardedHost) {
109
+ const hostValue = Array.isArray(forwardedHost)
110
+ ? forwardedHost[0]
111
+ : forwardedHost;
112
+ if (hostValue?.trim?.()) {
113
+ return this.checkIfAllowedHost(hostValue);
114
+ }
115
+ }
116
+ const hostHeader = request.headers['host'];
117
+ if (hostHeader) {
118
+ const host = Array.isArray(hostHeader) ? hostHeader[0] : hostHeader;
119
+ return this.checkIfAllowedHost(host);
120
+ }
121
+ return this.checkIfAllowedHost(request.host);
122
+ }
123
+ getScheme(request) {
124
+ const forwardedProto = request.headers['x-forwarded-proto'];
125
+ if (forwardedProto) {
126
+ const protoValue = Array.isArray(forwardedProto)
127
+ ? forwardedProto[0]
128
+ : forwardedProto;
129
+ if (protoValue?.trim?.()) {
130
+ return protoValue;
131
+ }
132
+ }
133
+ if (request.protocol && request.protocol.trim()) {
134
+ return request.protocol;
135
+ }
136
+ return 'http';
137
+ }
138
+ checkIfAllowedHost(host) {
139
+ if (this.configCache?.allowedHosts?.length) {
140
+ if (this.configCache.allowedHosts.includes(host)) {
141
+ return host;
142
+ }
143
+ return this.configCache.allowedHosts[0];
144
+ }
145
+ return host;
146
+ }
147
+ };
148
+ exports.RedirectService = RedirectService;
149
+ exports.RedirectService = RedirectService = RedirectService_1 = __decorate([
150
+ (0, common_1.Injectable)(),
151
+ __metadata("design:paramtypes", [edifice_ent_client_1.EntNatsServiceClient,
152
+ config_1.ConfigService])
153
+ ], RedirectService);
154
+ //# sourceMappingURL=redirect.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.service.js","sourceRoot":"","sources":["../../src/redirect/redirect.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { NestMiddleware } from '@nestjs/common';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import { QueryParamTokenMiddleware } from './query-param-token.middleware';
4
+ import { OptionalSessionMiddleware } from './session.middleware';
5
+ export declare class FrontendSessionMiddleware implements NestMiddleware {
6
+ private readonly queryParamTokenMiddleware;
7
+ private readonly optionalSessionMiddleware;
8
+ constructor(queryParamTokenMiddleware: QueryParamTokenMiddleware, optionalSessionMiddleware: OptionalSessionMiddleware);
9
+ use(req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void>;
10
+ }
@@ -0,0 +1,40 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.FrontendSessionMiddleware = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const session_middleware_utils_1 = require("./session-middleware.utils");
15
+ const query_param_token_middleware_1 = require("./query-param-token.middleware");
16
+ const session_middleware_1 = require("./session.middleware");
17
+ let FrontendSessionMiddleware = class FrontendSessionMiddleware {
18
+ queryParamTokenMiddleware;
19
+ optionalSessionMiddleware;
20
+ constructor(queryParamTokenMiddleware, optionalSessionMiddleware) {
21
+ this.queryParamTokenMiddleware = queryParamTokenMiddleware;
22
+ this.optionalSessionMiddleware = optionalSessionMiddleware;
23
+ }
24
+ async use(req, res, next) {
25
+ const token = (0, session_middleware_utils_1.extractQueryParamToken)(req.url);
26
+ if (token) {
27
+ await this.queryParamTokenMiddleware.use(req, res, next);
28
+ }
29
+ else {
30
+ await this.optionalSessionMiddleware.use(req, res, next);
31
+ }
32
+ }
33
+ };
34
+ exports.FrontendSessionMiddleware = FrontendSessionMiddleware;
35
+ exports.FrontendSessionMiddleware = FrontendSessionMiddleware = __decorate([
36
+ (0, common_1.Injectable)(),
37
+ __metadata("design:paramtypes", [query_param_token_middleware_1.QueryParamTokenMiddleware,
38
+ session_middleware_1.OptionalSessionMiddleware])
39
+ ], FrontendSessionMiddleware);
40
+ //# sourceMappingURL=frontend-session.middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend-session.middleware.js","sourceRoot":"","sources":["../../src/session/frontend-session.middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4D;AAE5D,yEAAoE;AACpE,iFAA2E;AAC3E,6DAAiE;AAG1D,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IAEjB;IACA;IAFnB,YACmB,yBAAoD,EACpD,yBAAoD;QADpD,8BAAyB,GAAzB,yBAAyB,CAA2B;QACpD,8BAAyB,GAAzB,yBAAyB,CAA2B;IACpE,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,GAAoB,EAAE,GAAmB,EAAE,IAAgB;QACnE,MAAM,KAAK,GAAG,IAAA,iDAAsB,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF,CAAA;AAfY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,mBAAU,GAAE;qCAGmC,wDAAyB;QACzB,8CAAyB;GAH5D,yBAAyB,CAerC"}
@@ -5,10 +5,14 @@ import { PinoLogger } from 'nestjs-pino';
5
5
  import { SessionService } from './session.service';
6
6
  import { AccessLogger } from '../logger/access-logger.service';
7
7
  export declare class SessionMiddleware implements NestMiddleware {
8
- private readonly logger;
9
- private readonly sessionService;
10
- private readonly accessLogger;
11
- entBaseUrl: string;
8
+ protected readonly logger: PinoLogger;
9
+ protected readonly sessionService: SessionService;
10
+ protected readonly accessLogger: AccessLogger;
11
+ private readonly entBaseUrl;
12
+ protected readonly strictMode: boolean;
12
13
  constructor(configService: ConfigService, logger: PinoLogger, sessionService: SessionService, accessLogger: AccessLogger);
13
14
  use(req: IncomingMessage, res: ServerResponse, next: () => void): Promise<void>;
14
15
  }
16
+ export declare class OptionalSessionMiddleware extends SessionMiddleware {
17
+ protected readonly strictMode: boolean;
18
+ }
@@ -12,7 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.SessionMiddleware = void 0;
15
+ exports.OptionalSessionMiddleware = exports.SessionMiddleware = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
17
  const config_1 = require("@nestjs/config");
18
18
  const nestjs_pino_1 = require("nestjs-pino");
@@ -24,6 +24,7 @@ let SessionMiddleware = class SessionMiddleware {
24
24
  sessionService;
25
25
  accessLogger;
26
26
  entBaseUrl;
27
+ strictMode = true;
27
28
  constructor(configService, logger, sessionService, accessLogger) {
28
29
  this.logger = logger;
29
30
  this.sessionService = sessionService;
@@ -51,15 +52,25 @@ let SessionMiddleware = class SessionMiddleware {
51
52
  }
52
53
  else {
53
54
  this.logger.debug('Session validation failed');
54
- this.accessLogger.logRequest(request, undefined, 401);
55
- (0, session_middleware_utils_1.send401)(res);
55
+ if (this.strictMode) {
56
+ this.accessLogger.logRequest(request, undefined, 401);
57
+ (0, session_middleware_utils_1.send401)(res);
58
+ }
59
+ else {
60
+ next();
61
+ }
56
62
  }
57
63
  }
58
64
  catch (error) {
59
- this.accessLogger.logRequest(request, undefined, 401);
60
65
  this.logger.error({ error: String(error) }, 'Session validation error');
61
- const detail = error instanceof Error ? error.message : String(error);
62
- (0, session_middleware_utils_1.send401)(res, detail);
66
+ if (this.strictMode) {
67
+ this.accessLogger.logRequest(request, undefined, 401);
68
+ const detail = error instanceof Error ? error.message : String(error);
69
+ (0, session_middleware_utils_1.send401)(res, detail);
70
+ }
71
+ else {
72
+ next();
73
+ }
63
74
  }
64
75
  }
65
76
  };
@@ -72,4 +83,11 @@ exports.SessionMiddleware = SessionMiddleware = __decorate([
72
83
  session_service_1.SessionService,
73
84
  access_logger_service_1.AccessLogger])
74
85
  ], SessionMiddleware);
86
+ let OptionalSessionMiddleware = class OptionalSessionMiddleware extends SessionMiddleware {
87
+ strictMode = false;
88
+ };
89
+ exports.OptionalSessionMiddleware = OptionalSessionMiddleware;
90
+ exports.OptionalSessionMiddleware = OptionalSessionMiddleware = __decorate([
91
+ (0, common_1.Injectable)()
92
+ ], OptionalSessionMiddleware);
75
93
  //# sourceMappingURL=session.middleware.js.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"session.middleware.js","sourceRoot":"","sources":["../../src/session/session.middleware.ts"],"names":[],"mappings":"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"}
@@ -13,14 +13,25 @@ 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
15
  const query_param_token_middleware_1 = require("./query-param-token.middleware");
16
+ const session_middleware_1 = require("./session.middleware");
16
17
  let SessionModule = class SessionModule {
17
18
  };
18
19
  exports.SessionModule = SessionModule;
19
20
  exports.SessionModule = SessionModule = __decorate([
20
21
  (0, common_1.Module)({
21
22
  imports: [nats_1.NatsModule, config_1.ConfigModule, logger_module_1.LoggerModule],
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
+ providers: [
24
+ session_service_1.SessionService,
25
+ session_middleware_1.SessionMiddleware,
26
+ query_param_token_middleware_1.QueryParamTokenMiddleware,
27
+ session_middleware_1.OptionalSessionMiddleware,
28
+ ],
29
+ exports: [
30
+ session_service_1.SessionService,
31
+ session_middleware_1.SessionMiddleware,
32
+ query_param_token_middleware_1.QueryParamTokenMiddleware,
33
+ session_middleware_1.OptionalSessionMiddleware,
34
+ ],
24
35
  })
25
36
  ], SessionModule);
26
37
  //# 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;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"}
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;AAC3E,6DAG8B;AAiBvB,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IAfzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,iBAAU,EAAE,qBAAY,EAAE,4BAAY,CAAC;QACjD,SAAS,EAAE;YACT,gCAAc;YACd,sCAAiB;YACjB,wDAAyB;YACzB,8CAAyB;SAC1B;QACD,OAAO,EAAE;YACP,gCAAc;YACd,sCAAiB;YACjB,wDAAyB;YACzB,8CAAyB;SAC1B;KACF,CAAC;GACW,aAAa,CAAG"}
@@ -1,6 +1,5 @@
1
1
  export * from './timeline.module';
2
2
  export * from './timeline.service';
3
3
  export * from './timeline.types';
4
- export * from './timeline.module';
5
- export * from './timeline.service';
6
- export type * from './timeline.types';
4
+ export * from './timeline-lifecycle.controller';
5
+ export * from './timeline-i18n-bootstrap.service';
@@ -17,6 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./timeline.module"), exports);
18
18
  __exportStar(require("./timeline.service"), exports);
19
19
  __exportStar(require("./timeline.types"), exports);
20
- __exportStar(require("./timeline.module"), exports);
21
- __exportStar(require("./timeline.service"), exports);
20
+ __exportStar(require("./timeline-lifecycle.controller"), exports);
21
+ __exportStar(require("./timeline-i18n-bootstrap.service"), exports);
22
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/timeline/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,qDAAmC;AACnC,mDAAiC;AACjC,oDAAkC;AAClC,qDAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/timeline/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,qDAAmC;AACnC,mDAAiC;AACjC,kEAAgD;AAChD,oEAAkD"}
@@ -0,0 +1,13 @@
1
+ import { OnApplicationBootstrap } from '@nestjs/common';
2
+ import { ConfigService } from '@nestjs/config';
3
+ import { TimelineService } from './timeline.service';
4
+ export declare class TimelineI18nBootstrapService implements OnApplicationBootstrap {
5
+ private readonly timelineService;
6
+ private readonly configService;
7
+ private readonly logger;
8
+ private readonly maxAttempts;
9
+ private readonly delayMs;
10
+ constructor(timelineService: TimelineService, configService: ConfigService);
11
+ onApplicationBootstrap(): Promise<void>;
12
+ private tryRegister;
13
+ }
@@ -0,0 +1,54 @@
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 TimelineI18nBootstrapService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.TimelineI18nBootstrapService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const config_1 = require("@nestjs/config");
16
+ const timeline_service_1 = require("./timeline.service");
17
+ let TimelineI18nBootstrapService = TimelineI18nBootstrapService_1 = class TimelineI18nBootstrapService {
18
+ timelineService;
19
+ configService;
20
+ logger = new common_1.Logger(TimelineI18nBootstrapService_1.name);
21
+ maxAttempts;
22
+ delayMs;
23
+ constructor(timelineService, configService) {
24
+ this.timelineService = timelineService;
25
+ this.configService = configService;
26
+ this.maxAttempts =
27
+ this.configService.get('timeline.bootstrap.maxAttempts') ?? 3;
28
+ this.delayMs =
29
+ this.configService.get('timeline.bootstrap.delayMs') ?? 5000;
30
+ }
31
+ async onApplicationBootstrap() {
32
+ void this.tryRegister(1);
33
+ }
34
+ async tryRegister(attempt) {
35
+ try {
36
+ await this.timelineService.registerTimelineI18n();
37
+ }
38
+ catch (err) {
39
+ if (attempt >= this.maxAttempts) {
40
+ this.logger.warn({ err: String(err), attempt, maxAttempts: this.maxAttempts }, 'Timeline i18n initial register exhausted retries');
41
+ return;
42
+ }
43
+ this.logger.warn({ err: String(err), attempt, delayMs: this.delayMs }, 'Timeline i18n initial register failed, retrying');
44
+ setTimeout(() => void this.tryRegister(attempt + 1), this.delayMs);
45
+ }
46
+ }
47
+ };
48
+ exports.TimelineI18nBootstrapService = TimelineI18nBootstrapService;
49
+ exports.TimelineI18nBootstrapService = TimelineI18nBootstrapService = TimelineI18nBootstrapService_1 = __decorate([
50
+ (0, common_1.Injectable)(),
51
+ __metadata("design:paramtypes", [timeline_service_1.TimelineService,
52
+ config_1.ConfigService])
53
+ ], TimelineI18nBootstrapService);
54
+ //# sourceMappingURL=timeline-i18n-bootstrap.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-i18n-bootstrap.service.js","sourceRoot":"","sources":["../../src/timeline/timeline-i18n-bootstrap.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4E;AAC5E,2CAA+C;AAC/C,yDAAqD;AAG9C,IAAM,4BAA4B,oCAAlC,MAAM,4BAA4B;IAMpB;IACA;IANF,MAAM,GAAG,IAAI,eAAM,CAAC,8BAA4B,CAAC,IAAI,CAAC,CAAC;IACvD,WAAW,CAAS;IACpB,OAAO,CAAS;IAEjC,YACmB,eAAgC,EAChC,aAA4B;QAD5B,oBAAe,GAAf,eAAe,CAAiB;QAChC,kBAAa,GAAb,aAAa,CAAe;QAE7C,IAAI,CAAC,WAAW;YACd,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,gCAAgC,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO;YACV,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,4BAA4B,CAAC,IAAI,IAAI,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,OAAe;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAC5D,kDAAkD,CACnD,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EACpD,iDAAiD,CAClD,CAAC;YACF,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;CACF,CAAA;AArCY,oEAA4B;uCAA5B,4BAA4B;IADxC,IAAA,mBAAU,GAAE;qCAOyB,kCAAe;QACjB,sBAAa;GAPpC,4BAA4B,CAqCxC"}
@@ -0,0 +1,17 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { NatsContext } from '@nestjs/microservices';
3
+ import { TimelineService } from './timeline.service';
4
+ interface ApplicationStatusPayload {
5
+ application?: string;
6
+ version?: string;
7
+ }
8
+ export declare class TimelineLifecycleController implements OnModuleInit {
9
+ private readonly timelineService;
10
+ private readonly logger;
11
+ private debounceTimer;
12
+ private static readonly DEBOUNCE_MS;
13
+ constructor(timelineService: TimelineService);
14
+ onModuleInit(): void;
15
+ onTimelineStarted(data: ApplicationStatusPayload, ctx: NatsContext): void;
16
+ }
17
+ export {};
@@ -0,0 +1,55 @@
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
+ var TimelineLifecycleController_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.TimelineLifecycleController = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const microservices_1 = require("@nestjs/microservices");
19
+ const timeline_service_1 = require("./timeline.service");
20
+ let TimelineLifecycleController = class TimelineLifecycleController {
21
+ static { TimelineLifecycleController_1 = this; }
22
+ timelineService;
23
+ logger = new common_1.Logger(TimelineLifecycleController_1.name);
24
+ debounceTimer = null;
25
+ static DEBOUNCE_MS = 5000;
26
+ constructor(timelineService) {
27
+ this.timelineService = timelineService;
28
+ this.logger.log('TimelineLifecycleController instantiated');
29
+ }
30
+ onModuleInit() {
31
+ this.logger.log('TimelineLifecycleController module init');
32
+ }
33
+ onTimelineStarted(data, ctx) {
34
+ this.logger.log({ subject: ctx.getSubject(), data }, 'Received application.timeline.start event');
35
+ if (this.debounceTimer)
36
+ clearTimeout(this.debounceTimer);
37
+ this.debounceTimer = setTimeout(() => {
38
+ void this.timelineService.replayLastRegistrations();
39
+ }, TimelineLifecycleController_1.DEBOUNCE_MS);
40
+ }
41
+ };
42
+ exports.TimelineLifecycleController = TimelineLifecycleController;
43
+ __decorate([
44
+ (0, microservices_1.EventPattern)('application.timeline.start'),
45
+ __param(0, (0, microservices_1.Payload)()),
46
+ __param(1, (0, microservices_1.Ctx)()),
47
+ __metadata("design:type", Function),
48
+ __metadata("design:paramtypes", [Object, microservices_1.NatsContext]),
49
+ __metadata("design:returntype", void 0)
50
+ ], TimelineLifecycleController.prototype, "onTimelineStarted", null);
51
+ exports.TimelineLifecycleController = TimelineLifecycleController = TimelineLifecycleController_1 = __decorate([
52
+ (0, common_1.Controller)(),
53
+ __metadata("design:paramtypes", [timeline_service_1.TimelineService])
54
+ ], TimelineLifecycleController);
55
+ //# sourceMappingURL=timeline-lifecycle.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-lifecycle.controller.js","sourceRoot":"","sources":["../../src/timeline/timeline-lifecycle.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,yDAAgF;AAChF,yDAAqD;AAQ9C,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;;IAKT;IAJZ,MAAM,GAAG,IAAI,eAAM,CAAC,6BAA2B,CAAC,IAAI,CAAC,CAAC;IAC/D,aAAa,GAA0B,IAAI,CAAC;IAC5C,MAAM,CAAU,WAAW,GAAG,IAAI,CAAC;IAE3C,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;QAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,YAAY;QACV,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAGD,iBAAiB,CACJ,IAA8B,EAClC,GAAgB;QAEvB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,EACnC,2CAA2C,CAC5C,CAAC;QACF,IAAI,IAAI,CAAC,aAAa;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,KAAK,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,CAAC;QACtD,CAAC,EAAE,6BAA2B,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;;AA1BU,kEAA2B;AActC;IADC,IAAA,4BAAY,EAAC,4BAA4B,CAAC;IAExC,WAAA,IAAA,uBAAO,GAAE,CAAA;IACT,WAAA,IAAA,mBAAG,GAAE,CAAA;;6CAAM,2BAAW;;oEAUxB;sCA1BU,2BAA2B;IADvC,IAAA,mBAAU,GAAE;qCAMmC,kCAAe;GALlD,2BAA2B,CA2BvC"}
@@ -11,13 +11,16 @@ const common_1 = require("@nestjs/common");
11
11
  const config_1 = require("@nestjs/config");
12
12
  const nats_1 = require("../nats");
13
13
  const timeline_service_1 = require("./timeline.service");
14
+ const timeline_lifecycle_controller_1 = require("./timeline-lifecycle.controller");
15
+ const timeline_i18n_bootstrap_service_1 = require("./timeline-i18n-bootstrap.service");
14
16
  let TimelineModule = class TimelineModule {
15
17
  };
16
18
  exports.TimelineModule = TimelineModule;
17
19
  exports.TimelineModule = TimelineModule = __decorate([
18
20
  (0, common_1.Module)({
19
21
  imports: [nats_1.NatsModule, config_1.ConfigModule],
20
- providers: [timeline_service_1.TimelineService],
22
+ controllers: [timeline_lifecycle_controller_1.TimelineLifecycleController],
23
+ providers: [timeline_service_1.TimelineService, timeline_i18n_bootstrap_service_1.TimelineI18nBootstrapService],
21
24
  exports: [timeline_service_1.TimelineService],
22
25
  })
23
26
  ], TimelineModule);
@@ -1 +1 @@
1
- {"version":3,"file":"timeline.module.js","sourceRoot":"","sources":["../../src/timeline/timeline.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,kCAAqC;AACrC,yDAAqD;AAO9C,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAL1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,iBAAU,EAAE,qBAAY,CAAC;QACnC,SAAS,EAAE,CAAC,kCAAe,CAAC;QAC5B,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"}
1
+ {"version":3,"file":"timeline.module.js","sourceRoot":"","sources":["../../src/timeline/timeline.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,kCAAqC;AACrC,yDAAqD;AACrD,mFAA8E;AAC9E,uFAAiF;AAQ1E,IAAM,cAAc,GAApB,MAAM,cAAc;CAAG,CAAA;AAAjB,wCAAc;yBAAd,cAAc;IAN1B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,iBAAU,EAAE,qBAAY,CAAC;QACnC,WAAW,EAAE,CAAC,2DAA2B,CAAC;QAC1C,SAAS,EAAE,CAAC,kCAAe,EAAE,8DAA4B,CAAC;QAC1D,OAAO,EAAE,CAAC,kCAAe,CAAC;KAC3B,CAAC;GACW,cAAc,CAAG"}
@@ -1,11 +1,22 @@
1
1
  import { ConfigService } from '@nestjs/config';
2
2
  import { EntNatsServiceClient, RegisterNotificationRequestDTO, RegisterNotificationResponseDTO, SendNotificationRequestDTO, SendNotificationResponseDTO, SessionDto } from '@edifice.io/edifice-ent-client';
3
+ import type { RegisterTimelineI18nOptions, SenderDto } from './timeline.types';
3
4
  export declare class TimelineService {
4
5
  private readonly configService;
5
6
  private readonly entClient;
6
7
  private readonly logger;
7
8
  private readonly appName;
9
+ private lastNotifications;
10
+ private lastI18nOptions;
8
11
  constructor(configService: ConfigService, entClient: EntNatsServiceClient);
9
12
  registerNotifications(notifications: RegisterNotificationRequestDTO[]): Promise<RegisterNotificationResponseDTO>;
10
13
  sendNotification(session: SessionDto, options: SendNotificationRequestDTO): Promise<SendNotificationResponseDTO>;
14
+ sendNotificationWithSender(sender: SenderDto, options: SendNotificationRequestDTO): Promise<SendNotificationResponseDTO>;
15
+ private doSendNotification;
16
+ registerTimelineI18n(options?: RegisterTimelineI18nOptions): Promise<{
17
+ application: string;
18
+ languagesCount: number;
19
+ keysCount: number;
20
+ }>;
21
+ replayLastRegistrations(): Promise<void>;
11
22
  }