@farukada/aws-langgraph-dynamodb-ts 0.1.1 → 0.2.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 (153) hide show
  1. package/README.md +131 -5
  2. package/dist/checkpointer/actions/delete-thread.d.ts.map +1 -1
  3. package/dist/checkpointer/actions/delete-thread.js +17 -9
  4. package/dist/checkpointer/actions/delete-thread.js.map +1 -1
  5. package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -1
  6. package/dist/checkpointer/actions/get-tuple.js +70 -32
  7. package/dist/checkpointer/actions/get-tuple.js.map +1 -1
  8. package/dist/checkpointer/actions/put-writes.d.ts.map +1 -1
  9. package/dist/checkpointer/actions/put-writes.js +36 -19
  10. package/dist/checkpointer/actions/put-writes.js.map +1 -1
  11. package/dist/checkpointer/actions/put.d.ts.map +1 -1
  12. package/dist/checkpointer/actions/put.js +75 -18
  13. package/dist/checkpointer/actions/put.js.map +1 -1
  14. package/dist/checkpointer/actions/writer.d.ts +6 -4
  15. package/dist/checkpointer/actions/writer.d.ts.map +1 -1
  16. package/dist/checkpointer/actions/writer.js +12 -12
  17. package/dist/checkpointer/actions/writer.js.map +1 -1
  18. package/dist/checkpointer/index.d.ts +11 -4
  19. package/dist/checkpointer/index.d.ts.map +1 -1
  20. package/dist/checkpointer/index.js +97 -72
  21. package/dist/checkpointer/index.js.map +1 -1
  22. package/dist/checkpointer/types/index.d.ts +8 -0
  23. package/dist/checkpointer/types/index.d.ts.map +1 -1
  24. package/dist/checkpointer/utils/deserialization.d.ts.map +1 -1
  25. package/dist/checkpointer/utils/deserialization.js +28 -4
  26. package/dist/checkpointer/utils/deserialization.js.map +1 -1
  27. package/dist/checkpointer/utils/validation.d.ts +8 -8
  28. package/dist/checkpointer/utils/validation.d.ts.map +1 -1
  29. package/dist/checkpointer/utils/validation.js +45 -1
  30. package/dist/checkpointer/utils/validation.js.map +1 -1
  31. package/dist/factory.d.ts +14 -0
  32. package/dist/factory.d.ts.map +1 -1
  33. package/dist/factory.js +39 -20
  34. package/dist/factory.js.map +1 -1
  35. package/dist/history/actions/add-message.d.ts +5 -9
  36. package/dist/history/actions/add-message.d.ts.map +1 -1
  37. package/dist/history/actions/add-message.js +14 -42
  38. package/dist/history/actions/add-message.js.map +1 -1
  39. package/dist/history/actions/add-messages.d.ts +6 -10
  40. package/dist/history/actions/add-messages.d.ts.map +1 -1
  41. package/dist/history/actions/add-messages.js +33 -38
  42. package/dist/history/actions/add-messages.js.map +1 -1
  43. package/dist/history/actions/clear.d.ts.map +1 -1
  44. package/dist/history/actions/clear.js +3 -3
  45. package/dist/history/actions/clear.js.map +1 -1
  46. package/dist/history/actions/get-messages.d.ts.map +1 -1
  47. package/dist/history/actions/get-messages.js +2 -2
  48. package/dist/history/actions/get-messages.js.map +1 -1
  49. package/dist/history/actions/list-sessions.d.ts.map +1 -1
  50. package/dist/history/actions/list-sessions.js +6 -3
  51. package/dist/history/actions/list-sessions.js.map +1 -1
  52. package/dist/history/index.d.ts +41 -5
  53. package/dist/history/index.d.ts.map +1 -1
  54. package/dist/history/index.js +52 -18
  55. package/dist/history/index.js.map +1 -1
  56. package/dist/history/session-adapter.d.ts +39 -0
  57. package/dist/history/session-adapter.d.ts.map +1 -0
  58. package/dist/history/session-adapter.js +74 -0
  59. package/dist/history/session-adapter.js.map +1 -0
  60. package/dist/history/types/index.d.ts +32 -1
  61. package/dist/history/types/index.d.ts.map +1 -1
  62. package/dist/history/utils/index.d.ts +1 -0
  63. package/dist/history/utils/index.d.ts.map +1 -1
  64. package/dist/history/utils/index.js +1 -0
  65. package/dist/history/utils/index.js.map +1 -1
  66. package/dist/history/utils/optimistic-retry.d.ts +31 -0
  67. package/dist/history/utils/optimistic-retry.d.ts.map +1 -0
  68. package/dist/history/utils/optimistic-retry.js +74 -0
  69. package/dist/history/utils/optimistic-retry.js.map +1 -0
  70. package/dist/history/utils/title-generator.d.ts.map +1 -1
  71. package/dist/history/utils/title-generator.js +8 -3
  72. package/dist/history/utils/title-generator.js.map +1 -1
  73. package/dist/history/utils/update-expression-builder.d.ts +18 -21
  74. package/dist/history/utils/update-expression-builder.d.ts.map +1 -1
  75. package/dist/history/utils/update-expression-builder.js +31 -46
  76. package/dist/history/utils/update-expression-builder.js.map +1 -1
  77. package/dist/history/utils/validation.d.ts.map +1 -1
  78. package/dist/history/utils/validation.js +23 -3
  79. package/dist/history/utils/validation.js.map +1 -1
  80. package/dist/index.d.ts +6 -2
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +6 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/shared/utils/batch-write.d.ts +44 -6
  85. package/dist/shared/utils/batch-write.d.ts.map +1 -1
  86. package/dist/shared/utils/batch-write.js +76 -28
  87. package/dist/shared/utils/batch-write.js.map +1 -1
  88. package/dist/shared/utils/client-factory.d.ts +25 -0
  89. package/dist/shared/utils/client-factory.d.ts.map +1 -0
  90. package/dist/shared/utils/client-factory.js +23 -0
  91. package/dist/shared/utils/client-factory.js.map +1 -0
  92. package/dist/shared/utils/compressor.d.ts +21 -3
  93. package/dist/shared/utils/compressor.d.ts.map +1 -1
  94. package/dist/shared/utils/compressor.js +75 -10
  95. package/dist/shared/utils/compressor.js.map +1 -1
  96. package/dist/shared/utils/constants.d.ts +1 -1
  97. package/dist/shared/utils/constants.d.ts.map +1 -1
  98. package/dist/shared/utils/constants.js +5 -1
  99. package/dist/shared/utils/constants.js.map +1 -1
  100. package/dist/shared/utils/index.d.ts +3 -0
  101. package/dist/shared/utils/index.d.ts.map +1 -1
  102. package/dist/shared/utils/index.js +3 -0
  103. package/dist/shared/utils/index.js.map +1 -1
  104. package/dist/shared/utils/logger.d.ts +27 -0
  105. package/dist/shared/utils/logger.d.ts.map +1 -1
  106. package/dist/shared/utils/logger.js +86 -0
  107. package/dist/shared/utils/logger.js.map +1 -1
  108. package/dist/shared/utils/retry.d.ts +7 -0
  109. package/dist/shared/utils/retry.d.ts.map +1 -1
  110. package/dist/shared/utils/retry.js +75 -17
  111. package/dist/shared/utils/retry.js.map +1 -1
  112. package/dist/shared/utils/s3-offloader.d.ts +10 -3
  113. package/dist/shared/utils/s3-offloader.d.ts.map +1 -1
  114. package/dist/shared/utils/s3-offloader.js +19 -9
  115. package/dist/shared/utils/s3-offloader.js.map +1 -1
  116. package/dist/shared/utils/s3-orphans.d.ts +16 -0
  117. package/dist/shared/utils/s3-orphans.d.ts.map +1 -0
  118. package/dist/shared/utils/s3-orphans.js +79 -0
  119. package/dist/shared/utils/s3-orphans.js.map +1 -0
  120. package/dist/shared/utils/sleep.d.ts +48 -0
  121. package/dist/shared/utils/sleep.d.ts.map +1 -0
  122. package/dist/shared/utils/sleep.js +82 -0
  123. package/dist/shared/utils/sleep.js.map +1 -0
  124. package/dist/shared/utils/ttl.d.ts +6 -2
  125. package/dist/shared/utils/ttl.d.ts.map +1 -1
  126. package/dist/shared/utils/ttl.js +17 -2
  127. package/dist/shared/utils/ttl.js.map +1 -1
  128. package/dist/store/actions/get-operation.d.ts.map +1 -1
  129. package/dist/store/actions/get-operation.js +2 -2
  130. package/dist/store/actions/get-operation.js.map +1 -1
  131. package/dist/store/actions/list-namespaces-operation.d.ts.map +1 -1
  132. package/dist/store/actions/list-namespaces-operation.js +44 -29
  133. package/dist/store/actions/list-namespaces-operation.js.map +1 -1
  134. package/dist/store/actions/put-operation.d.ts.map +1 -1
  135. package/dist/store/actions/put-operation.js +19 -5
  136. package/dist/store/actions/put-operation.js.map +1 -1
  137. package/dist/store/actions/search-operation.d.ts.map +1 -1
  138. package/dist/store/actions/search-operation.js +54 -21
  139. package/dist/store/actions/search-operation.js.map +1 -1
  140. package/dist/store/index.d.ts +1 -0
  141. package/dist/store/index.d.ts.map +1 -1
  142. package/dist/store/index.js +24 -20
  143. package/dist/store/index.js.map +1 -1
  144. package/dist/store/types/index.d.ts +33 -1
  145. package/dist/store/types/index.d.ts.map +1 -1
  146. package/dist/store/utils/filter.d.ts.map +1 -1
  147. package/dist/store/utils/filter.js +63 -1
  148. package/dist/store/utils/filter.js.map +1 -1
  149. package/dist/store/utils/validation.d.ts +6 -2
  150. package/dist/store/utils/validation.d.ts.map +1 -1
  151. package/dist/store/utils/validation.js +21 -5
  152. package/dist/store/utils/validation.js.map +1 -1
  153. package/package.json +33 -22
@@ -5,9 +5,8 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.DynamoDBStore = void 0;
8
- const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
9
- const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
10
8
  const langgraph_1 = require("@langchain/langgraph");
9
+ const shared_1 = require("../shared");
11
10
  const actions_1 = require("./actions");
12
11
  const utils_1 = require("./utils");
13
12
  class DynamoDBStore extends langgraph_1.BaseStore {
@@ -16,6 +15,7 @@ class DynamoDBStore extends langgraph_1.BaseStore {
16
15
  memoryTableName;
17
16
  embedding;
18
17
  ttlDays;
18
+ fallbackToLexicalOnEmbeddingFailure;
19
19
  ownsClient;
20
20
  /**
21
21
  * Create a new DynamoDB store instance
@@ -30,18 +30,14 @@ class DynamoDBStore extends langgraph_1.BaseStore {
30
30
  constructor(options) {
31
31
  super();
32
32
  this.memoryTableName = options.memoryTableName;
33
- if (options.client) {
34
- this.client = options.client;
35
- this.ddbClient = undefined;
36
- this.ownsClient = false;
37
- }
38
- else {
39
- this.ddbClient = new client_dynamodb_1.DynamoDBClient(options.clientConfig || {});
40
- this.client = lib_dynamodb_1.DynamoDBDocument.from(this.ddbClient);
41
- this.ownsClient = true;
42
- }
33
+ ({
34
+ ddbClient: this.ddbClient,
35
+ client: this.client,
36
+ ownsClient: this.ownsClient,
37
+ } = (0, shared_1.resolveDynamoDBClient)(options));
43
38
  this.embedding = options.embedding;
44
39
  this.ttlDays = options.ttlDays;
40
+ this.fallbackToLexicalOnEmbeddingFailure = options.fallbackToLexicalOnEmbeddingFailure ?? false;
45
41
  }
46
42
  /**
47
43
  * Release underlying DynamoDB client resources.
@@ -79,22 +75,25 @@ class DynamoDBStore extends langgraph_1.BaseStore {
79
75
  const userId = this.getUserId(config);
80
76
  // Validate batch size to prevent resource exhaustion
81
77
  (0, utils_1.validateBatchSize)(operations.length);
78
+ // Honor LangChain's RunnableConfig.signal — aborted signals reject every op.
79
+ const signal = config?.signal;
80
+ signal?.throwIfAborted();
82
81
  // Operation type dispatch — relies on LangGraph's Operation union discriminating
83
82
  // properties: GetOperation has {namespace, key}, PutOperation adds {value},
84
83
  // SearchOperation has {namespacePrefix}, ListNamespacesOperation has {limit, offset}
85
84
  // without {namespacePrefix} or {key}. This mirrors the official LangGraph stores.
86
85
  const promises = operations.map(async (op, index) => {
87
86
  if ('key' in op && !('value' in op)) {
88
- return await this.getOperation(userId, op);
87
+ return await this.getOperation(userId, op, signal);
89
88
  }
90
89
  if ('key' in op && 'value' in op) {
91
- return await this.putOperation(userId, op);
90
+ return await this.putOperation(userId, op, signal);
92
91
  }
93
92
  if ('namespacePrefix' in op) {
94
- return await this.searchOperation(userId, op);
93
+ return await this.searchOperation(userId, op, signal);
95
94
  }
96
95
  if (!('namespacePrefix' in op) && 'limit' in op && 'offset' in op) {
97
- return await this.listNamespacesOperation(userId, op);
96
+ return await this.listNamespacesOperation(userId, op, signal);
98
97
  }
99
98
  // Unrecognized operation - sanitized error message to prevent information disclosure
100
99
  throw new Error(`Unrecognized operation type at index ${index}`);
@@ -108,12 +107,13 @@ class DynamoDBStore extends langgraph_1.BaseStore {
108
107
  * @param op - Get operation parameters
109
108
  * @returns The item if found, null otherwise
110
109
  */
111
- async getOperation(userId, op) {
110
+ async getOperation(userId, op, signal) {
112
111
  return await (0, actions_1.getOperationAction)({
113
112
  client: this.client,
114
113
  memoryTableName: this.memoryTableName,
115
114
  userId,
116
115
  op,
116
+ signal,
117
117
  });
118
118
  }
119
119
  /**
@@ -122,7 +122,7 @@ class DynamoDBStore extends langgraph_1.BaseStore {
122
122
  * @param userId - User ID for the item
123
123
  * @param op - Put operation parameters
124
124
  */
125
- async putOperation(userId, op) {
125
+ async putOperation(userId, op, signal) {
126
126
  await (0, actions_1.putOperationAction)({
127
127
  client: this.client,
128
128
  memoryTableName: this.memoryTableName,
@@ -130,6 +130,7 @@ class DynamoDBStore extends langgraph_1.BaseStore {
130
130
  op,
131
131
  embedding: this.embedding,
132
132
  ttlDays: this.ttlDays,
133
+ signal,
133
134
  });
134
135
  }
135
136
  /**
@@ -139,13 +140,15 @@ class DynamoDBStore extends langgraph_1.BaseStore {
139
140
  * @param op - Search operation parameters
140
141
  * @returns Array of matching items with optional similarity scores
141
142
  */
142
- async searchOperation(userId, op) {
143
+ async searchOperation(userId, op, signal) {
143
144
  return await (0, actions_1.searchOperationAction)({
144
145
  client: this.client,
145
146
  memoryTableName: this.memoryTableName,
146
147
  userId,
147
148
  op,
148
149
  embedding: this.embedding,
150
+ fallbackToLexicalOnEmbeddingFailure: this.fallbackToLexicalOnEmbeddingFailure,
151
+ signal,
149
152
  });
150
153
  }
151
154
  /**
@@ -155,12 +158,13 @@ class DynamoDBStore extends langgraph_1.BaseStore {
155
158
  * @param op - List namespaces operation parameters
156
159
  * @returns Array of namespace paths
157
160
  */
158
- async listNamespacesOperation(userId, op) {
161
+ async listNamespacesOperation(userId, op, signal) {
159
162
  return await (0, actions_1.listNamespacesOperationAction)({
160
163
  client: this.client,
161
164
  memoryTableName: this.memoryTableName,
162
165
  userId,
163
166
  op,
167
+ signal,
164
168
  });
165
169
  }
166
170
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,19 @@ export interface DynamoDBStoreOptions {
20
20
  ttlDays?: number;
21
21
  /** Optional pre-built DynamoDBDocument client (takes precedence over clientConfig) */
22
22
  client?: DynamoDBDocument;
23
+ /**
24
+ * Controls behavior when a semantic-search embedding call (e.g. `embedding.embedQuery`)
25
+ * fails — for example because Bedrock is rate-limited or unreachable.
26
+ *
27
+ * - `false` (default, **fail-closed**): the error propagates to the caller so
28
+ * semantic search never silently degrades to unranked results. Recommended
29
+ * for production to preserve the caller's trust that "a result ranked by
30
+ * similarity" is what was actually returned.
31
+ * - `true` (fail-open): the error is logged and the raw (unranked) DynamoDB
32
+ * result set is returned instead. Only set this if your application has
33
+ * explicit, user-visible handling for degraded search quality.
34
+ */
35
+ fallbackToLexicalOnEmbeddingFailure?: boolean;
23
36
  }
24
37
  /**
25
38
  * Parameters for put operation action
@@ -37,6 +50,8 @@ export interface PutOperationActionParams {
37
50
  embedding?: EmbeddingsInterface;
38
51
  /** Optional TTL in days */
39
52
  ttlDays?: number;
53
+ /** Optional AbortSignal — cancels in-flight retries */
54
+ signal?: AbortSignal;
40
55
  }
41
56
  /**
42
57
  * Parameters for get operation action
@@ -50,6 +65,8 @@ export interface GetOperationActionParams {
50
65
  userId: string;
51
66
  /** Get operation parameters */
52
67
  op: GetOperation;
68
+ /** Optional AbortSignal — cancels in-flight retries */
69
+ signal?: AbortSignal;
53
70
  }
54
71
  /**
55
72
  * Parameters for search operation action
@@ -65,6 +82,13 @@ export interface SearchOperationActionParams {
65
82
  op: SearchOperation;
66
83
  /** Optional embeddings for semantic search */
67
84
  embedding?: EmbeddingsInterface;
85
+ /**
86
+ * When true, embedding failures log a warning and return lexical (unranked)
87
+ * results instead of throwing. Defaults to false (fail-closed).
88
+ */
89
+ fallbackToLexicalOnEmbeddingFailure?: boolean;
90
+ /** Optional AbortSignal — cancels in-flight retries */
91
+ signal?: AbortSignal;
68
92
  }
69
93
  /**
70
94
  * Parameters for list namespaces operation action
@@ -78,9 +102,13 @@ export interface ListNamespacesOperationActionParams {
78
102
  userId: string;
79
103
  /** List namespaces operation parameters */
80
104
  op: ListNamespacesOperation;
105
+ /** Optional AbortSignal — cancels in-flight retries */
106
+ signal?: AbortSignal;
81
107
  }
82
108
  /**
83
- * Filter value with comparison operators
109
+ * Filter value with comparison operators.
110
+ * Matches the operator set implemented by LangGraph's reference InMemoryStore
111
+ * (`@langchain/langgraph-checkpoint/store/utils.js:62`).
84
112
  */
85
113
  export type FilterValue = {
86
114
  /** Equal to */
@@ -95,5 +123,9 @@ export type FilterValue = {
95
123
  $lt?: number;
96
124
  /** Less than or equal to */
97
125
  $lte?: number;
126
+ /** In a list of values */
127
+ $in?: any[];
128
+ /** Not in a list of values */
129
+ $nin?: any[];
98
130
  };
99
131
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/store/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EACjB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,6CAA6C;IAC7C,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,EAAE,EAAE,YAAY,CAAC;IACjB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,EAAE,EAAE,YAAY,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,EAAE,EAAE,eAAe,CAAC;IACpB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mCAAmC;IAClD,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,EAAE,EAAE,uBAAuB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe;IACf,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,mBAAmB;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,mBAAmB;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/store/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/store/utils/filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,EACzC,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChD,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7C;IACD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CA+DA"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/store/utils/filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAuBvC;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG,CAAC,EACzC,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChD,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7C;IACD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CA0HA"}
@@ -4,6 +4,24 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.buildFilterExpression = buildFilterExpression;
7
+ const SUPPORTED_OPERATORS = ['$eq', '$ne', '$gt', '$gte', '$lt', '$lte', '$in', '$nin'];
8
+ /**
9
+ * Maximum array size for `$in` / `$nin` operators.
10
+ *
11
+ * DynamoDB caps the total ExpressionAttributeValues count at 100 per expression
12
+ * and condition-/filter-expression length at 4 KB. 50 items per list keeps headroom
13
+ * for other conditions in the same expression and produces predictable error
14
+ * messages instead of the opaque `ValidationException` DynamoDB returns when the
15
+ * expression limits are breached.
16
+ */
17
+ const MAX_IN_LIST_SIZE = 50;
18
+ /**
19
+ * Soft cap on the assembled FilterExpression string length. DynamoDB rejects
20
+ * expressions longer than 4 KiB with a `ValidationException`. We check at 3.5 KiB
21
+ * so we trip a clean, client-side error with actionable guidance before the
22
+ * request burns a round trip.
23
+ */
24
+ const MAX_FILTER_EXPRESSION_BYTES = 3.5 * 1024;
7
25
  /**
8
26
  * Build DynamoDB filter expression from a filter object
9
27
  *
@@ -26,6 +44,12 @@ function buildFilterExpression(filter, expressionAttributeNames, expressionAttri
26
44
  expressionAttributeNames[attrName] = fieldKey;
27
45
  // Handle operator-based filtering
28
46
  if (typeof fieldValue === 'object' && fieldValue !== null && !Array.isArray(fieldValue)) {
47
+ // Surface typos / unsupported operators rather than silently dropping the filter
48
+ const unknownOps = Object.keys(fieldValue).filter((k) => !SUPPORTED_OPERATORS.includes(k));
49
+ if (unknownOps.length > 0) {
50
+ throw new Error(`Unsupported filter operator(s) for field "${fieldKey}": ${unknownOps.join(', ')}. ` +
51
+ `Supported: ${SUPPORTED_OPERATORS.join(', ')}`);
52
+ }
29
53
  if (fieldValue.$eq !== undefined) {
30
54
  const valueKey = `:val${valueCounter++}`;
31
55
  expressionAttributeValues[valueKey] = fieldValue.$eq;
@@ -56,6 +80,36 @@ function buildFilterExpression(filter, expressionAttributeNames, expressionAttri
56
80
  expressionAttributeValues[valueKey] = fieldValue.$lte;
57
81
  filterExpressions.push(`${valuePath} <= ${valueKey}`);
58
82
  }
83
+ if (fieldValue.$in !== undefined) {
84
+ if (!Array.isArray(fieldValue.$in) || fieldValue.$in.length === 0) {
85
+ throw new Error(`$in operator for "${fieldKey}" requires a non-empty array`);
86
+ }
87
+ if (fieldValue.$in.length > MAX_IN_LIST_SIZE) {
88
+ throw new Error(`$in operator for "${fieldKey}" supports at most ${MAX_IN_LIST_SIZE} values ` +
89
+ `(got ${fieldValue.$in.length}). Split the query or narrow the filter.`);
90
+ }
91
+ const placeholders = fieldValue.$in.map((v) => {
92
+ const valueKey = `:val${valueCounter++}`;
93
+ expressionAttributeValues[valueKey] = v;
94
+ return valueKey;
95
+ });
96
+ filterExpressions.push(`${valuePath} IN (${placeholders.join(', ')})`);
97
+ }
98
+ if (fieldValue.$nin !== undefined) {
99
+ if (!Array.isArray(fieldValue.$nin) || fieldValue.$nin.length === 0) {
100
+ throw new Error(`$nin operator for "${fieldKey}" requires a non-empty array`);
101
+ }
102
+ if (fieldValue.$nin.length > MAX_IN_LIST_SIZE) {
103
+ throw new Error(`$nin operator for "${fieldKey}" supports at most ${MAX_IN_LIST_SIZE} values ` +
104
+ `(got ${fieldValue.$nin.length}). Split the query or narrow the filter.`);
105
+ }
106
+ const placeholders = fieldValue.$nin.map((v) => {
107
+ const valueKey = `:val${valueCounter++}`;
108
+ expressionAttributeValues[valueKey] = v;
109
+ return valueKey;
110
+ });
111
+ filterExpressions.push(`NOT (${valuePath} IN (${placeholders.join(', ')}))`);
112
+ }
59
113
  }
60
114
  else {
61
115
  // Direct equality comparison
@@ -64,8 +118,16 @@ function buildFilterExpression(filter, expressionAttributeNames, expressionAttri
64
118
  filterExpressions.push(`${valuePath} = ${valueKey}`);
65
119
  }
66
120
  }
121
+ const joined = filterExpressions.length > 0 ? filterExpressions.join(' AND ') : '';
122
+ // Byte length — DynamoDB counts expression size in UTF-8 bytes, not JS code units.
123
+ const byteLength = Buffer.byteLength(joined, 'utf8');
124
+ if (byteLength > MAX_FILTER_EXPRESSION_BYTES) {
125
+ throw new Error(`Filter expression is ${byteLength} bytes, exceeds DynamoDB's 4 KiB limit ` +
126
+ `(checked against a ${MAX_FILTER_EXPRESSION_BYTES}-byte soft cap). ` +
127
+ `Simplify the filter: fewer fields, shorter names, or drop deep nested paths.`);
128
+ }
67
129
  return {
68
- filterExpression: filterExpressions.length > 0 ? filterExpressions.join(' AND ') : '',
130
+ filterExpression: joined,
69
131
  };
70
132
  }
71
133
  //# sourceMappingURL=filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/store/utils/filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/store/utils/filter.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,11 @@ export declare class ValidationError extends Error {
5
5
  constructor(message: string);
6
6
  }
7
7
  /**
8
- * Validate namespace array
8
+ * Validate namespace array.
9
+ *
10
+ * Enforces the same invariants as LangGraph's base `validateNamespace`
11
+ * (`@langchain/langgraph-checkpoint/store/base.js:16-24`) plus the
12
+ * separators we use internally for the DynamoDB sort-key composite.
9
13
  */
10
14
  export declare function validateNamespace(namespace: string[]): void;
11
15
  /**
@@ -48,7 +52,7 @@ export declare function validateBatchSize(operationsCount: any): void;
48
52
  * Export constants for use in other modules
49
53
  */
50
54
  export declare const ValidationConstants: {
51
- readonly MAX_LOOP_ITERATIONS: 100;
55
+ readonly MAX_LOOP_ITERATIONS: 1000;
52
56
  readonly MAX_TOTAL_ITEMS_IN_MEMORY: 10000;
53
57
  readonly MAX_OFFSET: 10000;
54
58
  readonly MAX_DEPTH: 100;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/store/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CA8B3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAgB1C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAW9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI,CA4BlE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAOlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAoChE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAYhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAiCtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,CAgBrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,IAAI,CAc5D;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;CAMtB,CAAC"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/store/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmBH,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAyC3D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAgB1C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAW9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,IAAI,CA4BlE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAOlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAoChE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAYhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAmCtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,CAgBrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,IAAI,CAc5D;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;CAMtB,CAAC"}
@@ -20,6 +20,7 @@ const MAX_NAMESPACE_DEPTH = 20;
20
20
  const MAX_VALUE_SIZE = 400 * 1024; // 400KB (DynamoDB item size limit is 400KB)
21
21
  const MAX_EMBEDDING_DIMENSIONS = 10000;
22
22
  const MAX_EMBEDDINGS_PER_ITEM = 100;
23
+ const MAX_LIST_LIMIT = 1000; // Maximum list/search limit
23
24
  const MAX_OFFSET = 10000; // Prevent resource exhaustion
24
25
  const MAX_DEPTH = 100; // Maximum depth for namespace listing
25
26
  const MAX_BATCH_SIZE = 100; // Maximum operations in a single batch
@@ -32,7 +33,11 @@ class ValidationError extends Error {
32
33
  }
33
34
  exports.ValidationError = ValidationError;
34
35
  /**
35
- * Validate namespace array
36
+ * Validate namespace array.
37
+ *
38
+ * Enforces the same invariants as LangGraph's base `validateNamespace`
39
+ * (`@langchain/langgraph-checkpoint/store/base.js:16-24`) plus the
40
+ * separators we use internally for the DynamoDB sort-key composite.
36
41
  */
37
42
  function validateNamespace(namespace) {
38
43
  if (!Array.isArray(namespace)) {
@@ -44,6 +49,10 @@ function validateNamespace(namespace) {
44
49
  if (namespace.length > MAX_NAMESPACE_DEPTH) {
45
50
  throw new ValidationError(`Namespace depth exceeds maximum of ${MAX_NAMESPACE_DEPTH} levels`);
46
51
  }
52
+ // Reserved root label per LangGraph base-class contract
53
+ if (namespace[0] === 'langgraph') {
54
+ throw new ValidationError('Namespace root label "langgraph" is reserved');
55
+ }
47
56
  for (const part of namespace) {
48
57
  if (typeof part !== 'string') {
49
58
  throw new ValidationError('Namespace parts must be strings');
@@ -51,6 +60,11 @@ function validateNamespace(namespace) {
51
60
  if (part.length === 0) {
52
61
  throw new ValidationError('Namespace parts cannot be empty strings');
53
62
  }
63
+ // Reserved characters per LangGraph base-class contract (".") and DynamoDB
64
+ // sort-key separators we use internally ("#", "/").
65
+ if (part.includes('.')) {
66
+ throw new ValidationError('Namespace parts cannot contain "." character');
67
+ }
54
68
  if (part.includes('#')) {
55
69
  throw new ValidationError('Namespace parts cannot contain "#" character');
56
70
  }
@@ -99,8 +113,8 @@ function validatePagination(limit, offset) {
99
113
  if (limit < 0) {
100
114
  throw new ValidationError('Limit cannot be negative');
101
115
  }
102
- if (limit > 1000) {
103
- throw new ValidationError('Limit cannot exceed 1000');
116
+ if (limit > MAX_LIST_LIMIT) {
117
+ throw new ValidationError(`Limit cannot exceed ${MAX_LIST_LIMIT}`);
104
118
  }
105
119
  }
106
120
  if (offset !== undefined) {
@@ -194,8 +208,10 @@ function validateJSONPath(paths) {
194
208
  if (path.length > MAX_JSONPATH_LENGTH) {
195
209
  throw new ValidationError(`JSONPath expression exceeds maximum length of ${MAX_JSONPATH_LENGTH} characters`);
196
210
  }
197
- // Basic safety checks - disallow potentially dangerous patterns
198
- if (path.includes('__proto__') || path.includes('constructor') || path.includes('prototype')) {
211
+ // Block prototype-pollution-shaped access, but only when it's used as a
212
+ // property step (preceded by `.` or `[`). Plain substrings like `$.constructors[0]`
213
+ // or `$.data.prototyping` are legitimate paths and must pass through.
214
+ if (/(?:^|\.|\[)(?:__proto__|constructor|prototype)(?:$|[.[\]])/.test(path)) {
199
215
  throw new ValidationError('JSONPath expression contains disallowed patterns');
200
216
  }
201
217
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/store/utils/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/store/utils/validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farukada/aws-langgraph-dynamodb-ts",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "license": "MIT",
5
5
  "description": "AWS DynamoDB implementation for LangGraph Memory Store and Checkpoint Saver in TypeScript",
6
6
  "keywords": [
@@ -12,13 +12,13 @@
12
12
  "memory-store"
13
13
  ],
14
14
  "author": "Faruk Ada <info@farukada.com>",
15
- "homepage": "https://github.com/farukada/aws-langgraph-dynamodb-ts",
15
+ "homepage": "https://github.com/FarukAda/aws-langgraph-dynamodb-ts",
16
16
  "repository": {
17
17
  "type": "git",
18
- "url": "https://github.com/farukada/aws-langgraph-dynamodb-ts"
18
+ "url": "https://github.com/FarukAda/aws-langgraph-dynamodb-ts"
19
19
  },
20
20
  "bugs": {
21
- "url": "https://github.com/farukada/aws-langgraph-dynamodb-ts/issues"
21
+ "url": "https://github.com/FarukAda/aws-langgraph-dynamodb-ts/issues"
22
22
  },
23
23
  "main": "dist/index.js",
24
24
  "types": "dist/index.d.ts",
@@ -37,8 +37,14 @@
37
37
  "scripts": {
38
38
  "build": "tsc",
39
39
  "typecheck": "tsc --noEmit",
40
- "lint": "eslint src/**/*.ts test/**/*.ts --fix",
40
+ "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
41
+ "lint:fix": "eslint \"src/**/*.ts\" \"test/**/*.ts\" --fix",
41
42
  "test": "jest",
43
+ "test:integration": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.integration.config.ts",
44
+ "test:integration:up": "docker compose up -d",
45
+ "test:integration:down": "docker compose down",
46
+ "test:mutate": "stryker run",
47
+ "test:mutate:quick": "stryker run --mutate src/shared/utils/retry.ts,src/shared/utils/compressor.ts,src/store/utils/filter.ts",
42
48
  "docs": "typedoc",
43
49
  "docs:watch": "typedoc --watch",
44
50
  "unused": "knip",
@@ -48,11 +54,11 @@
48
54
  "cpd:test": "jscpd ./test --threshold 2 --min-lines 3 --reporters console --verbose --format typescript,javascript"
49
55
  },
50
56
  "dependencies": {
51
- "@aws-sdk/client-dynamodb": "^3.1014.0",
52
- "@aws-sdk/lib-dynamodb": "^3.1014.0",
53
- "@langchain/aws": "^1.3.3",
54
- "@langchain/core": "^1.1.35",
55
- "@langchain/langgraph": "^1.2.5",
57
+ "@aws-sdk/client-dynamodb": "^3.1031.0",
58
+ "@aws-sdk/lib-dynamodb": "^3.1031.0",
59
+ "@langchain/aws": "^1.3.5",
60
+ "@langchain/core": "^1.1.40",
61
+ "@langchain/langgraph": "^1.2.9",
56
62
  "@langchain/langgraph-checkpoint": "^1.0.1",
57
63
  "jsonpath-plus": "^10.4.0"
58
64
  },
@@ -65,31 +71,36 @@
65
71
  }
66
72
  },
67
73
  "devDependencies": {
68
- "@aws-sdk/client-s3": "^3.1014.0",
74
+ "@aws-sdk/client-bedrock-runtime": "^3.1031.0",
75
+ "@aws-sdk/client-s3": "^3.1031.0",
69
76
  "@eslint/js": "^10.0.1",
77
+ "@stryker-mutator/core": "9.6.1",
78
+ "@stryker-mutator/jest-runner": "9.6.1",
79
+ "@stryker-mutator/typescript-checker": "9.6.1",
70
80
  "@types/jest": "^30.0.0",
81
+ "@types/node": "^25.6.0",
71
82
  "aws-sdk-client-mock": "^4.1.0",
72
83
  "depcheck": "^1.4.7",
73
- "eslint": "^10.1.0",
84
+ "eslint": "^10.2.0",
74
85
  "eslint-config-prettier": "^10.1.8",
75
86
  "eslint-plugin-no-instanceof": "^1.0.1",
76
- "eslint-plugin-perfectionist": "^5.7.0",
87
+ "eslint-plugin-perfectionist": "^5.8.0",
77
88
  "eslint-plugin-prettier": "^5.5.5",
78
89
  "eslint-plugin-unused-imports": "^4.4.1",
79
- "globals": "^17.4.0",
90
+ "globals": "^17.5.0",
80
91
  "jest": "^30.3.0",
81
92
  "jest-sonar": "^0.2.16",
82
93
  "jiti": "^2.6.1",
83
- "jscpd": "^4.0.8",
84
- "knip": "^6.0.1",
85
- "prettier": "^3.8.1",
86
- "ts-jest": "^29.4.6",
87
- "ts-loader": "^9.5.4",
94
+ "jscpd": "^4.0.9",
95
+ "knip": "^6.4.1",
96
+ "prettier": "^3.8.3",
97
+ "ts-jest": "^29.4.9",
98
+ "ts-loader": "^9.5.7",
88
99
  "ts-node": "^10.9.2",
89
- "typedoc": "^0.28.17",
100
+ "typedoc": "^0.28.19",
90
101
  "typedoc-plugin-markdown": "^4.11.0",
91
- "typescript": "^5.9.3",
92
- "typescript-eslint": "^8.57.1"
102
+ "typescript": "^6.0.3",
103
+ "typescript-eslint": "^8.58.2"
93
104
  },
94
105
  "prettier": {
95
106
  "semi": true,