@stefaninigo/security-client 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/generated/authentication/authentication.d.ts +22 -0
  2. package/dist/generated/authentication/authentication.js +55 -0
  3. package/dist/generated/authentication/authentication.js.map +1 -0
  4. package/dist/generated/bootstrap/bootstrap.d.ts +12 -0
  5. package/dist/generated/bootstrap/bootstrap.js +24 -0
  6. package/dist/generated/bootstrap/bootstrap.js.map +1 -0
  7. package/dist/generated/client-assignments/client-assignments.d.ts +24 -0
  8. package/dist/generated/client-assignments/client-assignments.js +50 -0
  9. package/dist/generated/client-assignments/client-assignments.js.map +1 -0
  10. package/dist/generated/credentials/credentials.d.ts +18 -0
  11. package/dist/generated/credentials/credentials.js +39 -0
  12. package/dist/generated/credentials/credentials.js.map +1 -0
  13. package/dist/generated/health/health.d.ts +11 -0
  14. package/dist/generated/health/health.js +21 -0
  15. package/dist/generated/health/health.js.map +1 -0
  16. package/dist/generated/location-tracking-deprecated/location-tracking-deprecated.d.ts +20 -0
  17. package/dist/generated/location-tracking-deprecated/location-tracking-deprecated.js +42 -0
  18. package/dist/generated/location-tracking-deprecated/location-tracking-deprecated.js.map +1 -0
  19. package/dist/generated/provider-client-assignments/provider-client-assignments.d.ts +20 -0
  20. package/dist/generated/provider-client-assignments/provider-client-assignments.js +42 -0
  21. package/dist/generated/provider-client-assignments/provider-client-assignments.js.map +1 -0
  22. package/dist/generated/providers/providers.d.ts +20 -0
  23. package/dist/generated/providers/providers.js +42 -0
  24. package/dist/generated/providers/providers.js.map +1 -0
  25. package/dist/generated/stefaniniGoServiceAPI.schemas.d.ts +963 -0
  26. package/dist/generated/stefaniniGoServiceAPI.schemas.js +169 -0
  27. package/dist/generated/stefaniniGoServiceAPI.schemas.js.map +1 -0
  28. package/dist/generated/users/users.d.ts +36 -0
  29. package/dist/generated/users/users.js +90 -0
  30. package/dist/generated/users/users.js.map +1 -0
  31. package/dist/guards/{security-auth.guard.d.ts → cognito-auth.guard.d.ts} +1 -3
  32. package/dist/guards/{security-auth.guard.js → cognito-auth.guard.js} +15 -29
  33. package/dist/guards/cognito-auth.guard.js.map +1 -0
  34. package/dist/guards/role.guard.js +0 -8
  35. package/dist/guards/role.guard.js.map +1 -1
  36. package/dist/index.d.ts +1 -3
  37. package/dist/index.js +3 -5
  38. package/dist/index.js.map +1 -1
  39. package/dist/module/security-client.module.d.ts +0 -5
  40. package/dist/module/security-client.module.js +3 -29
  41. package/dist/module/security-client.module.js.map +1 -1
  42. package/dist/services/security-client.service.d.ts +0 -15
  43. package/dist/services/security-client.service.js +7 -95
  44. package/dist/services/security-client.service.js.map +1 -1
  45. package/dist/types/user.types.d.ts +0 -5
  46. package/dist/types/user.types.js +0 -1
  47. package/dist/types/user.types.js.map +1 -1
  48. package/dist/utils/mutator.d.ts +3 -0
  49. package/dist/utils/mutator.js +22 -0
  50. package/dist/utils/mutator.js.map +1 -0
  51. package/package.json +3 -4
  52. package/dist/decorators/public.decorator.d.ts +0 -2
  53. package/dist/decorators/public.decorator.js +0 -8
  54. package/dist/decorators/public.decorator.js.map +0 -1
  55. package/dist/guards/provider.guard.d.ts +0 -7
  56. package/dist/guards/provider.guard.js +0 -43
  57. package/dist/guards/provider.guard.js.map +0 -1
  58. package/dist/guards/security-auth.guard.js.map +0 -1
@@ -19,13 +19,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.SecurityClientService = exports.SECURITY_CLIENT_CONFIG = void 0;
20
20
  const common_1 = require("@nestjs/common");
21
21
  const axios_1 = __importDefault(require("axios"));
22
- const crypto_1 = require("crypto");
23
22
  exports.SECURITY_CLIENT_CONFIG = 'SECURITY_CLIENT_CONFIG';
24
23
  let SecurityClientService = SecurityClientService_1 = class SecurityClientService {
25
24
  constructor(config) {
26
25
  this.config = config;
27
26
  this.logger = new common_1.Logger(SecurityClientService_1.name);
28
- this.cache = new Map();
29
27
  this.httpClient = axios_1.default.create({
30
28
  baseURL: config.securityServiceUrl,
31
29
  timeout: config.timeout || 5000,
@@ -33,88 +31,18 @@ let SecurityClientService = SecurityClientService_1 = class SecurityClientServic
33
31
  'Content-Type': 'application/json',
34
32
  },
35
33
  });
36
- this.cacheTtlMs = config.cacheTtlMs ?? 60000;
37
- this.maxCacheSize = config.maxCacheSize ?? 1000;
38
- this.retryAttempts = config.retryAttempts ?? 2;
39
- this.retryDelayMs = config.retryDelayMs ?? 1000;
40
- }
41
- hashToken(token) {
42
- return (0, crypto_1.createHash)('sha256').update(token).digest('hex').substring(0, 16);
43
- }
44
- getCached(key) {
45
- const entry = this.cache.get(key);
46
- if (!entry)
47
- return null;
48
- if (Date.now() > entry.expiresAt) {
49
- this.cache.delete(key);
50
- return null;
51
- }
52
- return entry.user;
53
- }
54
- setCache(key, user) {
55
- if (this.cache.size >= this.maxCacheSize) {
56
- this.evictExpired();
57
- if (this.cache.size >= this.maxCacheSize) {
58
- const firstKey = this.cache.keys().next().value;
59
- if (firstKey)
60
- this.cache.delete(firstKey);
61
- }
62
- }
63
- this.cache.set(key, {
64
- user,
65
- expiresAt: Date.now() + this.cacheTtlMs,
66
- });
67
- }
68
- evictExpired() {
69
- const now = Date.now();
70
- for (const [key, entry] of this.cache) {
71
- if (now > entry.expiresAt) {
72
- this.cache.delete(key);
73
- }
74
- }
75
- }
76
- isAuthError(status) {
77
- return status === 401 || status === 403;
78
- }
79
- async withRetry(fn) {
80
- let lastError;
81
- for (let attempt = 0; attempt <= this.retryAttempts; attempt++) {
82
- try {
83
- return await fn();
84
- }
85
- catch (error) {
86
- lastError = error;
87
- if (error.response && this.isAuthError(error.response.status)) {
88
- throw error;
89
- }
90
- if (attempt < this.retryAttempts) {
91
- const delay = Math.pow(2, attempt) * this.retryDelayMs;
92
- this.logger.warn(`Retry attempt ${attempt + 1}/${this.retryAttempts} after ${delay}ms`);
93
- await new Promise(resolve => setTimeout(resolve, delay));
94
- }
95
- }
96
- }
97
- throw lastError;
98
34
  }
99
35
  async validateTokenAndGetUser(token) {
100
- const cacheKey = this.hashToken(token);
101
- const cached = this.getCached(cacheKey);
102
- if (cached) {
103
- return cached;
104
- }
105
36
  try {
106
- const response = await this.withRetry(() => this.httpClient.get('/api/v1/security/users/me', {
37
+ const response = await this.httpClient.get('/api/v1/security/users/me', {
107
38
  headers: {
108
39
  Authorization: `Bearer ${token}`,
109
40
  },
110
- }));
41
+ });
111
42
  if (!response.data || typeof response.data !== 'object') {
112
43
  throw new Error('Invalid response format from security service');
113
44
  }
114
- const rawData = response.data;
115
- const userData = (rawData?.success !== undefined && rawData?.message && typeof rawData.message === 'object')
116
- ? rawData.message
117
- : rawData;
45
+ const userData = response.data;
118
46
  if (!userData.id || !userData.email || !userData.role || !userData.status) {
119
47
  this.logger.warn('Security service returned incomplete user data', {
120
48
  hasId: !!userData.id,
@@ -124,9 +52,7 @@ let SecurityClientService = SecurityClientService_1 = class SecurityClientServic
124
52
  });
125
53
  throw new Error('Incomplete user data from security service');
126
54
  }
127
- const user = userData;
128
- this.setCache(cacheKey, user);
129
- return user;
55
+ return userData;
130
56
  }
131
57
  catch (error) {
132
58
  this.logger.error(`Error validating token: ${error.message}`);
@@ -140,18 +66,15 @@ let SecurityClientService = SecurityClientService_1 = class SecurityClientServic
140
66
  }
141
67
  async getUserById(userId, token) {
142
68
  try {
143
- const response = await this.withRetry(() => this.httpClient.get(`/api/v1/security/users/${userId}`, {
69
+ const response = await this.httpClient.get(`/api/v1/security/users/${userId}`, {
144
70
  headers: {
145
71
  Authorization: `Bearer ${token}`,
146
72
  },
147
- }));
73
+ });
148
74
  if (!response.data || typeof response.data !== 'object') {
149
75
  throw new Error('Invalid response format from security service');
150
76
  }
151
- const rawData = response.data;
152
- const userData = (rawData?.success !== undefined && rawData?.message && typeof rawData.message === 'object')
153
- ? rawData.message
154
- : rawData;
77
+ const userData = response.data;
155
78
  if (!userData.id || !userData.email || !userData.role || !userData.status) {
156
79
  this.logger.warn('Security service returned incomplete user data', {
157
80
  hasId: !!userData.id,
@@ -173,17 +96,6 @@ let SecurityClientService = SecurityClientService_1 = class SecurityClientServic
173
96
  throw new Error(`Failed to connect to security service: ${error.message}`);
174
97
  }
175
98
  }
176
- async healthCheck() {
177
- const start = Date.now();
178
- try {
179
- await this.httpClient.get('/api/v1/security/health', { timeout: 3000 });
180
- return { healthy: true, responseTimeMs: Date.now() - start };
181
- }
182
- catch (error) {
183
- this.logger.error(`Health check failed: ${error.message}`);
184
- return { healthy: false, responseTimeMs: Date.now() - start };
185
- }
186
- }
187
99
  };
188
100
  exports.SecurityClientService = SecurityClientService;
189
101
  exports.SecurityClientService = SecurityClientService = SecurityClientService_1 = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"security-client.service.js","sourceRoot":"","sources":["../../src/services/security-client.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security-client.service.js","sourceRoot":"","sources":["../../src/services/security-client.service.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,6 @@ export declare enum UserRole {
2
2
  ROOT = "root",
3
3
  ADMIN = "admin",
4
4
  DISPATCHER = "dispatcher",
5
- CLIENT = "client",
6
5
  TECHNICIAN = "technician"
7
6
  }
8
7
  export declare enum UserStatus {
@@ -21,8 +20,4 @@ export interface AuthUser {
21
20
  export interface SecurityClientConfig {
22
21
  securityServiceUrl: string;
23
22
  timeout?: number;
24
- cacheTtlMs?: number;
25
- maxCacheSize?: number;
26
- retryAttempts?: number;
27
- retryDelayMs?: number;
28
23
  }
@@ -6,7 +6,6 @@ var UserRole;
6
6
  UserRole["ROOT"] = "root";
7
7
  UserRole["ADMIN"] = "admin";
8
8
  UserRole["DISPATCHER"] = "dispatcher";
9
- UserRole["CLIENT"] = "client";
10
9
  UserRole["TECHNICIAN"] = "technician";
11
10
  })(UserRole || (exports.UserRole = UserRole = {}));
12
11
  var UserStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"user.types.js","sourceRoot":"","sources":["../../src/types/user.types.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;IACjB,qCAAyB,CAAA;AAC3B,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB;AAED,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB"}
1
+ {"version":3,"file":"user.types.js","sourceRoot":"","sources":["../../src/types/user.types.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,qCAAyB,CAAA;IACzB,qCAAyB,CAAA;AAC3B,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB;AAED,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;AACrB,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB"}
@@ -0,0 +1,3 @@
1
+ import { AxiosRequestConfig } from 'axios';
2
+ export declare const customInstance: <T>(config: AxiosRequestConfig, options?: AxiosRequestConfig) => Promise<T>;
3
+ export default customInstance;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.customInstance = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const customInstance = (config, options) => {
9
+ const source = axios_1.default.CancelToken.source();
10
+ const promise = (0, axios_1.default)({
11
+ ...config,
12
+ ...options,
13
+ cancelToken: source.token,
14
+ }).then(({ data }) => data);
15
+ promise.cancel = () => {
16
+ source.cancel('Query was cancelled');
17
+ };
18
+ return promise;
19
+ };
20
+ exports.customInstance = customInstance;
21
+ exports.default = exports.customInstance;
22
+ //# sourceMappingURL=mutator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutator.js","sourceRoot":"","sources":["../../src/utils/mutator.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAkD;AAE3C,MAAM,cAAc,GAAG,CAC5B,MAA0B,EAC1B,OAA4B,EAChB,EAAE;IACd,MAAM,MAAM,GAAG,eAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAA,eAAK,EAAC;QACpB,GAAG,MAAM;QACT,GAAG,OAAO;QACV,WAAW,EAAE,MAAM,CAAC,KAAK;KAC1B,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAG5B,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE;QACpB,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAjBW,QAAA,cAAc,kBAiBzB;AAEF,kBAAe,sBAAc,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stefaninigo/security-client",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "StefaniniGo Security Client SDK - Guards, decorators and HTTP client for authentication and authorization",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -31,8 +31,8 @@
31
31
  "directory": "packages/security-client"
32
32
  },
33
33
  "dependencies": {
34
- "@nestjs/common": "^10.0.0 || ^11.0.0",
35
- "@nestjs/core": "^10.0.0 || ^11.0.0",
34
+ "@nestjs/common": "^11.1.6",
35
+ "@nestjs/core": "^11.1.6",
36
36
  "axios": "^1.7.9",
37
37
  "reflect-metadata": "^0.2.2",
38
38
  "rxjs": "^7.8.2"
@@ -42,7 +42,6 @@
42
42
  "@nestjs/core": "^10.0.0 || ^11.0.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@types/express": "^5.0.6",
46
45
  "@types/node": "^24.7.2",
47
46
  "typescript": "^5.9.3"
48
47
  }
@@ -1,2 +0,0 @@
1
- export declare const IS_PUBLIC_KEY = "isPublic";
2
- export declare const Public: () => import("@nestjs/common").CustomDecorator<string>;
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Public = exports.IS_PUBLIC_KEY = void 0;
4
- const common_1 = require("@nestjs/common");
5
- exports.IS_PUBLIC_KEY = 'isPublic';
6
- const Public = () => (0, common_1.SetMetadata)(exports.IS_PUBLIC_KEY, true);
7
- exports.Public = Public;
8
- //# sourceMappingURL=public.decorator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public.decorator.js","sourceRoot":"","sources":["../../src/decorators/public.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAEhC,QAAA,aAAa,GAAG,UAAU,CAAC;AACjC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,qBAAa,EAAE,IAAI,CAAC,CAAC;AAAhD,QAAA,MAAM,UAA0C"}
@@ -1,7 +0,0 @@
1
- import { CanActivate, ExecutionContext } from '@nestjs/common';
2
- import { Reflector } from '@nestjs/core';
3
- export declare class ProviderGuard implements CanActivate {
4
- private readonly reflector;
5
- constructor(reflector: Reflector);
6
- canActivate(context: ExecutionContext): boolean;
7
- }
@@ -1,43 +0,0 @@
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.ProviderGuard = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const core_1 = require("@nestjs/core");
15
- const public_decorator_1 = require("../decorators/public.decorator");
16
- let ProviderGuard = class ProviderGuard {
17
- constructor(reflector) {
18
- this.reflector = reflector;
19
- }
20
- canActivate(context) {
21
- const isPublic = this.reflector.getAllAndOverride(public_decorator_1.IS_PUBLIC_KEY, [
22
- context.getHandler(),
23
- context.getClass(),
24
- ]);
25
- if (isPublic) {
26
- return true;
27
- }
28
- const { user } = context.switchToHttp().getRequest();
29
- if (!user) {
30
- throw new common_1.ForbiddenException('Usuario no autenticado');
31
- }
32
- if (!user.providerId) {
33
- throw new common_1.ForbiddenException('Se requiere un proveedor asociado');
34
- }
35
- return true;
36
- }
37
- };
38
- exports.ProviderGuard = ProviderGuard;
39
- exports.ProviderGuard = ProviderGuard = __decorate([
40
- (0, common_1.Injectable)(),
41
- __metadata("design:paramtypes", [core_1.Reflector])
42
- ], ProviderGuard);
43
- //# sourceMappingURL=provider.guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.guard.js","sourceRoot":"","sources":["../../src/guards/provider.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA+F;AAC/F,uCAAyC;AACzC,qEAA+D;AAGxD,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAErD,WAAW,CAAC,OAAyB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,gCAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAErD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,2BAAkB,CAAC,wBAAwB,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,2BAAkB,CAAC,mCAAmC,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAzBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAE6B,gBAAS;GADtC,aAAa,CAyBzB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"security-auth.guard.js","sourceRoot":"","sources":["../../src/guards/security-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAyI;AACzI,uCAAyC;AAEzC,iFAA4E;AAE5E,qEAA+D;AAcxD,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YACmB,cAAqC,EACrC,SAAoB;QADpB,mBAAc,GAAd,cAAc,CAAuB;QACrC,cAAS,GAAT,SAAS,CAAW;IACpC,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAU,gCAAa,EAAE;YACxE,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAiC,CAAC;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,8BAAqB,CAAC,2BAA2B,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAEtE,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,2BAAkB,CAAC,kBAAkB,CAAC,CAAC;YACnD,CAAC;YAED,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YAEpB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,8BAAqB,IAAI,KAAK,YAAY,2BAAkB,IAAI,KAAK,YAAY,0BAAiB,EAAE,CAAC;gBACxH,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC3D,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAE5C,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;wBACnB,MAAM,IAAI,8BAAqB,CAAC,2BAA2B,CAAC,CAAC;oBAC/D,CAAC;oBAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;wBACnB,MAAM,IAAI,2BAAkB,CAAC,iBAAiB,CAAC,CAAC;oBAClD,CAAC;oBAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;wBACnB,MAAM,IAAI,0BAAiB,CAAC,uBAAuB,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,IAAI,8BAAqB,CAAC,wBAAwB,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,OAAgB;QAC7C,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACtE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;CACF,CAAA;AAjEY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAGwB,+CAAqB;QAC1B,gBAAS;GAH5B,iBAAiB,CAiE7B;AAKY,QAAA,gBAAgB,GAAG,iBAAiB,CAAC"}