akeyless-server-commons 1.0.136-test.1 → 1.0.136-test.3

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.
@@ -8,3 +8,4 @@ export * from "./email_helpers";
8
8
  export * from "./phone_number_helpers";
9
9
  export * from "./tasks_helpers";
10
10
  export * from "./boards_helpers";
11
+ export * from "./redis";
@@ -24,4 +24,5 @@ __exportStar(require("./email_helpers"), exports);
24
24
  __exportStar(require("./phone_number_helpers"), exports);
25
25
  __exportStar(require("./tasks_helpers"), exports);
26
26
  __exportStar(require("./boards_helpers"), exports);
27
+ __exportStar(require("./redis"), exports);
27
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,qDAAmC;AACnC,0CAAwB;AACxB,iDAA+B;AAC/B,kDAAgC;AAChC,yDAAuC;AACvC,kDAAgC;AAChC,yDAAuC;AACvC,kDAAgC;AAChC,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,qDAAmC;AACnC,0CAAwB;AACxB,iDAA+B;AAC/B,kDAAgC;AAChC,yDAAuC;AACvC,kDAAgC;AAChC,yDAAuC;AACvC,kDAAgC;AAChC,mDAAiC;AACjC,0CAAwB"}
@@ -0,0 +1,5 @@
1
+ import Redis from "ioredis";
2
+ import { OnSnapshotConfig } from "../../types";
3
+ export declare const redis_commander: Redis;
4
+ export declare const redis_listener: Redis;
5
+ export declare const cache_snapshots_bulk: (configs: OnSnapshotConfig[]) => Promise<void>;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.cache_snapshots_bulk = exports.redis_listener = exports.redis_commander = void 0;
16
+ const ioredis_1 = __importDefault(require("ioredis"));
17
+ const akeyless_types_commons_1 = require("akeyless-types-commons");
18
+ const keys_1 = require("./keys");
19
+ const global_helpers_1 = require("../global_helpers");
20
+ const managers_1 = require("../../managers");
21
+ const { redis_ip } = (0, global_helpers_1.init_env_variables)(["redis_ip"]);
22
+ exports.redis_commander = new ioredis_1.default({ host: redis_ip });
23
+ exports.redis_listener = new ioredis_1.default({ host: redis_ip });
24
+ exports.redis_commander.on("connect", () => managers_1.logger.log("✅ Redis Commander connected"));
25
+ exports.redis_commander.on("error", (err) => managers_1.logger.error("❌ Redis Commander error", err));
26
+ exports.redis_listener.on("connect", () => {
27
+ const redis_pattern = (0, keys_1.get_collection_keys)(akeyless_types_commons_1.REDIS_UPDATES_PREFIX);
28
+ exports.redis_listener
29
+ .psubscribe(redis_pattern)
30
+ .then(() => {
31
+ managers_1.logger.log(`✅ Successfully subscribed to Redis pattern: ${redis_pattern}`);
32
+ })
33
+ .catch((err) => managers_1.logger.error(`❌ Failed to psubscribe to ${redis_pattern}`, err));
34
+ });
35
+ exports.redis_listener.on("error", (err) => managers_1.logger.error("❌ Redis Listener error", err));
36
+ const subscription_collections = new Set();
37
+ const cache_snapshots_bulk = (configs) => __awaiter(void 0, void 0, void 0, function* () {
38
+ var _a;
39
+ for (const config of configs) {
40
+ const { collection_name, on_first_time, on_add, on_modify, on_remove, extra_parsers, cache_name = collection_name } = config;
41
+ if (subscription_collections.has(cache_name)) {
42
+ continue;
43
+ }
44
+ subscription_collections.add(cache_name);
45
+ const init_data = yield get_collection_data(collection_name);
46
+ (_a = config.on_first_time) === null || _a === void 0 ? void 0 : _a.call(config, init_data, config);
47
+ extra_parsers === null || extra_parsers === void 0 ? void 0 : extra_parsers.forEach((parser) => { var _a; return (_a = parser === null || parser === void 0 ? void 0 : parser.on_first_time) === null || _a === void 0 ? void 0 : _a.call(parser, init_data, config); });
48
+ }
49
+ exports.redis_listener.on("pmessage", (pattern, channel, message) => __awaiter(void 0, void 0, void 0, function* () {
50
+ var _a, _b, _c, _d, _e, _f;
51
+ const { collection_name, update_type, data: docs } = JSON.parse(message);
52
+ const config = configs.find((config) => config.collection_name === collection_name);
53
+ if (!config) {
54
+ return;
55
+ }
56
+ switch (update_type) {
57
+ case "add":
58
+ (_a = config.on_add) === null || _a === void 0 ? void 0 : _a.call(config, docs, config);
59
+ (_b = config.extra_parsers) === null || _b === void 0 ? void 0 : _b.forEach((parser) => { var _a; return (_a = parser === null || parser === void 0 ? void 0 : parser.on_add) === null || _a === void 0 ? void 0 : _a.call(parser, docs, config); });
60
+ break;
61
+ case "delete":
62
+ (_c = config.on_remove) === null || _c === void 0 ? void 0 : _c.call(config, docs, config);
63
+ (_d = config.extra_parsers) === null || _d === void 0 ? void 0 : _d.forEach((parser) => { var _a; return (_a = parser === null || parser === void 0 ? void 0 : parser.on_remove) === null || _a === void 0 ? void 0 : _a.call(parser, docs, config); });
64
+ break;
65
+ case "update":
66
+ (_e = config.on_modify) === null || _e === void 0 ? void 0 : _e.call(config, docs, config);
67
+ (_f = config.extra_parsers) === null || _f === void 0 ? void 0 : _f.forEach((parser) => { var _a; return (_a = parser === null || parser === void 0 ? void 0 : parser.on_modify) === null || _a === void 0 ? void 0 : _a.call(parser, docs, config); });
68
+ break;
69
+ default:
70
+ break;
71
+ }
72
+ }));
73
+ });
74
+ exports.cache_snapshots_bulk = cache_snapshots_bulk;
75
+ const get_collection_data = (collection_name) => __awaiter(void 0, void 0, void 0, function* () {
76
+ const keys = yield (0, keys_1.scan_redis_keys)((0, keys_1.get_collection_keys)(collection_name), exports.redis_commander);
77
+ let collection_data = [];
78
+ if (keys.length > 0) {
79
+ const values = yield exports.redis_commander.mget(keys);
80
+ collection_data = values.filter(Boolean).map((v) => JSON.parse(v).data);
81
+ }
82
+ return collection_data;
83
+ });
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/helpers/redis/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import Redis from "ioredis";
2
+ export declare const get_doc_key: (collection: string, doc_id: string) => string;
3
+ export declare const get_collection_keys: (collection: string) => string;
4
+ export declare const get_channel: (...args: string[]) => string;
5
+ export declare const scan_redis_keys: (pattern: string, redis_publisher: Redis) => Promise<string[]>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.scan_redis_keys = exports.get_channel = exports.get_collection_keys = exports.get_doc_key = void 0;
13
+ const akeyless_types_commons_1 = require("akeyless-types-commons");
14
+ const get_key = (...args) => {
15
+ return args.join(":");
16
+ };
17
+ const get_doc_key = (collection, doc_id) => {
18
+ return get_key(collection, doc_id);
19
+ };
20
+ exports.get_doc_key = get_doc_key;
21
+ const get_collection_keys = (collection) => {
22
+ return get_key(collection, "*");
23
+ };
24
+ exports.get_collection_keys = get_collection_keys;
25
+ const get_channel = (...args) => {
26
+ return get_key(akeyless_types_commons_1.REDIS_UPDATES_PREFIX, ...args);
27
+ };
28
+ exports.get_channel = get_channel;
29
+ const scan_redis_keys = (pattern, redis_publisher) => __awaiter(void 0, void 0, void 0, function* () {
30
+ const found_keys = [];
31
+ let cursor = "0";
32
+ do {
33
+ const [next_cursor, keys] = yield redis_publisher.scan(cursor, "MATCH", pattern, "COUNT", 100);
34
+ cursor = next_cursor;
35
+ found_keys.push(...keys);
36
+ } while (cursor !== "0");
37
+ return found_keys;
38
+ });
39
+ exports.scan_redis_keys = scan_redis_keys;
40
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../src/helpers/redis/keys.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mEAA8D;AAG9D,MAAM,OAAO,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEK,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,MAAc,EAAE,EAAE;IAC9D,OAAO,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB;AAEK,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAE,EAAE;IACtD,OAAO,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AAFW,QAAA,mBAAmB,uBAE9B;AAEK,MAAM,WAAW,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IAC7C,OAAO,OAAO,CAAC,6CAAoB,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AAFW,QAAA,WAAW,eAEtB;AAEK,MAAM,eAAe,GAAG,CAAO,OAAe,EAAE,eAAsB,EAAqB,EAAE;IAChG,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,GAAG,CAAC;QACA,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC/F,MAAM,GAAG,WAAW,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC,QAAQ,MAAM,KAAK,GAAG,EAAE;IACzB,OAAO,UAAU,CAAC;AACtB,CAAC,CAAA,CAAC;AATW,QAAA,eAAe,mBAS1B"}
@@ -8,3 +8,4 @@ export * from "./email_helpers";
8
8
  export * from "./phone_number_helpers";
9
9
  export * from "./tasks_helpers";
10
10
  export * from "./boards_helpers";
11
+ export * from "./redis";
@@ -8,4 +8,5 @@ export * from "./email_helpers";
8
8
  export * from "./phone_number_helpers";
9
9
  export * from "./tasks_helpers";
10
10
  export * from "./boards_helpers";
11
+ export * from "./redis";
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ import Redis from "ioredis";
2
+ import { OnSnapshotConfig } from "../../types";
3
+ export declare const redis_commander: Redis;
4
+ export declare const redis_listener: Redis;
5
+ export declare const cache_snapshots_bulk: (configs: OnSnapshotConfig[]) => Promise<void>;
@@ -0,0 +1,77 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import Redis from "ioredis";
11
+ import { REDIS_UPDATES_PREFIX } from "akeyless-types-commons";
12
+ import { get_collection_keys, scan_redis_keys } from "./keys";
13
+ import { init_env_variables } from "../global_helpers";
14
+ import { logger } from "../../managers";
15
+ const { redis_ip } = init_env_variables(["redis_ip"]);
16
+ export const redis_commander = new Redis({ host: redis_ip });
17
+ export const redis_listener = new Redis({ host: redis_ip });
18
+ redis_commander.on("connect", () => logger.log("✅ Redis Commander connected"));
19
+ redis_commander.on("error", (err) => logger.error("❌ Redis Commander error", err));
20
+ redis_listener.on("connect", () => {
21
+ const redis_pattern = get_collection_keys(REDIS_UPDATES_PREFIX);
22
+ redis_listener
23
+ .psubscribe(redis_pattern)
24
+ .then(() => {
25
+ logger.log(`✅ Successfully subscribed to Redis pattern: ${redis_pattern}`);
26
+ })
27
+ .catch((err) => logger.error(`❌ Failed to psubscribe to ${redis_pattern}`, err));
28
+ });
29
+ redis_listener.on("error", (err) => logger.error("❌ Redis Listener error", err));
30
+ const subscription_collections = new Set();
31
+ export const cache_snapshots_bulk = (configs) => __awaiter(void 0, void 0, void 0, function* () {
32
+ var _a;
33
+ for (const config of configs) {
34
+ const { collection_name, on_first_time, on_add, on_modify, on_remove, extra_parsers, cache_name = collection_name } = config;
35
+ if (subscription_collections.has(cache_name)) {
36
+ continue;
37
+ }
38
+ subscription_collections.add(cache_name);
39
+ const init_data = yield get_collection_data(collection_name);
40
+ (_a = config.on_first_time) === null || _a === void 0 ? void 0 : _a.call(config, init_data, config);
41
+ extra_parsers === null || extra_parsers === void 0 ? void 0 : extra_parsers.forEach((parser) => { var _a; return (_a = parser === null || parser === void 0 ? void 0 : parser.on_first_time) === null || _a === void 0 ? void 0 : _a.call(parser, init_data, config); });
42
+ }
43
+ redis_listener.on("pmessage", (pattern, channel, message) => __awaiter(void 0, void 0, void 0, function* () {
44
+ var _a, _b, _c, _d, _e, _f;
45
+ const { collection_name, update_type, data: docs } = JSON.parse(message);
46
+ const config = configs.find((config) => config.collection_name === collection_name);
47
+ if (!config) {
48
+ return;
49
+ }
50
+ switch (update_type) {
51
+ case "add":
52
+ (_a = config.on_add) === null || _a === void 0 ? void 0 : _a.call(config, docs, config);
53
+ (_b = config.extra_parsers) === null || _b === void 0 ? void 0 : _b.forEach((parser) => { var _a; return (_a = parser === null || parser === void 0 ? void 0 : parser.on_add) === null || _a === void 0 ? void 0 : _a.call(parser, docs, config); });
54
+ break;
55
+ case "delete":
56
+ (_c = config.on_remove) === null || _c === void 0 ? void 0 : _c.call(config, docs, config);
57
+ (_d = config.extra_parsers) === null || _d === void 0 ? void 0 : _d.forEach((parser) => { var _a; return (_a = parser === null || parser === void 0 ? void 0 : parser.on_remove) === null || _a === void 0 ? void 0 : _a.call(parser, docs, config); });
58
+ break;
59
+ case "update":
60
+ (_e = config.on_modify) === null || _e === void 0 ? void 0 : _e.call(config, docs, config);
61
+ (_f = config.extra_parsers) === null || _f === void 0 ? void 0 : _f.forEach((parser) => { var _a; return (_a = parser === null || parser === void 0 ? void 0 : parser.on_modify) === null || _a === void 0 ? void 0 : _a.call(parser, docs, config); });
62
+ break;
63
+ default:
64
+ break;
65
+ }
66
+ }));
67
+ });
68
+ const get_collection_data = (collection_name) => __awaiter(void 0, void 0, void 0, function* () {
69
+ const keys = yield scan_redis_keys(get_collection_keys(collection_name), redis_commander);
70
+ let collection_data = [];
71
+ if (keys.length > 0) {
72
+ const values = yield redis_commander.mget(keys);
73
+ collection_data = values.filter(Boolean).map((v) => JSON.parse(v).data);
74
+ }
75
+ return collection_data;
76
+ });
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/helpers/redis/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import Redis from "ioredis";
2
+ export declare const get_doc_key: (collection: string, doc_id: string) => string;
3
+ export declare const get_collection_keys: (collection: string) => string;
4
+ export declare const get_channel: (...args: string[]) => string;
5
+ export declare const scan_redis_keys: (pattern: string, redis_publisher: Redis) => Promise<string[]>;
@@ -0,0 +1,33 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { REDIS_UPDATES_PREFIX } from "akeyless-types-commons";
11
+ const get_key = (...args) => {
12
+ return args.join(":");
13
+ };
14
+ export const get_doc_key = (collection, doc_id) => {
15
+ return get_key(collection, doc_id);
16
+ };
17
+ export const get_collection_keys = (collection) => {
18
+ return get_key(collection, "*");
19
+ };
20
+ export const get_channel = (...args) => {
21
+ return get_key(REDIS_UPDATES_PREFIX, ...args);
22
+ };
23
+ export const scan_redis_keys = (pattern, redis_publisher) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const found_keys = [];
25
+ let cursor = "0";
26
+ do {
27
+ const [next_cursor, keys] = yield redis_publisher.scan(cursor, "MATCH", pattern, "COUNT", 100);
28
+ cursor = next_cursor;
29
+ found_keys.push(...keys);
30
+ } while (cursor !== "0");
31
+ return found_keys;
32
+ });
33
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../src/helpers/redis/keys.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,OAAO,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,MAAc,EAAE,EAAE;IAC9D,OAAO,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,UAAkB,EAAE,EAAE;IACtD,OAAO,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IAC7C,OAAO,OAAO,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAO,OAAe,EAAE,eAAsB,EAAqB,EAAE;IAChG,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,GAAG,CAAC;QACA,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC/F,MAAM,GAAG,WAAW,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC,QAAQ,MAAM,KAAK,GAAG,EAAE;IACzB,OAAO,UAAU,CAAC;AACtB,CAAC,CAAA,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akeyless-server-commons",
3
- "version": "1.0.136-test.1",
3
+ "version": "1.0.136-test.3",
4
4
  "scripts": {
5
5
  "build:cjs": "tsc --project tsconfig.cjs.json",
6
6
  "build:esm": "tsc --project tsconfig.esm.json",