@open-rlb/nestjs-amqp 2.0.9 → 2.0.10

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 (91) hide show
  1. package/README.md +35 -35
  2. package/modules/acl/{authz-match.js → auth-match.js} +1 -1
  3. package/modules/acl/auth-match.js.map +1 -0
  4. package/modules/acl/const.d.ts +3 -0
  5. package/modules/acl/const.js +3 -0
  6. package/modules/acl/const.js.map +1 -1
  7. package/modules/acl/index.d.ts +1 -1
  8. package/modules/acl/index.js +1 -1
  9. package/modules/acl/index.js.map +1 -1
  10. package/modules/acl/repository/acl-action.repository.d.ts +1 -0
  11. package/modules/acl/repository/acl-action.repository.js.map +1 -1
  12. package/modules/acl/repository/acl-grant.repository.d.ts +1 -0
  13. package/modules/acl/repository/acl-grant.repository.js.map +1 -1
  14. package/modules/acl/repository/acl-role.repository.d.ts +1 -0
  15. package/modules/acl/repository/acl-role.repository.js.map +1 -1
  16. package/modules/acl/services/acl-management.service.d.ts +3 -0
  17. package/modules/acl/services/acl-management.service.js +38 -2
  18. package/modules/acl/services/acl-management.service.js.map +1 -1
  19. package/modules/acl/services/acl.service.d.ts +1 -1
  20. package/modules/acl/services/acl.service.js +2 -2
  21. package/modules/acl/services/acl.service.js.map +1 -1
  22. package/modules/gateway-admin/config/gateway-admin.config.d.ts +2 -0
  23. package/modules/gateway-admin/const.d.ts +7 -0
  24. package/modules/gateway-admin/const.js +7 -0
  25. package/modules/gateway-admin/const.js.map +1 -1
  26. package/modules/gateway-admin/gateway-admin.module.js +4 -1
  27. package/modules/gateway-admin/gateway-admin.module.js.map +1 -1
  28. package/modules/gateway-admin/health.d.ts +14 -0
  29. package/modules/gateway-admin/health.js +5 -0
  30. package/modules/gateway-admin/health.js.map +1 -0
  31. package/modules/gateway-admin/index.d.ts +5 -0
  32. package/modules/gateway-admin/index.js +5 -0
  33. package/modules/gateway-admin/index.js.map +1 -1
  34. package/modules/gateway-admin/models.d.ts +61 -0
  35. package/modules/gateway-admin/repository/auth-provider.repository.d.ts +1 -0
  36. package/modules/gateway-admin/repository/auth-provider.repository.js.map +1 -1
  37. package/modules/gateway-admin/repository/http-metric.repository.d.ts +6 -2
  38. package/modules/gateway-admin/repository/http-metric.repository.js.map +1 -1
  39. package/modules/gateway-admin/repository/http-path.repository.d.ts +3 -0
  40. package/modules/gateway-admin/repository/http-path.repository.js.map +1 -1
  41. package/modules/gateway-admin/repository/route-sync-log.repository.d.ts +4 -1
  42. package/modules/gateway-admin/repository/route-sync-log.repository.js.map +1 -1
  43. package/modules/gateway-admin/services/gateway-auth.service.d.ts +1 -0
  44. package/modules/gateway-admin/services/gateway-auth.service.js +12 -0
  45. package/modules/gateway-admin/services/gateway-auth.service.js.map +1 -1
  46. package/modules/gateway-admin/services/gateway-health.service.d.ts +10 -0
  47. package/modules/gateway-admin/services/gateway-health.service.js +64 -0
  48. package/modules/gateway-admin/services/gateway-health.service.js.map +1 -0
  49. package/modules/gateway-admin/services/gateway-metrics-rollup.service.d.ts +13 -0
  50. package/modules/gateway-admin/services/gateway-metrics-rollup.service.js +63 -0
  51. package/modules/gateway-admin/services/gateway-metrics-rollup.service.js.map +1 -0
  52. package/modules/gateway-admin/services/gateway-metrics.service.d.ts +5 -4
  53. package/modules/gateway-admin/services/gateway-metrics.service.js +56 -17
  54. package/modules/gateway-admin/services/gateway-metrics.service.js.map +1 -1
  55. package/modules/gateway-admin/services/gateway-path.service.d.ts +11 -4
  56. package/modules/gateway-admin/services/gateway-path.service.js +79 -11
  57. package/modules/gateway-admin/services/gateway-path.service.js.map +1 -1
  58. package/modules/gateway-admin/services/gateway-retention.service.d.ts +16 -0
  59. package/modules/gateway-admin/services/gateway-retention.service.js +71 -0
  60. package/modules/gateway-admin/services/gateway-retention.service.js.map +1 -0
  61. package/modules/gateway-admin/services/route-sync.service.js +12 -5
  62. package/modules/gateway-admin/services/route-sync.service.js.map +1 -1
  63. package/modules/gateway-admin/util/metrics.d.ts +10 -0
  64. package/modules/gateway-admin/util/metrics.js +170 -0
  65. package/modules/gateway-admin/util/metrics.js.map +1 -0
  66. package/modules/gateway-admin/util/route-diff.d.ts +7 -0
  67. package/modules/gateway-admin/util/route-diff.js +7 -2
  68. package/modules/gateway-admin/util/route-diff.js.map +1 -1
  69. package/modules/gateway-admin/util/route-manifest.d.ts +3 -0
  70. package/modules/gateway-admin/util/route-manifest.js +35 -0
  71. package/modules/gateway-admin/util/route-manifest.js.map +1 -1
  72. package/modules/proxy/services/acl.service.d.ts +1 -1
  73. package/modules/proxy/services/http-auth-handler.service.d.ts +1 -1
  74. package/modules/proxy/services/http-auth-handler.service.js.map +1 -1
  75. package/modules/proxy/services/http-handler.service.d.ts +1 -0
  76. package/modules/proxy/services/http-handler.service.js +24 -32
  77. package/modules/proxy/services/http-handler.service.js.map +1 -1
  78. package/modules/proxy/services/metrics-hook.d.ts +1 -0
  79. package/package.json +1 -1
  80. package/schematics/nest-add/files/acl/src/modules/database/repository/acl.repository.ts +3 -0
  81. package/schematics/nest-add/files/db-core/src/modules/database/repository/in-memory-collection.ts +29 -0
  82. package/schematics/nest-add/files/gateway-admin/src/modules/database/repository/gateway.repository.ts +48 -20
  83. package/schematics/nest-add/files/gateway-admin/src/modules/database/repository/route-sync.repository.ts +24 -1
  84. package/schematics/nest-add/files/skills/rlb-amqp-acl/SKILL.md +6 -1
  85. package/schematics/nest-add/files/skills/rlb-amqp-add-route/SKILL.md +1 -1
  86. package/schematics/nest-add/files/skills/rlb-amqp-gateway-admin/SKILL.md +48 -8
  87. package/schematics/nest-add/index.js +73 -0
  88. package/schematics/nest-add/index.js.map +1 -1
  89. package/schematics/nest-add/index.ts +73 -0
  90. package/modules/acl/authz-match.js.map +0 -1
  91. /package/modules/acl/{authz-match.d.ts → auth-match.d.ts} +0 -0
@@ -19,14 +19,16 @@ const common_2 = require("../../../common");
19
19
  const broker_1 = require("../../broker");
20
20
  const const_1 = require("../const");
21
21
  const http_path_repository_1 = require("../repository/http-path.repository");
22
+ const route_sync_log_repository_1 = require("../repository/route-sync-log.repository");
22
23
  const path_order_1 = require("../util/path-order");
23
24
  const route_manifest_1 = require("../util/route-manifest");
24
25
  let GatewayPathService = GatewayPathService_1 = class GatewayPathService {
25
- constructor(repo) {
26
+ constructor(repo, logs) {
26
27
  this.repo = repo;
28
+ this.logs = logs;
27
29
  this.logger = new common_1.Logger(GatewayPathService_1.name);
28
30
  }
29
- async create(model) {
31
+ async create(model, currentUser) {
30
32
  if (!model?.name)
31
33
  throw new common_2.BadRequestError('name is required');
32
34
  if (!model?.method)
@@ -37,17 +39,28 @@ let GatewayPathService = GatewayPathService_1 = class GatewayPathService {
37
39
  throw new common_2.BadRequestError('topic is required');
38
40
  const routeKey = (0, route_manifest_1.routeKeyOf)(model);
39
41
  await this.assertNoRouteConflict(routeKey);
40
- return this.repo.insert({ ...model, routeKey });
42
+ const created = await this.repo.insert({ ...model, routeKey, source: 'user', modified: false });
43
+ const actor = currentUser ?? 'unknown';
44
+ await this.journal({ service: created.owner ?? 'manual', actor, level: 'info', event: 'created', routeKey, method: created.method, path: created.path, topic: created.topic, action: created.action });
45
+ this.logger.log(`[gw-path] ${actor} created '${routeKey}'`);
46
+ return created;
41
47
  }
42
- async update(id, model) {
48
+ async update(id, model, currentUser) {
43
49
  if (!id)
44
50
  throw new common_2.BadRequestError('id is required');
51
+ const existing = await this.repo.findById(id);
45
52
  if (model?.method && model?.path) {
46
53
  const routeKey = (0, route_manifest_1.routeKeyOf)(model);
47
54
  await this.assertNoRouteConflict(routeKey, id);
48
55
  model = { ...model, routeKey };
49
56
  }
50
- return this.repo.updateById(id, model);
57
+ const changes = existing ? (0, route_manifest_1.diffRouteFields)(existing, { ...existing, ...model }) : [];
58
+ const updated = await this.repo.updateById(id, { ...model, modified: true });
59
+ const actor = currentUser ?? 'unknown';
60
+ const rendered = (0, route_manifest_1.renderChanges)(changes);
61
+ await this.journal({ service: updated?.owner ?? existing?.owner ?? 'manual', actor, level: 'info', event: 'updated', routeKey: updated?.routeKey ?? existing?.routeKey, method: updated?.method ?? existing?.method, path: updated?.path ?? existing?.path, changes, message: rendered });
62
+ this.logger.log(`[gw-path] ${actor} updated '${updated?.routeKey ?? existing?.routeKey}'${rendered ? ` → ${rendered}` : ''}`);
63
+ return updated;
51
64
  }
52
65
  async assertNoRouteConflict(routeKey, excludeId) {
53
66
  const clashes = await this.repo.findByRouteKey(routeKey);
@@ -56,8 +69,12 @@ let GatewayPathService = GatewayPathService_1 = class GatewayPathService {
56
69
  throw new common_2.ConflictError(`A route '${routeKey}' already exists (owner '${conflict.owner ?? 'manual'}', id ${conflict._id}).`);
57
70
  }
58
71
  }
59
- async remove(id) {
60
- return this.repo.removeById(id);
72
+ async remove(id, currentUser) {
73
+ const removed = await this.repo.removeById(id);
74
+ const actor = currentUser ?? 'unknown';
75
+ await this.journal({ service: removed?.owner ?? 'manual', actor, level: 'info', event: 'deleted', routeKey: removed?.routeKey, method: removed?.method, path: removed?.path });
76
+ this.logger.log(`[gw-path] ${actor} deleted '${removed?.routeKey ?? id}'`);
77
+ return removed;
61
78
  }
62
79
  async get(id) {
63
80
  return this.repo.findById(id);
@@ -65,32 +82,52 @@ let GatewayPathService = GatewayPathService_1 = class GatewayPathService {
65
82
  async list(page, limit) {
66
83
  return this.repo.filterPaginated({}, Number(page) || 1, Number(limit) || 10);
67
84
  }
85
+ async searchRoutes(q, page, limit) {
86
+ return this.repo.search(q, Number(page) || 1, Number(limit) || 10);
87
+ }
68
88
  async export() {
69
89
  const paths = await this.repo.listEnabled();
70
90
  return (0, path_order_1.orderPaths)(paths);
71
91
  }
92
+ async logList(limit) {
93
+ return this.logs.list(Number(limit) || 100);
94
+ }
95
+ async logSearch(actor, service, event, routeKey, from, to, page, limit) {
96
+ return this.logs.query({ actor, service, event, routeKey, from: from != null ? Number(from) : undefined, to: to != null ? Number(to) : undefined }, Number(page) || 1, Number(limit) || 20);
97
+ }
98
+ async journal(entry) {
99
+ try {
100
+ await this.logs.insert({ ts: Date.now(), ...entry });
101
+ }
102
+ catch (e) {
103
+ this.logger.warn(`[gw-path] journal write failed: ${e?.message}`);
104
+ }
105
+ }
72
106
  };
73
107
  exports.GatewayPathService = GatewayPathService;
74
108
  __decorate([
75
109
  (0, broker_1.BrokerAction)(const_1.GATEWAY_ADMIN_TOPIC, const_1.GW_ADMIN_ACTIONS.pathCreate, 'rpc'),
76
110
  __param(0, (0, broker_1.BrokerParam)('body-full')),
111
+ __param(1, (0, broker_1.BrokerParam)('header', 'X-GTW-AUTH-USERID')),
77
112
  __metadata("design:type", Function),
78
- __metadata("design:paramtypes", [Object]),
113
+ __metadata("design:paramtypes", [Object, String]),
79
114
  __metadata("design:returntype", Promise)
80
115
  ], GatewayPathService.prototype, "create", null);
81
116
  __decorate([
82
117
  (0, broker_1.BrokerAction)(const_1.GATEWAY_ADMIN_TOPIC, const_1.GW_ADMIN_ACTIONS.pathUpdate, 'rpc'),
83
118
  __param(0, (0, broker_1.BrokerParam)('body', 'id')),
84
119
  __param(1, (0, broker_1.BrokerParam)('body-full')),
120
+ __param(2, (0, broker_1.BrokerParam)('header', 'X-GTW-AUTH-USERID')),
85
121
  __metadata("design:type", Function),
86
- __metadata("design:paramtypes", [String, Object]),
122
+ __metadata("design:paramtypes", [String, Object, String]),
87
123
  __metadata("design:returntype", Promise)
88
124
  ], GatewayPathService.prototype, "update", null);
89
125
  __decorate([
90
126
  (0, broker_1.BrokerAction)(const_1.GATEWAY_ADMIN_TOPIC, const_1.GW_ADMIN_ACTIONS.pathDelete, 'rpc'),
91
127
  __param(0, (0, broker_1.BrokerParam)('body', 'id')),
128
+ __param(1, (0, broker_1.BrokerParam)('header', 'X-GTW-AUTH-USERID')),
92
129
  __metadata("design:type", Function),
93
- __metadata("design:paramtypes", [String]),
130
+ __metadata("design:paramtypes", [String, String]),
94
131
  __metadata("design:returntype", Promise)
95
132
  ], GatewayPathService.prototype, "remove", null);
96
133
  __decorate([
@@ -108,14 +145,45 @@ __decorate([
108
145
  __metadata("design:paramtypes", [Number, Number]),
109
146
  __metadata("design:returntype", Promise)
110
147
  ], GatewayPathService.prototype, "list", null);
148
+ __decorate([
149
+ (0, broker_1.BrokerAction)(const_1.GATEWAY_ADMIN_TOPIC, const_1.GW_ADMIN_ACTIONS.pathSearch, 'rpc'),
150
+ __param(0, (0, broker_1.BrokerParam)('body', 'q')),
151
+ __param(1, (0, broker_1.BrokerParam)('body', 'page')),
152
+ __param(2, (0, broker_1.BrokerParam)('body', 'limit')),
153
+ __metadata("design:type", Function),
154
+ __metadata("design:paramtypes", [String, Number, Number]),
155
+ __metadata("design:returntype", Promise)
156
+ ], GatewayPathService.prototype, "searchRoutes", null);
111
157
  __decorate([
112
158
  (0, broker_1.BrokerAction)(const_1.GATEWAY_ADMIN_TOPIC, const_1.GW_ADMIN_ACTIONS.pathExport, 'rpc'),
113
159
  __metadata("design:type", Function),
114
160
  __metadata("design:paramtypes", []),
115
161
  __metadata("design:returntype", Promise)
116
162
  ], GatewayPathService.prototype, "export", null);
163
+ __decorate([
164
+ (0, broker_1.BrokerAction)(const_1.GATEWAY_ADMIN_TOPIC, const_1.GW_ADMIN_ACTIONS.routeLogList, 'rpc'),
165
+ __param(0, (0, broker_1.BrokerParam)('body', 'limit')),
166
+ __metadata("design:type", Function),
167
+ __metadata("design:paramtypes", [Number]),
168
+ __metadata("design:returntype", Promise)
169
+ ], GatewayPathService.prototype, "logList", null);
170
+ __decorate([
171
+ (0, broker_1.BrokerAction)(const_1.GATEWAY_ADMIN_TOPIC, const_1.GW_ADMIN_ACTIONS.routeLogSearch, 'rpc'),
172
+ __param(0, (0, broker_1.BrokerParam)('body', 'actor')),
173
+ __param(1, (0, broker_1.BrokerParam)('body', 'service')),
174
+ __param(2, (0, broker_1.BrokerParam)('body', 'event')),
175
+ __param(3, (0, broker_1.BrokerParam)('body', 'routeKey')),
176
+ __param(4, (0, broker_1.BrokerParam)('body', 'from')),
177
+ __param(5, (0, broker_1.BrokerParam)('body', 'to')),
178
+ __param(6, (0, broker_1.BrokerParam)('body', 'page')),
179
+ __param(7, (0, broker_1.BrokerParam)('body', 'limit')),
180
+ __metadata("design:type", Function),
181
+ __metadata("design:paramtypes", [String, String, String, String, Number, Number, Number, Number]),
182
+ __metadata("design:returntype", Promise)
183
+ ], GatewayPathService.prototype, "logSearch", null);
117
184
  exports.GatewayPathService = GatewayPathService = GatewayPathService_1 = __decorate([
118
185
  (0, common_1.Injectable)(),
119
- __metadata("design:paramtypes", [http_path_repository_1.HttpPathRepository])
186
+ __metadata("design:paramtypes", [http_path_repository_1.HttpPathRepository,
187
+ route_sync_log_repository_1.RouteSyncLogRepository])
120
188
  ], GatewayPathService);
121
189
  //# sourceMappingURL=gateway-path.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-path.service.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/gateway-admin/services/gateway-path.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-path.service.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/gateway-admin/services/gateway-path.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { OnApplicationBootstrap, OnModuleDestroy } from '@nestjs/common';
2
+ import { GatewayAdminModuleOptions } from '../config/gateway-admin.config';
3
+ import { HttpMetricRepository } from '../repository/http-metric.repository';
4
+ import { RouteSyncLogRepository } from '../repository/route-sync-log.repository';
5
+ export declare class GatewayRetentionService implements OnApplicationBootstrap, OnModuleDestroy {
6
+ private readonly logs;
7
+ private readonly metrics;
8
+ private readonly logger;
9
+ private readonly windowMs;
10
+ private readonly rollupWindowMs;
11
+ private timer?;
12
+ constructor(logs: RouteSyncLogRepository, metrics: HttpMetricRepository, options?: GatewayAdminModuleOptions);
13
+ onApplicationBootstrap(): void;
14
+ onModuleDestroy(): void;
15
+ private prune;
16
+ }
@@ -0,0 +1,71 @@
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 GatewayRetentionService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.GatewayRetentionService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const const_1 = require("../const");
19
+ const http_metric_repository_1 = require("../repository/http-metric.repository");
20
+ const route_sync_log_repository_1 = require("../repository/route-sync-log.repository");
21
+ const DAY_MS = 86_400_000;
22
+ const DEFAULT_RETENTION_DAYS = 90;
23
+ const DEFAULT_ROLLUP_RETENTION_DAYS = 365;
24
+ let GatewayRetentionService = GatewayRetentionService_1 = class GatewayRetentionService {
25
+ constructor(logs, metrics, options) {
26
+ this.logs = logs;
27
+ this.metrics = metrics;
28
+ this.logger = new common_1.Logger(GatewayRetentionService_1.name);
29
+ this.windowMs = (options?.retentionDays ?? DEFAULT_RETENTION_DAYS) * DAY_MS;
30
+ this.rollupWindowMs = (options?.rollupRetentionDays ?? DEFAULT_ROLLUP_RETENTION_DAYS) * DAY_MS;
31
+ }
32
+ onApplicationBootstrap() {
33
+ if (this.windowMs <= 0 && this.rollupWindowMs <= 0) {
34
+ this.logger.log('[retention] disabled');
35
+ return;
36
+ }
37
+ void this.prune();
38
+ this.timer = setInterval(() => void this.prune(), DAY_MS);
39
+ this.timer.unref?.();
40
+ }
41
+ onModuleDestroy() {
42
+ if (this.timer)
43
+ clearInterval(this.timer);
44
+ }
45
+ async prune() {
46
+ const now = Date.now();
47
+ try {
48
+ let prunedLogs = 0, prunedPoints = 0, prunedRollups = 0;
49
+ if (this.windowMs > 0) {
50
+ const cutoff = now - this.windowMs;
51
+ prunedLogs = await this.logs.prune(cutoff);
52
+ prunedPoints = await this.metrics.prunePoints(cutoff);
53
+ }
54
+ if (this.rollupWindowMs > 0)
55
+ prunedRollups = await this.metrics.pruneRollups(now - this.rollupWindowMs);
56
+ this.logger.log(`[retention] pruned ${prunedLogs} journal + ${prunedPoints} point(s) + ${prunedRollups} rollup(s)`);
57
+ }
58
+ catch (e) {
59
+ this.logger.warn(`[retention] prune failed: ${e?.message}`);
60
+ }
61
+ }
62
+ };
63
+ exports.GatewayRetentionService = GatewayRetentionService;
64
+ exports.GatewayRetentionService = GatewayRetentionService = GatewayRetentionService_1 = __decorate([
65
+ (0, common_1.Injectable)(),
66
+ __param(2, (0, common_1.Optional)()),
67
+ __param(2, (0, common_1.Inject)(const_1.RLB_GW_ADMIN_OPTIONS)),
68
+ __metadata("design:paramtypes", [route_sync_log_repository_1.RouteSyncLogRepository,
69
+ http_metric_repository_1.HttpMetricRepository, Object])
70
+ ], GatewayRetentionService);
71
+ //# sourceMappingURL=gateway-retention.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-retention.service.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/gateway-admin/services/gateway-retention.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA+G;AAE/G,oCAAgD;AAChD,iFAA4E;AAC5E,uFAAiF;AAEjF,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAQnC,IAAM,uBAAuB,+BAA7B,MAAM,uBAAuB;IAMlC,YACmB,IAA4B,EAC5B,OAA6B,EACJ,OAAmC;QAF5D,SAAI,GAAJ,IAAI,CAAwB;QAC5B,YAAO,GAAP,OAAO,CAAsB;QAP/B,WAAM,GAAG,IAAI,eAAM,CAAC,yBAAuB,CAAC,IAAI,CAAC,CAAC;QAUjE,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,EAAE,aAAa,IAAI,sBAAsB,CAAC,GAAG,MAAM,CAAC;QAC5E,IAAI,CAAC,cAAc,GAAG,CAAC,OAAO,EAAE,mBAAmB,IAAI,6BAA6B,CAAC,GAAG,MAAM,CAAC;IACjG,CAAC;IAED,sBAAsB;QACpB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,KAAK;YAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IAGO,KAAK,CAAC,KAAK;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACnC,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC3C,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC;gBAAE,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;YACxG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,UAAU,cAAc,YAAY,eAAe,aAAa,YAAY,CAAC,CAAC;QACtH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA8B,CAAW,EAAE,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;CACF,CAAA;AA7CY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,4BAAoB,CAAC,CAAA;qCAFlB,kDAAsB;QACnB,6CAAoB;GARrC,uBAAuB,CA6CnC"}
@@ -88,19 +88,26 @@ let RouteSyncService = RouteSyncService_1 = class RouteSyncService {
88
88
  await this.paths.updateById(u.existingId, u.model);
89
89
  else
90
90
  await this.paths.insert(u.model);
91
- await this.journal({ service, level: 'info', event: u.added ? 'added' : 'updated', routeKey: u.routeKey, method: u.model.method, path: u.model.path, topic: u.model.topic, action: u.model.action });
91
+ const rendered = u.changes?.length ? (0, route_manifest_1.renderChanges)(u.changes) : undefined;
92
+ await this.journal({ service, level: 'info', event: u.added ? 'added' : 'updated', routeKey: u.routeKey, method: u.model.method, path: u.model.path, topic: u.model.topic, action: u.model.action, changes: u.changes, message: rendered });
93
+ if (rendered)
94
+ this.logger.log(`[route-sync] ${service}: '${u.routeKey}' updated → ${rendered}`);
92
95
  }
93
96
  for (const d of diff.disables) {
94
97
  await this.paths.updateById(d.id, { enabled: false });
95
98
  await this.journal({ service, level: 'info', event: 'removed', routeKey: d.routeKey, method: d.method, path: d.path });
96
99
  }
100
+ for (const s of diff.skipped) {
101
+ this.logger.log(`[route-sync] ${service}: '${s.routeKey}' is user-modified → manifest update skipped (user version kept)`);
102
+ await this.journal({ service, level: 'info', event: 'skipped', routeKey: s.routeKey, method: s.method, path: s.path, message: 'route user-modified; manifest update skipped' });
103
+ }
97
104
  if (diff.changed) {
98
105
  await this.triggerReload();
99
- await this.journal({ service, level: 'info', event: 'reload', message: `${diff.upserts.length} upserted, ${diff.disables.length} removed, ${diff.collisions.length} collision(s)` });
100
- this.logger.log(`[route-sync] ${service}: ${diff.upserts.length} upserted, ${diff.disables.length} removed, ${diff.collisions.length} collision(s) → reload`);
106
+ await this.journal({ service, level: 'info', event: 'reload', message: `${diff.upserts.length} upserted, ${diff.disables.length} removed, ${diff.skipped.length} user-modified skipped, ${diff.collisions.length} collision(s)` });
107
+ this.logger.log(`[route-sync] ${service}: ${diff.upserts.length} upserted, ${diff.disables.length} removed, ${diff.skipped.length} user-modified skipped, ${diff.collisions.length} collision(s) → reload`);
101
108
  }
102
109
  else {
103
- this.logger.log(`[route-sync] ${service}: no route changes (${diff.collisions.length} collision(s))`);
110
+ this.logger.log(`[route-sync] ${service}: no route changes (${diff.skipped.length} user-modified skipped, ${diff.collisions.length} collision(s))`);
104
111
  }
105
112
  }
106
113
  catch (e) {
@@ -109,7 +116,7 @@ let RouteSyncService = RouteSyncService_1 = class RouteSyncService {
109
116
  }
110
117
  async journal(entry) {
111
118
  try {
112
- await this.logs.insert({ ts: Date.now(), ...entry });
119
+ await this.logs.insert({ ts: Date.now(), actor: 'system', ...entry });
113
120
  }
114
121
  catch (e) {
115
122
  this.logger.warn(`[route-sync] journal write failed: ${e?.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"route-sync.service.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/gateway-admin/services/route-sync.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-sync.service.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/gateway-admin/services/route-sync.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { HttpMetric, HttpMetricPoint, HttpMetricRollup, MetricSeriesBucket, MetricSeriesQuery, MetricStatusClass, MetricSummary } from '../models';
2
+ export declare function statusClass(status?: number): MetricStatusClass | undefined;
3
+ export declare function percentile(sortedAsc: number[], p: number): number | undefined;
4
+ export declare function buildSeries(points: HttpMetricPoint[], query: MetricSeriesQuery): MetricSeriesBucket[];
5
+ export declare function buildSummary(points: HttpMetricPoint[], topN?: number): MetricSummary;
6
+ export declare function aggregateRollups(points: HttpMetricPoint[], granularityMs: number): HttpMetricRollup[];
7
+ export declare function toPrometheus(counters: (HttpMetric & {
8
+ avgDurationMs: number;
9
+ errorRate?: number;
10
+ })[]): string;
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.statusClass = statusClass;
4
+ exports.percentile = percentile;
5
+ exports.buildSeries = buildSeries;
6
+ exports.buildSummary = buildSummary;
7
+ exports.aggregateRollups = aggregateRollups;
8
+ exports.toPrometheus = toPrometheus;
9
+ function statusClass(status) {
10
+ if (status == null)
11
+ return undefined;
12
+ if (status >= 500)
13
+ return '5xx';
14
+ if (status >= 400)
15
+ return '4xx';
16
+ if (status >= 300)
17
+ return '3xx';
18
+ if (status >= 200)
19
+ return '2xx';
20
+ return undefined;
21
+ }
22
+ function percentile(sortedAsc, p) {
23
+ if (!sortedAsc.length)
24
+ return undefined;
25
+ const rank = Math.ceil((p / 100) * sortedAsc.length);
26
+ const idx = Math.min(sortedAsc.length - 1, Math.max(0, rank - 1));
27
+ return sortedAsc[idx];
28
+ }
29
+ function emptyStatusClasses() {
30
+ return { '2xx': 0, '3xx': 0, '4xx': 0, '5xx': 0 };
31
+ }
32
+ function buildSeries(points, query) {
33
+ const width = query.bucketMs > 0 ? query.bucketMs : 60_000;
34
+ const buckets = new Map();
35
+ for (const p of points || []) {
36
+ const start = Math.floor(p.ts / width) * width;
37
+ let b = buckets.get(start);
38
+ if (!b) {
39
+ b = { durations: [], count: 0, errorCount: 0, total: 0, byStatus: emptyStatusClasses() };
40
+ buckets.set(start, b);
41
+ }
42
+ b.count++;
43
+ if ((p.status ?? 0) >= 400)
44
+ b.errorCount++;
45
+ const d = p.durationMs ?? 0;
46
+ b.total += d;
47
+ b.durations.push(d);
48
+ b.min = b.min == null ? d : Math.min(b.min, d);
49
+ b.max = b.max == null ? d : Math.max(b.max, d);
50
+ const sc = statusClass(p.status);
51
+ if (sc)
52
+ b.byStatus[sc]++;
53
+ }
54
+ return [...buckets.entries()].sort((a, b) => a[0] - b[0]).map(([bucketStart, b]) => {
55
+ const sorted = b.durations.sort((x, y) => x - y);
56
+ return {
57
+ bucketStart,
58
+ count: b.count,
59
+ errorCount: b.errorCount,
60
+ totalDurationMs: b.total,
61
+ avgDurationMs: b.count ? Math.round(b.total / b.count) : 0,
62
+ minDurationMs: b.min,
63
+ maxDurationMs: b.max,
64
+ p50: percentile(sorted, 50),
65
+ p95: percentile(sorted, 95),
66
+ p99: percentile(sorted, 99),
67
+ byStatus: b.byStatus,
68
+ };
69
+ });
70
+ }
71
+ function buildSummary(points, topN = 10) {
72
+ const byStatus = emptyStatusClasses();
73
+ const durations = [];
74
+ let total = 0;
75
+ let errors = 0;
76
+ const per = new Map();
77
+ for (const p of points || []) {
78
+ const d = p.durationMs ?? 0;
79
+ durations.push(d);
80
+ total += d;
81
+ const isError = (p.status ?? 0) >= 400;
82
+ if (isError)
83
+ errors++;
84
+ const sc = statusClass(p.status);
85
+ if (sc)
86
+ byStatus[sc]++;
87
+ const key = `${p.method} ${p.route}`;
88
+ let e = per.get(key);
89
+ if (!e) {
90
+ e = { method: p.method, route: p.route, name: p.name, count: 0, errorCount: 0, total: 0, durations: [] };
91
+ per.set(key, e);
92
+ }
93
+ e.count++;
94
+ e.total += d;
95
+ e.durations.push(d);
96
+ if (isError)
97
+ e.errorCount++;
98
+ }
99
+ const n = points?.length || 0;
100
+ const sortedAll = durations.sort((a, b) => a - b);
101
+ const entries = [...per.values()].map((e) => {
102
+ const sorted = e.durations.sort((a, b) => a - b);
103
+ return {
104
+ method: e.method, route: e.route, name: e.name,
105
+ count: e.count, errorCount: e.errorCount,
106
+ errorRate: e.count ? e.errorCount / e.count : 0,
107
+ avgDurationMs: e.count ? Math.round(e.total / e.count) : 0,
108
+ p95: percentile(sorted, 95),
109
+ };
110
+ });
111
+ const top = (cmp) => [...entries].sort(cmp).slice(0, topN);
112
+ return {
113
+ totalRequests: n,
114
+ totalErrors: errors,
115
+ errorRate: n ? errors / n : 0,
116
+ avgDurationMs: n ? Math.round(total / n) : 0,
117
+ p50: percentile(sortedAll, 50),
118
+ p95: percentile(sortedAll, 95),
119
+ p99: percentile(sortedAll, 99),
120
+ byStatus,
121
+ topByTraffic: top((a, b) => b.count - a.count),
122
+ topByErrors: top((a, b) => (b.errorCount - a.errorCount) || (b.errorRate - a.errorRate)),
123
+ topByLatency: top((a, b) => (b.p95 ?? 0) - (a.p95 ?? 0)),
124
+ };
125
+ }
126
+ function aggregateRollups(points, granularityMs) {
127
+ const g = granularityMs > 0 ? granularityMs : 3_600_000;
128
+ const rollups = new Map();
129
+ for (const p of points || []) {
130
+ const bucketStart = Math.floor(p.ts / g) * g;
131
+ const key = `${bucketStart}|${p.method}|${p.route}`;
132
+ let r = rollups.get(key);
133
+ if (!r) {
134
+ r = { bucketStart, granularityMs: g, method: p.method, route: p.route, name: p.name, count: 0, errorCount: 0, totalDurationMs: 0, byStatus: emptyStatusClasses() };
135
+ rollups.set(key, r);
136
+ }
137
+ r.count++;
138
+ if ((p.status ?? 0) >= 400)
139
+ r.errorCount++;
140
+ const d = p.durationMs ?? 0;
141
+ r.totalDurationMs += d;
142
+ r.minDurationMs = r.minDurationMs == null ? d : Math.min(r.minDurationMs, d);
143
+ r.maxDurationMs = r.maxDurationMs == null ? d : Math.max(r.maxDurationMs, d);
144
+ const sc = statusClass(p.status);
145
+ if (sc && r.byStatus)
146
+ r.byStatus[sc]++;
147
+ }
148
+ return [...rollups.values()];
149
+ }
150
+ function escapeLabel(value) {
151
+ return String(value ?? '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, ' ');
152
+ }
153
+ function toPrometheus(counters) {
154
+ const labels = (m) => `method="${escapeLabel(m.method)}",route="${escapeLabel(m.route)}"${m.name ? `,name="${escapeLabel(m.name)}"` : ''}`;
155
+ const lines = [];
156
+ lines.push('# HELP gateway_requests_total Total HTTP requests handled by the gateway.');
157
+ lines.push('# TYPE gateway_requests_total counter');
158
+ for (const m of counters || [])
159
+ lines.push(`gateway_requests_total{${labels(m)}} ${m.count}`);
160
+ lines.push('# HELP gateway_request_errors_total Error responses (status >= 400).');
161
+ lines.push('# TYPE gateway_request_errors_total counter');
162
+ for (const m of counters || [])
163
+ lines.push(`gateway_request_errors_total{${labels(m)}} ${m.errorCount}`);
164
+ lines.push('# HELP gateway_request_duration_ms_sum Total request duration in milliseconds.');
165
+ lines.push('# TYPE gateway_request_duration_ms_sum counter');
166
+ for (const m of counters || [])
167
+ lines.push(`gateway_request_duration_ms_sum{${labels(m)}} ${m.totalDurationMs}`);
168
+ return lines.join('\n') + '\n';
169
+ }
170
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/gateway-admin/util/metrics.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { PathDefinition } from '../../proxy/config/path-definition.config';
2
+ import { RouteFieldChange } from '../models';
2
3
  import { StoredHttpPath } from '../repository/http-path.repository';
3
4
  export interface RouteDiff {
4
5
  upserts: {
@@ -6,6 +7,7 @@ export interface RouteDiff {
6
7
  existingId?: string;
7
8
  added: boolean;
8
9
  model: StoredHttpPath;
10
+ changes?: RouteFieldChange[];
9
11
  }[];
10
12
  disables: {
11
13
  id: string;
@@ -19,6 +21,11 @@ export interface RouteDiff {
19
21
  path?: string;
20
22
  conflictWith: string;
21
23
  }[];
24
+ skipped: {
25
+ routeKey: string;
26
+ method?: string;
27
+ path?: string;
28
+ }[];
22
29
  invalid: {
23
30
  route: any;
24
31
  }[];
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.diffRoutes = diffRoutes;
4
4
  const route_manifest_1 = require("./route-manifest");
5
5
  function diffRoutes(service, incoming, existing, reserved) {
6
- const diff = { upserts: [], disables: [], collisions: [], invalid: [], changed: false };
6
+ const diff = { upserts: [], disables: [], collisions: [], skipped: [], invalid: [], changed: false };
7
7
  const existingByKey = new Map();
8
8
  for (const e of existing || [])
9
9
  if (e.routeKey)
@@ -24,13 +24,18 @@ function diffRoutes(service, incoming, existing, reserved) {
24
24
  continue;
25
25
  }
26
26
  const ex = existingByKey.get(key);
27
+ if (ex && ex.modified === true) {
28
+ diff.skipped.push({ routeKey: key, method: r.method, path: r.path });
29
+ continue;
30
+ }
27
31
  if (ex && ex.enabled !== false && (0, route_manifest_1.routeContent)(ex) === (0, route_manifest_1.routeContent)(r))
28
32
  continue;
29
33
  diff.upserts.push({
30
34
  routeKey: key,
31
35
  existingId: ex?._id,
32
36
  added: !ex,
33
- model: { ...r, owner: service, routeKey: key, enabled: true },
37
+ model: { ...r, owner: service, routeKey: key, enabled: true, source: 'microservice', modified: false },
38
+ changes: ex ? (0, route_manifest_1.diffRouteFields)(ex, r) : undefined,
34
39
  });
35
40
  }
36
41
  for (const [key, ex] of existingByKey) {
@@ -1 +1 @@
1
- {"version":3,"file":"route-diff.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/gateway-admin/util/route-diff.ts"],"names":[],"mappings":";;AAwBA,gCAyCC;AA/DD,qDAA0E;AAsB1E,SAAgB,UAAU,CACxB,OAAe,EACf,QAA0B,EAC1B,QAA0B,EAC1B,QAA6B;IAE7B,MAAM,IAAI,GAAc,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACnG,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE;QAAE,IAAI,CAAC,CAAC,QAAQ;YAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAA,6BAAY,EAAC,CAAC,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAA,2BAAU,EAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7F,SAAS;QACX,CAAC;QAED,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK,IAAI,IAAA,6BAAY,EAAC,EAAE,CAAC,KAAK,IAAA,6BAAY,EAAC,CAAC,CAAC;YAAE,SAAS;QACjF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,QAAQ,EAAE,GAAG;YACb,UAAU,EAAE,EAAE,EAAE,GAAG;YACnB,KAAK,EAAE,CAAC,EAAE;YACV,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"route-diff.js","sourceRoot":"","sources":["../../../../libs/rlb-nestjs-amqp/src/modules/gateway-admin/util/route-diff.ts"],"names":[],"mappings":";;AA6BA,gCA6CC;AAvED,qDAA2F;AA0B3F,SAAgB,UAAU,CACxB,OAAe,EACf,QAA0B,EAC1B,QAA0B,EAC1B,QAA6B;IAE7B,MAAM,IAAI,GAAc,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAChH,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;IACxD,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE;QAAE,IAAI,CAAC,CAAC,QAAQ;YAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAA,6BAAY,EAAC,CAAC,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAA,2BAAU,EAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7F,SAAS;QACX,CAAC;QAED,MAAM,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAGlC,IAAI,EAAE,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACnH,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK,IAAI,IAAA,6BAAY,EAAC,EAAE,CAAC,KAAK,IAAA,6BAAY,EAAC,CAAC,CAAC;YAAE,SAAS;QACjF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,QAAQ,EAAE,GAAG;YACb,UAAU,EAAE,EAAE,EAAE,GAAG;YACnB,KAAK,EAAE,CAAC,EAAE;YACV,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE;YACtG,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAA,gCAAe,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SACjD,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC"}