@farukada/aws-langgraph-dynamodb-ts 0.1.1 → 0.2.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.
- package/README.md +131 -5
- package/dist/checkpointer/actions/delete-thread.d.ts.map +1 -1
- package/dist/checkpointer/actions/delete-thread.js +17 -9
- package/dist/checkpointer/actions/delete-thread.js.map +1 -1
- package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -1
- package/dist/checkpointer/actions/get-tuple.js +70 -32
- package/dist/checkpointer/actions/get-tuple.js.map +1 -1
- package/dist/checkpointer/actions/put-writes.d.ts.map +1 -1
- package/dist/checkpointer/actions/put-writes.js +36 -19
- package/dist/checkpointer/actions/put-writes.js.map +1 -1
- package/dist/checkpointer/actions/put.d.ts.map +1 -1
- package/dist/checkpointer/actions/put.js +75 -18
- package/dist/checkpointer/actions/put.js.map +1 -1
- package/dist/checkpointer/actions/writer.d.ts +6 -4
- package/dist/checkpointer/actions/writer.d.ts.map +1 -1
- package/dist/checkpointer/actions/writer.js +12 -12
- package/dist/checkpointer/actions/writer.js.map +1 -1
- package/dist/checkpointer/index.d.ts +11 -4
- package/dist/checkpointer/index.d.ts.map +1 -1
- package/dist/checkpointer/index.js +97 -72
- package/dist/checkpointer/index.js.map +1 -1
- package/dist/checkpointer/types/index.d.ts +8 -0
- package/dist/checkpointer/types/index.d.ts.map +1 -1
- package/dist/checkpointer/utils/deserialization.d.ts.map +1 -1
- package/dist/checkpointer/utils/deserialization.js +28 -4
- package/dist/checkpointer/utils/deserialization.js.map +1 -1
- package/dist/checkpointer/utils/validation.d.ts +8 -8
- package/dist/checkpointer/utils/validation.d.ts.map +1 -1
- package/dist/checkpointer/utils/validation.js +45 -1
- package/dist/checkpointer/utils/validation.js.map +1 -1
- package/dist/factory.d.ts +14 -0
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +39 -20
- package/dist/factory.js.map +1 -1
- package/dist/history/actions/add-message.d.ts +5 -9
- package/dist/history/actions/add-message.d.ts.map +1 -1
- package/dist/history/actions/add-message.js +14 -42
- package/dist/history/actions/add-message.js.map +1 -1
- package/dist/history/actions/add-messages.d.ts +6 -10
- package/dist/history/actions/add-messages.d.ts.map +1 -1
- package/dist/history/actions/add-messages.js +33 -38
- package/dist/history/actions/add-messages.js.map +1 -1
- package/dist/history/actions/clear.d.ts.map +1 -1
- package/dist/history/actions/clear.js +3 -3
- package/dist/history/actions/clear.js.map +1 -1
- package/dist/history/actions/get-messages.d.ts.map +1 -1
- package/dist/history/actions/get-messages.js +2 -2
- package/dist/history/actions/get-messages.js.map +1 -1
- package/dist/history/actions/list-sessions.d.ts.map +1 -1
- package/dist/history/actions/list-sessions.js +6 -3
- package/dist/history/actions/list-sessions.js.map +1 -1
- package/dist/history/index.d.ts +41 -5
- package/dist/history/index.d.ts.map +1 -1
- package/dist/history/index.js +52 -18
- package/dist/history/index.js.map +1 -1
- package/dist/history/session-adapter.d.ts +39 -0
- package/dist/history/session-adapter.d.ts.map +1 -0
- package/dist/history/session-adapter.js +74 -0
- package/dist/history/session-adapter.js.map +1 -0
- package/dist/history/types/index.d.ts +32 -1
- package/dist/history/types/index.d.ts.map +1 -1
- package/dist/history/utils/index.d.ts +1 -0
- package/dist/history/utils/index.d.ts.map +1 -1
- package/dist/history/utils/index.js +1 -0
- package/dist/history/utils/index.js.map +1 -1
- package/dist/history/utils/optimistic-retry.d.ts +31 -0
- package/dist/history/utils/optimistic-retry.d.ts.map +1 -0
- package/dist/history/utils/optimistic-retry.js +74 -0
- package/dist/history/utils/optimistic-retry.js.map +1 -0
- package/dist/history/utils/title-generator.d.ts.map +1 -1
- package/dist/history/utils/title-generator.js +8 -3
- package/dist/history/utils/title-generator.js.map +1 -1
- package/dist/history/utils/update-expression-builder.d.ts +18 -21
- package/dist/history/utils/update-expression-builder.d.ts.map +1 -1
- package/dist/history/utils/update-expression-builder.js +31 -46
- package/dist/history/utils/update-expression-builder.js.map +1 -1
- package/dist/history/utils/validation.d.ts.map +1 -1
- package/dist/history/utils/validation.js +23 -3
- package/dist/history/utils/validation.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/shared/utils/batch-write.d.ts +44 -6
- package/dist/shared/utils/batch-write.d.ts.map +1 -1
- package/dist/shared/utils/batch-write.js +76 -28
- package/dist/shared/utils/batch-write.js.map +1 -1
- package/dist/shared/utils/client-factory.d.ts +25 -0
- package/dist/shared/utils/client-factory.d.ts.map +1 -0
- package/dist/shared/utils/client-factory.js +23 -0
- package/dist/shared/utils/client-factory.js.map +1 -0
- package/dist/shared/utils/compressor.d.ts +21 -3
- package/dist/shared/utils/compressor.d.ts.map +1 -1
- package/dist/shared/utils/compressor.js +75 -10
- package/dist/shared/utils/compressor.js.map +1 -1
- package/dist/shared/utils/constants.d.ts +1 -1
- package/dist/shared/utils/constants.d.ts.map +1 -1
- package/dist/shared/utils/constants.js +5 -1
- package/dist/shared/utils/constants.js.map +1 -1
- package/dist/shared/utils/index.d.ts +3 -0
- package/dist/shared/utils/index.d.ts.map +1 -1
- package/dist/shared/utils/index.js +3 -0
- package/dist/shared/utils/index.js.map +1 -1
- package/dist/shared/utils/logger.d.ts +27 -0
- package/dist/shared/utils/logger.d.ts.map +1 -1
- package/dist/shared/utils/logger.js +86 -0
- package/dist/shared/utils/logger.js.map +1 -1
- package/dist/shared/utils/retry.d.ts +7 -0
- package/dist/shared/utils/retry.d.ts.map +1 -1
- package/dist/shared/utils/retry.js +75 -17
- package/dist/shared/utils/retry.js.map +1 -1
- package/dist/shared/utils/s3-offloader.d.ts +10 -3
- package/dist/shared/utils/s3-offloader.d.ts.map +1 -1
- package/dist/shared/utils/s3-offloader.js +19 -9
- package/dist/shared/utils/s3-offloader.js.map +1 -1
- package/dist/shared/utils/s3-orphans.d.ts +16 -0
- package/dist/shared/utils/s3-orphans.d.ts.map +1 -0
- package/dist/shared/utils/s3-orphans.js +79 -0
- package/dist/shared/utils/s3-orphans.js.map +1 -0
- package/dist/shared/utils/sleep.d.ts +48 -0
- package/dist/shared/utils/sleep.d.ts.map +1 -0
- package/dist/shared/utils/sleep.js +82 -0
- package/dist/shared/utils/sleep.js.map +1 -0
- package/dist/shared/utils/ttl.d.ts +6 -2
- package/dist/shared/utils/ttl.d.ts.map +1 -1
- package/dist/shared/utils/ttl.js +17 -2
- package/dist/shared/utils/ttl.js.map +1 -1
- package/dist/store/actions/get-operation.d.ts.map +1 -1
- package/dist/store/actions/get-operation.js +2 -2
- package/dist/store/actions/get-operation.js.map +1 -1
- package/dist/store/actions/list-namespaces-operation.d.ts.map +1 -1
- package/dist/store/actions/list-namespaces-operation.js +44 -29
- package/dist/store/actions/list-namespaces-operation.js.map +1 -1
- package/dist/store/actions/put-operation.d.ts.map +1 -1
- package/dist/store/actions/put-operation.js +19 -5
- package/dist/store/actions/put-operation.js.map +1 -1
- package/dist/store/actions/search-operation.d.ts.map +1 -1
- package/dist/store/actions/search-operation.js +54 -21
- package/dist/store/actions/search-operation.js.map +1 -1
- package/dist/store/index.d.ts +1 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +24 -20
- package/dist/store/index.js.map +1 -1
- package/dist/store/types/index.d.ts +33 -1
- package/dist/store/types/index.d.ts.map +1 -1
- package/dist/store/utils/filter.d.ts.map +1 -1
- package/dist/store/utils/filter.js +63 -1
- package/dist/store/utils/filter.js.map +1 -1
- package/dist/store/utils/validation.d.ts +6 -2
- package/dist/store/utils/validation.d.ts.map +1 -1
- package/dist/store/utils/validation.js +21 -5
- package/dist/store/utils/validation.js.map +1 -1
- package/package.json +39 -25
package/dist/store/index.js
CHANGED
|
@@ -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
|
-
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
36
|
-
this.ownsClient
|
|
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
|
}
|
package/dist/store/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
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;
|
|
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;
|
|
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:
|
|
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":";AAAA;;GAEG;;
|
|
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:
|
|
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;
|
|
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 >
|
|
103
|
-
throw new ValidationError(
|
|
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
|
-
//
|
|
198
|
-
|
|
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":";AAAA;;GAEG;;;
|
|
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.
|
|
3
|
+
"version": "0.2.2",
|
|
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/
|
|
15
|
+
"homepage": "https://github.com/FarukAda/aws-langgraph-dynamodb-ts",
|
|
16
16
|
"repository": {
|
|
17
17
|
"type": "git",
|
|
18
|
-
"url": "https://github.com/
|
|
18
|
+
"url": "https://github.com/FarukAda/aws-langgraph-dynamodb-ts"
|
|
19
19
|
},
|
|
20
20
|
"bugs": {
|
|
21
|
-
"url": "https://github.com/
|
|
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
|
|
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,48 +54,56 @@
|
|
|
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.
|
|
52
|
-
"@aws-sdk/lib-dynamodb": "^3.
|
|
53
|
-
"@langchain/aws": "^1.3.
|
|
54
|
-
"@langchain/core": "^1.1.
|
|
55
|
-
"@langchain/langgraph": "^1.2
|
|
56
|
-
"@langchain/langgraph-checkpoint": "^1.0.
|
|
57
|
+
"@aws-sdk/client-dynamodb": "^3.1054.0",
|
|
58
|
+
"@aws-sdk/lib-dynamodb": "^3.1054.0",
|
|
59
|
+
"@langchain/aws": "^1.3.9",
|
|
60
|
+
"@langchain/core": "^1.1.48",
|
|
61
|
+
"@langchain/langgraph": "^1.3.2",
|
|
62
|
+
"@langchain/langgraph-checkpoint": "^1.0.2",
|
|
57
63
|
"jsonpath-plus": "^10.4.0"
|
|
58
64
|
},
|
|
59
65
|
"peerDependencies": {
|
|
60
66
|
"@aws-sdk/client-s3": "^3.900.0"
|
|
61
67
|
},
|
|
68
|
+
"overrides": {
|
|
69
|
+
"uuid": ">=11.1.1"
|
|
70
|
+
},
|
|
62
71
|
"peerDependenciesMeta": {
|
|
63
72
|
"@aws-sdk/client-s3": {
|
|
64
73
|
"optional": true
|
|
65
74
|
}
|
|
66
75
|
},
|
|
67
76
|
"devDependencies": {
|
|
68
|
-
"@aws-sdk/client-
|
|
77
|
+
"@aws-sdk/client-bedrock-runtime": "^3.1054.0",
|
|
78
|
+
"@aws-sdk/client-s3": "^3.1054.0",
|
|
69
79
|
"@eslint/js": "^10.0.1",
|
|
80
|
+
"@stryker-mutator/core": "9.6.1",
|
|
81
|
+
"@stryker-mutator/jest-runner": "9.6.1",
|
|
82
|
+
"@stryker-mutator/typescript-checker": "9.6.1",
|
|
70
83
|
"@types/jest": "^30.0.0",
|
|
84
|
+
"@types/node": "^25.9.1",
|
|
71
85
|
"aws-sdk-client-mock": "^4.1.0",
|
|
72
86
|
"depcheck": "^1.4.7",
|
|
73
|
-
"eslint": "^10.
|
|
87
|
+
"eslint": "^10.4.0",
|
|
74
88
|
"eslint-config-prettier": "^10.1.8",
|
|
75
89
|
"eslint-plugin-no-instanceof": "^1.0.1",
|
|
76
|
-
"eslint-plugin-perfectionist": "^5.
|
|
90
|
+
"eslint-plugin-perfectionist": "^5.9.0",
|
|
77
91
|
"eslint-plugin-prettier": "^5.5.5",
|
|
78
92
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
79
|
-
"globals": "^17.
|
|
80
|
-
"jest": "^30.
|
|
93
|
+
"globals": "^17.6.0",
|
|
94
|
+
"jest": "^30.4.2",
|
|
81
95
|
"jest-sonar": "^0.2.16",
|
|
82
|
-
"jiti": "^2.
|
|
83
|
-
"jscpd": "^4.
|
|
84
|
-
"knip": "^6.
|
|
85
|
-
"prettier": "^3.8.
|
|
86
|
-
"ts-jest": "^29.4.
|
|
87
|
-
"ts-loader": "^9.5.
|
|
96
|
+
"jiti": "^2.7.0",
|
|
97
|
+
"jscpd": "^4.2.4",
|
|
98
|
+
"knip": "^6.14.2",
|
|
99
|
+
"prettier": "^3.8.3",
|
|
100
|
+
"ts-jest": "^29.4.11",
|
|
101
|
+
"ts-loader": "^9.5.7",
|
|
88
102
|
"ts-node": "^10.9.2",
|
|
89
|
-
"typedoc": "^0.28.
|
|
103
|
+
"typedoc": "^0.28.19",
|
|
90
104
|
"typedoc-plugin-markdown": "^4.11.0",
|
|
91
|
-
"typescript": "^
|
|
92
|
-
"typescript-eslint": "^8.
|
|
105
|
+
"typescript": "^6.0.3",
|
|
106
|
+
"typescript-eslint": "^8.60.0"
|
|
93
107
|
},
|
|
94
108
|
"prettier": {
|
|
95
109
|
"semi": true,
|