@farukada/aws-langgraph-dynamodb-ts 0.0.2

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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +960 -0
  3. package/dist/checkpointer/actions/delete-thread.d.ts +9 -0
  4. package/dist/checkpointer/actions/delete-thread.d.ts.map +1 -0
  5. package/dist/checkpointer/actions/delete-thread.js +109 -0
  6. package/dist/checkpointer/actions/delete-thread.js.map +1 -0
  7. package/dist/checkpointer/actions/get-tuple.d.ts +11 -0
  8. package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -0
  9. package/dist/checkpointer/actions/get-tuple.js +96 -0
  10. package/dist/checkpointer/actions/get-tuple.js.map +1 -0
  11. package/dist/checkpointer/actions/index.d.ts +5 -0
  12. package/dist/checkpointer/actions/index.d.ts.map +1 -0
  13. package/dist/checkpointer/actions/index.js +21 -0
  14. package/dist/checkpointer/actions/index.js.map +1 -0
  15. package/dist/checkpointer/actions/put-writes.d.ts +9 -0
  16. package/dist/checkpointer/actions/put-writes.d.ts.map +1 -0
  17. package/dist/checkpointer/actions/put-writes.js +63 -0
  18. package/dist/checkpointer/actions/put-writes.js.map +1 -0
  19. package/dist/checkpointer/actions/put.d.ts +11 -0
  20. package/dist/checkpointer/actions/put.d.ts.map +1 -0
  21. package/dist/checkpointer/actions/put.js +55 -0
  22. package/dist/checkpointer/actions/put.js.map +1 -0
  23. package/dist/checkpointer/actions/validate-configurable.d.ts +10 -0
  24. package/dist/checkpointer/actions/validate-configurable.d.ts.map +1 -0
  25. package/dist/checkpointer/actions/validate-configurable.js +39 -0
  26. package/dist/checkpointer/actions/validate-configurable.js.map +1 -0
  27. package/dist/checkpointer/actions/writer.d.ts +50 -0
  28. package/dist/checkpointer/actions/writer.d.ts.map +1 -0
  29. package/dist/checkpointer/actions/writer.js +109 -0
  30. package/dist/checkpointer/actions/writer.js.map +1 -0
  31. package/dist/checkpointer/index.d.ts +70 -0
  32. package/dist/checkpointer/index.d.ts.map +1 -0
  33. package/dist/checkpointer/index.js +172 -0
  34. package/dist/checkpointer/index.js.map +1 -0
  35. package/dist/checkpointer/types/index.d.ts +162 -0
  36. package/dist/checkpointer/types/index.d.ts.map +1 -0
  37. package/dist/checkpointer/types/index.js +3 -0
  38. package/dist/checkpointer/types/index.js.map +1 -0
  39. package/dist/checkpointer/utils/index.d.ts +6 -0
  40. package/dist/checkpointer/utils/index.d.ts.map +1 -0
  41. package/dist/checkpointer/utils/index.js +26 -0
  42. package/dist/checkpointer/utils/index.js.map +1 -0
  43. package/dist/checkpointer/utils/validation.d.ts +48 -0
  44. package/dist/checkpointer/utils/validation.d.ts.map +1 -0
  45. package/dist/checkpointer/utils/validation.js +190 -0
  46. package/dist/checkpointer/utils/validation.js.map +1 -0
  47. package/dist/index.d.ts +5 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +8 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/shared/index.d.ts +5 -0
  52. package/dist/shared/index.d.ts.map +1 -0
  53. package/dist/shared/index.js +21 -0
  54. package/dist/shared/index.js.map +1 -0
  55. package/dist/shared/utils/constants.d.ts +11 -0
  56. package/dist/shared/utils/constants.d.ts.map +1 -0
  57. package/dist/shared/utils/constants.js +35 -0
  58. package/dist/shared/utils/constants.js.map +1 -0
  59. package/dist/shared/utils/index.d.ts +6 -0
  60. package/dist/shared/utils/index.d.ts.map +1 -0
  61. package/dist/shared/utils/index.js +22 -0
  62. package/dist/shared/utils/index.js.map +1 -0
  63. package/dist/shared/utils/retry.d.ts +19 -0
  64. package/dist/shared/utils/retry.d.ts.map +1 -0
  65. package/dist/shared/utils/retry.js +102 -0
  66. package/dist/shared/utils/retry.js.map +1 -0
  67. package/dist/store/actions/get-operation.d.ts +11 -0
  68. package/dist/store/actions/get-operation.d.ts.map +1 -0
  69. package/dist/store/actions/get-operation.js +42 -0
  70. package/dist/store/actions/get-operation.js.map +1 -0
  71. package/dist/store/actions/index.d.ts +5 -0
  72. package/dist/store/actions/index.d.ts.map +1 -0
  73. package/dist/store/actions/index.js +21 -0
  74. package/dist/store/actions/index.js.map +1 -0
  75. package/dist/store/actions/list-namespaces-operation.d.ts +10 -0
  76. package/dist/store/actions/list-namespaces-operation.d.ts.map +1 -0
  77. package/dist/store/actions/list-namespaces-operation.js +212 -0
  78. package/dist/store/actions/list-namespaces-operation.js.map +1 -0
  79. package/dist/store/actions/put-operation.d.ts +9 -0
  80. package/dist/store/actions/put-operation.d.ts.map +1 -0
  81. package/dist/store/actions/put-operation.js +94 -0
  82. package/dist/store/actions/put-operation.js.map +1 -0
  83. package/dist/store/actions/search-operation.d.ts +11 -0
  84. package/dist/store/actions/search-operation.d.ts.map +1 -0
  85. package/dist/store/actions/search-operation.js +150 -0
  86. package/dist/store/actions/search-operation.js.map +1 -0
  87. package/dist/store/index.d.ts +73 -0
  88. package/dist/store/index.d.ts.map +1 -0
  89. package/dist/store/index.js +145 -0
  90. package/dist/store/index.js.map +1 -0
  91. package/dist/store/types/index.d.ts +97 -0
  92. package/dist/store/types/index.d.ts.map +1 -0
  93. package/dist/store/types/index.js +3 -0
  94. package/dist/store/types/index.js.map +1 -0
  95. package/dist/store/utils/filter.d.ts +16 -0
  96. package/dist/store/utils/filter.d.ts.map +1 -0
  97. package/dist/store/utils/filter.js +71 -0
  98. package/dist/store/utils/filter.js.map +1 -0
  99. package/dist/store/utils/index.d.ts +8 -0
  100. package/dist/store/utils/index.d.ts.map +1 -0
  101. package/dist/store/utils/index.js +28 -0
  102. package/dist/store/utils/index.js.map +1 -0
  103. package/dist/store/utils/result.d.ts +42 -0
  104. package/dist/store/utils/result.d.ts.map +1 -0
  105. package/dist/store/utils/result.js +51 -0
  106. package/dist/store/utils/result.js.map +1 -0
  107. package/dist/store/utils/validation.d.ts +57 -0
  108. package/dist/store/utils/validation.d.ts.map +1 -0
  109. package/dist/store/utils/validation.js +243 -0
  110. package/dist/store/utils/validation.js.map +1 -0
  111. package/package.json +85 -0
@@ -0,0 +1,9 @@
1
+ import { DeleteThreadActionParams } from '../types';
2
+ /**
3
+ * Delete a thread and all its checkpoints and writes from DynamoDB
4
+ *
5
+ * @param params - Parameters for the delete thread operation
6
+ * @throws Error if validation fails or too many checkpoints exist
7
+ */
8
+ export declare const deleteThreadAction: (params: DeleteThreadActionParams) => Promise<void>;
9
+ //# sourceMappingURL=delete-thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-thread.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/delete-thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,wBAAwB,EAAqB,MAAM,UAAU,CAAC;AAKvF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAU,QAAQ,wBAAwB,KAAG,OAAO,CAAC,IAAI,CA6GvF,CAAC"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteThreadAction = void 0;
4
+ const writer_1 = require("./writer");
5
+ const utils_1 = require("../utils");
6
+ const shared_1 = require("../../shared");
7
+ /**
8
+ * Delete a thread and all its checkpoints and writes from DynamoDB
9
+ *
10
+ * @param params - Parameters for the delete thread operation
11
+ * @throws Error if validation fails or too many checkpoints exist
12
+ */
13
+ const deleteThreadAction = async (params) => {
14
+ // Validate thread ID
15
+ (0, utils_1.validateThreadId)(params.threadId);
16
+ const allCheckpoints = [];
17
+ let lastEvaluatedKey;
18
+ let iterationCount = 0;
19
+ const MAX_ITERATIONS = 10;
20
+ // Fetch checkpoints with pagination and safety limits
21
+ do {
22
+ iterationCount++;
23
+ if (iterationCount > MAX_ITERATIONS) {
24
+ throw new Error('Delete operation exceeded maximum iteration limit');
25
+ }
26
+ const result = await (0, shared_1.withDynamoDBRetry)(async () => {
27
+ return await params.client.query({
28
+ TableName: params.checkpointsTableName,
29
+ KeyConditionExpression: 'thread_id = :thread_id',
30
+ ExpressionAttributeValues: {
31
+ ':thread_id': params.threadId,
32
+ },
33
+ Limit: 100, // Fetch in smaller batches
34
+ ExclusiveStartKey: lastEvaluatedKey,
35
+ });
36
+ });
37
+ if (result.Items && result.Items.length > 0) {
38
+ allCheckpoints.push(...result.Items);
39
+ // Safety check: prevent deleting too many checkpoints at once
40
+ if (allCheckpoints.length > utils_1.CheckpointerValidationConstants.MAX_DELETE_BATCH_SIZE) {
41
+ throw new Error(`Thread has too many checkpoints (>${utils_1.CheckpointerValidationConstants.MAX_DELETE_BATCH_SIZE}). Delete operation aborted for safety.`);
42
+ }
43
+ }
44
+ lastEvaluatedKey = result.LastEvaluatedKey;
45
+ } while (lastEvaluatedKey);
46
+ if (allCheckpoints.length === 0) {
47
+ return; // Nothing to delete
48
+ }
49
+ // Delete checkpoints in batches of 25 (DynamoDB limit)
50
+ const checkpointDeleteRequests = allCheckpoints.map((item) => ({
51
+ DeleteRequest: {
52
+ Key: {
53
+ thread_id: item.thread_id,
54
+ checkpoint_id: item.checkpoint_id,
55
+ },
56
+ },
57
+ }));
58
+ for (let i = 0; i < checkpointDeleteRequests.length; i += 25) {
59
+ const batch = checkpointDeleteRequests.slice(i, i + 25);
60
+ await (0, shared_1.withDynamoDBRetry)(async () => {
61
+ await params.client.batchWrite({
62
+ RequestItems: {
63
+ [params.checkpointsTableName]: batch,
64
+ },
65
+ });
66
+ });
67
+ }
68
+ // Delete associated writes - batch queries to avoid the N+1 problem
69
+ const allWriteDeleteRequests = [];
70
+ for (const checkpoint of allCheckpoints) {
71
+ const writes = await (0, shared_1.withDynamoDBRetry)(async () => {
72
+ return await params.client.query({
73
+ TableName: params.writesTableName,
74
+ KeyConditionExpression: 'thread_id_checkpoint_id_checkpoint_ns = :pk',
75
+ ExpressionAttributeValues: {
76
+ ':pk': writer_1.Writer.getPartitionKey({
77
+ thread_id: checkpoint.thread_id,
78
+ checkpoint_id: checkpoint.checkpoint_id,
79
+ checkpoint_ns: checkpoint.checkpoint_ns,
80
+ }),
81
+ },
82
+ });
83
+ });
84
+ if (writes.Items && writes.Items.length > 0) {
85
+ const deleteRequests = writes.Items.map((item) => ({
86
+ DeleteRequest: {
87
+ Key: {
88
+ thread_id_checkpoint_id_checkpoint_ns: item.thread_id_checkpoint_id_checkpoint_ns,
89
+ task_id_idx: item.task_id_idx,
90
+ },
91
+ },
92
+ }));
93
+ allWriteDeleteRequests.push(...deleteRequests);
94
+ }
95
+ }
96
+ // Delete all writes in batches of 25
97
+ for (let i = 0; i < allWriteDeleteRequests.length; i += 25) {
98
+ const batch = allWriteDeleteRequests.slice(i, i + 25);
99
+ await (0, shared_1.withDynamoDBRetry)(async () => {
100
+ await params.client.batchWrite({
101
+ RequestItems: {
102
+ [params.writesTableName]: batch,
103
+ },
104
+ });
105
+ });
106
+ }
107
+ };
108
+ exports.deleteThreadAction = deleteThreadAction;
109
+ //# sourceMappingURL=delete-thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-thread.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/delete-thread.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CheckpointTuple } from '@langchain/langgraph-checkpoint';
2
+ import { GetTupleActionParams } from '../types';
3
+ /**
4
+ * Get a checkpoint tuple from DynamoDB
5
+ *
6
+ * @param params - Parameters for the get tuple operation
7
+ * @returns CheckpointTuple if found, undefined otherwise
8
+ * @throws Error if operation fails
9
+ */
10
+ export declare const getTupleAction: (params: GetTupleActionParams) => Promise<CheckpointTuple | undefined>;
11
+ //# sourceMappingURL=get-tuple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-tuple.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/get-tuple.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,eAAe,EAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAGL,oBAAoB,EAErB,MAAM,UAAU,CAAC;AAGlB;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,oBAAoB,KAC3B,OAAO,CAAC,eAAe,GAAG,SAAS,CAqFrC,CAAC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTupleAction = void 0;
4
+ const writer_1 = require("./writer");
5
+ const validate_configurable_1 = require("./validate-configurable");
6
+ const shared_1 = require("../../shared");
7
+ /**
8
+ * Get a checkpoint tuple from DynamoDB
9
+ *
10
+ * @param params - Parameters for the get tuple operation
11
+ * @returns CheckpointTuple if found, undefined otherwise
12
+ * @throws Error if operation fails
13
+ */
14
+ const getTupleAction = async (params) => {
15
+ const getItem = async (configurable) => {
16
+ if (configurable.checkpoint_id != null) {
17
+ const item = await (0, shared_1.withDynamoDBRetry)(async () => {
18
+ return await params.client.get({
19
+ TableName: params.checkpointsTableName,
20
+ Key: {
21
+ thread_id: configurable.thread_id,
22
+ checkpoint_id: configurable.checkpoint_id,
23
+ },
24
+ });
25
+ });
26
+ return item.Item;
27
+ }
28
+ else {
29
+ const result = await (0, shared_1.withDynamoDBRetry)(async () => {
30
+ return await params.client.query({
31
+ TableName: params.checkpointsTableName,
32
+ KeyConditionExpression: 'thread_id = :thread_id',
33
+ ExpressionAttributeValues: {
34
+ ':thread_id': configurable.thread_id,
35
+ ...(configurable.checkpoint_ns && {
36
+ ':checkpoint_ns': configurable.checkpoint_ns,
37
+ }),
38
+ },
39
+ ...(configurable.checkpoint_ns && {
40
+ FilterExpression: 'checkpoint_ns = :checkpoint_ns',
41
+ }),
42
+ Limit: 1,
43
+ ConsistentRead: true,
44
+ ScanIndexForward: false, // Descending order
45
+ });
46
+ });
47
+ return result.Items?.[0];
48
+ }
49
+ };
50
+ const item = await getItem((0, validate_configurable_1.validateConfigurable)(params.config.configurable));
51
+ if (!item) {
52
+ return undefined;
53
+ }
54
+ const checkpoint = (await params.serde.loadsTyped(item.type, item.checkpoint));
55
+ const metadata = (await params.serde.loadsTyped(item.type, item.metadata));
56
+ const writesResult = await (0, shared_1.withDynamoDBRetry)(async () => {
57
+ return await params.client.query({
58
+ TableName: params.writesTableName,
59
+ KeyConditionExpression: 'thread_id_checkpoint_id_checkpoint_ns = :thread_id_checkpoint_id_checkpoint_ns',
60
+ ExpressionAttributeValues: {
61
+ ':thread_id_checkpoint_id_checkpoint_ns': writer_1.Writer.getPartitionKey(item),
62
+ },
63
+ });
64
+ });
65
+ const pendingWrites = [];
66
+ if (writesResult.Items) {
67
+ for (const writeItem of writesResult.Items) {
68
+ const write = writer_1.Writer.fromDynamoDBItem(writeItem);
69
+ const value = await params.serde.loadsTyped(write.type, write.value);
70
+ pendingWrites.push([write.task_id, write.channel, value]);
71
+ }
72
+ }
73
+ return {
74
+ config: {
75
+ configurable: {
76
+ thread_id: item.thread_id,
77
+ checkpoint_ns: item.checkpoint_ns,
78
+ checkpoint_id: item.checkpoint_id,
79
+ },
80
+ },
81
+ checkpoint,
82
+ metadata,
83
+ parentConfig: item.parent_checkpoint_id
84
+ ? {
85
+ configurable: {
86
+ thread_id: item.thread_id,
87
+ checkpoint_ns: item.checkpoint_ns,
88
+ checkpoint_id: item.parent_checkpoint_id,
89
+ },
90
+ }
91
+ : undefined,
92
+ pendingWrites,
93
+ };
94
+ };
95
+ exports.getTupleAction = getTupleAction;
96
+ //# sourceMappingURL=get-tuple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-tuple.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/get-tuple.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './delete-thread';
2
+ export * from './get-tuple';
3
+ export * from './put';
4
+ export * from './put-writes';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./delete-thread"), exports);
18
+ __exportStar(require("./get-tuple"), exports);
19
+ __exportStar(require("./put"), exports);
20
+ __exportStar(require("./put-writes"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,8CAA4B;AAC5B,wCAAsB;AACtB,+CAA6B"}
@@ -0,0 +1,9 @@
1
+ import { PutWritesActionParams } from '../types';
2
+ /**
3
+ * Save pending writes to DynamoDB
4
+ *
5
+ * @param params - Parameters for the put writes operation
6
+ * @throws Error if validation fails or operation fails
7
+ */
8
+ export declare const putWritesAction: (params: PutWritesActionParams) => Promise<void>;
9
+ //# sourceMappingURL=put-writes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put-writes.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/put-writes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAIjD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAU,QAAQ,qBAAqB,KAAG,OAAO,CAAC,IAAI,CA2DjF,CAAC"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.putWritesAction = void 0;
4
+ const validate_configurable_1 = require("./validate-configurable");
5
+ const writer_1 = require("./writer");
6
+ const utils_1 = require("../utils");
7
+ const shared_1 = require("../../shared");
8
+ /**
9
+ * Save pending writes to DynamoDB
10
+ *
11
+ * @param params - Parameters for the put writes operation
12
+ * @throws Error if validation fails or operation fails
13
+ */
14
+ const putWritesAction = async (params) => {
15
+ const { thread_id, checkpoint_ns, checkpoint_id } = (0, validate_configurable_1.validateConfigurable)(params.config.configurable);
16
+ if (checkpoint_id == null) {
17
+ throw new Error('Missing checkpoint_id');
18
+ }
19
+ // Validate inputs
20
+ (0, utils_1.validateWritesCount)(params.writes.length);
21
+ (0, utils_1.validateTaskId)(params.taskId);
22
+ (0, utils_1.validateTTLDays)(params.ttlDays);
23
+ const writeItems = await Promise.all(params.writes.map(async (write, idx) => {
24
+ const [type, serializedValue] = await params.serde.dumpsTyped(write[1]);
25
+ const item = new writer_1.Writer({
26
+ thread_id,
27
+ checkpoint_ns,
28
+ checkpoint_id,
29
+ task_id: params.taskId,
30
+ idx,
31
+ channel: write[0],
32
+ type,
33
+ value: serializedValue,
34
+ });
35
+ const dynamoItem = item.toDynamoDBItem();
36
+ // FIX: Add TTL to the item that will actually be saved
37
+ if (params.ttlDays !== undefined) {
38
+ dynamoItem.ttl = Math.floor(Date.now() / 1000) + params.ttlDays * 24 * 60 * 60;
39
+ }
40
+ return {
41
+ PutRequest: {
42
+ Item: dynamoItem, // Use the same item with TTL
43
+ },
44
+ };
45
+ }));
46
+ // Batch writes in groups of 25 (DynamoDB limit)
47
+ const batches = [];
48
+ for (let i = 0; i < writeItems.length; i += 25) {
49
+ batches.push(writeItems.slice(i, i + 25));
50
+ }
51
+ // Execute batches with retry logic
52
+ for (const batch of batches) {
53
+ await (0, shared_1.withDynamoDBRetry)(async () => {
54
+ await params.client.batchWrite({
55
+ RequestItems: {
56
+ [params.writesTableName]: batch,
57
+ },
58
+ });
59
+ });
60
+ }
61
+ };
62
+ exports.putWritesAction = putWritesAction;
63
+ //# sourceMappingURL=put-writes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put-writes.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/put-writes.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAC/D,qCAAkC;AAElC,oCAAgF;AAChF,yCAAiD;AAEjD;;;;;GAKG;AACI,MAAM,eAAe,GAAG,KAAK,EAAE,MAA6B,EAAiB,EAAE;IACpF,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,IAAA,4CAAoB,EACtE,MAAM,CAAC,MAAM,CAAC,YAAY,CAC3B,CAAC;IAEF,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,kBAAkB;IAClB,IAAA,2BAAmB,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAA,sBAAc,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAA,uBAAe,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,IAAI,eAAM,CAAC;YACtB,SAAS;YACT,aAAa;YACb,aAAa;YACb,OAAO,EAAE,MAAM,CAAC,MAAM;YACtB,GAAG;YACH,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACjB,IAAI;YACJ,KAAK,EAAE,eAAe;SACvB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEzC,uDAAuD;QACvD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,UAAkB,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC1F,CAAC;QAED,OAAO;YACL,UAAU,EAAE;gBACV,IAAI,EAAE,UAAU,EAAE,6BAA6B;aAChD;SACF,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IAEF,gDAAgD;IAChD,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,mCAAmC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAA,0BAAiB,EAAC,KAAK,IAAI,EAAE;YACjC,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC7B,YAAY,EAAE;oBACZ,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,KAAK;iBAChC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AA3DW,QAAA,eAAe,mBA2D1B"}
@@ -0,0 +1,11 @@
1
+ import type { RunnableConfig } from '@langchain/core/runnables';
2
+ import { PutActionParams } from '../types';
3
+ /**
4
+ * Save a checkpoint to DynamoDB
5
+ *
6
+ * @param params - Parameters for the put operation
7
+ * @returns RunnableConfig with the saved checkpoint information
8
+ * @throws Error if validation fails or operation fails
9
+ */
10
+ export declare const putAction: (params: PutActionParams) => Promise<RunnableConfig>;
11
+ //# sourceMappingURL=put.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/put.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAkB,eAAe,EAAE,MAAM,UAAU,CAAC;AAI3D;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAU,QAAQ,eAAe,KAAG,OAAO,CAAC,cAAc,CA8C/E,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.putAction = void 0;
4
+ const validate_configurable_1 = require("./validate-configurable");
5
+ const utils_1 = require("../utils");
6
+ const shared_1 = require("../../shared");
7
+ /**
8
+ * Save a checkpoint to DynamoDB
9
+ *
10
+ * @param params - Parameters for the put operation
11
+ * @returns RunnableConfig with the saved checkpoint information
12
+ * @throws Error if validation fails or operation fails
13
+ */
14
+ const putAction = async (params) => {
15
+ const { thread_id } = (0, validate_configurable_1.validateConfigurable)(params.config.configurable);
16
+ // Validate checkpoint.id exists and is valid
17
+ if (!params.checkpoint.id) {
18
+ throw new Error('Checkpoint ID is required');
19
+ }
20
+ (0, utils_1.validateCheckpointId)(params.checkpoint.id, true);
21
+ (0, utils_1.validateTTLDays)(params.ttlDays);
22
+ const [type1, serializedCheckpoint] = await params.serde.dumpsTyped(params.checkpoint);
23
+ const [type2, serializedMetadata] = await params.serde.dumpsTyped(params.metadata);
24
+ if (type1 !== type2) {
25
+ throw new Error('Failed to serialize checkpoint and metadata to the same type.');
26
+ }
27
+ const item = {
28
+ thread_id,
29
+ checkpoint_ns: params.config.configurable?.checkpoint_ns ?? '',
30
+ checkpoint_id: params.checkpoint.id,
31
+ parent_checkpoint_id: params.config.configurable?.checkpoint_id,
32
+ type: type1,
33
+ checkpoint: serializedCheckpoint,
34
+ metadata: serializedMetadata,
35
+ };
36
+ if (params.ttlDays !== undefined) {
37
+ item.ttl = Math.floor(Date.now() / 1000) + params.ttlDays * 24 * 60 * 60;
38
+ }
39
+ // Execute with retry logic
40
+ await (0, shared_1.withDynamoDBRetry)(async () => {
41
+ await params.client.put({
42
+ TableName: params.checkpointsTableName,
43
+ Item: item,
44
+ });
45
+ });
46
+ return {
47
+ configurable: {
48
+ thread_id: item.thread_id,
49
+ checkpoint_ns: item.checkpoint_ns,
50
+ checkpoint_id: item.checkpoint_id,
51
+ },
52
+ };
53
+ };
54
+ exports.putAction = putAction;
55
+ //# sourceMappingURL=put.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"put.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/put.ts"],"names":[],"mappings":";;;AAAA,mEAA+D;AAG/D,oCAAiE;AACjE,yCAAiD;AAEjD;;;;;;GAMG;AACI,MAAM,SAAS,GAAG,KAAK,EAAE,MAAuB,EAA2B,EAAE;IAClF,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,4CAAoB,EAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAEvE,6CAA6C;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,IAAA,4BAAoB,EAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACjD,IAAA,uBAAe,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhC,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvF,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEnF,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,IAAI,GAAsC;QAC9C,SAAS;QACT,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,IAAI,EAAE;QAC9D,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE;QACnC,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa;QAC/D,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,oBAAoB;QAChC,QAAQ,EAAE,kBAAkB;KAC7B,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC3E,CAAC;IAED,2BAA2B;IAC3B,MAAM,IAAA,0BAAiB,EAAC,KAAK,IAAI,EAAE;QACjC,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;YACtB,SAAS,EAAE,MAAM,CAAC,oBAAoB;YACtC,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,YAAY,EAAE;YACZ,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC;KACF,CAAC;AACJ,CAAC,CAAC;AA9CW,QAAA,SAAS,aA8CpB"}
@@ -0,0 +1,10 @@
1
+ import { ValidatedConfigurable } from '../types';
2
+ /**
3
+ * Validate and extract configurable parameters
4
+ *
5
+ * @param configurable - Configurable object from RunnableConfig
6
+ * @returns Validated configurable parameters
7
+ * @throws CheckpointerValidationError if validation fails
8
+ */
9
+ export declare const validateConfigurable: (configurable: Record<string, unknown> | undefined) => ValidatedConfigurable;
10
+ //# sourceMappingURL=validate-configurable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-configurable.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/validate-configurable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAQjD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAChD,qBA8BF,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateConfigurable = void 0;
4
+ const utils_1 = require("../utils");
5
+ /**
6
+ * Validate and extract configurable parameters
7
+ *
8
+ * @param configurable - Configurable object from RunnableConfig
9
+ * @returns Validated configurable parameters
10
+ * @throws CheckpointerValidationError if validation fails
11
+ */
12
+ const validateConfigurable = (configurable) => {
13
+ if (!configurable) {
14
+ throw new utils_1.CheckpointerValidationError('Missing configurable');
15
+ }
16
+ const { thread_id, checkpoint_ns, checkpoint_id } = configurable;
17
+ // Validate thread_id (required)
18
+ if (typeof thread_id !== 'string') {
19
+ throw new utils_1.CheckpointerValidationError('thread_id must be a string');
20
+ }
21
+ (0, utils_1.validateThreadId)(thread_id);
22
+ // Validate checkpoint_ns (optional)
23
+ if (checkpoint_ns !== undefined && typeof checkpoint_ns !== 'string') {
24
+ throw new utils_1.CheckpointerValidationError('checkpoint_ns must be a string');
25
+ }
26
+ (0, utils_1.validateCheckpointNs)(checkpoint_ns);
27
+ // Validate checkpoint_id (optional)
28
+ if (checkpoint_id !== undefined && typeof checkpoint_id !== 'string') {
29
+ throw new utils_1.CheckpointerValidationError('checkpoint_id must be a string');
30
+ }
31
+ (0, utils_1.validateCheckpointId)(checkpoint_id, false);
32
+ return {
33
+ thread_id,
34
+ checkpoint_ns: checkpoint_ns ?? '',
35
+ checkpoint_id: checkpoint_id,
36
+ };
37
+ };
38
+ exports.validateConfigurable = validateConfigurable;
39
+ //# sourceMappingURL=validate-configurable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-configurable.js","sourceRoot":"","sources":["../../../src/checkpointer/actions/validate-configurable.ts"],"names":[],"mappings":";;;AACA,oCAKkB;AAElB;;;;;;GAMG;AACI,MAAM,oBAAoB,GAAG,CAClC,YAAiD,EAC1B,EAAE;IACzB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,mCAA2B,CAAC,sBAAsB,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,YAAY,CAAC;IAEjE,gCAAgC;IAChC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,mCAA2B,CAAC,4BAA4B,CAAC,CAAC;IACtE,CAAC;IACD,IAAA,wBAAgB,EAAC,SAAS,CAAC,CAAC;IAE5B,oCAAoC;IACpC,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,IAAI,mCAA2B,CAAC,gCAAgC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAA,4BAAoB,EAAC,aAAmC,CAAC,CAAC;IAE1D,oCAAoC;IACpC,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,IAAI,mCAA2B,CAAC,gCAAgC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAA,4BAAoB,EAAC,aAAmC,EAAE,KAAK,CAAC,CAAC;IAEjE,OAAO;QACL,SAAS;QACT,aAAa,EAAG,aAAwB,IAAI,EAAE;QAC9C,aAAa,EAAE,aAAmC;KACnD,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,oBAAoB,wBAgC/B"}
@@ -0,0 +1,50 @@
1
+ import { DynamoDBWriteItem, WriterProps } from '../types';
2
+ /**
3
+ * Writer class for managing pending writes in DynamoDB
4
+ * Handles serialization and composite key management
5
+ */
6
+ export declare class Writer {
7
+ /** Unique identifier for the conversation thread */
8
+ readonly thread_id: string;
9
+ /** Namespace for checkpoint isolation (default: '') */
10
+ readonly checkpoint_ns: string;
11
+ /** Unique identifier for the checkpoint */
12
+ readonly checkpoint_id: string;
13
+ /** Unique identifier for the task that created this write */
14
+ readonly task_id: string;
15
+ /** Index of the write within the task (0-based) */
16
+ readonly idx: number;
17
+ /** Channel name for the write */
18
+ readonly channel: string;
19
+ /** Type identifier for deserialization */
20
+ readonly type: string;
21
+ /** Serialized value as binary data */
22
+ readonly value: Uint8Array;
23
+ constructor({ thread_id, checkpoint_ns, checkpoint_id, task_id, idx, channel, type, value, }: WriterProps);
24
+ toDynamoDBItem(): DynamoDBWriteItem;
25
+ /**
26
+ * Deserialize a Writer instance from a DynamoDB item
27
+ *
28
+ * @param item - DynamoDB write item
29
+ * @returns Writer instance
30
+ * @throws Error if parsing fails or data is invalid
31
+ */
32
+ static fromDynamoDBItem({ thread_id_checkpoint_id_checkpoint_ns, task_id_idx, channel, type, value, }: DynamoDBWriteItem): Writer;
33
+ /**
34
+ * Generate a partition key for DynamoDB from thread, checkpoint, and namespace
35
+ *
36
+ * @param params - Thread ID, checkpoint ID, and namespace
37
+ * @returns Composite partition key
38
+ */
39
+ static getPartitionKey({ thread_id, checkpoint_id, checkpoint_ns, }: {
40
+ thread_id: string;
41
+ checkpoint_id: string;
42
+ checkpoint_ns: string;
43
+ }): string;
44
+ /**
45
+ * Get the separator used for composite keys
46
+ * Note: Input validation ensures this separator cannot be in any component
47
+ */
48
+ static separator(): string;
49
+ }
50
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/checkpointer/actions/writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAS1D;;;GAGG;AACH,qBAAa,MAAM;IACjB,oDAAoD;IACpD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,2CAA2C;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBAEf,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,OAAO,EACP,GAAG,EACH,OAAO,EACP,IAAI,EACJ,KAAK,GACN,EAAE,WAAW;IAsBd,cAAc,IAAI,iBAAiB;IAcnC;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,EACtB,qCAAqC,EACrC,WAAW,EACX,OAAO,EACP,IAAI,EACJ,KAAK,GACN,EAAE,iBAAiB,GAAG,MAAM;IA8B7B;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,EACrB,SAAS,EACT,aAAa,EACb,aAAa,GACd,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,MAAM;IAIV;;;OAGG;IACH,MAAM,CAAC,SAAS;CAGjB"}