@zorionapp/gg-core 5.0.14 → 5.0.15

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 (34) hide show
  1. package/package.json +2 -3
  2. package/src/gg-cache/gg-cache.module.js +9 -26
  3. package/src/gg-cache/gg-cache.module.js.map +1 -1
  4. package/src/gg-cache/index.d.ts +1 -1
  5. package/src/gg-cache/index.js +3 -1
  6. package/src/gg-cache/index.js.map +1 -1
  7. package/src/gg-core/gg-core.module.js +2 -2
  8. package/src/gg-redis/index.d.ts +2 -0
  9. package/src/gg-redis/index.js +8 -0
  10. package/src/gg-redis/index.js.map +1 -0
  11. package/src/gg-redis/redis-client.factory.d.ts +6 -0
  12. package/src/gg-redis/redis-client.factory.js +31 -0
  13. package/src/gg-redis/redis-client.factory.js.map +1 -0
  14. package/src/{gg-cache → gg-redis}/redis.config.d.ts +4 -0
  15. package/src/gg-redis/redis.config.js +46 -0
  16. package/src/gg-redis/redis.config.js.map +1 -0
  17. package/src/gg-redlock/index.d.ts +1 -0
  18. package/src/gg-redlock/redlock.module.d.ts +3 -2
  19. package/src/gg-redlock/redlock.module.js +34 -6
  20. package/src/gg-redlock/redlock.module.js.map +1 -1
  21. package/src/gg-redlock/redlock.options.d.ts +1 -8
  22. package/src/gg-redlock/redlock.options.js +2 -10
  23. package/src/gg-redlock/redlock.options.js.map +1 -1
  24. package/src/gg-redlock/redlock.service.d.ts +11 -17
  25. package/src/gg-redlock/redlock.service.js +16 -35
  26. package/src/gg-redlock/redlock.service.js.map +1 -1
  27. package/src/index.d.ts +1 -0
  28. package/src/index.js +1 -0
  29. package/src/index.js.map +1 -1
  30. package/src/gg-cache/redis.config.js +0 -23
  31. package/src/gg-cache/redis.config.js.map +0 -1
  32. package/src/gg-redlock/redlock.config.d.ts +0 -5
  33. package/src/gg-redlock/redlock.config.js +0 -22
  34. package/src/gg-redlock/redlock.config.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zorionapp/gg-core",
3
- "version": "5.0.14",
3
+ "version": "5.0.15",
4
4
  "type": "commonjs",
5
5
  "dependencies": {
6
6
  "cache-manager": "5.2.4",
@@ -9,10 +9,9 @@
9
9
  "@google-cloud/trace-agent": "7.1.2"
10
10
  },
11
11
  "peerDependencies": {
12
- "cache-manager-redis-yet": "^4.1.2",
12
+ "cache-manager-ioredis-yet": "^2.0.0",
13
13
  "amqp-connection-manager": "^4.1.14",
14
14
  "amqplib": "^0.10.3",
15
- "redis": "^4.6.10",
16
15
  "helmet": "^7.1.0",
17
16
  "pino-http": "^8.5.0",
18
17
  "@google-cloud/error-reporting": "^3.0.5",
@@ -5,13 +5,10 @@ exports.GgCacheModule = void 0;
5
5
  const tslib_1 = require("tslib");
6
6
  const cache_manager_1 = require("@nestjs/cache-manager");
7
7
  const common_1 = require("@nestjs/common");
8
- const exceptions_1 = require("@nestjs/core/errors/exceptions");
9
- const cache_manager_redis_yet_1 = require("cache-manager-redis-yet");
8
+ const cache_manager_ioredis_yet_1 = require("cache-manager-ioredis-yet");
10
9
  const luxon_1 = require("luxon");
11
- const redis_1 = require("redis");
10
+ const gg_redis_1 = require("../gg-redis");
12
11
  const gg_cache_service_1 = require("./gg-cache.service");
13
- const redis_config_1 = require("./redis.config");
14
- const PING_INTERVAL_SECONDS = 60;
15
12
  let GgCacheModule = GgCacheModule_1 = class GgCacheModule {
16
13
  static forRoot() {
17
14
  return {
@@ -21,29 +18,15 @@ let GgCacheModule = GgCacheModule_1 = class GgCacheModule {
21
18
  exports: [gg_cache_service_1.GgCacheService],
22
19
  imports: [
23
20
  cache_manager_1.CacheModule.registerAsync({
24
- inject: [redis_config_1.redisConfig.KEY],
21
+ inject: [gg_redis_1.redisConfig.KEY],
25
22
  isGlobal: true,
26
- useFactory: async (redisConf) => {
27
- const client = (0, redis_1.createClient)({
28
- socket: { host: redisConf.host, port: redisConf.port },
29
- pingInterval: luxon_1.Duration.fromObject({ second: PING_INTERVAL_SECONDS }).as('milliseconds'),
30
- });
31
- client.on('error', (err) => {
32
- console.error('Redis Client Error', err);
33
- });
34
- try {
35
- await client.connect();
36
- }
37
- catch (error) {
38
- console.error('Redis connecting Error', error);
39
- throw new exceptions_1.RuntimeException('Error connecting to Redis');
40
- }
23
+ useFactory: (redisConf) => {
24
+ const client = (0, gg_redis_1.createRedisClient)(redisConf, { keepAlive: 1 });
25
+ client.on('error', (err) => console.error('Redis cache client error', err));
41
26
  return {
42
- socket: { host: redisConf.host, port: redisConf.port },
43
- client,
44
- store: cache_manager_redis_yet_1.redisStore,
45
- ttl: luxon_1.Duration.fromObject({ minute: 1 }).as('milliseconds'),
46
- pingInterval: luxon_1.Duration.fromObject({ second: PING_INTERVAL_SECONDS }).as('milliseconds'),
27
+ store: (0, cache_manager_ioredis_yet_1.redisInsStore)(client, {
28
+ ttl: luxon_1.Duration.fromObject({ minute: 1 }).as('milliseconds'),
29
+ }),
47
30
  };
48
31
  },
49
32
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"gg-cache.module.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-cache/gg-cache.module.ts"],"names":[],"mappings":";;;;;AAAA,yDAAoD;AACpD,2CAAuD;AAEvD,+DAAkE;AAClE,qEAAqD;AACrD,iCAAiC;AACjC,iCAAyD;AACzD,yDAAoD;AACpD,iDAA6C;AAE7C,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAG1B,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,OAAO;QACnB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC,iCAAc,CAAC;YAC3B,OAAO,EAAE,CAAC,iCAAc,CAAC;YACzB,OAAO,EAAE;gBACP,2BAAW,CAAC,aAAa,CAAqB;oBAC5C,MAAM,EAAE,CAAC,0BAAW,CAAC,GAAG,CAAC;oBACzB,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,KAAK,EAAE,SAAyC,EAAE,EAAE;wBAC9D,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC;4BAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;4BACtD,YAAY,EAAE,gBAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;yBACxF,CAAC,CAAC;wBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;4BACzB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;wBAC3C,CAAC,CAAC,CAAC;wBAEH,IAAI,CAAC;4BACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;wBACzB,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;4BAC/C,MAAM,IAAI,6BAAgB,CAAC,2BAA2B,CAAC,CAAC;wBAC1D,CAAC;wBAED,OAAO;4BACL,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;4BACtD,MAAM;4BACN,KAAK,EAAE,oCAAU;4BACjB,GAAG,EAAE,gBAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;4BAC1D,YAAY,EAAE,gBAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;yBACxF,CAAC;oBACJ,CAAC;iBACF,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAxCY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CAwCzB"}
1
+ {"version":3,"file":"gg-cache.module.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-cache/gg-cache.module.ts"],"names":[],"mappings":";;;;;AAAA,yDAAoD;AACpD,2CAAuD;AAEvD,yEAA0D;AAC1D,iCAAiC;AACjC,0CAA6D;AAC7D,yDAAoD;AAG7C,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,OAAO;QACnB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC,iCAAc,CAAC;YAC3B,OAAO,EAAE,CAAC,iCAAc,CAAC;YACzB,OAAO,EAAE;gBACP,2BAAW,CAAC,aAAa,CAAC;oBACxB,MAAM,EAAE,CAAC,sBAAW,CAAC,GAAG,CAAC;oBACzB,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,CAAC,SAAyC,EAAE,EAAE;wBACxD,MAAM,MAAM,GAAG,IAAA,4BAAiB,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;wBAC9D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC,CAAC;wBAC5E,OAAO;4BACL,KAAK,EAAE,IAAA,yCAAa,EAAC,MAAM,EAAE;gCAC3B,GAAG,EAAE,gBAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;6BAC3D,CAAC;yBACH,CAAC;oBACJ,CAAC;iBACF,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAxBY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CAwBzB"}
@@ -1,2 +1,2 @@
1
1
  export * from './gg-cache.service';
2
- export * from './redis.config';
2
+ export { redisConfig } from '../gg-redis';
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redisConfig = void 0;
3
4
  const tslib_1 = require("tslib");
4
5
  tslib_1.__exportStar(require("./gg-cache.service"), exports);
5
- tslib_1.__exportStar(require("./redis.config"), exports);
6
+ var gg_redis_1 = require("../gg-redis");
7
+ Object.defineProperty(exports, "redisConfig", { enumerable: true, get: function () { return gg_redis_1.redisConfig; } });
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-cache/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,yDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-cache/index.ts"],"names":[],"mappings":";;;;AAAA,6DAAmC;AACnC,wCAA0C;AAAjC,uGAAA,WAAW,OAAA"}
@@ -5,7 +5,7 @@ exports.GgCoreModule = void 0;
5
5
  const tslib_1 = require("tslib");
6
6
  const common_1 = require("@nestjs/common");
7
7
  const gg_auth_module_1 = require("../gg-auth/gg-auth.module");
8
- const gg_cache_1 = require("../gg-cache");
8
+ const gg_redis_1 = require("../gg-redis");
9
9
  const gg_cache_module_1 = require("../gg-cache/gg-cache.module");
10
10
  const gg_cls_1 = require("../gg-cls");
11
11
  const gg_config_1 = require("../gg-config");
@@ -23,7 +23,7 @@ let GgCoreModule = GgCoreModule_1 = class GgCoreModule {
23
23
  static forRootAsync(options) {
24
24
  const imports = [
25
25
  /** Config module with basic app configurations */
26
- gg_config_1.GgConfigModule.forRoot({ configs: [gg_config_1.appConfig, gg_cache_1.redisConfig, gg_micro_1.rmqConfig, ...(options.loadConfigs ?? [])] }),
26
+ gg_config_1.GgConfigModule.forRoot({ configs: [gg_config_1.appConfig, gg_redis_1.redisConfig, gg_micro_1.rmqConfig, ...(options.loadConfigs ?? [])] }),
27
27
  /** AsyncContext module to avoid DI three rebuilding */
28
28
  gg_cls_1.GgClsModule.forRoot(),
29
29
  /** Pino logger module */
@@ -0,0 +1,2 @@
1
+ export { redisConfig, type RedisMode } from './redis.config';
2
+ export { createRedisClient } from './redis-client.factory';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRedisClient = exports.redisConfig = void 0;
4
+ var redis_config_1 = require("./redis.config");
5
+ Object.defineProperty(exports, "redisConfig", { enumerable: true, get: function () { return redis_config_1.redisConfig; } });
6
+ var redis_client_factory_1 = require("./redis-client.factory");
7
+ Object.defineProperty(exports, "createRedisClient", { enumerable: true, get: function () { return redis_client_factory_1.createRedisClient; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redis/index.ts"],"names":[],"mappings":";;;AAAA,+CAA6D;AAApD,2GAAA,WAAW,OAAA;AACpB,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,6 @@
1
+ import { ConfigType } from '@nestjs/config';
2
+ import { default as Redis, RedisOptions } from 'ioredis';
3
+ import { redisConfig } from './redis.config';
4
+ type RedisConfigType = ConfigType<typeof redisConfig>;
5
+ export declare function createRedisClient(config: RedisConfigType, options?: Partial<RedisOptions>): Redis;
6
+ export {};
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRedisClient = void 0;
4
+ const ioredis_1 = require("ioredis");
5
+ function createRedisClient(config, options) {
6
+ if (config.mode === 'sentinel') {
7
+ const sentinels = config.sentinelHosts
8
+ .split(';')
9
+ .map((entry) => entry.trim())
10
+ .filter(Boolean)
11
+ .map((entry) => {
12
+ const [host, port] = entry.split(':');
13
+ return { host, port: Number(port) || 26379 };
14
+ });
15
+ if (sentinels.length === 0) {
16
+ throw new Error('REDIS_SENTINEL_HOSTS is empty or invalid after parsing');
17
+ }
18
+ return new ioredis_1.default({
19
+ sentinels,
20
+ name: config.sentinelMaster,
21
+ ...options,
22
+ });
23
+ }
24
+ return new ioredis_1.default({
25
+ host: config.host,
26
+ port: config.port,
27
+ ...options,
28
+ });
29
+ }
30
+ exports.createRedisClient = createRedisClient;
31
+ //# sourceMappingURL=redis-client.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-client.factory.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redis/redis-client.factory.ts"],"names":[],"mappings":";;;AACA,qCAAyD;AAKzD,SAAgB,iBAAiB,CAAC,MAAuB,EAAE,OAA+B;IACxF,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa;aACnC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;aAC5B,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEL,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,IAAI,iBAAK,CAAC;YACf,SAAS;YACT,IAAI,EAAE,MAAM,CAAC,cAAc;YAC3B,GAAG,OAAO;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,iBAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC;AA3BD,8CA2BC"}
@@ -1,6 +1,10 @@
1
+ export type RedisMode = 'standalone' | 'sentinel';
1
2
  declare class RedisConfig {
3
+ readonly mode: RedisMode;
2
4
  readonly host: string;
3
5
  readonly port: number;
6
+ readonly sentinelHosts: string;
7
+ readonly sentinelMaster: string;
4
8
  }
5
9
  export declare const redisConfig: (() => Promise<RedisConfig>) & import("@nestjs/config").ConfigFactoryKeyHost<Promise<RedisConfig>>;
6
10
  export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redisConfig = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const class_validator_1 = require("class-validator");
6
+ const lodash_1 = require("lodash");
7
+ const gg_config_1 = require("../gg-config");
8
+ class RedisConfig {
9
+ constructor() {
10
+ this.mode = (0, lodash_1.get)(process.env, 'REDIS_MODE', 'standalone');
11
+ this.host = (0, lodash_1.get)(process.env, 'REDIS_HOST');
12
+ this.port = Number((0, lodash_1.get)(process.env, 'REDIS_PORT', 6379));
13
+ this.sentinelHosts = (0, lodash_1.get)(process.env, 'REDIS_SENTINEL_HOSTS');
14
+ this.sentinelMaster = (0, lodash_1.get)(process.env, 'REDIS_SENTINEL_MASTER');
15
+ }
16
+ }
17
+ tslib_1.__decorate([
18
+ (0, class_validator_1.IsOptional)(),
19
+ (0, class_validator_1.IsIn)(['standalone', 'sentinel']),
20
+ tslib_1.__metadata("design:type", String)
21
+ ], RedisConfig.prototype, "mode", void 0);
22
+ tslib_1.__decorate([
23
+ (0, class_validator_1.ValidateIf)((o) => o.mode === 'standalone'),
24
+ (0, class_validator_1.IsNotEmpty)(),
25
+ (0, class_validator_1.IsString)(),
26
+ tslib_1.__metadata("design:type", String)
27
+ ], RedisConfig.prototype, "host", void 0);
28
+ tslib_1.__decorate([
29
+ (0, class_validator_1.ValidateIf)((o) => o.mode === 'standalone'),
30
+ (0, class_validator_1.IsNotEmpty)(),
31
+ tslib_1.__metadata("design:type", Number)
32
+ ], RedisConfig.prototype, "port", void 0);
33
+ tslib_1.__decorate([
34
+ (0, class_validator_1.ValidateIf)((o) => o.mode === 'sentinel'),
35
+ (0, class_validator_1.IsNotEmpty)(),
36
+ (0, class_validator_1.IsString)(),
37
+ tslib_1.__metadata("design:type", String)
38
+ ], RedisConfig.prototype, "sentinelHosts", void 0);
39
+ tslib_1.__decorate([
40
+ (0, class_validator_1.ValidateIf)((o) => o.mode === 'sentinel'),
41
+ (0, class_validator_1.IsNotEmpty)(),
42
+ (0, class_validator_1.IsString)(),
43
+ tslib_1.__metadata("design:type", String)
44
+ ], RedisConfig.prototype, "sentinelMaster", void 0);
45
+ exports.redisConfig = (0, gg_config_1.registerConfig)(RedisConfig);
46
+ //# sourceMappingURL=redis.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.config.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redis/redis.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAqF;AACrF,mCAA6B;AAC7B,4CAA8C;AAI9C,MAAM,WAAW;IAAjB;QAGkB,SAAI,GAAc,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,CAAc,CAAC;QAK5E,SAAI,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAI9C,SAAI,GAAW,MAAM,CAAC,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;QAK5D,kBAAa,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAKjE,mBAAc,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;IACrF,CAAC;CAAA;AApBiB;IAFf,IAAA,4BAAU,GAAE;IACZ,IAAA,sBAAI,EAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;;yCAC2D;AAK5E;IAHf,IAAA,4BAAU,EAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;IACvD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;yCACmD;AAI9C;IAFf,IAAA,4BAAU,EAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;IACvD,IAAA,4BAAU,GAAE;;yCAC+D;AAK5D;IAHf,IAAA,4BAAU,EAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;IACrD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;kDACsE;AAKjE;IAHf,IAAA,4BAAU,EAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;IACrD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;mDACwE;AAGxE,QAAA,WAAW,GAAG,IAAA,0BAAc,EAAC,WAAW,CAAC,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './redlock.module';
2
2
  export * from './redlock.service';
3
+ export type { Mutex as DistributedMutex } from 'redis-semaphore';
@@ -1,3 +1,4 @@
1
- import { RedlockOpts } from './redlock.options';
2
- export declare class RedlockModule extends RedlockOpts.ConfigurableModuleClass {
1
+ import { DynamicModule } from '@nestjs/common';
2
+ export declare class RedlockModule {
3
+ static register(): DynamicModule;
3
4
  }
@@ -1,17 +1,45 @@
1
1
  "use strict";
2
+ var RedlockModule_1;
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.RedlockModule = void 0;
4
5
  const tslib_1 = require("tslib");
5
6
  const common_1 = require("@nestjs/common");
7
+ const gg_redis_1 = require("../gg-redis");
6
8
  const redlock_options_1 = require("./redlock.options");
7
9
  const redlock_service_1 = require("./redlock.service");
8
- let RedlockModule = class RedlockModule extends redlock_options_1.RedlockOpts.ConfigurableModuleClass {
10
+ let RedlockModule = RedlockModule_1 = class RedlockModule {
11
+ static register() {
12
+ return {
13
+ module: RedlockModule_1,
14
+ providers: [
15
+ {
16
+ provide: redlock_options_1.REDIS_LOCK_CLIENT,
17
+ inject: [gg_redis_1.redisConfig.KEY],
18
+ useFactory: (conf) => {
19
+ const client = (0, gg_redis_1.createRedisClient)(conf, {
20
+ enableOfflineQueue: false,
21
+ enableReadyCheck: false,
22
+ enableAutoPipelining: false,
23
+ autoResendUnfulfilledCommands: true,
24
+ commandTimeout: 6000,
25
+ socketTimeout: 10000,
26
+ connectTimeout: 5000,
27
+ keepAlive: 1,
28
+ retryStrategy: (times) => Math.min(times * 50, 1000),
29
+ reconnectOnError: (err) => err.message.includes('READONLY') || err.message.includes('ECONNRESET'),
30
+ });
31
+ client.on('error', (err) => console.error('Redis lock client error', err));
32
+ return client;
33
+ },
34
+ },
35
+ redlock_service_1.RedlockService,
36
+ ],
37
+ exports: [redlock_service_1.RedlockService],
38
+ };
39
+ }
9
40
  };
10
41
  exports.RedlockModule = RedlockModule;
11
- exports.RedlockModule = RedlockModule = tslib_1.__decorate([
12
- (0, common_1.Module)({
13
- providers: [redlock_service_1.RedlockService],
14
- exports: [redlock_service_1.RedlockService],
15
- })
42
+ exports.RedlockModule = RedlockModule = RedlockModule_1 = tslib_1.__decorate([
43
+ (0, common_1.Module)({})
16
44
  ], RedlockModule);
17
45
  //# sourceMappingURL=redlock.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redlock.module.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,uDAAgD;AAChD,uDAAmD;AAM5C,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,6BAAW,CAAC,uBAAuB;CAAG,CAAA;AAA5D,sCAAa;wBAAb,aAAa;IAJzB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,gCAAc,CAAC;QAC3B,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAA+C"}
1
+ {"version":3,"file":"redlock.module.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAuD;AAEvD,0CAA6D;AAC7D,uDAAsD;AACtD,uDAAmD;AAG5C,IAAM,aAAa,qBAAnB,MAAM,aAAa;IACjB,MAAM,CAAC,QAAQ;QACpB,OAAO;YACL,MAAM,EAAE,eAAa;YACrB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,mCAAiB;oBAC1B,MAAM,EAAE,CAAC,sBAAW,CAAC,GAAG,CAAC;oBACzB,UAAU,EAAE,CAAC,IAAoC,EAAE,EAAE;wBACnD,MAAM,MAAM,GAAG,IAAA,4BAAiB,EAAC,IAAI,EAAE;4BACrC,kBAAkB,EAAE,KAAK;4BACzB,gBAAgB,EAAE,KAAK;4BACvB,oBAAoB,EAAE,KAAK;4BAC3B,6BAA6B,EAAE,IAAI;4BACnC,cAAc,EAAE,IAAI;4BACpB,aAAa,EAAE,KAAK;4BACpB,cAAc,EAAE,IAAI;4BACpB,SAAS,EAAE,CAAC;4BACZ,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC;4BACpD,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CACxB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;yBACzE,CAAC,CAAC;wBACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,CAAC;wBAC3E,OAAO,MAAM,CAAC;oBAChB,CAAC;iBACF;gBACD,gCAAc;aACf;YACD,OAAO,EAAE,CAAC,gCAAc,CAAC;SAC1B,CAAC;IACJ,CAAC;CACF,CAAA;AA/BY,sCAAa;wBAAb,aAAa;IADzB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,aAAa,CA+BzB"}
@@ -1,8 +1 @@
1
- export type RedlockOptions = string[];
2
- export declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<RedlockOptions, "register", "create", {}>, MODULE_OPTIONS_TOKEN: string | symbol, OPTIONS_TYPE: RedlockOptions & Partial<{}>, ASYNC_OPTIONS_TYPE: import("@nestjs/common").ConfigurableModuleAsyncOptions<RedlockOptions, "create"> & Partial<{}>;
3
- export declare const RedlockOpts: {
4
- MODULE_OPTIONS_TOKEN: string | symbol;
5
- OPTIONS_TYPE: RedlockOptions & Partial<{}>;
6
- ASYNC_OPTIONS_TYPE: import("@nestjs/common").ConfigurableModuleAsyncOptions<RedlockOptions, "create"> & Partial<{}>;
7
- ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<RedlockOptions, "register", "create", {}>;
8
- };
1
+ export declare const REDIS_LOCK_CLIENT: unique symbol;
@@ -1,13 +1,5 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.RedlockOpts = exports.ASYNC_OPTIONS_TYPE = exports.OPTIONS_TYPE = exports.MODULE_OPTIONS_TOKEN = exports.ConfigurableModuleClass = void 0;
5
- const common_1 = require("@nestjs/common");
6
- _a = new common_1.ConfigurableModuleBuilder({ moduleName: 'RedlockModule' }).setClassMethodName('register').build(), exports.ConfigurableModuleClass = _a.ConfigurableModuleClass, exports.MODULE_OPTIONS_TOKEN = _a.MODULE_OPTIONS_TOKEN, exports.OPTIONS_TYPE = _a.OPTIONS_TYPE, exports.ASYNC_OPTIONS_TYPE = _a.ASYNC_OPTIONS_TYPE;
7
- exports.RedlockOpts = {
8
- MODULE_OPTIONS_TOKEN: exports.MODULE_OPTIONS_TOKEN,
9
- OPTIONS_TYPE: exports.OPTIONS_TYPE,
10
- ASYNC_OPTIONS_TYPE: exports.ASYNC_OPTIONS_TYPE,
11
- ConfigurableModuleClass: exports.ConfigurableModuleClass,
12
- };
3
+ exports.REDIS_LOCK_CLIENT = void 0;
4
+ exports.REDIS_LOCK_CLIENT = Symbol('REDIS_LOCK_CLIENT');
13
5
  //# sourceMappingURL=redlock.options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redlock.options.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.options.ts"],"names":[],"mappings":";;;;AAAA,2CAA2D;AAI9C,KACX,IAAI,kCAAyB,CAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EADxG,+BAAuB,+BAAE,4BAAoB,4BAAE,oBAAY,oBAAE,0BAAkB,yBAC0B;AAE3G,QAAA,WAAW,GAAG;IACzB,oBAAoB,EAApB,4BAAoB;IACpB,YAAY,EAAZ,oBAAY;IACZ,kBAAkB,EAAlB,0BAAkB;IAClB,uBAAuB,EAAvB,+BAAuB;CACxB,CAAC"}
1
+ {"version":3,"file":"redlock.options.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.options.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC"}
@@ -1,20 +1,14 @@
1
- import { RedlockMutex } from 'redis-semaphore';
2
- import { RedlockOptions } from './redlock.options';
3
- export interface LockOptions {
4
- ttl?: number;
5
- retryInterval?: number;
6
- maxAttempts?: number;
7
- }
1
+ import { default as Redis } from 'ioredis';
2
+ import { Mutex } from 'redis-semaphore';
8
3
  export declare class RedlockService {
9
- private readonly options;
4
+ private readonly client;
10
5
  private readonly logger;
11
- private readonly clients;
12
- constructor(options: RedlockOptions);
13
- getLock(resource: string, identifier?: string): RedlockMutex;
14
- acquire(resources: RedlockMutex[]): Promise<RedlockMutex[]>;
15
- tryAcquire(resources: RedlockMutex[]): Promise<boolean[]>;
16
- release(resources: RedlockMutex[]): Promise<void[]>;
17
- protected tryAcquireOne(mutex: RedlockMutex): Promise<boolean>;
18
- protected acquireOne(mutex: RedlockMutex): Promise<RedlockMutex>;
19
- protected releaseOne(mutex: RedlockMutex): Promise<void>;
6
+ constructor(client: Redis);
7
+ getLock(resource: string, identifier?: string): Mutex;
8
+ acquire(resources: Mutex[]): Promise<Mutex[]>;
9
+ tryAcquire(resources: Mutex[]): Promise<boolean[]>;
10
+ release(resources: Mutex[]): Promise<void[]>;
11
+ protected tryAcquireOne(mutex: Mutex): Promise<boolean>;
12
+ protected acquireOne(mutex: Mutex): Promise<Mutex>;
13
+ protected releaseOne(mutex: Mutex): Promise<void>;
20
14
  }
@@ -6,38 +6,20 @@ const tslib_1 = require("tslib");
6
6
  const common_1 = require("@nestjs/common");
7
7
  const ioredis_1 = require("ioredis");
8
8
  const lodash_1 = require("lodash");
9
- const luxon_1 = require("luxon");
10
9
  const redis_semaphore_1 = require("redis-semaphore");
11
10
  const redlock_options_1 = require("./redlock.options");
12
11
  let RedlockService = RedlockService_1 = class RedlockService {
13
- constructor(options) {
14
- this.options = options;
12
+ constructor(client) {
13
+ this.client = client;
15
14
  this.logger = new common_1.Logger(RedlockService_1.name);
16
- this.clients = this.options.map((host) => new ioredis_1.default(`redis://${host}`, {
17
- autoResubscribe: true,
18
- // increase retry to 1 sec
19
- retryStrategy: (times) => Math.min(times * 50, 1000),
20
- // reconnect on temp troubles
21
- reconnectOnError: (err) => err.message.includes('READONLY') || err.message.includes('ECONNRESET'),
22
- commandTimeout: 6000,
23
- socketTimeout: 10000,
24
- connectTimeout: 5000,
25
- keepAlive: 1,
26
- autoResendUnfulfilledCommands: true,
27
- enableOfflineQueue: false,
28
- enableReadyCheck: false,
29
- enableAutoPipelining: false,
30
- }));
31
15
  }
32
16
  getLock(resource, identifier) {
33
- return new redis_semaphore_1.RedlockMutex(this.clients, resource, {
17
+ return new redis_semaphore_1.Mutex(this.client, resource, {
34
18
  acquireAttemptsLimit: 2000,
35
- retryInterval: luxon_1.Duration.fromObject({ milliseconds: 200 }).as('milliseconds'),
36
- acquireTimeout: luxon_1.Duration.fromObject({ seconds: 100 }).as('milliseconds'),
37
- // main parameters which indicates maximum timeout for single lock
38
- lockTimeout: luxon_1.Duration.fromObject({ seconds: 101 }).as('milliseconds'),
39
- ...(identifier && { identifier }),
40
- ...(identifier && { acquiredExternally: true }),
19
+ retryInterval: 200,
20
+ acquireTimeout: 100_000,
21
+ lockTimeout: 101_000,
22
+ ...(identifier && { identifier, acquiredExternally: true }),
41
23
  refreshInterval: 0,
42
24
  });
43
25
  }
@@ -63,7 +45,7 @@ let RedlockService = RedlockService_1 = class RedlockService {
63
45
  await mutex.acquire();
64
46
  }
65
47
  catch (e) {
66
- if (!(e instanceof redis_semaphore_1.TimeoutError) || !(e instanceof redis_semaphore_1.LostLockError))
48
+ if (!(e instanceof redis_semaphore_1.TimeoutError) && !(e instanceof redis_semaphore_1.LostLockError))
67
49
  throw e;
68
50
  if (e instanceof redis_semaphore_1.TimeoutError) {
69
51
  this.logger.warn({
@@ -74,13 +56,12 @@ let RedlockService = RedlockService_1 = class RedlockService {
74
56
  throw new common_1.HttpException({ message: 'Resource locked' }, 423);
75
57
  }
76
58
  if (e instanceof redis_semaphore_1.LostLockError) {
77
- try {
78
- await mutex.acquire();
79
- }
80
- catch (retryError) {
81
- this.logger.error(`Failed to reacquire lock: ${mutex.identifier}`, retryError);
82
- throw new common_1.HttpException({ message: 'Failed to reacquire lock' }, 423);
83
- }
59
+ this.logger.error({
60
+ msg: `Lock lost`,
61
+ resource: (0, lodash_1.get)(mutex, '_key', mutex.identifier),
62
+ identifier: mutex.identifier,
63
+ });
64
+ throw new common_1.HttpException({ message: 'Resource lock lost' }, 423);
84
65
  }
85
66
  }
86
67
  return mutex;
@@ -97,7 +78,7 @@ let RedlockService = RedlockService_1 = class RedlockService {
97
78
  exports.RedlockService = RedlockService;
98
79
  exports.RedlockService = RedlockService = RedlockService_1 = tslib_1.__decorate([
99
80
  (0, common_1.Injectable)(),
100
- tslib_1.__param(0, (0, common_1.Inject)(redlock_options_1.RedlockOpts.MODULE_OPTIONS_TOKEN)),
101
- tslib_1.__metadata("design:paramtypes", [Array])
81
+ tslib_1.__param(0, (0, common_1.Inject)(redlock_options_1.REDIS_LOCK_CLIENT)),
82
+ tslib_1.__metadata("design:paramtypes", [ioredis_1.default])
102
83
  ], RedlockService);
103
84
  //# sourceMappingURL=redlock.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redlock.service.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redlock.service.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.service.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts CHANGED
@@ -8,4 +8,5 @@ export * from './gg-gcp';
8
8
  export * from './gg-kernel';
9
9
  export * from './gg-metrics';
10
10
  export * from './gg-micro';
11
+ export * from './gg-redis';
11
12
  export * from './gg-redlock';
package/src/index.js CHANGED
@@ -11,5 +11,6 @@ tslib_1.__exportStar(require("./gg-gcp"), exports);
11
11
  tslib_1.__exportStar(require("./gg-kernel"), exports);
12
12
  tslib_1.__exportStar(require("./gg-metrics"), exports);
13
13
  tslib_1.__exportStar(require("./gg-micro"), exports);
14
+ tslib_1.__exportStar(require("./gg-redis"), exports);
14
15
  tslib_1.__exportStar(require("./gg-redlock"), exports);
15
16
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/gg-core/src/index.ts"],"names":[],"mappings":";;;AAAA,oDAA0B;AAC1B,qDAA2B;AAC3B,sDAA4B;AAC5B,oDAA0B;AAC1B,wDAA8B;AAC9B,sDAA4B;AAC5B,mDAAyB;AACzB,sDAA4B;AAC5B,uDAA6B;AAC7B,qDAA2B;AAC3B,uDAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/gg-core/src/index.ts"],"names":[],"mappings":";;;AAAA,oDAA0B;AAC1B,qDAA2B;AAC3B,sDAA4B;AAC5B,oDAA0B;AAC1B,wDAA8B;AAC9B,sDAA4B;AAC5B,mDAAyB;AACzB,sDAA4B;AAC5B,uDAA6B;AAC7B,qDAA2B;AAC3B,qDAA2B;AAC3B,uDAA6B"}
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.redisConfig = void 0;
4
- const tslib_1 = require("tslib");
5
- const class_validator_1 = require("class-validator");
6
- const lodash_1 = require("lodash");
7
- const gg_config_1 = require("../gg-config");
8
- class RedisConfig {
9
- constructor() {
10
- this.host = (0, lodash_1.get)(process.env, 'REDIS_HOST');
11
- this.port = (0, lodash_1.get)(process.env, 'REDIS_PORT', 6349);
12
- }
13
- }
14
- tslib_1.__decorate([
15
- (0, class_validator_1.IsNotEmpty)(),
16
- tslib_1.__metadata("design:type", String)
17
- ], RedisConfig.prototype, "host", void 0);
18
- tslib_1.__decorate([
19
- (0, class_validator_1.IsNotEmpty)(),
20
- tslib_1.__metadata("design:type", Object)
21
- ], RedisConfig.prototype, "port", void 0);
22
- exports.redisConfig = (0, gg_config_1.registerConfig)(RedisConfig);
23
- //# sourceMappingURL=redis.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redis.config.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-cache/redis.config.ts"],"names":[],"mappings":";;;;AAAA,qDAA6C;AAC7C,mCAA6B;AAC7B,4CAA8C;AAE9C,MAAM,WAAW;IAAjB;QAEkB,SAAI,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAG9C,SAAI,GAAG,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAW,CAAC;IACxE,CAAC;CAAA;AAJiB;IADf,IAAA,4BAAU,GAAE;;yCACiD;AAG9C;IADf,IAAA,4BAAU,GAAE;;yCACyD;AAG3D,QAAA,WAAW,GAAG,IAAA,0BAAc,EAAC,WAAW,CAAC,CAAC"}
@@ -1,5 +0,0 @@
1
- declare class RedlockConfig {
2
- readonly hosts: string[];
3
- }
4
- export declare const redlockConfig: (() => Promise<RedlockConfig>) & import("@nestjs/config").ConfigFactoryKeyHost<Promise<RedlockConfig>>;
5
- export {};
@@ -1,22 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.redlockConfig = void 0;
4
- const tslib_1 = require("tslib");
5
- const class_validator_1 = require("class-validator");
6
- const lodash_1 = require("lodash");
7
- const process = require("node:process");
8
- const gg_config_1 = require("../gg-config");
9
- class RedlockConfig {
10
- constructor() {
11
- this.hosts = (0, lodash_1.get)(process.env, 'REDLOCK_HOSTS', '').split(';');
12
- }
13
- }
14
- tslib_1.__decorate([
15
- (0, class_validator_1.IsArray)(),
16
- (0, class_validator_1.ArrayMinSize)(3),
17
- (0, class_validator_1.IsString)({ each: true }),
18
- (0, class_validator_1.IsOptional)(),
19
- tslib_1.__metadata("design:type", Array)
20
- ], RedlockConfig.prototype, "hosts", void 0);
21
- exports.redlockConfig = (0, gg_config_1.registerConfig)(RedlockConfig);
22
- //# sourceMappingURL=redlock.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redlock.config.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/redlock.config.ts"],"names":[],"mappings":";;;;AAAA,qDAA8E;AAC9E,mCAA6B;AAC7B,wCAAwC;AACxC,4CAA8C;AAE9C,MAAM,aAAa;IAAnB;QAKkB,UAAK,GAAa,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrF,CAAC;CAAA;AADiB;IAJf,IAAA,yBAAO,GAAE;IACT,IAAA,8BAAY,EAAC,CAAC,CAAC;IACf,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,IAAA,4BAAU,GAAE;;4CACsE;AAGxE,QAAA,aAAa,GAAG,IAAA,0BAAc,EAAC,aAAa,CAAC,CAAC"}