@langchain/langgraph-checkpoint-redis 0.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,540 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShallowRedisSaver = void 0;
4
+ const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
5
+ const redis_1 = require("redis");
6
+ // Helper function for deterministic object comparison
7
+ function deterministicStringify(obj) {
8
+ if (obj === null || typeof obj !== "object") {
9
+ return JSON.stringify(obj);
10
+ }
11
+ if (Array.isArray(obj)) {
12
+ return JSON.stringify(obj.map((item) => deterministicStringify(item)));
13
+ }
14
+ const sortedObj = {};
15
+ const sortedKeys = Object.keys(obj).sort();
16
+ for (const key of sortedKeys) {
17
+ sortedObj[key] = obj[key];
18
+ }
19
+ return JSON.stringify(sortedObj, (_, value) => {
20
+ if (value !== null && typeof value === "object" && !Array.isArray(value)) {
21
+ const sorted = {};
22
+ const keys = Object.keys(value).sort();
23
+ for (const k of keys) {
24
+ sorted[k] = value[k];
25
+ }
26
+ return sorted;
27
+ }
28
+ return value;
29
+ });
30
+ }
31
+ const SCHEMAS = [
32
+ {
33
+ index: "checkpoints",
34
+ prefix: "checkpoint:",
35
+ schema: {
36
+ "$.thread_id": { type: "TAG", AS: "thread_id" },
37
+ "$.checkpoint_ns": { type: "TAG", AS: "checkpoint_ns" },
38
+ "$.checkpoint_id": { type: "TAG", AS: "checkpoint_id" },
39
+ "$.parent_checkpoint_id": { type: "TAG", AS: "parent_checkpoint_id" },
40
+ "$.checkpoint_ts": { type: "NUMERIC", AS: "checkpoint_ts" },
41
+ "$.has_writes": { type: "TAG", AS: "has_writes" },
42
+ "$.source": { type: "TAG", AS: "source" },
43
+ "$.step": { type: "NUMERIC", AS: "step" },
44
+ },
45
+ },
46
+ {
47
+ index: "checkpoint_writes",
48
+ prefix: "checkpoint_write:",
49
+ schema: {
50
+ "$.thread_id": { type: "TAG", AS: "thread_id" },
51
+ "$.checkpoint_ns": { type: "TAG", AS: "checkpoint_ns" },
52
+ "$.checkpoint_id": { type: "TAG", AS: "checkpoint_id" },
53
+ "$.task_id": { type: "TAG", AS: "task_id" },
54
+ "$.idx": { type: "NUMERIC", AS: "idx" },
55
+ "$.channel": { type: "TAG", AS: "channel" },
56
+ "$.type": { type: "TAG", AS: "type" },
57
+ },
58
+ },
59
+ ];
60
+ /**
61
+ * ShallowRedisSaver - A Redis checkpoint saver that only keeps the latest checkpoint per thread.
62
+ *
63
+ * This is a memory-optimized variant that:
64
+ * - Only stores the most recent checkpoint for each thread
65
+ * - Stores channel values inline (no separate blob storage)
66
+ * - Automatically cleans up old checkpoints and writes when new ones are added
67
+ * - Reduces storage usage for applications that don't need checkpoint history
68
+ */
69
+ class ShallowRedisSaver extends langgraph_checkpoint_1.BaseCheckpointSaver {
70
+ client;
71
+ ttlConfig;
72
+ constructor(client, ttlConfig) {
73
+ super();
74
+ this.client = client;
75
+ this.ttlConfig = ttlConfig;
76
+ }
77
+ static async fromUrl(url, ttlConfig) {
78
+ const client = (0, redis_1.createClient)({ url });
79
+ await client.connect();
80
+ const saver = new ShallowRedisSaver(client, ttlConfig);
81
+ await saver.ensureIndexes();
82
+ return saver;
83
+ }
84
+ async get(config) {
85
+ const tuple = await this.getTuple(config);
86
+ return tuple?.checkpoint;
87
+ }
88
+ async put(config, checkpoint, metadata, _newVersions) {
89
+ await this.ensureIndexes();
90
+ const threadId = config.configurable?.thread_id;
91
+ const checkpointNs = config.configurable?.checkpoint_ns ?? "";
92
+ const parentCheckpointId = config.configurable?.checkpoint_id;
93
+ if (!threadId) {
94
+ throw new Error("thread_id is required");
95
+ }
96
+ const checkpointId = checkpoint.id || (0, langgraph_checkpoint_1.uuid6)(0);
97
+ // In shallow mode, we use a single key per thread (no checkpoint_id in key)
98
+ const key = `checkpoint:${threadId}:${checkpointNs}:shallow`;
99
+ // Get the previous checkpoint to know what to clean up
100
+ let prevCheckpointData = null;
101
+ let prevCheckpointId = null;
102
+ try {
103
+ prevCheckpointData = await this.client.json.get(key);
104
+ if (prevCheckpointData && typeof prevCheckpointData === "object") {
105
+ prevCheckpointId = prevCheckpointData.checkpoint_id;
106
+ }
107
+ }
108
+ catch (error) {
109
+ // Key doesn't exist yet, that's fine
110
+ }
111
+ // Clean up old checkpoint and related data if it exists
112
+ if (prevCheckpointId && prevCheckpointId !== checkpointId) {
113
+ await this.cleanupOldCheckpoint(threadId, checkpointNs, prevCheckpointId);
114
+ }
115
+ // Store channel values inline - no blob storage in shallow mode
116
+ const checkpointCopy = {
117
+ ...checkpoint,
118
+ channel_values: checkpoint.channel_values || {},
119
+ // Remove channel_blobs if present
120
+ channel_blobs: undefined,
121
+ };
122
+ // Structure matching Python implementation
123
+ const jsonDoc = {
124
+ thread_id: threadId,
125
+ checkpoint_ns: checkpointNs,
126
+ checkpoint_id: checkpointId,
127
+ parent_checkpoint_id: parentCheckpointId || null,
128
+ checkpoint: checkpointCopy,
129
+ metadata: this.sanitizeMetadata(metadata),
130
+ checkpoint_ts: Date.now(),
131
+ has_writes: "false",
132
+ };
133
+ // Store metadata fields at top-level for searching
134
+ this.addSearchableMetadataFields(jsonDoc, metadata);
135
+ // Use Redis JSON commands
136
+ await this.client.json.set(key, "$", jsonDoc);
137
+ // Apply TTL if configured
138
+ if (this.ttlConfig?.defaultTTL) {
139
+ await this.applyTTL(key);
140
+ }
141
+ return {
142
+ configurable: {
143
+ thread_id: threadId,
144
+ checkpoint_ns: checkpointNs,
145
+ checkpoint_id: checkpointId,
146
+ },
147
+ };
148
+ }
149
+ async getTuple(config) {
150
+ const threadId = config.configurable?.thread_id;
151
+ const checkpointNs = config.configurable?.checkpoint_ns ?? "";
152
+ const checkpointId = config.configurable?.checkpoint_id;
153
+ if (!threadId) {
154
+ return undefined;
155
+ }
156
+ // In shallow mode, we use a single key per thread
157
+ const key = `checkpoint:${threadId}:${checkpointNs}:shallow`;
158
+ const jsonDoc = await this.client.json.get(key);
159
+ if (!jsonDoc) {
160
+ return undefined;
161
+ }
162
+ // If a specific checkpoint_id was requested, check if it matches
163
+ if (checkpointId && jsonDoc.checkpoint_id !== checkpointId) {
164
+ return undefined;
165
+ }
166
+ // Refresh TTL if configured
167
+ if (this.ttlConfig?.refreshOnRead && this.ttlConfig?.defaultTTL) {
168
+ await this.applyTTL(key);
169
+ }
170
+ // Channel values are stored inline in shallow mode
171
+ const checkpoint = {
172
+ ...jsonDoc.checkpoint,
173
+ channel_values: jsonDoc.checkpoint.channel_values || {},
174
+ };
175
+ // Load pending writes if they exist
176
+ let pendingWrites;
177
+ if (jsonDoc.has_writes === "true") {
178
+ pendingWrites = await this.loadPendingWrites(jsonDoc.thread_id, jsonDoc.checkpoint_ns, jsonDoc.checkpoint_id);
179
+ }
180
+ return this.createCheckpointTuple(jsonDoc, checkpoint, pendingWrites);
181
+ }
182
+ async *list(config, options) {
183
+ await this.ensureIndexes();
184
+ // In shallow mode, we only return the latest checkpoint per thread
185
+ if (config?.configurable?.thread_id) {
186
+ // Single thread case
187
+ const tuple = await this.getTuple(config);
188
+ if (tuple) {
189
+ // Apply filter if provided
190
+ if (options?.filter) {
191
+ if (this.checkMetadataFilterMatch(tuple.metadata, options.filter)) {
192
+ yield tuple;
193
+ }
194
+ }
195
+ else {
196
+ yield tuple;
197
+ }
198
+ }
199
+ }
200
+ else {
201
+ // All threads case - use search
202
+ const queryParts = [];
203
+ // Add metadata filters
204
+ if (options?.filter) {
205
+ for (const [key, value] of Object.entries(options.filter)) {
206
+ if (value === undefined) {
207
+ // Skip undefined filters
208
+ }
209
+ else if (value === null) {
210
+ // Skip null values for RediSearch query, will handle in post-processing
211
+ }
212
+ else if (typeof value === "string") {
213
+ queryParts.push(`(@${key}:{${value}})`);
214
+ }
215
+ else if (typeof value === "number") {
216
+ queryParts.push(`(@${key}:[${value} ${value}])`);
217
+ }
218
+ }
219
+ }
220
+ if (queryParts.length === 0) {
221
+ queryParts.push("*");
222
+ }
223
+ const query = queryParts.join(" ");
224
+ const limit = options?.limit ?? 10;
225
+ try {
226
+ const results = await this.client.ft.search("checkpoints", query, {
227
+ LIMIT: { from: 0, size: limit * 2 }, // Get more since we'll deduplicate
228
+ SORTBY: { BY: "checkpoint_ts", DIRECTION: "DESC" },
229
+ });
230
+ // In shallow mode, deduplicate by thread_id
231
+ const seenThreads = new Set();
232
+ let yieldCount = 0;
233
+ for (const doc of results.documents) {
234
+ if (yieldCount >= limit)
235
+ break;
236
+ const jsonDoc = doc.value;
237
+ const threadKey = `${jsonDoc.thread_id}:${jsonDoc.checkpoint_ns}`;
238
+ // Skip if we've already seen this thread
239
+ if (seenThreads.has(threadKey)) {
240
+ continue;
241
+ }
242
+ seenThreads.add(threadKey);
243
+ // Check null filters manually if needed
244
+ if (options?.filter) {
245
+ if (!this.checkMetadataFilterMatch(jsonDoc.metadata, options.filter)) {
246
+ continue;
247
+ }
248
+ }
249
+ // Channel values are inline in shallow mode
250
+ const checkpoint = {
251
+ ...jsonDoc.checkpoint,
252
+ channel_values: jsonDoc.checkpoint.channel_values || {},
253
+ };
254
+ yield this.createCheckpointTuple(jsonDoc, checkpoint);
255
+ yieldCount++;
256
+ }
257
+ }
258
+ catch (error) {
259
+ if (error.message?.includes("no such index")) {
260
+ // Index doesn't exist yet, fall back to scanning all shallow checkpoints
261
+ const pattern = `checkpoint:*:*:shallow`;
262
+ const keys = await this.client.keys(pattern);
263
+ if (keys.length === 0) {
264
+ return;
265
+ }
266
+ // Sort keys to have consistent ordering
267
+ keys.sort().reverse();
268
+ // Get unique threads
269
+ const seenThreads = new Set();
270
+ let yieldCount = 0;
271
+ const limit = options?.limit ?? 10;
272
+ for (const key of keys) {
273
+ if (yieldCount >= limit)
274
+ break;
275
+ const jsonDoc = await this.client.json.get(key);
276
+ if (!jsonDoc)
277
+ continue;
278
+ const threadKey = `${jsonDoc.thread_id}:${jsonDoc.checkpoint_ns}`;
279
+ // Skip if we've already seen this thread
280
+ if (seenThreads.has(threadKey)) {
281
+ continue;
282
+ }
283
+ seenThreads.add(threadKey);
284
+ // Check filter if provided
285
+ if (options?.filter) {
286
+ if (!this.checkMetadataFilterMatch(jsonDoc.metadata, options.filter)) {
287
+ continue;
288
+ }
289
+ }
290
+ // Channel values are inline in shallow mode
291
+ const checkpoint = {
292
+ ...jsonDoc.checkpoint,
293
+ channel_values: jsonDoc.checkpoint.channel_values || {},
294
+ };
295
+ yield this.createCheckpointTuple(jsonDoc, checkpoint);
296
+ yieldCount++;
297
+ }
298
+ return;
299
+ }
300
+ throw error;
301
+ }
302
+ }
303
+ }
304
+ async putWrites(config, writes, taskId) {
305
+ await this.ensureIndexes();
306
+ const threadId = config.configurable?.thread_id;
307
+ const checkpointNs = config.configurable?.checkpoint_ns ?? "";
308
+ const checkpointId = config.configurable?.checkpoint_id;
309
+ if (!threadId || !checkpointId) {
310
+ throw new Error("thread_id and checkpoint_id are required");
311
+ }
312
+ // In shallow mode, we overwrite all writes for the task
313
+ // First, clean up old writes for this task
314
+ const writePattern = `checkpoint_write:${threadId}:${checkpointNs}:${checkpointId}:${taskId}:*`;
315
+ const oldWriteKeys = await this.client.keys(writePattern);
316
+ if (oldWriteKeys.length > 0) {
317
+ await this.client.del(oldWriteKeys);
318
+ }
319
+ // Store new writes
320
+ const writeKeys = [];
321
+ for (let idx = 0; idx < writes.length; idx++) {
322
+ const [channel, value] = writes[idx];
323
+ const writeKey = `checkpoint_write:${threadId}:${checkpointNs}:${checkpointId}:${taskId}:${idx}`;
324
+ writeKeys.push(writeKey);
325
+ const writeDoc = {
326
+ thread_id: threadId,
327
+ checkpoint_ns: checkpointNs,
328
+ checkpoint_id: checkpointId,
329
+ task_id: taskId,
330
+ idx: idx,
331
+ channel: channel,
332
+ type: typeof value === "object" ? "json" : "string",
333
+ value: value,
334
+ };
335
+ await this.client.json.set(writeKey, "$", writeDoc);
336
+ }
337
+ // Register write keys in sorted set for efficient retrieval
338
+ if (writeKeys.length > 0) {
339
+ const zsetKey = `write_keys_zset:${threadId}:${checkpointNs}:${checkpointId}`;
340
+ // Clear existing entries for this task and add new ones
341
+ const zaddArgs = {};
342
+ writeKeys.forEach((key, idx) => {
343
+ zaddArgs[key] = idx;
344
+ });
345
+ await this.client.zAdd(zsetKey, Object.entries(zaddArgs).map(([key, score]) => ({ score, value: key })));
346
+ // Apply TTL to write keys and zset if configured
347
+ if (this.ttlConfig?.defaultTTL) {
348
+ await this.applyTTL(...writeKeys, zsetKey);
349
+ }
350
+ }
351
+ // Update checkpoint to indicate it has writes
352
+ const checkpointKey = `checkpoint:${threadId}:${checkpointNs}:shallow`;
353
+ const checkpointExists = await this.client.exists(checkpointKey);
354
+ if (checkpointExists) {
355
+ const currentDoc = await this.client.json.get(checkpointKey);
356
+ if (currentDoc) {
357
+ currentDoc.has_writes = "true";
358
+ await this.client.json.set(checkpointKey, "$", currentDoc);
359
+ }
360
+ }
361
+ }
362
+ async deleteThread(threadId) {
363
+ // Delete shallow checkpoints
364
+ const checkpointPattern = `checkpoint:${threadId}:*:shallow`;
365
+ const checkpointKeys = await this.client.keys(checkpointPattern);
366
+ if (checkpointKeys.length > 0) {
367
+ await this.client.del(checkpointKeys);
368
+ }
369
+ // Delete writes
370
+ const writesPattern = `checkpoint_write:${threadId}:*`;
371
+ const writesKeys = await this.client.keys(writesPattern);
372
+ if (writesKeys.length > 0) {
373
+ await this.client.del(writesKeys);
374
+ }
375
+ // Delete write registries
376
+ const zsetPattern = `write_keys_zset:${threadId}:*`;
377
+ const zsetKeys = await this.client.keys(zsetPattern);
378
+ if (zsetKeys.length > 0) {
379
+ await this.client.del(zsetKeys);
380
+ }
381
+ }
382
+ async end() {
383
+ await this.client.quit();
384
+ }
385
+ // Helper method to add searchable metadata fields
386
+ addSearchableMetadataFields(jsonDoc, metadata) {
387
+ if (!metadata)
388
+ return;
389
+ // Add common searchable fields at top level
390
+ if ("source" in metadata) {
391
+ jsonDoc.source = metadata.source;
392
+ }
393
+ if ("step" in metadata) {
394
+ jsonDoc.step = metadata.step;
395
+ }
396
+ if ("writes" in metadata) {
397
+ // Writes field needs to be JSON stringified for TAG search
398
+ jsonDoc.writes =
399
+ typeof metadata.writes === "object"
400
+ ? JSON.stringify(metadata.writes)
401
+ : metadata.writes;
402
+ }
403
+ if ("score" in metadata) {
404
+ jsonDoc.score = metadata.score;
405
+ }
406
+ }
407
+ // Helper method to create checkpoint tuple from json document
408
+ createCheckpointTuple(jsonDoc, checkpoint, pendingWrites) {
409
+ return {
410
+ config: {
411
+ configurable: {
412
+ thread_id: jsonDoc.thread_id,
413
+ checkpoint_ns: jsonDoc.checkpoint_ns,
414
+ checkpoint_id: jsonDoc.checkpoint_id,
415
+ },
416
+ },
417
+ checkpoint,
418
+ metadata: jsonDoc.metadata,
419
+ parentConfig: jsonDoc.parent_checkpoint_id
420
+ ? {
421
+ configurable: {
422
+ thread_id: jsonDoc.thread_id,
423
+ checkpoint_ns: jsonDoc.checkpoint_ns,
424
+ checkpoint_id: jsonDoc.parent_checkpoint_id,
425
+ },
426
+ }
427
+ : undefined,
428
+ pendingWrites,
429
+ };
430
+ }
431
+ // Helper method to apply TTL to keys
432
+ async applyTTL(...keys) {
433
+ if (!this.ttlConfig?.defaultTTL)
434
+ return;
435
+ const ttlSeconds = Math.floor(this.ttlConfig.defaultTTL * 60);
436
+ const results = await Promise.allSettled(keys.map((key) => this.client.expire(key, ttlSeconds)));
437
+ // Log any failures but don't throw - TTL is best effort
438
+ for (let i = 0; i < results.length; i++) {
439
+ if (results[i].status === "rejected") {
440
+ console.warn(`Failed to set TTL for key ${keys[i]}:`, results[i].reason);
441
+ }
442
+ }
443
+ }
444
+ // Helper method to load pending writes
445
+ async loadPendingWrites(threadId, checkpointNs, checkpointId) {
446
+ const zsetKey = `write_keys_zset:${threadId}:${checkpointNs}:${checkpointId}`;
447
+ const writeKeys = await this.client.zRange(zsetKey, 0, -1);
448
+ if (writeKeys.length === 0) {
449
+ return undefined;
450
+ }
451
+ const pendingWrites = [];
452
+ for (const writeKey of writeKeys) {
453
+ const writeDoc = await this.client.json.get(writeKey);
454
+ if (writeDoc) {
455
+ pendingWrites.push([
456
+ writeDoc.task_id,
457
+ writeDoc.channel,
458
+ writeDoc.value,
459
+ ]);
460
+ }
461
+ }
462
+ return pendingWrites;
463
+ }
464
+ // Helper method to check metadata filter matches
465
+ checkMetadataFilterMatch(metadata, filter) {
466
+ for (const [key, value] of Object.entries(filter)) {
467
+ const metadataValue = metadata?.[key];
468
+ if (value === null) {
469
+ if (!(key in (metadata || {})) || metadataValue !== null) {
470
+ return false;
471
+ }
472
+ }
473
+ else if (typeof value === "object" && !Array.isArray(value)) {
474
+ // Deep comparison for objects with deterministic key ordering
475
+ if (typeof metadataValue !== "object" || metadataValue === null) {
476
+ return false;
477
+ }
478
+ if (deterministicStringify(value) !==
479
+ deterministicStringify(metadataValue)) {
480
+ return false;
481
+ }
482
+ }
483
+ else if (metadataValue !== value) {
484
+ return false;
485
+ }
486
+ }
487
+ return true;
488
+ }
489
+ async cleanupOldCheckpoint(threadId, checkpointNs, oldCheckpointId) {
490
+ // Clean up old writes
491
+ const writePattern = `checkpoint_write:${threadId}:${checkpointNs}:${oldCheckpointId}:*`;
492
+ const oldWriteKeys = await this.client.keys(writePattern);
493
+ if (oldWriteKeys.length > 0) {
494
+ await this.client.del(oldWriteKeys);
495
+ }
496
+ // Clean up write registry
497
+ const zsetKey = `write_keys_zset:${threadId}:${checkpointNs}:${oldCheckpointId}`;
498
+ await this.client.del(zsetKey);
499
+ // Note: We don't clean up blob keys in shallow mode since we store inline
500
+ // But for completeness, clean up any legacy blob keys if they exist
501
+ const blobPattern = `checkpoint_blob:${threadId}:${checkpointNs}:${oldCheckpointId}:*`;
502
+ const oldBlobKeys = await this.client.keys(blobPattern);
503
+ if (oldBlobKeys.length > 0) {
504
+ await this.client.del(oldBlobKeys);
505
+ }
506
+ }
507
+ sanitizeMetadata(metadata) {
508
+ if (!metadata)
509
+ return {};
510
+ const sanitized = {};
511
+ for (const [key, value] of Object.entries(metadata)) {
512
+ // Remove null characters from keys and string values
513
+ // eslint-disable-next-line no-control-regex
514
+ const sanitizedKey = key.replace(/\x00/g, "");
515
+ sanitized[sanitizedKey] =
516
+ // eslint-disable-next-line no-control-regex
517
+ typeof value === "string" ? value.replace(/\x00/g, "") : value;
518
+ }
519
+ return sanitized;
520
+ }
521
+ async ensureIndexes() {
522
+ for (const schema of SCHEMAS) {
523
+ try {
524
+ // Try to create the index
525
+ await this.client.ft.create(schema.index, schema.schema, {
526
+ ON: "JSON",
527
+ PREFIX: schema.prefix,
528
+ });
529
+ }
530
+ catch (error) {
531
+ // Ignore if index already exists
532
+ if (!error.message?.includes("Index already exists")) {
533
+ console.error(`Failed to create index ${schema.index}:`, error.message);
534
+ }
535
+ }
536
+ }
537
+ }
538
+ }
539
+ exports.ShallowRedisSaver = ShallowRedisSaver;
540
+ //# sourceMappingURL=shallow.js.map
@@ -0,0 +1,39 @@
1
+ import { BaseCheckpointSaver, ChannelVersions, Checkpoint, CheckpointListOptions, CheckpointMetadata, CheckpointTuple, PendingWrite } from "@langchain/langgraph-checkpoint";
2
+ import { RunnableConfig } from "@langchain/core/runnables";
3
+ export interface TTLConfig {
4
+ defaultTTL?: number;
5
+ refreshOnRead?: boolean;
6
+ }
7
+ /**
8
+ * ShallowRedisSaver - A Redis checkpoint saver that only keeps the latest checkpoint per thread.
9
+ *
10
+ * This is a memory-optimized variant that:
11
+ * - Only stores the most recent checkpoint for each thread
12
+ * - Stores channel values inline (no separate blob storage)
13
+ * - Automatically cleans up old checkpoints and writes when new ones are added
14
+ * - Reduces storage usage for applications that don't need checkpoint history
15
+ */
16
+ export declare class ShallowRedisSaver extends BaseCheckpointSaver {
17
+ private client;
18
+ private ttlConfig?;
19
+ constructor(client: any, ttlConfig?: TTLConfig);
20
+ static fromUrl(url: string, ttlConfig?: TTLConfig): Promise<ShallowRedisSaver>;
21
+ get(config: RunnableConfig): Promise<Checkpoint | undefined>;
22
+ put(config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, _newVersions: ChannelVersions): Promise<RunnableConfig>;
23
+ getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined>;
24
+ list(config: RunnableConfig | null, options?: CheckpointListOptions & {
25
+ filter?: CheckpointMetadata;
26
+ }): AsyncGenerator<CheckpointTuple>;
27
+ putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
28
+ deleteThread(threadId: string): Promise<void>;
29
+ end(): Promise<void>;
30
+ private addSearchableMetadataFields;
31
+ private createCheckpointTuple;
32
+ private applyTTL;
33
+ private loadPendingWrites;
34
+ private checkMetadataFilterMatch;
35
+ private cleanupOldCheckpoint;
36
+ private sanitizeMetadata;
37
+ private ensureIndexes;
38
+ }
39
+ //# sourceMappingURL=shallow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shallow.d.ts","sourceRoot":"","sources":["../src/shallow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,YAAY,EAEb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA0DD;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,SAAQ,mBAAmB;IACxD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAC,CAAY;gBAElB,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,SAAS;WAMjC,OAAO,CAClB,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,iBAAiB,CAAC;IAQvB,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAK5D,GAAG,CACP,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,cAAc,CAAC;IAyEpB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IA8CrE,IAAI,CACT,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAAG;QAAE,MAAM,CAAC,EAAE,kBAAkB,CAAA;KAAE,GAChE,cAAc,CAAC,eAAe,CAAC;IA4I5B,SAAS,CACb,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,EAAE,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAwEV,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B7C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,OAAO,CAAC,2BAA2B;IA0BnC,OAAO,CAAC,qBAAqB;YA6Bf,QAAQ;YAoBR,iBAAiB;IA4B/B,OAAO,CAAC,wBAAwB;YA4BlB,oBAAoB;IAyBlC,OAAO,CAAC,gBAAgB;YAeV,aAAa;CAmB5B"}