@zorionapp/gg-core 4.21.0 → 4.72.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.
- package/package.json +5 -3
- package/src/gg-cache/gg-cache.module.js +4 -1
- package/src/gg-cache/gg-cache.module.js.map +1 -1
- package/src/gg-database/config/mikroorm.config.d.ts +1 -0
- package/src/gg-database/config/mikroorm.config.js +6 -0
- package/src/gg-database/config/mikroorm.config.js.map +1 -1
- package/src/gg-database/modules/mikroorm.module.js +5 -1
- package/src/gg-database/modules/mikroorm.module.js.map +1 -1
- package/src/gg-healthchecks/gg-healthchecks.controller.js +2 -0
- package/src/gg-healthchecks/gg-healthchecks.controller.js.map +1 -1
- package/src/gg-metrics/gg-metrics.controller.js +2 -0
- package/src/gg-metrics/gg-metrics.controller.js.map +1 -1
- package/src/gg-micro/micro.client.d.ts +3 -1
- package/src/gg-micro/micro.client.js +10 -4
- package/src/gg-micro/micro.client.js.map +1 -1
- package/src/gg-redlock/index.d.ts +2 -0
- package/src/gg-redlock/index.js +6 -0
- package/src/gg-redlock/index.js.map +1 -0
- package/src/gg-redlock/redlock.config.d.ts +5 -0
- package/src/gg-redlock/redlock.config.js +22 -0
- package/src/gg-redlock/redlock.config.js.map +1 -0
- package/src/gg-redlock/redlock.module.d.ts +3 -0
- package/src/gg-redlock/redlock.module.js +17 -0
- package/src/gg-redlock/redlock.module.js.map +1 -0
- package/src/gg-redlock/redlock.options.d.ts +8 -0
- package/src/gg-redlock/redlock.options.js +13 -0
- package/src/gg-redlock/redlock.options.js.map +1 -0
- package/src/gg-redlock/redlock.service.d.ts +20 -0
- package/src/gg-redlock/redlock.service.js +103 -0
- package/src/gg-redlock/redlock.service.js.map +1 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zorionapp/gg-core",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.72.1",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"cache-manager": "5.2.4",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"@nestjs/platform-express": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
|
34
34
|
"@nestjs/swagger": "^6.0.0 || ^7.0.0",
|
|
35
35
|
"@nestjs/terminus": "^8.0.0 || ^9.0.0 || ^10.0.0",
|
|
36
|
-
"@nestjs/throttler": "^
|
|
36
|
+
"@nestjs/throttler": "^6.0.0",
|
|
37
37
|
"@willsoto/nestjs-prometheus": "^5.5.1",
|
|
38
38
|
"axios": "^1.0.0",
|
|
39
39
|
"class-transformer": "^0.5.1",
|
|
@@ -52,7 +52,9 @@
|
|
|
52
52
|
"ts-enum-util": "^4.0.2",
|
|
53
53
|
"uuid": "^9.0.0",
|
|
54
54
|
"yaml": "^2.3.1",
|
|
55
|
-
"kutt": "^3.0.2"
|
|
55
|
+
"kutt": "^3.0.2",
|
|
56
|
+
"redis-semaphore": "^5.6.1",
|
|
57
|
+
"ioredis": "^5.4.2"
|
|
56
58
|
},
|
|
57
59
|
"main": "./src/index.js"
|
|
58
60
|
}
|
|
@@ -11,6 +11,7 @@ const luxon_1 = require("luxon");
|
|
|
11
11
|
const redis_1 = require("redis");
|
|
12
12
|
const gg_cache_service_1 = require("./gg-cache.service");
|
|
13
13
|
const redis_config_1 = require("./redis.config");
|
|
14
|
+
const PING_INTERVAL_SECONDS = 60;
|
|
14
15
|
let GgCacheModule = GgCacheModule_1 = class GgCacheModule {
|
|
15
16
|
static forRoot() {
|
|
16
17
|
return {
|
|
@@ -25,6 +26,7 @@ let GgCacheModule = GgCacheModule_1 = class GgCacheModule {
|
|
|
25
26
|
useFactory: async (redisConf) => {
|
|
26
27
|
const client = (0, redis_1.createClient)({
|
|
27
28
|
socket: { host: redisConf.host, port: redisConf.port },
|
|
29
|
+
pingInterval: luxon_1.Duration.fromObject({ second: PING_INTERVAL_SECONDS }).as('milliseconds'),
|
|
28
30
|
});
|
|
29
31
|
client.on('error', (err) => {
|
|
30
32
|
console.error('Redis Client Error', err);
|
|
@@ -34,13 +36,14 @@ let GgCacheModule = GgCacheModule_1 = class GgCacheModule {
|
|
|
34
36
|
}
|
|
35
37
|
catch (error) {
|
|
36
38
|
throw new exceptions_1.RuntimeException('Error connecting to Redis');
|
|
39
|
+
console.error('Redis connecting Error', error);
|
|
37
40
|
}
|
|
38
41
|
return {
|
|
39
42
|
socket: { host: redisConf.host, port: redisConf.port },
|
|
40
43
|
client,
|
|
41
44
|
store: cache_manager_redis_yet_1.redisStore,
|
|
42
45
|
ttl: luxon_1.Duration.fromObject({ minute: 1 }).as('milliseconds'),
|
|
43
|
-
pingInterval: luxon_1.Duration.fromObject({ second:
|
|
46
|
+
pingInterval: luxon_1.Duration.fromObject({ second: PING_INTERVAL_SECONDS }).as('milliseconds'),
|
|
44
47
|
};
|
|
45
48
|
},
|
|
46
49
|
}),
|
|
@@ -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;
|
|
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,MAAM,IAAI,6BAAgB,CAAC,2BAA2B,CAAC,CAAC;4BACxD,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;wBACjD,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"}
|
|
@@ -4,6 +4,7 @@ declare class MikroOrmConfig {
|
|
|
4
4
|
readonly password: string;
|
|
5
5
|
readonly dbName: string;
|
|
6
6
|
readonly schema: string;
|
|
7
|
+
readonly debug: boolean;
|
|
7
8
|
}
|
|
8
9
|
export declare const mikroOrmConfig: (() => Promise<MikroOrmConfig>) & import("@nestjs/config").ConfigFactoryKeyHost<Promise<MikroOrmConfig>>;
|
|
9
10
|
export {};
|
|
@@ -12,6 +12,7 @@ class MikroOrmConfig {
|
|
|
12
12
|
this.password = (0, lodash_1.get)(process.env, 'DB_PASSWORD', '');
|
|
13
13
|
this.dbName = (0, lodash_1.get)(process.env, 'DB_DATABASE', '');
|
|
14
14
|
this.schema = (0, lodash_1.get)(process.env, 'DB_SCHEMA', '');
|
|
15
|
+
this.debug = (0, lodash_1.get)(process.env, 'DB_DEBUG', 'true') === 'true';
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
tslib_1.__decorate([
|
|
@@ -34,5 +35,10 @@ tslib_1.__decorate([
|
|
|
34
35
|
(0, class_validator_1.IsNotEmpty)(),
|
|
35
36
|
tslib_1.__metadata("design:type", String)
|
|
36
37
|
], MikroOrmConfig.prototype, "schema", void 0);
|
|
38
|
+
tslib_1.__decorate([
|
|
39
|
+
(0, class_validator_1.IsOptional)(),
|
|
40
|
+
(0, class_validator_1.IsBoolean)(),
|
|
41
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
42
|
+
], MikroOrmConfig.prototype, "debug", void 0);
|
|
37
43
|
exports.mikroOrmConfig = (0, gg_config_1.registerConfig)(MikroOrmConfig);
|
|
38
44
|
//# sourceMappingURL=mikroorm.config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mikroorm.config.js","sourceRoot":"","sources":["../../../../../../libs/gg-core/src/gg-database/config/mikroorm.config.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"mikroorm.config.js","sourceRoot":"","sources":["../../../../../../libs/gg-core/src/gg-database/config/mikroorm.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAoE;AACpE,mCAA6B;AAE7B,+CAAiD;AAEjD,MAAM,cAAc;IAApB;QAEkB,SAAI,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAG/C,SAAI,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAGnD,aAAQ,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAGvD,WAAM,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAGrD,WAAM,GAAW,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAInD,UAAK,GAAY,IAAA,YAAG,EAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;IACnF,CAAC;CAAA;AAjBiB;IADf,IAAA,4BAAU,GAAE;;4CACkD;AAG/C;IADf,IAAA,4BAAU,GAAE;;4CACsD;AAGnD;IADf,IAAA,4BAAU,GAAE;;gDAC0D;AAGvD;IADf,IAAA,4BAAU,GAAE;;8CACwD;AAGrD;IADf,IAAA,4BAAU,GAAE;;8CACsD;AAInD;IAFf,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;;6CACqE;AAGtE,QAAA,cAAc,GAAG,IAAA,0BAAc,EAAC,cAAc,CAAC,CAAC"}
|
|
@@ -70,7 +70,7 @@ let MikroormModule = MikroormModule_1 = class MikroormModule {
|
|
|
70
70
|
connect: true,
|
|
71
71
|
ensureDatabase: true,
|
|
72
72
|
extensions: [migrations_1.Migrator, seeder_1.SeedManager],
|
|
73
|
-
pool: { min:
|
|
73
|
+
pool: { min: 4, max: 32 },
|
|
74
74
|
useBatchInserts: true,
|
|
75
75
|
useBatchUpdates: true,
|
|
76
76
|
populateAfterFlush: true,
|
|
@@ -79,6 +79,10 @@ let MikroormModule = MikroormModule_1 = class MikroormModule {
|
|
|
79
79
|
}),
|
|
80
80
|
migrations: MikroormModule_1.defineDatabaseMigrationsConfig(ormConfig, entitiesConfig),
|
|
81
81
|
// seeder: MikroormModule.defineDatabaseSeederConfig(entitiesConfig),
|
|
82
|
+
driverOptions: {
|
|
83
|
+
keepAlive: true,
|
|
84
|
+
application_name: ormConfig.dbName,
|
|
85
|
+
},
|
|
82
86
|
});
|
|
83
87
|
}
|
|
84
88
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mikroorm.module.js","sourceRoot":"","sources":["../../../../../../libs/gg-core/src/gg-database/modules/mikroorm.module.ts"],"names":[],"mappings":";;;;;AAAA,0CAAgH;AAEhH,sDAAiD;AACjD,8CAAmD;AACnD,sDAAqD;AAErD,8CAAgD;AAChD,2CAA+D;AAC/D,2CAA0D;AAE1D,6CAAgD;AAChD,oEAA+D;AAE/D,+DAA2D;AAC3D,0DAAqD;AACrD,8DAA0D;AAE1D;;;;GAIG;AAEI,IAAM,cAAc,sBAApB,MAAM,cAAc;IACzB;;;;OAIG;IACI,MAAM,CAAC,OAAO,CAA6B,cAAiB;QACjE,OAAO;YACL,OAAO,EAAE;gBACP,uBAAc,CAAC,YAAY,CAAC;oBAC1B,OAAO,EAAE,CAAC,qBAAY,CAAC,UAAU,CAAC,gCAAc,CAAC,EAAE,+BAAa,CAAC;oBACjE,MAAM,EAAE,CAAC,gCAAc,CAAC,GAAG,EAAE,yBAAc,CAAC;oBAC5C,UAAU,EAAE,CAAC,YAA+C,EAAE,YAA6B,EAAE,EAAE;wBAC7F,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;oBACvE,CAAC;iBACF,CAAC;aACH;YACD,MAAM,EAAE,gBAAc;YACtB,SAAS,EAAE,CAAC,sCAAiB,CAAC;YAC9B,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,YAAY,CACxB,SAA4C,EAC5C,cAAgC,EAChC,YAA6B;QAE7B,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC;QACtB,MAAM,oBAAoB,GAAG,IAAI,CAAC;QAElC,OAAO,IAAA,yBAAY,EAAC;YAClB,GAAG,SAAS;YACZ,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YACjC,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YACjC,SAAS,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE;YACzE,cAAc,EAAE,+BAAwB;YACxC,gBAAgB,EAAE,8BAAuB;YACzC,YAAY,EAAE,mBAAY,CAAC,MAAM;YACjC,gBAAgB,EAAE,oBAAoB;YACtC,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,CAAC,qBAAQ,EAAE,oBAAW,CAAC;YACnC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;YACzB,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,IAAI;YACrB,kBAAkB,EAAE,IAAI;YACxB,GAAG,CAAC,YAAY,IAAI;gBAClB,WAAW,EAAE,EAAE,OAAO,EAAE,iCAAc,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE;aAC5E,CAAC;YACF,UAAU,EAAE,gBAAc,CAAC,8BAA8B,CAAC,SAAS,EAAE,cAAc,CAAC;YACpF,qEAAqE;
|
|
1
|
+
{"version":3,"file":"mikroorm.module.js","sourceRoot":"","sources":["../../../../../../libs/gg-core/src/gg-database/modules/mikroorm.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const common_1 = require("@nestjs/common");
|
|
6
6
|
const swagger_1 = require("@nestjs/swagger");
|
|
7
7
|
const terminus_1 = require("@nestjs/terminus");
|
|
8
|
+
const throttler_1 = require("@nestjs/throttler");
|
|
8
9
|
let GgHealthchecksController = class GgHealthchecksController {
|
|
9
10
|
constructor(health, httpCheck) {
|
|
10
11
|
this.health = health;
|
|
@@ -24,6 +25,7 @@ tslib_1.__decorate([
|
|
|
24
25
|
], GgHealthchecksController.prototype, "check", null);
|
|
25
26
|
exports.GgHealthchecksController = GgHealthchecksController = tslib_1.__decorate([
|
|
26
27
|
(0, swagger_1.ApiExcludeController)(),
|
|
28
|
+
(0, throttler_1.SkipThrottle)({ default: true, short: true, medium: true, long: true }),
|
|
27
29
|
(0, common_1.Controller)({ path: '/health', version: common_1.VERSION_NEUTRAL }),
|
|
28
30
|
tslib_1.__metadata("design:paramtypes", [terminus_1.HealthCheckService,
|
|
29
31
|
terminus_1.HttpHealthIndicator])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gg-healthchecks.controller.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-healthchecks/gg-healthchecks.controller.ts"],"names":[],"mappings":";;;;AAAA,2CAAkE;AAClE,6CAAuD;AACvD,+CAA2G;
|
|
1
|
+
{"version":3,"file":"gg-healthchecks.controller.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-healthchecks/gg-healthchecks.controller.ts"],"names":[],"mappings":";;;;AAAA,2CAAkE;AAClE,6CAAuD;AACvD,+CAA2G;AAC3G,iDAAiD;AAK1C,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,YACmB,MAA0B,EAC1B,SAA8B;QAD9B,WAAM,GAAN,MAAM,CAAoB;QAC1B,cAAS,GAAT,SAAS,CAAqB;IAC9C,CAAC;IAIG,KAAK;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AAXY,4DAAwB;AAQ5B;IAFN,IAAA,YAAG,GAAE;IACL,IAAA,sBAAW,GAAE;;;;qDAGb;mCAVU,wBAAwB;IAHpC,IAAA,8BAAoB,GAAE;IACtB,IAAA,wBAAY,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtE,IAAA,mBAAU,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,wBAAe,EAAE,CAAC;6CAG7B,6BAAkB;QACf,8BAAmB;GAHtC,wBAAwB,CAWpC"}
|
|
@@ -5,11 +5,13 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const common_1 = require("@nestjs/common");
|
|
6
6
|
const swagger_1 = require("@nestjs/swagger");
|
|
7
7
|
const nestjs_prometheus_1 = require("@willsoto/nestjs-prometheus");
|
|
8
|
+
const throttler_1 = require("@nestjs/throttler");
|
|
8
9
|
let GgMetricsController = class GgMetricsController extends nestjs_prometheus_1.PrometheusController {
|
|
9
10
|
};
|
|
10
11
|
exports.GgMetricsController = GgMetricsController;
|
|
11
12
|
exports.GgMetricsController = GgMetricsController = tslib_1.__decorate([
|
|
12
13
|
(0, swagger_1.ApiExcludeController)(),
|
|
14
|
+
(0, throttler_1.SkipThrottle)({ default: true, short: true, medium: true, long: true }),
|
|
13
15
|
(0, common_1.Controller)({ path: '/metrics', version: common_1.VERSION_NEUTRAL })
|
|
14
16
|
], GgMetricsController);
|
|
15
17
|
//# sourceMappingURL=gg-metrics.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gg-metrics.controller.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-metrics/gg-metrics.controller.ts"],"names":[],"mappings":";;;;AAAA,2CAA6D;AAC7D,6CAAuD;AACvD,mEAAmE;
|
|
1
|
+
{"version":3,"file":"gg-metrics.controller.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-metrics/gg-metrics.controller.ts"],"names":[],"mappings":";;;;AAAA,2CAA6D;AAC7D,6CAAuD;AACvD,mEAAmE;AACnE,iDAAiD;AAK1C,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,wCAAoB;CAAG,CAAA;AAAnD,kDAAmB;8BAAnB,mBAAmB;IAH/B,IAAA,8BAAoB,GAAE;IACtB,IAAA,wBAAY,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtE,IAAA,mBAAU,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAe,EAAE,CAAC;GAC9C,mBAAmB,CAAgC"}
|
|
@@ -9,6 +9,7 @@ export type RmqServiceOptions = {
|
|
|
9
9
|
priority?: number;
|
|
10
10
|
timeout?: Duration;
|
|
11
11
|
customHeaders?: Record<string, string>;
|
|
12
|
+
trxId?: string;
|
|
12
13
|
};
|
|
13
14
|
export type ServiceRes<Res> = {
|
|
14
15
|
data: Res;
|
|
@@ -43,8 +44,9 @@ export declare class MicroClient {
|
|
|
43
44
|
* @param command
|
|
44
45
|
* @param priority
|
|
45
46
|
* @param customHeaders
|
|
47
|
+
* @param trxId
|
|
46
48
|
*/
|
|
47
|
-
protected toRmqRecord<T, R = Record<string, unknown>>(command: RmqCommand<T, R> | RmqEvent<T>, priority?: number, customHeaders?: Record<string, string
|
|
49
|
+
protected toRmqRecord<T, R = Record<string, unknown>>(command: RmqCommand<T, R> | RmqEvent<T>, priority?: number, customHeaders?: Record<string, string>, trxId?: string): RmqRecord<T>;
|
|
48
50
|
/**
|
|
49
51
|
* Merge default options with provided options
|
|
50
52
|
*
|
|
@@ -29,7 +29,7 @@ class MicroClient {
|
|
|
29
29
|
const pattern = this.getPattern(command);
|
|
30
30
|
const $ = this.clientProxy
|
|
31
31
|
.send(pattern, this.toRmqRecord(command, options.priority, options.customHeaders))
|
|
32
|
-
.pipe((0, rxjs_1.tap)((
|
|
32
|
+
.pipe((0, rxjs_1.tap)(() => this.logger.log({ msg: 'RMQ command sent', pattern, command })), (0, rxjs_1.timeout)(options.timeout.as('milliseconds')), (0, rxjs_1.catchError)((e) => {
|
|
33
33
|
this.logger.error({ msg: 'RMQ command error', pattern, payload: command, error: e });
|
|
34
34
|
return (0, rxjs_1.throwError)(() => e);
|
|
35
35
|
}));
|
|
@@ -57,7 +57,7 @@ class MicroClient {
|
|
|
57
57
|
emit(event, options) {
|
|
58
58
|
options = this.mergeWithDefaultOptions(options);
|
|
59
59
|
const pattern = event.constructor.pattern;
|
|
60
|
-
return this.clientProxy.emit(pattern, event.data).pipe((0, rxjs_1.tap)((
|
|
60
|
+
return this.clientProxy.emit(pattern, event.data).pipe((0, rxjs_1.tap)(() => this.logger.log({ msg: 'RMQ event sent', pattern, event })), (0, rxjs_1.timeout)(options.timeout.as('milliseconds')), (0, rxjs_1.catchError)((e) => {
|
|
61
61
|
this.logger.error({ msg: 'RMQ event error', pattern, payload: event, error: e });
|
|
62
62
|
return (0, rxjs_1.throwError)(() => e);
|
|
63
63
|
}));
|
|
@@ -69,11 +69,17 @@ class MicroClient {
|
|
|
69
69
|
* @param command
|
|
70
70
|
* @param priority
|
|
71
71
|
* @param customHeaders
|
|
72
|
+
* @param trxId
|
|
72
73
|
*/
|
|
73
|
-
toRmqRecord(command, priority = 3, customHeaders = {}) {
|
|
74
|
+
toRmqRecord(command, priority = 3, customHeaders = {}, trxId) {
|
|
74
75
|
return new microservices_1.RmqRecordBuilder(command.data)
|
|
75
76
|
.setOptions({
|
|
76
|
-
headers: {
|
|
77
|
+
headers: {
|
|
78
|
+
'request-id': this.clsService.getId(),
|
|
79
|
+
user: JSON.stringify(this.user?.dto),
|
|
80
|
+
trxId,
|
|
81
|
+
...customHeaders,
|
|
82
|
+
},
|
|
77
83
|
priority,
|
|
78
84
|
})
|
|
79
85
|
.build();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"micro.client.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-micro/micro.client.ts"],"names":[],"mappings":";;;AAAA,mDAAoD;AAEpD,2CAAwC;AACxC,yDAAiF;AACjF,yDAAoD;AACpD,mCAA6B;AAC7B,iCAAiC;AAEjC,+BAA6E;
|
|
1
|
+
{"version":3,"file":"micro.client.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-micro/micro.client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./redlock.module"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./redlock.service"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/gg-core/src/gg-redlock/index.ts"],"names":[],"mappings":";;;AAAA,2DAAiC;AACjC,4DAAkC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RedlockModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const redlock_options_1 = require("./redlock.options");
|
|
7
|
+
const redlock_service_1 = require("./redlock.service");
|
|
8
|
+
let RedlockModule = class RedlockModule extends redlock_options_1.RedlockOpts.ConfigurableModuleClass {
|
|
9
|
+
};
|
|
10
|
+
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
|
+
})
|
|
16
|
+
], RedlockModule);
|
|
17
|
+
//# sourceMappingURL=redlock.module.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
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
|
+
};
|
|
13
|
+
//# sourceMappingURL=redlock.options.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
}
|
|
8
|
+
export declare class RedlockService {
|
|
9
|
+
private readonly options;
|
|
10
|
+
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>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var RedlockService_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.RedlockService = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const ioredis_1 = require("ioredis");
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const luxon_1 = require("luxon");
|
|
10
|
+
const redis_semaphore_1 = require("redis-semaphore");
|
|
11
|
+
const redlock_options_1 = require("./redlock.options");
|
|
12
|
+
let RedlockService = RedlockService_1 = class RedlockService {
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.options = options;
|
|
15
|
+
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
|
+
}
|
|
32
|
+
getLock(resource, identifier) {
|
|
33
|
+
return new redis_semaphore_1.RedlockMutex(this.clients, resource, {
|
|
34
|
+
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 }),
|
|
41
|
+
refreshInterval: 0,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
acquire(resources) {
|
|
45
|
+
return Promise.all(resources.map((resource) => this.acquireOne(resource)));
|
|
46
|
+
}
|
|
47
|
+
tryAcquire(resources) {
|
|
48
|
+
return Promise.all(resources.map((resource) => this.tryAcquireOne(resource)));
|
|
49
|
+
}
|
|
50
|
+
release(resources) {
|
|
51
|
+
return Promise.all(resources.map((lock) => this.releaseOne(lock)));
|
|
52
|
+
}
|
|
53
|
+
tryAcquireOne(mutex) {
|
|
54
|
+
return mutex.tryAcquire();
|
|
55
|
+
}
|
|
56
|
+
async acquireOne(mutex) {
|
|
57
|
+
try {
|
|
58
|
+
this.logger.log({
|
|
59
|
+
msg: `Acquire lock`,
|
|
60
|
+
resource: (0, lodash_1.get)(mutex, '_key', mutex.identifier),
|
|
61
|
+
identifier: mutex.identifier,
|
|
62
|
+
});
|
|
63
|
+
await mutex.acquire();
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
if (!(e instanceof redis_semaphore_1.TimeoutError) || !(e instanceof redis_semaphore_1.LostLockError))
|
|
67
|
+
throw e;
|
|
68
|
+
if (e instanceof redis_semaphore_1.TimeoutError) {
|
|
69
|
+
this.logger.warn({
|
|
70
|
+
msg: `Resource busy`,
|
|
71
|
+
resource: (0, lodash_1.get)(mutex, '_key', mutex.identifier),
|
|
72
|
+
identifier: mutex.identifier,
|
|
73
|
+
});
|
|
74
|
+
throw new common_1.HttpException({ message: 'Resource locked' }, 423);
|
|
75
|
+
}
|
|
76
|
+
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
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return mutex;
|
|
87
|
+
}
|
|
88
|
+
releaseOne(mutex) {
|
|
89
|
+
this.logger.log({
|
|
90
|
+
msg: `Release lock`,
|
|
91
|
+
resource: (0, lodash_1.get)(mutex, '_key', mutex.identifier),
|
|
92
|
+
identifier: mutex.identifier,
|
|
93
|
+
});
|
|
94
|
+
return mutex.release();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
exports.RedlockService = RedlockService;
|
|
98
|
+
exports.RedlockService = RedlockService = RedlockService_1 = tslib_1.__decorate([
|
|
99
|
+
(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])
|
|
102
|
+
], RedlockService);
|
|
103
|
+
//# sourceMappingURL=redlock.service.js.map
|
|
@@ -0,0 +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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"}
|
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -11,4 +11,5 @@ 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-redlock"), exports);
|
|
14
15
|
//# 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"}
|
|
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"}
|