@lobu/core 4.3.0 → 6.0.0

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/__tests__/fixtures/index.d.ts +0 -1
  2. package/dist/__tests__/fixtures/index.d.ts.map +1 -1
  3. package/dist/__tests__/fixtures/index.js +1 -3
  4. package/dist/__tests__/fixtures/index.js.map +1 -1
  5. package/dist/__tests__/fixtures/mock-queue.d.ts +0 -3
  6. package/dist/__tests__/fixtures/mock-queue.d.ts.map +1 -1
  7. package/dist/__tests__/fixtures/mock-queue.js +0 -5
  8. package/dist/__tests__/fixtures/mock-queue.js.map +1 -1
  9. package/dist/agent-store.d.ts +8 -8
  10. package/dist/agent-store.d.ts.map +1 -1
  11. package/dist/agent-store.js +4 -0
  12. package/dist/agent-store.js.map +1 -1
  13. package/dist/api-types.d.ts +2 -22
  14. package/dist/api-types.d.ts.map +1 -1
  15. package/dist/constants.d.ts +1 -15
  16. package/dist/constants.d.ts.map +1 -1
  17. package/dist/constants.js +2 -17
  18. package/dist/constants.js.map +1 -1
  19. package/dist/errors.d.ts +0 -3
  20. package/dist/errors.d.ts.map +1 -1
  21. package/dist/errors.js +0 -5
  22. package/dist/errors.js.map +1 -1
  23. package/dist/index.d.ts +5 -7
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +2 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/lobu-toml-schema.d.ts +8 -87
  28. package/dist/lobu-toml-schema.d.ts.map +1 -1
  29. package/dist/lobu-toml-schema.js +8 -62
  30. package/dist/lobu-toml-schema.js.map +1 -1
  31. package/dist/sentry.d.ts.map +1 -1
  32. package/dist/sentry.js +0 -1
  33. package/dist/sentry.js.map +1 -1
  34. package/dist/trace.d.ts +1 -1
  35. package/dist/trace.js +1 -1
  36. package/dist/types.d.ts +4 -61
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/utils/env.d.ts +1 -0
  39. package/dist/utils/env.d.ts.map +1 -1
  40. package/dist/utils/env.js +0 -3
  41. package/dist/utils/env.js.map +1 -1
  42. package/dist/worker/auth.d.ts +0 -10
  43. package/dist/worker/auth.d.ts.map +1 -1
  44. package/dist/worker/auth.js +8 -6
  45. package/dist/worker/auth.js.map +1 -1
  46. package/package.json +1 -2
  47. package/dist/__tests__/fixtures/mock-redis.d.ts +0 -60
  48. package/dist/__tests__/fixtures/mock-redis.d.ts.map +0 -1
  49. package/dist/__tests__/fixtures/mock-redis.js +0 -295
  50. package/dist/__tests__/fixtures/mock-redis.js.map +0 -1
  51. package/dist/redis/base-store.d.ts +0 -60
  52. package/dist/redis/base-store.d.ts.map +0 -1
  53. package/dist/redis/base-store.js +0 -156
  54. package/dist/redis/base-store.js.map +0 -1
  55. package/dist/redis/json-helpers.d.ts +0 -8
  56. package/dist/redis/json-helpers.d.ts.map +0 -1
  57. package/dist/redis/json-helpers.js +0 -52
  58. package/dist/redis/json-helpers.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobu/core",
3
- "version": "4.3.0",
3
+ "version": "6.0.0",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Core types and utilities for Lobu agent platform",
6
6
  "repository": {
@@ -38,7 +38,6 @@
38
38
  "@opentelemetry/resources": "^1.30.0",
39
39
  "@opentelemetry/semantic-conventions": "^1.28.0",
40
40
  "@sentry/node": "^10.23.0",
41
- "ioredis": "^5.4.1",
42
41
  "winston": "^3.17.0",
43
42
  "zod": "^4.1.12"
44
43
  },
@@ -1,60 +0,0 @@
1
- /**
2
- * Unified in-memory Redis mock for testing.
3
- *
4
- * Replaces three duplicated implementations:
5
- * - MockRedisClient in gateway setup.ts
6
- * - FakeRedis in system-message-limiter.test.ts
7
- * - queue mock getRedisClient
8
- *
9
- * Supports string, set, list, and hash operations with TTL tracking.
10
- */
11
- type SetMode = "NX" | undefined;
12
- export declare class MockRedisClient {
13
- private store;
14
- private sets;
15
- private lists;
16
- private currentTime;
17
- on(_event: string, _callback: (...args: any[]) => void): this;
18
- once(event: string, callback: (...args: any[]) => void): this;
19
- get status(): string;
20
- exists(key: string): Promise<number>;
21
- get(key: string): Promise<string | null>;
22
- /**
23
- * ioredis-compatible set with optional EX / NX flags.
24
- * Supports: set(key, value), set(key, value, "EX", sec), set(key, value, "EX", sec, "NX")
25
- */
26
- set(key: string, value: string, exTokenOrTtl?: "EX" | number, exSeconds?: number, mode?: SetMode): Promise<"OK" | null>;
27
- setex(key: string, ttlSeconds: number, value: string): Promise<void>;
28
- incr(key: string): Promise<number>;
29
- del(...keys: string[]): Promise<number>;
30
- getdel(key: string): Promise<string | null>;
31
- expire(key: string, seconds: number): Promise<number>;
32
- ttl(key: string): Promise<number>;
33
- sadd(key: string, ...members: string[]): Promise<number>;
34
- srem(key: string, ...members: string[]): Promise<number>;
35
- smembers(key: string): Promise<string[]>;
36
- sismember(key: string, member: string): Promise<number>;
37
- rpush(key: string, ...values: string[]): Promise<number>;
38
- lrange(key: string, start: number, stop: number): Promise<string[]>;
39
- scan(_cursor: string, ...args: (string | number)[]): Promise<[string, string[]]>;
40
- mget(...keys: string[]): Promise<(string | null)[]>;
41
- watch(..._keys: string[]): Promise<"OK">;
42
- unwatch(): Promise<"OK">;
43
- multi(): {
44
- set(key: string, value: string): any;
45
- exec(): Promise<[null, string][]>;
46
- };
47
- pipeline(): {
48
- set(key: string, value: string): any;
49
- setex(key: string, ttl: number, value: string): any;
50
- sadd(key: string, ...members: string[]): any;
51
- srem(key: string, ...members: string[]): any;
52
- del(...keys: string[]): any;
53
- exec(): Promise<Array<[null, any]>>;
54
- };
55
- advanceTime(ms: number): void;
56
- has(key: string): boolean;
57
- clear(): void;
58
- }
59
- export {};
60
- //# sourceMappingURL=mock-redis.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock-redis.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-redis.ts"],"names":[],"mappings":"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"}
@@ -1,295 +0,0 @@
1
- "use strict";
2
- /**
3
- * Unified in-memory Redis mock for testing.
4
- *
5
- * Replaces three duplicated implementations:
6
- * - MockRedisClient in gateway setup.ts
7
- * - FakeRedis in system-message-limiter.test.ts
8
- * - queue mock getRedisClient
9
- *
10
- * Supports string, set, list, and hash operations with TTL tracking.
11
- */
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.MockRedisClient = void 0;
14
- class MockRedisClient {
15
- constructor() {
16
- this.store = new Map();
17
- this.sets = new Map();
18
- this.lists = new Map();
19
- this.currentTime = Date.now();
20
- }
21
- // --- ioredis event surface (used by state-ioredis adapter) ---
22
- on(_event, _callback) {
23
- // No-op for mock events
24
- return this;
25
- }
26
- once(event, callback) {
27
- // Fire "ready" synchronously so the adapter's initial-connection wait
28
- // resolves immediately instead of timing out against a real socket.
29
- if (event === "ready") {
30
- setTimeout(callback, 0);
31
- }
32
- return this;
33
- }
34
- get status() {
35
- return "ready";
36
- }
37
- // --- String operations ---
38
- async exists(key) {
39
- const entry = this.store.get(key);
40
- if (!entry)
41
- return 0;
42
- if (entry.ttl && entry.ttl < this.currentTime) {
43
- this.store.delete(key);
44
- return 0;
45
- }
46
- return 1;
47
- }
48
- async get(key) {
49
- const entry = this.store.get(key);
50
- if (!entry)
51
- return null;
52
- if (entry.ttl && entry.ttl < this.currentTime) {
53
- this.store.delete(key);
54
- return null;
55
- }
56
- return entry.value;
57
- }
58
- /**
59
- * ioredis-compatible set with optional EX / NX flags.
60
- * Supports: set(key, value), set(key, value, "EX", sec), set(key, value, "EX", sec, "NX")
61
- */
62
- async set(key, value, exTokenOrTtl, exSeconds, mode) {
63
- // NX check must be synchronous to avoid TOCTOU race
64
- if (mode === "NX") {
65
- const entry = this.store.get(key);
66
- const alive = entry && (!entry.ttl || entry.ttl >= this.currentTime);
67
- if (alive)
68
- return null;
69
- }
70
- let ttl;
71
- if (exTokenOrTtl === "EX" && typeof exSeconds === "number") {
72
- ttl = this.currentTime + exSeconds * 1000;
73
- }
74
- else if (typeof exTokenOrTtl === "number") {
75
- ttl = this.currentTime + exTokenOrTtl * 1000;
76
- }
77
- this.store.set(key, { value, ttl });
78
- return "OK";
79
- }
80
- async setex(key, ttlSeconds, value) {
81
- const ttl = this.currentTime + ttlSeconds * 1000;
82
- this.store.set(key, { value, ttl });
83
- }
84
- async incr(key) {
85
- const current = await this.get(key);
86
- const nextValue = (current ? Number.parseInt(current, 10) : 0) + 1;
87
- const entry = this.store.get(key);
88
- this.store.set(key, {
89
- value: String(nextValue),
90
- ttl: entry?.ttl,
91
- });
92
- return nextValue;
93
- }
94
- async del(...keys) {
95
- let deleted = 0;
96
- for (const key of keys) {
97
- const existed = this.store.has(key) || this.sets.has(key) || this.lists.has(key);
98
- this.store.delete(key);
99
- this.sets.delete(key);
100
- this.lists.delete(key);
101
- if (existed)
102
- deleted++;
103
- }
104
- return deleted;
105
- }
106
- async getdel(key) {
107
- const value = await this.get(key);
108
- if (value !== null) {
109
- await this.del(key);
110
- }
111
- return value;
112
- }
113
- async expire(key, seconds) {
114
- if (this.store.has(key)) {
115
- const entry = this.store.get(key);
116
- entry.ttl = this.currentTime + seconds * 1000;
117
- return 1;
118
- }
119
- return 0;
120
- }
121
- async ttl(key) {
122
- const entry = this.store.get(key);
123
- if (!entry)
124
- return -2;
125
- if (!entry.ttl)
126
- return -1;
127
- if (entry.ttl < this.currentTime) {
128
- this.store.delete(key);
129
- return -2;
130
- }
131
- return Math.max(0, Math.ceil((entry.ttl - this.currentTime) / 1000));
132
- }
133
- // --- Set operations ---
134
- async sadd(key, ...members) {
135
- if (!this.sets.has(key))
136
- this.sets.set(key, new Set());
137
- const set = this.sets.get(key);
138
- let added = 0;
139
- for (const m of members) {
140
- if (!set.has(m)) {
141
- set.add(m);
142
- added++;
143
- }
144
- }
145
- return added;
146
- }
147
- async srem(key, ...members) {
148
- const set = this.sets.get(key);
149
- if (!set)
150
- return 0;
151
- let removed = 0;
152
- for (const m of members) {
153
- if (set.delete(m))
154
- removed++;
155
- }
156
- return removed;
157
- }
158
- async smembers(key) {
159
- const set = this.sets.get(key);
160
- return set ? Array.from(set) : [];
161
- }
162
- async sismember(key, member) {
163
- const set = this.sets.get(key);
164
- return set?.has(member) ? 1 : 0;
165
- }
166
- // --- List operations ---
167
- async rpush(key, ...values) {
168
- if (!this.lists.has(key))
169
- this.lists.set(key, []);
170
- const list = this.lists.get(key);
171
- list.push(...values);
172
- return list.length;
173
- }
174
- async lrange(key, start, stop) {
175
- const list = this.lists.get(key);
176
- if (!list)
177
- return [];
178
- const end = stop === -1 ? list.length : stop + 1;
179
- return list.slice(start, end);
180
- }
181
- // --- Scan ---
182
- async scan(_cursor, ...args) {
183
- // Extract pattern from args: "MATCH", pattern, "COUNT", count
184
- let pattern = "*";
185
- for (let i = 0; i < args.length - 1; i++) {
186
- if (String(args[i]).toUpperCase() === "MATCH") {
187
- pattern = String(args[i + 1]);
188
- break;
189
- }
190
- }
191
- const allKeys = new Set();
192
- for (const key of this.store.keys())
193
- allKeys.add(key);
194
- for (const key of this.sets.keys())
195
- allKeys.add(key);
196
- for (const key of this.lists.keys())
197
- allKeys.add(key);
198
- const matching = [];
199
- for (const key of allKeys) {
200
- if (pattern === "*") {
201
- matching.push(key);
202
- }
203
- else if (pattern.endsWith("*")) {
204
- const prefix = pattern.slice(0, -1);
205
- if (key.startsWith(prefix))
206
- matching.push(key);
207
- }
208
- else if (key === pattern) {
209
- matching.push(key);
210
- }
211
- }
212
- return ["0", matching];
213
- }
214
- // --- Batch get ---
215
- async mget(...keys) {
216
- return Promise.all(keys.map((key) => this.get(key)));
217
- }
218
- // --- Watch / Unwatch (no-ops) ---
219
- async watch(..._keys) {
220
- return "OK";
221
- }
222
- async unwatch() {
223
- return "OK";
224
- }
225
- // --- Multi ---
226
- multi() {
227
- const pending = [];
228
- const self = this;
229
- const chain = {
230
- set(key, value) {
231
- pending.push({ key, value });
232
- return chain;
233
- },
234
- async exec() {
235
- const results = [];
236
- for (const op of pending) {
237
- self.store.set(op.key, { value: op.value });
238
- results.push([null, "OK"]);
239
- }
240
- return results;
241
- },
242
- };
243
- return chain;
244
- }
245
- // --- Pipeline ---
246
- pipeline() {
247
- const ops = [];
248
- const self = this;
249
- const chain = {
250
- set(key, value) {
251
- ops.push(() => self.set(key, value));
252
- return chain;
253
- },
254
- setex(key, ttl, value) {
255
- ops.push(() => self.setex(key, ttl, value));
256
- return chain;
257
- },
258
- sadd(key, ...members) {
259
- ops.push(() => self.sadd(key, ...members));
260
- return chain;
261
- },
262
- srem(key, ...members) {
263
- ops.push(() => self.srem(key, ...members));
264
- return chain;
265
- },
266
- del(...keys) {
267
- ops.push(() => self.del(...keys));
268
- return chain;
269
- },
270
- async exec() {
271
- const results = [];
272
- for (const op of ops) {
273
- const result = await op();
274
- results.push([null, result ?? "OK"]);
275
- }
276
- return results;
277
- },
278
- };
279
- return chain;
280
- }
281
- // --- Test helpers ---
282
- advanceTime(ms) {
283
- this.currentTime += ms;
284
- }
285
- has(key) {
286
- return this.store.has(key);
287
- }
288
- clear() {
289
- this.store.clear();
290
- this.sets.clear();
291
- this.lists.clear();
292
- }
293
- }
294
- exports.MockRedisClient = MockRedisClient;
295
- //# sourceMappingURL=mock-redis.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock-redis.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-redis.ts"],"names":[],"mappings":"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"}
@@ -1,60 +0,0 @@
1
- import type Redis from "ioredis";
2
- import { type Logger } from "../logger";
3
- export interface RedisStoreConfig {
4
- redis: Redis;
5
- keyPrefix: string;
6
- loggerName: string;
7
- }
8
- /**
9
- * Base class for all Redis-backed stores
10
- * Provides common CRUD operations with JSON serialization
11
- */
12
- export declare abstract class BaseRedisStore<T> {
13
- protected logger: Logger;
14
- protected redis: Redis;
15
- protected keyPrefix: string;
16
- constructor(config: RedisStoreConfig);
17
- /**
18
- * Build Redis key from parts
19
- */
20
- protected buildKey(...parts: string[]): string;
21
- /**
22
- * Get value from Redis
23
- * Returns null if not found or validation fails
24
- */
25
- protected get(key: string): Promise<T | null>;
26
- /**
27
- * Set value in Redis
28
- */
29
- protected set(key: string, value: T, ttlSeconds?: number): Promise<void>;
30
- /**
31
- * Delete value from Redis
32
- */
33
- protected delete(key: string): Promise<void>;
34
- /**
35
- * Scan for all keys matching a prefix (cursor-based, production-safe).
36
- * Returns full key strings matching `{prefix}*`.
37
- */
38
- protected scanByPrefix(prefix: string): Promise<string[]>;
39
- /**
40
- * Check if key exists in Redis
41
- */
42
- protected exists(key: string): Promise<boolean>;
43
- /**
44
- * Serialize value to string
45
- * Override for custom serialization
46
- */
47
- protected serialize(value: T): string;
48
- /**
49
- * Deserialize string to value
50
- * Override for custom deserialization
51
- */
52
- protected deserialize(data: string): T;
53
- /**
54
- * Validate value after deserialization
55
- * Override to add custom validation logic
56
- * Return false to reject invalid data
57
- */
58
- protected validate(_value: T): boolean;
59
- }
60
- //# sourceMappingURL=base-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-store.d.ts","sourceRoot":"","sources":["../../src/redis/base-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAOtD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,8BAAsB,cAAc,CAAC,CAAC;IACpC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;IACvB,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEhB,MAAM,EAAE,gBAAgB;IAMpC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAI9C;;;OAGG;cACa,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAyBnD;;OAEG;cACa,GAAG,CACjB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAiBhB;;OAEG;cACa,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlD;;;OAGG;cACa,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwB/D;;OAEG;cACa,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAarD;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM;IAQrC;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC;IAQtC;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO;CAGvC"}
@@ -1,156 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BaseRedisStore = void 0;
4
- const logger_1 = require("../logger");
5
- const json_1 = require("../utils/json");
6
- function errMsg(error) {
7
- return error instanceof Error ? error.message : String(error);
8
- }
9
- /**
10
- * Base class for all Redis-backed stores
11
- * Provides common CRUD operations with JSON serialization
12
- */
13
- class BaseRedisStore {
14
- constructor(config) {
15
- this.redis = config.redis;
16
- this.keyPrefix = config.keyPrefix;
17
- this.logger = (0, logger_1.createLogger)(config.loggerName);
18
- }
19
- /**
20
- * Build Redis key from parts
21
- */
22
- buildKey(...parts) {
23
- return [this.keyPrefix, ...parts].join(":");
24
- }
25
- /**
26
- * Get value from Redis
27
- * Returns null if not found or validation fails
28
- */
29
- async get(key) {
30
- try {
31
- const data = await this.redis.get(key);
32
- if (!data) {
33
- return null;
34
- }
35
- const value = this.deserialize(data);
36
- // Validate after deserialization
37
- if (!this.validate(value)) {
38
- this.logger.warn("Invalid data after deserialization", { key });
39
- return null;
40
- }
41
- return value;
42
- }
43
- catch (error) {
44
- this.logger.error("Failed to get from Redis", {
45
- error: errMsg(error),
46
- key,
47
- });
48
- return null;
49
- }
50
- }
51
- /**
52
- * Set value in Redis
53
- */
54
- async set(key, value, ttlSeconds) {
55
- try {
56
- const data = this.serialize(value);
57
- if (ttlSeconds) {
58
- await this.redis.setex(key, ttlSeconds, data);
59
- }
60
- else {
61
- await this.redis.set(key, data);
62
- }
63
- }
64
- catch (error) {
65
- this.logger.error("Failed to set in Redis", {
66
- error: errMsg(error),
67
- key,
68
- });
69
- throw error;
70
- }
71
- }
72
- /**
73
- * Delete value from Redis
74
- */
75
- async delete(key) {
76
- try {
77
- await this.redis.del(key);
78
- }
79
- catch (error) {
80
- this.logger.error("Failed to delete from Redis", {
81
- error: errMsg(error),
82
- key,
83
- });
84
- }
85
- }
86
- /**
87
- * Scan for all keys matching a prefix (cursor-based, production-safe).
88
- * Returns full key strings matching `{prefix}*`.
89
- */
90
- async scanByPrefix(prefix) {
91
- const results = [];
92
- let cursor = "0";
93
- try {
94
- do {
95
- const [nextCursor, keys] = await this.redis.scan(cursor, "MATCH", `${prefix}*`, "COUNT", 100);
96
- cursor = nextCursor;
97
- results.push(...keys);
98
- } while (cursor !== "0");
99
- }
100
- catch (error) {
101
- this.logger.error("Failed to scan by prefix", {
102
- error: errMsg(error),
103
- prefix,
104
- });
105
- }
106
- return results;
107
- }
108
- /**
109
- * Check if key exists in Redis
110
- */
111
- async exists(key) {
112
- try {
113
- const result = await this.redis.exists(key);
114
- return result === 1;
115
- }
116
- catch (error) {
117
- this.logger.error("Failed to check existence in Redis", {
118
- error: errMsg(error),
119
- key,
120
- });
121
- return false;
122
- }
123
- }
124
- /**
125
- * Serialize value to string
126
- * Override for custom serialization
127
- */
128
- serialize(value) {
129
- const result = (0, json_1.safeJsonStringify)(value);
130
- if (result === null) {
131
- throw new Error("Failed to serialize value to JSON");
132
- }
133
- return result;
134
- }
135
- /**
136
- * Deserialize string to value
137
- * Override for custom deserialization
138
- */
139
- deserialize(data) {
140
- const result = (0, json_1.safeJsonParse)(data);
141
- if (result === null) {
142
- throw new Error("Failed to deserialize JSON data");
143
- }
144
- return result;
145
- }
146
- /**
147
- * Validate value after deserialization
148
- * Override to add custom validation logic
149
- * Return false to reject invalid data
150
- */
151
- validate(_value) {
152
- return true;
153
- }
154
- }
155
- exports.BaseRedisStore = BaseRedisStore;
156
- //# sourceMappingURL=base-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-store.js","sourceRoot":"","sources":["../../src/redis/base-store.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type Redis from "ioredis";
2
- export type RedisJsonClient = Pick<Redis, "get" | "getdel" | "set" | "setex" | "mget" | "scan">;
3
- export declare function getJsonValue<T>(redis: Pick<Redis, "get">, key: string): Promise<T | null>;
4
- export declare function getdelJsonValue<T>(redis: Pick<Redis, "getdel">, key: string): Promise<T | null>;
5
- export declare function setJsonValue<T>(redis: Pick<Redis, "set" | "setex">, key: string, value: T, ttlSeconds?: number): Promise<void>;
6
- export declare function mgetJsonValues<T>(redis: Pick<Redis, "mget">, keys: string[]): Promise<Array<T | null>>;
7
- export declare function scanKeysByPattern(redis: Pick<Redis, "scan">, pattern: string, count?: number): Promise<string[]>;
8
- //# sourceMappingURL=json-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-helpers.d.ts","sourceRoot":"","sources":["../../src/redis/json-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAGjC,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,KAAK,EACL,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CACrD,CAAC;AAUF,wBAAsB,YAAY,CAAC,CAAC,EAClC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EACzB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAInB;AAED,wBAAsB,eAAe,CAAC,CAAC,EACrC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,EAC5B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAInB;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAC1B,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAI1B;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAC1B,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAY,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB"}