@farukada/aws-langgraph-dynamodb-ts 0.0.9 → 0.0.11
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 +8 -0
- package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -1
- package/dist/checkpointer/actions/get-tuple.js +6 -20
- package/dist/checkpointer/actions/get-tuple.js.map +1 -1
- package/dist/checkpointer/actions/put-writes.js +1 -1
- package/dist/checkpointer/actions/put-writes.js.map +1 -1
- package/dist/checkpointer/actions/put.js +1 -1
- package/dist/checkpointer/actions/put.js.map +1 -1
- package/dist/checkpointer/index.d.ts.map +1 -1
- package/dist/checkpointer/index.js +4 -23
- package/dist/checkpointer/index.js.map +1 -1
- package/dist/checkpointer/utils/deserialization.d.ts +15 -0
- package/dist/checkpointer/utils/deserialization.d.ts.map +1 -0
- package/dist/checkpointer/utils/deserialization.js +39 -0
- package/dist/checkpointer/utils/deserialization.js.map +1 -0
- package/dist/checkpointer/utils/index.d.ts +1 -0
- package/dist/checkpointer/utils/index.d.ts.map +1 -1
- package/dist/checkpointer/utils/index.js +1 -0
- package/dist/checkpointer/utils/index.js.map +1 -1
- package/dist/checkpointer/utils/validation.d.ts +7 -7
- package/dist/checkpointer/utils/validation.d.ts.map +1 -1
- package/dist/checkpointer/utils/validation.js.map +1 -1
- package/dist/factory.d.ts +137 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +175 -0
- package/dist/factory.js.map +1 -0
- package/dist/history/actions/add-message.d.ts.map +1 -1
- package/dist/history/actions/add-message.js +7 -23
- package/dist/history/actions/add-message.js.map +1 -1
- package/dist/history/actions/add-messages.d.ts.map +1 -1
- package/dist/history/actions/add-messages.js +7 -23
- package/dist/history/actions/add-messages.js.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/update-expression-builder.d.ts +34 -0
- package/dist/history/utils/update-expression-builder.d.ts.map +1 -0
- package/dist/history/utils/update-expression-builder.js +60 -0
- package/dist/history/utils/update-expression-builder.js.map +1 -0
- package/dist/history/utils/validation.d.ts +4 -4
- package/dist/history/utils/validation.d.ts.map +1 -1
- package/dist/history/utils/validation.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/shared/utils/index.d.ts +3 -2
- package/dist/shared/utils/index.d.ts.map +1 -1
- package/dist/shared/utils/index.js +3 -2
- package/dist/shared/utils/index.js.map +1 -1
- package/dist/shared/utils/ttl.d.ts +13 -0
- package/dist/shared/utils/ttl.d.ts.map +1 -0
- package/dist/shared/utils/ttl.js +24 -0
- package/dist/shared/utils/ttl.js.map +1 -0
- package/dist/store/actions/put-operation.d.ts.map +1 -1
- package/dist/store/actions/put-operation.js +2 -2
- package/dist/store/actions/put-operation.js.map +1 -1
- package/dist/store/utils/validation.d.ts +5 -5
- package/dist/store/utils/validation.d.ts.map +1 -1
- package/dist/store/utils/validation.js.map +1 -1
- package/package.json +5 -3
package/dist/factory.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Factory for creating DynamoDB persistence instances with sensible defaults
|
|
4
|
+
* Provides convenient methods for instantiating checkpointer, store, and chat history
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DynamoDBFactory = void 0;
|
|
8
|
+
const checkpointer_1 = require("./checkpointer");
|
|
9
|
+
const store_1 = require("./store");
|
|
10
|
+
const history_1 = require("./history");
|
|
11
|
+
/**
|
|
12
|
+
* Default table names with standard prefix
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_TABLE_PREFIX = 'langgraph';
|
|
15
|
+
/**
|
|
16
|
+
* Factory class for creating DynamoDB persistence instances
|
|
17
|
+
*/
|
|
18
|
+
class DynamoDBFactory {
|
|
19
|
+
/**
|
|
20
|
+
* Create a DynamoDBSaver instance with sensible defaults
|
|
21
|
+
*
|
|
22
|
+
* @param options - Partial configuration options
|
|
23
|
+
* @param options.checkpointsTableName - Optional checkpoints table name (default: 'langgraph-checkpoints')
|
|
24
|
+
* @param options.writesTableName - Optional writes table name (default: 'langgraph-writes')
|
|
25
|
+
* @param options.ttlDays - Optional TTL in days for automatic cleanup
|
|
26
|
+
* @param options.serde - Optional custom serializer protocol
|
|
27
|
+
* @param options.clientConfig - Optional DynamoDB client configuration
|
|
28
|
+
* @returns Configured DynamoDBSaver instance
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```TypeScript
|
|
32
|
+
* // Minimal configuration (uses defaults)
|
|
33
|
+
* const checkpointer = DynamoDBFactory.createSaver({
|
|
34
|
+
* clientConfig: { region: 'us-east-1' }
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Custom table names and TTL
|
|
38
|
+
* const checkpointer = DynamoDBFactory.createSaver({
|
|
39
|
+
* checkpointsTableName: 'my-checkpoints',
|
|
40
|
+
* writesTableName: 'my-writes',
|
|
41
|
+
* ttlDays: 30,
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
static createSaver(options = {}) {
|
|
46
|
+
const config = {
|
|
47
|
+
checkpointsTableName: options.checkpointsTableName ?? `${DEFAULT_TABLE_PREFIX}-checkpoints`,
|
|
48
|
+
writesTableName: options.writesTableName ?? `${DEFAULT_TABLE_PREFIX}-writes`,
|
|
49
|
+
ttlDays: options.ttlDays,
|
|
50
|
+
serde: options.serde,
|
|
51
|
+
clientConfig: options.clientConfig,
|
|
52
|
+
};
|
|
53
|
+
return new checkpointer_1.DynamoDBSaver(config);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a DynamoDBStore instance with sensible defaults
|
|
57
|
+
*
|
|
58
|
+
* @param options - Partial configuration options
|
|
59
|
+
* @param options.memoryTableName - Optional memory table name (default: 'langgraph-memory')
|
|
60
|
+
* @param options.embedding - Optional Bedrock embeddings for semantic search
|
|
61
|
+
* @param options.ttlDays - Optional TTL in days for automatic cleanup
|
|
62
|
+
* @param options.clientConfig - Optional DynamoDB client configuration
|
|
63
|
+
* @returns Configured DynamoDBStore instance
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```TypeScript
|
|
67
|
+
* // Without a semantic search
|
|
68
|
+
* const store = DynamoDBFactory.createStore({
|
|
69
|
+
* clientConfig: { region: 'us-east-1' }
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* // With semantic search
|
|
73
|
+
* import { BedrockEmbeddings } from '@langchain/aws';
|
|
74
|
+
*
|
|
75
|
+
* const store = DynamoDBFactory.createStore({
|
|
76
|
+
* embedding: new BedrockEmbeddings({
|
|
77
|
+
* model: 'amazon.titan-embed-text-v1',
|
|
78
|
+
* }),
|
|
79
|
+
* ttlDays: 90,
|
|
80
|
+
* });
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
static createStore(options = {}) {
|
|
84
|
+
const config = {
|
|
85
|
+
memoryTableName: options.memoryTableName ?? `${DEFAULT_TABLE_PREFIX}-memory`,
|
|
86
|
+
embedding: options.embedding,
|
|
87
|
+
ttlDays: options.ttlDays,
|
|
88
|
+
clientConfig: options.clientConfig,
|
|
89
|
+
};
|
|
90
|
+
return new store_1.DynamoDBStore(config);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create a DynamoDBChatMessageHistory instance with sensible defaults
|
|
94
|
+
*
|
|
95
|
+
* @param options - Partial configuration options
|
|
96
|
+
* @param options.tableName - Optional chat history table name (default: 'langgraph-chat-history')
|
|
97
|
+
* @param options.ttlDays - Optional TTL in days for automatic cleanup
|
|
98
|
+
* @param options.clientConfig - Optional DynamoDB client configuration
|
|
99
|
+
* @returns Configured DynamoDBChatMessageHistory instance
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```TypeScript
|
|
103
|
+
* // Minimal configuration (uses defaults)
|
|
104
|
+
* const history = DynamoDBFactory.createChatMessageHistory({
|
|
105
|
+
* clientConfig: { region: 'us-east-1' }
|
|
106
|
+
* });
|
|
107
|
+
*
|
|
108
|
+
* // Custom table name and TTL
|
|
109
|
+
* const history = DynamoDBFactory.createChatMessageHistory({
|
|
110
|
+
* tableName: 'my-chat-history',
|
|
111
|
+
* ttlDays: 365,
|
|
112
|
+
* });
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
static createChatMessageHistory(options = {}) {
|
|
116
|
+
const config = {
|
|
117
|
+
tableName: options.tableName ?? `${DEFAULT_TABLE_PREFIX}-chat-history`,
|
|
118
|
+
ttlDays: options.ttlDays,
|
|
119
|
+
clientConfig: options.clientConfig,
|
|
120
|
+
};
|
|
121
|
+
return new history_1.DynamoDBChatMessageHistory(config);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create all DynamoDB persistence instances at once with a shared configuration
|
|
125
|
+
*
|
|
126
|
+
* @param options - Configuration options
|
|
127
|
+
* @param options.tablePrefix - Optional prefix for all table names (default: 'langgraph')
|
|
128
|
+
* @param options.ttlDays - Optional TTL in days for automatic cleanup (applies to all)
|
|
129
|
+
* @param options.clientConfig - Optional DynamoDB client configuration (shared)
|
|
130
|
+
* @param options.embedding - Optional Bedrock embeddings for semantic search in store
|
|
131
|
+
* @param options.serde - Optional custom serializer protocol for checkpointer
|
|
132
|
+
* @returns Object containing all three persistence instances
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```TypeScript
|
|
136
|
+
* // Create all instances with shared configuration
|
|
137
|
+
* const { checkpointer, store, chatHistory } = DynamoDBFactory.createAll({
|
|
138
|
+
* tablePrefix: 'my-app',
|
|
139
|
+
* ttlDays: 30,
|
|
140
|
+
* clientConfig: { region: 'us-east-1' },
|
|
141
|
+
* });
|
|
142
|
+
*
|
|
143
|
+
* // Use with LangGraph
|
|
144
|
+
* const app = workflow.compile({
|
|
145
|
+
* checkpointer,
|
|
146
|
+
* store,
|
|
147
|
+
* });
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
static createAll(options = {}) {
|
|
151
|
+
const prefix = options.tablePrefix ?? DEFAULT_TABLE_PREFIX;
|
|
152
|
+
return {
|
|
153
|
+
checkpointer: this.createSaver({
|
|
154
|
+
checkpointsTableName: `${prefix}-checkpoints`,
|
|
155
|
+
writesTableName: `${prefix}-writes`,
|
|
156
|
+
ttlDays: options.ttlDays,
|
|
157
|
+
serde: options.serde,
|
|
158
|
+
clientConfig: options.clientConfig,
|
|
159
|
+
}),
|
|
160
|
+
store: this.createStore({
|
|
161
|
+
memoryTableName: `${prefix}-memory`,
|
|
162
|
+
embedding: options.embedding,
|
|
163
|
+
ttlDays: options.ttlDays,
|
|
164
|
+
clientConfig: options.clientConfig,
|
|
165
|
+
}),
|
|
166
|
+
chatHistory: this.createChatMessageHistory({
|
|
167
|
+
tableName: `${prefix}-chat-history`,
|
|
168
|
+
ttlDays: options.ttlDays,
|
|
169
|
+
clientConfig: options.clientConfig,
|
|
170
|
+
}),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.DynamoDBFactory = DynamoDBFactory;
|
|
175
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAMH,iDAA+C;AAC/C,mCAAwC;AACxC,uCAAuD;AAKvD;;GAEG;AACH,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAEzC;;GAEG;AACH,MAAa,eAAe;IAC1B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,WAAW,CAAC,UAAyC,EAAE;QAC5D,MAAM,MAAM,GAAyB;YACnC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,GAAG,oBAAoB,cAAc;YAC3F,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,GAAG,oBAAoB,SAAS;YAC5E,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;QAEF,OAAO,IAAI,4BAAa,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,WAAW,CAAC,UAAyC,EAAE;QAC5D,MAAM,MAAM,GAAyB;YACnC,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,GAAG,oBAAoB,SAAS;YAC5E,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;QAEF,OAAO,IAAI,qBAAa,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,wBAAwB,CAC7B,UAAsD,EAAE;QAExD,MAAM,MAAM,GAAsC;YAChD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG,oBAAoB,eAAe;YACtE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;QAEF,OAAO,IAAI,oCAA0B,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,MAAM,CAAC,SAAS,CACd,UAMI,EAAE;QAMN,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;QAE3D,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC7B,oBAAoB,EAAE,GAAG,MAAM,cAAc;gBAC7C,eAAe,EAAE,GAAG,MAAM,SAAS;gBACnC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC;YACF,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;gBACtB,eAAe,EAAE,GAAG,MAAM,SAAS;gBACnC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC;YACF,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC;gBACzC,SAAS,EAAE,GAAG,MAAM,eAAe;gBACnC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC;SACH,CAAC;IACJ,CAAC;CACF;AAhLD,0CAgLC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-message.d.ts","sourceRoot":"","sources":["../../../src/history/actions/add-message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"add-message.d.ts","sourceRoot":"","sources":["../../../src/history/actions/add-message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAYvD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAU,QAAQ,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAkCnF,CAAC"}
|
|
@@ -20,33 +20,17 @@ const addMessageAction = async (params) => {
|
|
|
20
20
|
(0, utils_1.validateMessage)(message);
|
|
21
21
|
(0, utils_1.validateTitle)(title);
|
|
22
22
|
(0, utils_1.validateTTLDays)(ttlDays);
|
|
23
|
-
const now = Date.now();
|
|
24
23
|
// Generate a title if this is the first message and no title provided
|
|
25
24
|
let sessionTitle = title;
|
|
26
25
|
if (!sessionTitle) {
|
|
27
26
|
sessionTitle = (0, utils_1.generateTitle)(message);
|
|
28
27
|
}
|
|
29
|
-
// Build update expression
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
':one': 1,
|
|
36
|
-
':message': [message],
|
|
37
|
-
};
|
|
38
|
-
if (sessionTitle) {
|
|
39
|
-
updateExpressionParts.push('title = if_not_exists(title, :title)');
|
|
40
|
-
expressionAttributeValues[':title'] = sessionTitle;
|
|
41
|
-
}
|
|
42
|
-
updateExpressionParts.push('messages = list_append(if_not_exists(messages, :emptyList), :message)');
|
|
43
|
-
updateExpressionParts.push('messageCount = if_not_exists(messageCount, :zero) + :one');
|
|
44
|
-
expressionAttributeValues[':zero'] = 0;
|
|
45
|
-
// Add TTL if configured
|
|
46
|
-
if (ttlDays !== undefined) {
|
|
47
|
-
updateExpressionParts.push('ttl = :ttl');
|
|
48
|
-
expressionAttributeValues[':ttl'] = Math.floor(Date.now() / 1000) + ttlDays * 24 * 60 * 60;
|
|
49
|
-
}
|
|
28
|
+
// Build update expression using utility
|
|
29
|
+
const { updateExpression, expressionAttributeValues } = (0, utils_1.buildMessageUpdateExpression)({
|
|
30
|
+
messages: message,
|
|
31
|
+
title: sessionTitle,
|
|
32
|
+
ttlDays,
|
|
33
|
+
});
|
|
50
34
|
// Execute with retry logic
|
|
51
35
|
await (0, utils_1.withDynamoDBRetry)(async () => {
|
|
52
36
|
await client.update({
|
|
@@ -55,7 +39,7 @@ const addMessageAction = async (params) => {
|
|
|
55
39
|
userId,
|
|
56
40
|
sessionId,
|
|
57
41
|
},
|
|
58
|
-
UpdateExpression:
|
|
42
|
+
UpdateExpression: updateExpression,
|
|
59
43
|
ExpressionAttributeValues: expressionAttributeValues,
|
|
60
44
|
});
|
|
61
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-message.js","sourceRoot":"","sources":["../../../src/history/actions/add-message.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,
|
|
1
|
+
{"version":3,"file":"add-message.js","sourceRoot":"","sources":["../../../src/history/actions/add-message.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,oCASkB;AAElB;;;;;;GAMG;AACI,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAA8B,EAAiB,EAAE;IACtF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEjF,kBAAkB;IAClB,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC;IACvB,IAAA,yBAAiB,EAAC,SAAS,CAAC,CAAC;IAC7B,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC;IACzB,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC;IACrB,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC;IAEzB,sEAAsE;IACtE,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAA,qBAAa,EAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,wCAAwC;IACxC,MAAM,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,GAAG,IAAA,oCAA4B,EAAC;QACnF,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,YAAY;QACnB,OAAO;KACR,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,IAAA,yBAAiB,EAAC,KAAK,IAAI,EAAE;QACjC,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE;gBACH,MAAM;gBACN,SAAS;aACV;YACD,gBAAgB,EAAE,gBAAgB;YAClC,yBAAyB,EAAE,yBAAyB;SACrD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,gBAAgB,oBAkC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"add-messages.d.ts","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAYxD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAU,QAAQ,uBAAuB,KAAG,OAAO,CAAC,IAAI,CAkCrF,CAAC"}
|
|
@@ -21,33 +21,17 @@ const addMessagesAction = async (params) => {
|
|
|
21
21
|
(0, utils_1.validateMessages)(messages);
|
|
22
22
|
(0, utils_1.validateTitle)(title);
|
|
23
23
|
(0, utils_1.validateTTLDays)(ttlDays);
|
|
24
|
-
const now = Date.now();
|
|
25
24
|
// Generate a title if this is the first message batch and no title provided
|
|
26
25
|
let sessionTitle = title;
|
|
27
26
|
if (!sessionTitle) {
|
|
28
27
|
sessionTitle = (0, utils_1.generateTitle)(messages[0]);
|
|
29
28
|
}
|
|
30
|
-
// Build update expression
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
':messageCount': messages.length,
|
|
37
|
-
':messages': messages,
|
|
38
|
-
};
|
|
39
|
-
if (sessionTitle) {
|
|
40
|
-
updateExpressionParts.push('title = if_not_exists(title, :title)');
|
|
41
|
-
expressionAttributeValues[':title'] = sessionTitle;
|
|
42
|
-
}
|
|
43
|
-
updateExpressionParts.push('messages = list_append(if_not_exists(messages, :emptyList), :messages)');
|
|
44
|
-
updateExpressionParts.push('messageCount = if_not_exists(messageCount, :zero) + :messageCount');
|
|
45
|
-
expressionAttributeValues[':zero'] = 0;
|
|
46
|
-
// Add TTL if configured
|
|
47
|
-
if (ttlDays !== undefined) {
|
|
48
|
-
updateExpressionParts.push('ttl = :ttl');
|
|
49
|
-
expressionAttributeValues[':ttl'] = Math.floor(Date.now() / 1000) + ttlDays * 24 * 60 * 60;
|
|
50
|
-
}
|
|
29
|
+
// Build update expression using utility
|
|
30
|
+
const { updateExpression, expressionAttributeValues } = (0, utils_1.buildMessageUpdateExpression)({
|
|
31
|
+
messages,
|
|
32
|
+
title: sessionTitle,
|
|
33
|
+
ttlDays,
|
|
34
|
+
});
|
|
51
35
|
// Execute with retry logic
|
|
52
36
|
await (0, utils_1.withDynamoDBRetry)(async () => {
|
|
53
37
|
await client.update({
|
|
@@ -56,7 +40,7 @@ const addMessagesAction = async (params) => {
|
|
|
56
40
|
userId,
|
|
57
41
|
sessionId,
|
|
58
42
|
},
|
|
59
|
-
UpdateExpression:
|
|
43
|
+
UpdateExpression: updateExpression,
|
|
60
44
|
ExpressionAttributeValues: expressionAttributeValues,
|
|
61
45
|
});
|
|
62
46
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add-messages.js","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,
|
|
1
|
+
{"version":3,"file":"add-messages.js","sourceRoot":"","sources":["../../../src/history/actions/add-messages.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,oCASkB;AAElB;;;;;;;GAOG;AACI,MAAM,iBAAiB,GAAG,KAAK,EAAE,MAA+B,EAAiB,EAAE;IACxF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAElF,kBAAkB;IAClB,IAAA,sBAAc,EAAC,MAAM,CAAC,CAAC;IACvB,IAAA,yBAAiB,EAAC,SAAS,CAAC,CAAC;IAC7B,IAAA,wBAAgB,EAAC,QAAQ,CAAC,CAAC;IAC3B,IAAA,qBAAa,EAAC,KAAK,CAAC,CAAC;IACrB,IAAA,uBAAe,EAAC,OAAO,CAAC,CAAC;IAEzB,4EAA4E;IAC5E,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAA,qBAAa,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,wCAAwC;IACxC,MAAM,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,GAAG,IAAA,oCAA4B,EAAC;QACnF,QAAQ;QACR,KAAK,EAAE,YAAY;QACnB,OAAO;KACR,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,IAAA,yBAAiB,EAAC,KAAK,IAAI,EAAE;QACjC,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE;gBACH,MAAM;gBACN,SAAS;aACV;YACD,gBAAgB,EAAE,gBAAgB;YAClC,yBAAyB,EAAE,yBAAyB;SACrD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,iBAAiB,qBAkC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/history/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/history/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -20,6 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
20
20
|
exports.withDynamoDBRetry = void 0;
|
|
21
21
|
__exportStar(require("./validation"), exports);
|
|
22
22
|
__exportStar(require("./title-generator"), exports);
|
|
23
|
+
__exportStar(require("./update-expression-builder"), exports);
|
|
23
24
|
var utils_1 = require("../../shared/utils");
|
|
24
25
|
Object.defineProperty(exports, "withDynamoDBRetry", { enumerable: true, get: function () { return utils_1.withDynamoDBRetry; } });
|
|
25
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/history/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,oDAAkC;AAClC,4CAAuD;AAA9C,0GAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/history/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,oDAAkC;AAClC,8DAA4C;AAC5C,4CAAuD;AAA9C,0GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update expression builder for chat message history
|
|
3
|
+
* Provides centralized logic for building DynamoDB update expressions
|
|
4
|
+
*/
|
|
5
|
+
import type { BaseMessage } from '@langchain/core/messages';
|
|
6
|
+
/**
|
|
7
|
+
* Parameters for building message update expression
|
|
8
|
+
*/
|
|
9
|
+
export interface BuildMessageUpdateExpressionParams {
|
|
10
|
+
/** Single message or array of messages to add */
|
|
11
|
+
messages: BaseMessage | BaseMessage[];
|
|
12
|
+
/** Optional session title */
|
|
13
|
+
title?: string;
|
|
14
|
+
/** Optional TTL in days */
|
|
15
|
+
ttlDays?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Result of building update expression
|
|
19
|
+
*/
|
|
20
|
+
export interface UpdateExpressionResult {
|
|
21
|
+
/** DynamoDB UpdateExpression string */
|
|
22
|
+
updateExpression: string;
|
|
23
|
+
/** Expression attribute values */
|
|
24
|
+
expressionAttributeValues: Record<string, any>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build DynamoDB update expression for adding messages to a session
|
|
28
|
+
* Handles both single messages and message arrays
|
|
29
|
+
*
|
|
30
|
+
* @param params - Parameters for building the expression
|
|
31
|
+
* @returns Update expression and attribute values
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildMessageUpdateExpression(params: BuildMessageUpdateExpressionParams): UpdateExpressionResult;
|
|
34
|
+
//# sourceMappingURL=update-expression-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-expression-builder.d.ts","sourceRoot":"","sources":["../../../src/history/utils/update-expression-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAI5D;;GAEG;AACH,MAAM,WAAW,kCAAkC;IACjD,iDAAiD;IACjD,QAAQ,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IACtC,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChD;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kCAAkC,GACzC,sBAAsB,CAqDxB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Update expression builder for chat message history
|
|
4
|
+
* Provides centralized logic for building DynamoDB update expressions
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.buildMessageUpdateExpression = buildMessageUpdateExpression;
|
|
8
|
+
const shared_1 = require("../../shared");
|
|
9
|
+
/**
|
|
10
|
+
* Build DynamoDB update expression for adding messages to a session
|
|
11
|
+
* Handles both single messages and message arrays
|
|
12
|
+
*
|
|
13
|
+
* @param params - Parameters for building the expression
|
|
14
|
+
* @returns Update expression and attribute values
|
|
15
|
+
*/
|
|
16
|
+
function buildMessageUpdateExpression(params) {
|
|
17
|
+
const { messages, title, ttlDays } = params;
|
|
18
|
+
const now = Date.now();
|
|
19
|
+
const isArray = Array.isArray(messages);
|
|
20
|
+
const messageArray = isArray ? messages : [messages];
|
|
21
|
+
const messageCount = messageArray.length;
|
|
22
|
+
// Build update expression parts
|
|
23
|
+
const updateExpressionParts = ['updatedAt = :updatedAt'];
|
|
24
|
+
const expressionAttributeValues = {
|
|
25
|
+
':updatedAt': now,
|
|
26
|
+
':createdAt': now,
|
|
27
|
+
':emptyList': [],
|
|
28
|
+
':zero': 0,
|
|
29
|
+
};
|
|
30
|
+
// Add title if provided
|
|
31
|
+
if (title) {
|
|
32
|
+
updateExpressionParts.push('title = if_not_exists(title, :title)');
|
|
33
|
+
expressionAttributeValues[':title'] = title;
|
|
34
|
+
}
|
|
35
|
+
// Add messages
|
|
36
|
+
if (isArray) {
|
|
37
|
+
updateExpressionParts.push('messages = list_append(if_not_exists(messages, :emptyList), :messages)');
|
|
38
|
+
updateExpressionParts.push('messageCount = if_not_exists(messageCount, :zero) + :messageCount');
|
|
39
|
+
expressionAttributeValues[':messages'] = messageArray;
|
|
40
|
+
expressionAttributeValues[':messageCount'] = messageCount;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
updateExpressionParts.push('messages = list_append(if_not_exists(messages, :emptyList), :message)');
|
|
44
|
+
updateExpressionParts.push('messageCount = if_not_exists(messageCount, :zero) + :one');
|
|
45
|
+
expressionAttributeValues[':message'] = messageArray;
|
|
46
|
+
expressionAttributeValues[':one'] = 1;
|
|
47
|
+
}
|
|
48
|
+
// Add TTL if configured
|
|
49
|
+
if (ttlDays !== undefined) {
|
|
50
|
+
updateExpressionParts.push('ttl = :ttl');
|
|
51
|
+
expressionAttributeValues[':ttl'] = (0, shared_1.calculateTTLTimestamp)(ttlDays);
|
|
52
|
+
}
|
|
53
|
+
// Build final update expression
|
|
54
|
+
const updateExpression = `SET ${updateExpressionParts.join(', ')}, createdAt = if_not_exists(createdAt, :createdAt)`;
|
|
55
|
+
return {
|
|
56
|
+
updateExpression,
|
|
57
|
+
expressionAttributeValues,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=update-expression-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-expression-builder.js","sourceRoot":"","sources":["../../../src/history/utils/update-expression-builder.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAmCH,oEAuDC;AAtFD,yCAAqD;AAwBrD;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAC1C,MAA0C;IAE1C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC;IAEzC,gCAAgC;IAChC,MAAM,qBAAqB,GAAa,CAAC,wBAAwB,CAAC,CAAC;IACnE,MAAM,yBAAyB,GAAwB;QACrD,YAAY,EAAE,GAAG;QACjB,YAAY,EAAE,GAAG;QACjB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,CAAC;KACX,CAAC;IAEF,wBAAwB;IACxB,IAAI,KAAK,EAAE,CAAC;QACV,qBAAqB,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACnE,yBAAyB,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAC9C,CAAC;IAED,eAAe;IACf,IAAI,OAAO,EAAE,CAAC;QACZ,qBAAqB,CAAC,IAAI,CACxB,wEAAwE,CACzE,CAAC;QACF,qBAAqB,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAChG,yBAAyB,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;QACtD,yBAAyB,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,qBAAqB,CAAC,IAAI,CACxB,uEAAuE,CACxE,CAAC;QACF,qBAAqB,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QACvF,yBAAyB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;QACrD,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,yBAAyB,CAAC,MAAM,CAAC,GAAG,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,gCAAgC;IAChC,MAAM,gBAAgB,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,oDAAoD,CAAC;IAErH,OAAO;QACL,gBAAgB;QAChB,yBAAyB;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -14,14 +14,14 @@ export declare class HistoryValidationError extends Error {
|
|
|
14
14
|
* @param userId - User identifier to validate
|
|
15
15
|
* @throws HistoryValidationError if validation fails
|
|
16
16
|
*/
|
|
17
|
-
export declare function validateUserId(userId:
|
|
17
|
+
export declare function validateUserId(userId: any): void;
|
|
18
18
|
/**
|
|
19
19
|
* Validate session ID
|
|
20
20
|
*
|
|
21
21
|
* @param sessionId - Session identifier to validate
|
|
22
22
|
* @throws HistoryValidationError if validation fails
|
|
23
23
|
*/
|
|
24
|
-
export declare function validateSessionId(sessionId:
|
|
24
|
+
export declare function validateSessionId(sessionId: any): void;
|
|
25
25
|
/**
|
|
26
26
|
* Validate a single message
|
|
27
27
|
*
|
|
@@ -42,14 +42,14 @@ export declare function validateMessages(messages: BaseMessage[]): void;
|
|
|
42
42
|
* @param title - Optional title string to validate
|
|
43
43
|
* @throws HistoryValidationError if validation fails
|
|
44
44
|
*/
|
|
45
|
-
export declare function validateTitle(title:
|
|
45
|
+
export declare function validateTitle(title: any): void;
|
|
46
46
|
/**
|
|
47
47
|
* Validate list limit parameter
|
|
48
48
|
*
|
|
49
49
|
* @param limit - Optional maximum number of items to return
|
|
50
50
|
* @throws HistoryValidationError if validation fails
|
|
51
51
|
*/
|
|
52
|
-
export declare function validateLimit(limit:
|
|
52
|
+
export declare function validateLimit(limit: any): void;
|
|
53
53
|
/**
|
|
54
54
|
* Validate TTL days (wraps shared validation with a history-specific error type)
|
|
55
55
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/history/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUvD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/history/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAUvD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAoBhD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CAoBtD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAa1D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAyB9D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAc9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAgB9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAOjE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/history/utils/validation.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA4BH,wCAoBC;AAQD,8CAoBC;AAQD,0CAaC;AAQD,4CAyBC;AAQD,sCAcC;AAQD,sCAgBC;AAQD,0CAOC;AA3LD,8CAA0E;AAE1E,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B;;GAEG;AACH,MAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AALD,wDAKC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/history/utils/validation.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ export { DynamoDBStore } from './store';
|
|
|
4
4
|
export type { DynamoDBStoreOptions } from './store/types';
|
|
5
5
|
export { DynamoDBChatMessageHistory } from './history';
|
|
6
6
|
export type { DynamoDBChatMessageHistoryOptions, SessionMetadata } from './history/types';
|
|
7
|
+
export { DynamoDBFactory } from './factory';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvD,YAAY,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvD,YAAY,EAAE,iCAAiC,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DynamoDBChatMessageHistory = exports.DynamoDBStore = exports.DynamoDBSaver = void 0;
|
|
3
|
+
exports.DynamoDBFactory = exports.DynamoDBChatMessageHistory = exports.DynamoDBStore = exports.DynamoDBSaver = void 0;
|
|
4
4
|
var checkpointer_1 = require("./checkpointer");
|
|
5
5
|
Object.defineProperty(exports, "DynamoDBSaver", { enumerable: true, get: function () { return checkpointer_1.DynamoDBSaver; } });
|
|
6
6
|
var store_1 = require("./store");
|
|
7
7
|
Object.defineProperty(exports, "DynamoDBStore", { enumerable: true, get: function () { return store_1.DynamoDBStore; } });
|
|
8
8
|
var history_1 = require("./history");
|
|
9
9
|
Object.defineProperty(exports, "DynamoDBChatMessageHistory", { enumerable: true, get: function () { return history_1.DynamoDBChatMessageHistory; } });
|
|
10
|
+
var factory_1 = require("./factory");
|
|
11
|
+
Object.defineProperty(exports, "DynamoDBFactory", { enumerable: true, get: function () { return factory_1.DynamoDBFactory; } });
|
|
10
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+CAA+C;AAAtC,6GAAA,aAAa,OAAA;AAEtB,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AAEtB,qCAAuD;AAA9C,qHAAA,0BAA0B,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+CAA+C;AAAtC,6GAAA,aAAa,OAAA;AAEtB,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AAEtB,qCAAuD;AAA9C,qHAAA,0BAA0B,OAAA;AAEnC,qCAA4C;AAAnC,0GAAA,eAAe,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Shared utilities
|
|
3
|
+
* Shared utilities and types
|
|
4
4
|
*/
|
|
5
5
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
6
|
if (k2 === undefined) k2 = k;
|
|
@@ -17,6 +17,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
17
17
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
__exportStar(require("./retry"), exports);
|
|
21
20
|
__exportStar(require("./constants"), exports);
|
|
21
|
+
__exportStar(require("./retry"), exports);
|
|
22
|
+
__exportStar(require("./ttl"), exports);
|
|
22
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,8CAA4B;AAC5B,0CAAwB;AACxB,wCAAsB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTL (Time-To-Live) utility functions
|
|
3
|
+
* Provide centralized TTL calculation for DynamoDB items
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Calculate Unix timestamp for TTL expiration
|
|
7
|
+
*
|
|
8
|
+
* @param ttlDays - Number of days until expiration
|
|
9
|
+
* @returns Unix timestamp in seconds for DynamoDB TTL attribute
|
|
10
|
+
* @throws Error if ttlDays would cause overflow
|
|
11
|
+
*/
|
|
12
|
+
export declare function calculateTTLTimestamp(ttlDays: number): number;
|
|
13
|
+
//# sourceMappingURL=ttl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ttl.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/ttl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAU7D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TTL (Time-To-Live) utility functions
|
|
4
|
+
* Provide centralized TTL calculation for DynamoDB items
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.calculateTTLTimestamp = calculateTTLTimestamp;
|
|
8
|
+
/**
|
|
9
|
+
* Calculate Unix timestamp for TTL expiration
|
|
10
|
+
*
|
|
11
|
+
* @param ttlDays - Number of days until expiration
|
|
12
|
+
* @returns Unix timestamp in seconds for DynamoDB TTL attribute
|
|
13
|
+
* @throws Error if ttlDays would cause overflow
|
|
14
|
+
*/
|
|
15
|
+
function calculateTTLTimestamp(ttlDays) {
|
|
16
|
+
const ttlSeconds = ttlDays * 24 * 60 * 60;
|
|
17
|
+
const timestamp = Math.floor(Date.now() / 1000) + ttlSeconds;
|
|
18
|
+
// Sanity check: ensure we don't overflow Unix timestamp
|
|
19
|
+
if (timestamp > 2147483647) {
|
|
20
|
+
throw new Error('TTL would overflow Unix timestamp (max date: 2038-01-19)');
|
|
21
|
+
}
|
|
22
|
+
return timestamp;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=ttl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ttl.js","sourceRoot":"","sources":["../../../src/shared/utils/ttl.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AASH,sDAUC;AAjBD;;;;;;GAMG;AACH,SAAgB,qBAAqB,CAAC,OAAe;IACnD,MAAM,UAAU,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC;IAE7D,wDAAwD;IACxD,IAAI,SAAS,GAAG,UAAU,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"put-operation.d.ts","sourceRoot":"","sources":["../../../src/store/actions/put-operation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"put-operation.d.ts","sourceRoot":"","sources":["../../../src/store/actions/put-operation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAapD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAU,QAAQ,wBAAwB,KAAG,OAAO,CAAC,IAAI,CAqFvF,CAAC"}
|