@farukada/aws-langgraph-dynamodb-ts 0.0.11 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +353 -242
- package/dist/checkpointer/actions/delete-thread.d.ts +3 -3
- package/dist/checkpointer/actions/delete-thread.d.ts.map +1 -1
- package/dist/checkpointer/actions/delete-thread.js +95 -52
- package/dist/checkpointer/actions/delete-thread.js.map +1 -1
- package/dist/checkpointer/actions/get-tuple.d.ts +8 -1
- package/dist/checkpointer/actions/get-tuple.d.ts.map +1 -1
- package/dist/checkpointer/actions/get-tuple.js +72 -20
- 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 +27 -22
- package/dist/checkpointer/actions/put-writes.js.map +1 -1
- package/dist/checkpointer/actions/put.d.ts +6 -2
- package/dist/checkpointer/actions/put.d.ts.map +1 -1
- package/dist/checkpointer/actions/put.js +80 -19
- package/dist/checkpointer/actions/put.js.map +1 -1
- package/dist/checkpointer/index.d.ts +43 -2
- package/dist/checkpointer/index.d.ts.map +1 -1
- package/dist/checkpointer/index.js +226 -11
- package/dist/checkpointer/index.js.map +1 -1
- package/dist/checkpointer/types/index.d.ts +66 -4
- package/dist/checkpointer/types/index.d.ts.map +1 -1
- package/dist/checkpointer/types/index.js +10 -0
- package/dist/checkpointer/types/index.js.map +1 -1
- package/dist/checkpointer/utils/deserialization.d.ts +8 -3
- package/dist/checkpointer/utils/deserialization.d.ts.map +1 -1
- package/dist/checkpointer/utils/deserialization.js +23 -5
- package/dist/checkpointer/utils/deserialization.js.map +1 -1
- package/dist/checkpointer/utils/validation.d.ts +1 -1
- package/dist/checkpointer/utils/validation.js +1 -1
- package/dist/checkpointer/utils/validation.js.map +1 -1
- package/dist/factory.d.ts +8 -6
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +16 -4
- package/dist/factory.js.map +1 -1
- package/dist/history/actions/add-message.d.ts +2 -1
- package/dist/history/actions/add-message.d.ts.map +1 -1
- package/dist/history/actions/add-message.js +22 -18
- package/dist/history/actions/add-message.js.map +1 -1
- package/dist/history/actions/add-messages.d.ts +3 -2
- package/dist/history/actions/add-messages.d.ts.map +1 -1
- package/dist/history/actions/add-messages.js +30 -20
- package/dist/history/actions/add-messages.js.map +1 -1
- package/dist/history/actions/clear.d.ts +4 -3
- package/dist/history/actions/clear.d.ts.map +1 -1
- package/dist/history/actions/clear.js +47 -12
- package/dist/history/actions/clear.js.map +1 -1
- package/dist/history/actions/get-messages.d.ts +2 -1
- package/dist/history/actions/get-messages.d.ts.map +1 -1
- package/dist/history/actions/get-messages.js +41 -15
- package/dist/history/actions/get-messages.js.map +1 -1
- package/dist/history/actions/list-sessions.d.ts +11 -0
- package/dist/history/actions/list-sessions.d.ts.map +1 -1
- package/dist/history/actions/list-sessions.js +23 -3
- package/dist/history/actions/list-sessions.js.map +1 -1
- package/dist/history/index.d.ts +8 -0
- package/dist/history/index.d.ts.map +1 -1
- package/dist/history/index.js +22 -2
- package/dist/history/index.js.map +1 -1
- package/dist/history/types/index.d.ts +27 -5
- package/dist/history/types/index.d.ts.map +1 -1
- package/dist/history/types/index.js +1 -0
- package/dist/history/types/index.js.map +1 -1
- package/dist/history/utils/title-generator.js.map +1 -1
- package/dist/history/utils/update-expression-builder.d.ts +45 -21
- package/dist/history/utils/update-expression-builder.d.ts.map +1 -1
- package/dist/history/utils/update-expression-builder.js +105 -38
- package/dist/history/utils/update-expression-builder.js.map +1 -1
- package/dist/history/utils/validation.d.ts +8 -0
- package/dist/history/utils/validation.d.ts.map +1 -1
- package/dist/history/utils/validation.js +22 -0
- package/dist/history/utils/validation.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/shared/utils/batch-write.d.ts +36 -0
- package/dist/shared/utils/batch-write.d.ts.map +1 -0
- package/dist/shared/utils/batch-write.js +62 -0
- package/dist/shared/utils/batch-write.js.map +1 -0
- package/dist/shared/utils/compressor.d.ts +48 -0
- package/dist/shared/utils/compressor.d.ts.map +1 -0
- package/dist/shared/utils/compressor.js +68 -0
- package/dist/shared/utils/compressor.js.map +1 -0
- package/dist/shared/utils/constants.d.ts +2 -0
- package/dist/shared/utils/constants.d.ts.map +1 -1
- package/dist/shared/utils/constants.js +3 -7
- package/dist/shared/utils/constants.js.map +1 -1
- package/dist/shared/utils/index.d.ts +4 -0
- package/dist/shared/utils/index.d.ts.map +1 -1
- package/dist/shared/utils/index.js +4 -0
- package/dist/shared/utils/index.js.map +1 -1
- package/dist/shared/utils/logger.d.ts +48 -0
- package/dist/shared/utils/logger.d.ts.map +1 -0
- package/dist/shared/utils/logger.js +62 -0
- package/dist/shared/utils/logger.js.map +1 -0
- package/dist/shared/utils/retry.d.ts +1 -1
- package/dist/shared/utils/retry.d.ts.map +1 -1
- package/dist/shared/utils/retry.js +13 -6
- package/dist/shared/utils/retry.js.map +1 -1
- package/dist/shared/utils/s3-offloader.d.ts +146 -0
- package/dist/shared/utils/s3-offloader.d.ts.map +1 -0
- package/dist/shared/utils/s3-offloader.js +271 -0
- package/dist/shared/utils/s3-offloader.js.map +1 -0
- package/dist/shared/utils/ttl.d.ts +8 -1
- package/dist/shared/utils/ttl.d.ts.map +1 -1
- package/dist/shared/utils/ttl.js +12 -8
- package/dist/shared/utils/ttl.js.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/put-operation.d.ts.map +1 -1
- package/dist/store/actions/put-operation.js +2 -1
- package/dist/store/actions/put-operation.js.map +1 -1
- package/dist/store/actions/search-operation.d.ts +6 -0
- package/dist/store/actions/search-operation.d.ts.map +1 -1
- package/dist/store/actions/search-operation.js +41 -21
- package/dist/store/actions/search-operation.js.map +1 -1
- package/dist/store/index.d.ts +10 -2
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +28 -5
- package/dist/store/index.js.map +1 -1
- package/dist/store/types/index.d.ts +7 -5
- package/dist/store/types/index.d.ts.map +1 -1
- package/dist/store/utils/index.d.ts +0 -1
- package/dist/store/utils/index.d.ts.map +1 -1
- package/dist/store/utils/index.js +0 -1
- package/dist/store/utils/index.js.map +1 -1
- package/dist/store/utils/validation.js +1 -1
- package/dist/store/utils/validation.js.map +1 -1
- package/package.json +43 -26
- package/dist/store/utils/result.d.ts +0 -42
- package/dist/store/utils/result.d.ts.map +0 -1
- package/dist/store/utils/result.js +0 -51
- package/dist/store/utils/result.js.map +0 -1
|
@@ -1,59 +1,126 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Item builder utilities for per-message chat history storage
|
|
4
|
+
* Builds DynamoDB items for metadata and individual messages
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.formatMessageIndex = formatMessageIndex;
|
|
8
|
+
exports.buildMessageSK = buildMessageSK;
|
|
9
|
+
exports.buildMessageItems = buildMessageItems;
|
|
10
|
+
exports.buildMetadataUpdateExpression = buildMetadataUpdateExpression;
|
|
11
|
+
exports.buildAtomicMetadataUpdate = buildAtomicMetadataUpdate;
|
|
12
|
+
const messages_1 = require("@langchain/core/messages");
|
|
8
13
|
const shared_1 = require("../../shared");
|
|
9
14
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
15
|
+
* Format a message index as a zero-padded 6-digit string
|
|
16
|
+
* Supports up to 999,999 messages per session while maintaining sort order
|
|
17
|
+
*/
|
|
18
|
+
function formatMessageIndex(index) {
|
|
19
|
+
return String(index).padStart(6, '0');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build the sort key for a message item
|
|
23
|
+
*
|
|
24
|
+
* @param sessionId - Session identifier
|
|
25
|
+
* @param messageIndex - Zero-based message index
|
|
26
|
+
* @returns Composite SK like "sessionId#msg#000001"
|
|
27
|
+
*/
|
|
28
|
+
function buildMessageSK(sessionId, messageIndex) {
|
|
29
|
+
return `${sessionId}#msg#${formatMessageIndex(messageIndex)}`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build DynamoDB message items from BaseMessage array
|
|
12
33
|
*
|
|
13
|
-
* @param
|
|
14
|
-
* @
|
|
34
|
+
* @param userId - User identifier
|
|
35
|
+
* @param sessionId - Session identifier
|
|
36
|
+
* @param messages - Messages to serialize
|
|
37
|
+
* @param startIndex - Starting message index (for appending to existing session)
|
|
38
|
+
* @param ttlDays - Optional TTL in days
|
|
39
|
+
* @returns Array of DynamoDB message items
|
|
15
40
|
*/
|
|
16
|
-
function
|
|
17
|
-
const
|
|
41
|
+
function buildMessageItems(userId, sessionId, messages, startIndex, ttlDays) {
|
|
42
|
+
const storedMessages = (0, messages_1.mapChatMessagesToStoredMessages)(messages);
|
|
43
|
+
const ttl = ttlDays !== undefined ? (0, shared_1.calculateTTLTimestamp)(ttlDays) : undefined;
|
|
44
|
+
return storedMessages.map((storedMessage, i) => {
|
|
45
|
+
const messageIndex = startIndex + i;
|
|
46
|
+
const item = {
|
|
47
|
+
userId,
|
|
48
|
+
sessionId: buildMessageSK(sessionId, messageIndex),
|
|
49
|
+
itemType: 'message',
|
|
50
|
+
messageIndex,
|
|
51
|
+
message: storedMessage,
|
|
52
|
+
};
|
|
53
|
+
if (ttl !== undefined) {
|
|
54
|
+
item.ttl = ttl;
|
|
55
|
+
}
|
|
56
|
+
return item;
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build or update a session metadata item
|
|
61
|
+
*
|
|
62
|
+
* @param userId - User identifier
|
|
63
|
+
* @param sessionId - Session identifier
|
|
64
|
+
* @param title - Session title
|
|
65
|
+
* @param messageCount - New total message count
|
|
66
|
+
* @param ttlDays - Optional TTL in days
|
|
67
|
+
* @param isNew - Whether this is a new session (sets createdAt)
|
|
68
|
+
*/
|
|
69
|
+
function buildMetadataUpdateExpression(title, messageCount, ttlDays) {
|
|
18
70
|
const now = Date.now();
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
71
|
+
const updateParts = [
|
|
72
|
+
'updatedAt = :updatedAt',
|
|
73
|
+
'messageCount = :messageCount',
|
|
74
|
+
'itemType = :itemType',
|
|
75
|
+
'title = if_not_exists(title, :title)',
|
|
76
|
+
'createdAt = if_not_exists(createdAt, :createdAt)',
|
|
77
|
+
];
|
|
24
78
|
const expressionAttributeValues = {
|
|
25
79
|
':updatedAt': now,
|
|
26
80
|
':createdAt': now,
|
|
27
|
-
':
|
|
28
|
-
':
|
|
81
|
+
':messageCount': messageCount,
|
|
82
|
+
':itemType': 'metadata',
|
|
83
|
+
':title': title,
|
|
29
84
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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;
|
|
85
|
+
if (ttlDays !== undefined) {
|
|
86
|
+
updateParts.push('ttl = :ttl');
|
|
87
|
+
expressionAttributeValues[':ttl'] = (0, shared_1.calculateTTLTimestamp)(ttlDays);
|
|
47
88
|
}
|
|
48
|
-
|
|
89
|
+
return {
|
|
90
|
+
updateExpression: `SET ${updateParts.join(', ')}`,
|
|
91
|
+
expressionAttributeValues,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Build an atomic metadata update expression using DynamoDB's ADD operation
|
|
96
|
+
* Atomically increments messageCount by incrementBy, preventing race conditions
|
|
97
|
+
*
|
|
98
|
+
* @param title - Session title (only set if not already present via if_not_exists)
|
|
99
|
+
* @param incrementBy - Number to add to messageCount
|
|
100
|
+
* @param ttlDays - Optional TTL in days
|
|
101
|
+
* @returns UpdateExpression and ExpressionAttributeValues for DynamoDB update
|
|
102
|
+
*/
|
|
103
|
+
function buildAtomicMetadataUpdate(title, incrementBy, ttlDays) {
|
|
104
|
+
const now = Date.now();
|
|
105
|
+
const setParts = [
|
|
106
|
+
'updatedAt = :updatedAt',
|
|
107
|
+
'itemType = :itemType',
|
|
108
|
+
'title = if_not_exists(title, :title)',
|
|
109
|
+
'createdAt = if_not_exists(createdAt, :createdAt)',
|
|
110
|
+
];
|
|
111
|
+
const expressionAttributeValues = {
|
|
112
|
+
':updatedAt': now,
|
|
113
|
+
':createdAt': now,
|
|
114
|
+
':inc': incrementBy,
|
|
115
|
+
':itemType': 'metadata',
|
|
116
|
+
':title': title,
|
|
117
|
+
};
|
|
49
118
|
if (ttlDays !== undefined) {
|
|
50
|
-
|
|
119
|
+
setParts.push('ttl = :ttl');
|
|
51
120
|
expressionAttributeValues[':ttl'] = (0, shared_1.calculateTTLTimestamp)(ttlDays);
|
|
52
121
|
}
|
|
53
|
-
// Build final update expression
|
|
54
|
-
const updateExpression = `SET ${updateExpressionParts.join(', ')}, createdAt = if_not_exists(createdAt, :createdAt)`;
|
|
55
122
|
return {
|
|
56
|
-
updateExpression,
|
|
123
|
+
updateExpression: `SET ${setParts.join(', ')} ADD messageCount :inc`,
|
|
57
124
|
expressionAttributeValues,
|
|
58
125
|
};
|
|
59
126
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-expression-builder.js","sourceRoot":"","sources":["../../../src/history/utils/update-expression-builder.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"update-expression-builder.js","sourceRoot":"","sources":["../../../src/history/utils/update-expression-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,4 +57,12 @@ export declare function validateLimit(limit: any): void;
|
|
|
57
57
|
* @throws HistoryValidationError if validation fails
|
|
58
58
|
*/
|
|
59
59
|
export declare function validateTTLDays(ttlDays: number | undefined): void;
|
|
60
|
+
/**
|
|
61
|
+
* Validate total estimated size of messages for DynamoDB transaction limits.
|
|
62
|
+
* Prevents runtime `TransactionCanceledException` due to 4MB size exceeded.
|
|
63
|
+
*
|
|
64
|
+
* @param messages - Array of BaseMessage objects to validate
|
|
65
|
+
* @throws HistoryValidationError if estimated size exceeds 4MB
|
|
66
|
+
*/
|
|
67
|
+
export declare function validateMessagesSize(messages: BaseMessage[]): void;
|
|
60
68
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -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,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
|
+
{"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;AAOD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAYlE"}
|
|
@@ -11,6 +11,7 @@ exports.validateMessages = validateMessages;
|
|
|
11
11
|
exports.validateTitle = validateTitle;
|
|
12
12
|
exports.validateLimit = validateLimit;
|
|
13
13
|
exports.validateTTLDays = validateTTLDays;
|
|
14
|
+
exports.validateMessagesSize = validateMessagesSize;
|
|
14
15
|
const utils_1 = require("../../shared/utils");
|
|
15
16
|
const MAX_USER_ID_LENGTH = 256;
|
|
16
17
|
const MAX_SESSION_ID_LENGTH = 256;
|
|
@@ -168,4 +169,25 @@ function validateTTLDays(ttlDays) {
|
|
|
168
169
|
throw new HistoryValidationError(error instanceof Error ? error.message : String(error));
|
|
169
170
|
}
|
|
170
171
|
}
|
|
172
|
+
/** DynamoDB transactWrite limit: 4MB total across all items */
|
|
173
|
+
const MAX_TRANSACTION_SIZE_BYTES = 4 * 1024 * 1024;
|
|
174
|
+
/** Estimated per-item overhead: PK, SK, itemType, messageIndex, ttl, DynamoDB encoding */
|
|
175
|
+
const PER_ITEM_OVERHEAD_BYTES = 500;
|
|
176
|
+
/**
|
|
177
|
+
* Validate total estimated size of messages for DynamoDB transaction limits.
|
|
178
|
+
* Prevents runtime `TransactionCanceledException` due to 4MB size exceeded.
|
|
179
|
+
*
|
|
180
|
+
* @param messages - Array of BaseMessage objects to validate
|
|
181
|
+
* @throws HistoryValidationError if estimated size exceeds 4MB
|
|
182
|
+
*/
|
|
183
|
+
function validateMessagesSize(messages) {
|
|
184
|
+
let totalSize = 0;
|
|
185
|
+
for (const message of messages) {
|
|
186
|
+
const content = typeof message.content === 'string' ? message.content : JSON.stringify(message.content);
|
|
187
|
+
totalSize += new TextEncoder().encode(content).byteLength + PER_ITEM_OVERHEAD_BYTES;
|
|
188
|
+
}
|
|
189
|
+
if (totalSize > MAX_TRANSACTION_SIZE_BYTES) {
|
|
190
|
+
throw new HistoryValidationError(`Estimated batch size (~${Math.round(totalSize / 1024)}KB) exceeds DynamoDB transaction limit of 4MB`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
171
193
|
//# sourceMappingURL=validation.js.map
|
|
@@ -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;
|
|
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
|
@@ -5,4 +5,6 @@ export type { DynamoDBStoreOptions } from './store/types';
|
|
|
5
5
|
export { DynamoDBChatMessageHistory } from './history';
|
|
6
6
|
export type { DynamoDBChatMessageHistoryOptions, SessionMetadata } from './history/types';
|
|
7
7
|
export { DynamoDBFactory } from './factory';
|
|
8
|
+
export { setGlobalLogger, getLogger, resetLogger } from './shared/utils/logger';
|
|
9
|
+
export type { Logger } from './shared/utils/logger';
|
|
8
10
|
//# 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;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,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;AAC5C,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChF,YAAY,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DynamoDBFactory = exports.DynamoDBChatMessageHistory = exports.DynamoDBStore = exports.DynamoDBSaver = void 0;
|
|
3
|
+
exports.resetLogger = exports.getLogger = exports.setGlobalLogger = 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");
|
|
@@ -9,4 +9,8 @@ var history_1 = require("./history");
|
|
|
9
9
|
Object.defineProperty(exports, "DynamoDBChatMessageHistory", { enumerable: true, get: function () { return history_1.DynamoDBChatMessageHistory; } });
|
|
10
10
|
var factory_1 = require("./factory");
|
|
11
11
|
Object.defineProperty(exports, "DynamoDBFactory", { enumerable: true, get: function () { return factory_1.DynamoDBFactory; } });
|
|
12
|
+
var logger_1 = require("./shared/utils/logger");
|
|
13
|
+
Object.defineProperty(exports, "setGlobalLogger", { enumerable: true, get: function () { return logger_1.setGlobalLogger; } });
|
|
14
|
+
Object.defineProperty(exports, "getLogger", { enumerable: true, get: function () { return logger_1.getLogger; } });
|
|
15
|
+
Object.defineProperty(exports, "resetLogger", { enumerable: true, get: function () { return logger_1.resetLogger; } });
|
|
12
16
|
//# 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;AAEnC,qCAA4C;AAAnC,0GAAA,eAAe,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;AACxB,gDAAgF;AAAvE,yGAAA,eAAe,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,qGAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared batch write utilities with UnprocessedItems retry logic
|
|
3
|
+
* Eliminates duplication of the retry pattern across checkpointer, store, and history modules
|
|
4
|
+
*/
|
|
5
|
+
import type { DynamoDBDocument } from '@aws-sdk/lib-dynamodb';
|
|
6
|
+
interface PutWriteRequest {
|
|
7
|
+
PutRequest: {
|
|
8
|
+
Item: object;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
interface DeleteWriteRequest {
|
|
12
|
+
DeleteRequest: {
|
|
13
|
+
Key: object;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
type WriteRequest = PutWriteRequest | DeleteWriteRequest;
|
|
17
|
+
/**
|
|
18
|
+
* Execute a single batchWrite call with exponential backoff retry for UnprocessedItems
|
|
19
|
+
*
|
|
20
|
+
* @param client - DynamoDB Document client
|
|
21
|
+
* @param tableName - Target DynamoDB table name
|
|
22
|
+
* @param requestItems - Array of write requests (PutRequest or DeleteRequest objects)
|
|
23
|
+
* @throws Error if retries are exhausted with remaining unprocessed items
|
|
24
|
+
*/
|
|
25
|
+
export declare function batchWriteWithRetry(client: DynamoDBDocument, tableName: string, requestItems: WriteRequest[]): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Execute batch writes for an arbitrary number of items, chunking into batches of 25
|
|
28
|
+
*
|
|
29
|
+
* @param client - DynamoDB Document client
|
|
30
|
+
* @param tableName - Target DynamoDB table name
|
|
31
|
+
* @param requestItems - Array of write requests (can exceed 25)
|
|
32
|
+
* @throws Error if any batch fails after exhausting retries
|
|
33
|
+
*/
|
|
34
|
+
export declare function batchWriteAllWithRetry(client: DynamoDBDocument, tableName: string, requestItems: WriteRequest[]): Promise<void>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=batch-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-write.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/batch-write.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,UAAU,eAAe;IACvB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9B;AAED,UAAU,kBAAkB;IAC1B,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC;AAED,KAAK,YAAY,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAEzD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared batch write utilities with UnprocessedItems retry logic
|
|
4
|
+
* Eliminates duplication of the retry pattern across checkpointer, store, and history modules
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.batchWriteWithRetry = batchWriteWithRetry;
|
|
8
|
+
exports.batchWriteAllWithRetry = batchWriteAllWithRetry;
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
const retry_1 = require("./retry");
|
|
11
|
+
/**
|
|
12
|
+
* Execute a single batchWrite call with exponential backoff retry for UnprocessedItems
|
|
13
|
+
*
|
|
14
|
+
* @param client - DynamoDB Document client
|
|
15
|
+
* @param tableName - Target DynamoDB table name
|
|
16
|
+
* @param requestItems - Array of write requests (PutRequest or DeleteRequest objects)
|
|
17
|
+
* @throws Error if retries are exhausted with remaining unprocessed items
|
|
18
|
+
*/
|
|
19
|
+
async function batchWriteWithRetry(client, tableName, requestItems) {
|
|
20
|
+
if (requestItems.length === 0)
|
|
21
|
+
return;
|
|
22
|
+
await (0, retry_1.withDynamoDBRetry)(async () => {
|
|
23
|
+
const result = await client.batchWrite({
|
|
24
|
+
RequestItems: {
|
|
25
|
+
[tableName]: requestItems,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
let unprocessed = result.UnprocessedItems?.[tableName];
|
|
29
|
+
let retryDelay = 100;
|
|
30
|
+
let retryCount = 0;
|
|
31
|
+
while (unprocessed && unprocessed.length > 0) {
|
|
32
|
+
retryCount++;
|
|
33
|
+
if (retryCount > constants_1.MAX_UNPROCESSED_RETRIES) {
|
|
34
|
+
throw new Error(`Failed to process all items after ${constants_1.MAX_UNPROCESSED_RETRIES} retries. ` +
|
|
35
|
+
`${unprocessed.length} items remain unprocessed.`);
|
|
36
|
+
}
|
|
37
|
+
await new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
38
|
+
retryDelay = Math.min(retryDelay * 2, 5000);
|
|
39
|
+
const retryResult = await client.batchWrite({
|
|
40
|
+
RequestItems: { [tableName]: unprocessed },
|
|
41
|
+
});
|
|
42
|
+
unprocessed = retryResult.UnprocessedItems?.[tableName];
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Execute batch writes for an arbitrary number of items, chunking into batches of 25
|
|
48
|
+
*
|
|
49
|
+
* @param client - DynamoDB Document client
|
|
50
|
+
* @param tableName - Target DynamoDB table name
|
|
51
|
+
* @param requestItems - Array of write requests (can exceed 25)
|
|
52
|
+
* @throws Error if any batch fails after exhausting retries
|
|
53
|
+
*/
|
|
54
|
+
async function batchWriteAllWithRetry(client, tableName, requestItems) {
|
|
55
|
+
if (requestItems.length === 0)
|
|
56
|
+
return;
|
|
57
|
+
for (let i = 0; i < requestItems.length; i += constants_1.BATCH_WRITE_MAX) {
|
|
58
|
+
const batch = requestItems.slice(i, i + constants_1.BATCH_WRITE_MAX);
|
|
59
|
+
await batchWriteWithRetry(client, tableName, batch);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=batch-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-write.js","sourceRoot":"","sources":["../../../src/shared/utils/batch-write.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAyBH,kDAiCC;AAUD,wDAWC;AA3ED,2CAAuE;AACvE,mCAA4C;AAY5C;;;;;;;GAOG;AACI,KAAK,UAAU,mBAAmB,CACvC,MAAwB,EACxB,SAAiB,EACjB,YAA4B;IAE5B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEtC,MAAM,IAAA,yBAAiB,EAAC,KAAK,IAAI,EAAE;QACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;YACrC,YAAY,EAAE;gBACZ,CAAC,SAAS,CAAC,EAAE,YAAY;aAC1B;SACF,CAAC,CAAC;QAEH,IAAI,WAAW,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,UAAU,GAAG,GAAG,CAAC;QACrB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,OAAO,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,UAAU,EAAE,CAAC;YACb,IAAI,UAAU,GAAG,mCAAuB,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CACb,qCAAqC,mCAAuB,YAAY;oBACtE,GAAG,WAAW,CAAC,MAAM,4BAA4B,CACpD,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;YAChE,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;gBAC1C,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE;aAC3C,CAAC,CAAC;YACH,WAAW,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,sBAAsB,CAC1C,MAAwB,EACxB,SAAiB,EACjB,YAA4B;IAE5B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,2BAAe,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,2BAAe,CAAC,CAAC;QACzD,MAAM,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpoint compression utility using Node.js built-in zlib
|
|
3
|
+
* Provides transparent gzip compression/decompression with smart thresholds
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for checkpoint compression
|
|
7
|
+
*/
|
|
8
|
+
export interface CompressionConfig {
|
|
9
|
+
/** Whether compression is enabled (default: false) */
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
/** Minimum payload size in bytes to trigger compression (default: 1024 = 1KB) */
|
|
12
|
+
minSizeBytes?: number;
|
|
13
|
+
/** Gzip compression level 1-9 (default: 6 = balanced speed/ratio) */
|
|
14
|
+
level?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compressor for checkpoint data using gzip
|
|
18
|
+
*
|
|
19
|
+
* Features:
|
|
20
|
+
* - Smart threshold: skips compression for payloads below `minSizeBytes`
|
|
21
|
+
* - Auto-detection: `decompress()` transparently handles both compressed and uncompressed data
|
|
22
|
+
* - Zero dependencies: uses Node.js built-in `zlib`
|
|
23
|
+
*/
|
|
24
|
+
export declare class Compressor {
|
|
25
|
+
private readonly minSizeBytes;
|
|
26
|
+
private readonly level;
|
|
27
|
+
constructor(config: CompressionConfig);
|
|
28
|
+
/**
|
|
29
|
+
* Compress data if above the minimum size threshold
|
|
30
|
+
*
|
|
31
|
+
* @param data - Raw data to compress
|
|
32
|
+
* @returns Compressed data (gzip) or original data if below threshold
|
|
33
|
+
*/
|
|
34
|
+
compress(data: Uint8Array): Promise<Uint8Array>;
|
|
35
|
+
/**
|
|
36
|
+
* Decompress data if gzip magic header is detected, otherwise passthrough
|
|
37
|
+
* This provides full backward compatibility with uncompressed data
|
|
38
|
+
*
|
|
39
|
+
* @param data - Potentially compressed data
|
|
40
|
+
* @returns Decompressed data
|
|
41
|
+
*/
|
|
42
|
+
decompress(data: Uint8Array): Promise<Uint8Array>;
|
|
43
|
+
/**
|
|
44
|
+
* Check if data starts with the gzip magic number
|
|
45
|
+
*/
|
|
46
|
+
static isGzipped(data: Uint8Array): boolean;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=compressor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compressor.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/compressor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,MAAM,EAAE,iBAAiB;IAKrC;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAgBrD;;;;;;OAMG;IACG,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAQvD;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;CAG5C"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Checkpoint compression utility using Node.js built-in zlib
|
|
4
|
+
* Provides transparent gzip compression/decompression with smart thresholds
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.Compressor = void 0;
|
|
8
|
+
const node_util_1 = require("node:util");
|
|
9
|
+
const node_zlib_1 = require("node:zlib");
|
|
10
|
+
const gzipAsync = (0, node_util_1.promisify)(node_zlib_1.gzip);
|
|
11
|
+
const gunzipAsync = (0, node_util_1.promisify)(node_zlib_1.gunzip);
|
|
12
|
+
/** Gzip magic number bytes for auto-detection */
|
|
13
|
+
const GZIP_MAGIC = new Uint8Array([0x1f, 0x8b]);
|
|
14
|
+
/**
|
|
15
|
+
* Compressor for checkpoint data using gzip
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Smart threshold: skips compression for payloads below `minSizeBytes`
|
|
19
|
+
* - Auto-detection: `decompress()` transparently handles both compressed and uncompressed data
|
|
20
|
+
* - Zero dependencies: uses Node.js built-in `zlib`
|
|
21
|
+
*/
|
|
22
|
+
class Compressor {
|
|
23
|
+
minSizeBytes;
|
|
24
|
+
level;
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.minSizeBytes = config.minSizeBytes ?? 1024;
|
|
27
|
+
this.level = config.level ?? 6;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Compress data if above the minimum size threshold
|
|
31
|
+
*
|
|
32
|
+
* @param data - Raw data to compress
|
|
33
|
+
* @returns Compressed data (gzip) or original data if below threshold
|
|
34
|
+
*/
|
|
35
|
+
async compress(data) {
|
|
36
|
+
if (data.length < this.minSizeBytes) {
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
const compressed = new Uint8Array(await gzipAsync(data, { level: this.level }));
|
|
40
|
+
// Only use compressed output if it saves at least 10% space.
|
|
41
|
+
// This avoids data expansion for already-compressed or random binary payloads.
|
|
42
|
+
if (compressed.length >= data.length * 0.9) {
|
|
43
|
+
return data;
|
|
44
|
+
}
|
|
45
|
+
return compressed;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Decompress data if gzip magic header is detected, otherwise passthrough
|
|
49
|
+
* This provides full backward compatibility with uncompressed data
|
|
50
|
+
*
|
|
51
|
+
* @param data - Potentially compressed data
|
|
52
|
+
* @returns Decompressed data
|
|
53
|
+
*/
|
|
54
|
+
async decompress(data) {
|
|
55
|
+
if (!Compressor.isGzipped(data)) {
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
return new Uint8Array(await gunzipAsync(data));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if data starts with the gzip magic number
|
|
62
|
+
*/
|
|
63
|
+
static isGzipped(data) {
|
|
64
|
+
return data.length >= 2 && data[0] === GZIP_MAGIC[0] && data[1] === GZIP_MAGIC[1];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.Compressor = Compressor;
|
|
68
|
+
//# sourceMappingURL=compressor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compressor.js","sourceRoot":"","sources":["../../../src/shared/utils/compressor.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yCAAsC;AACtC,yCAAyC;AAEzC,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,gBAAI,CAAC,CAAC;AAClC,MAAM,WAAW,GAAG,IAAA,qBAAS,EAAC,kBAAM,CAAC,CAAC;AAEtC,iDAAiD;AACjD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAchD;;;;;;;GAOG;AACH,MAAa,UAAU;IACJ,YAAY,CAAS;IACrB,KAAK,CAAS;IAE/B,YAAY,MAAyB;QACnC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,IAAgB;QAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEhF,6DAA6D;QAC7D,+EAA+E;QAC/E,IAAI,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,IAAgB;QAC/B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,UAAU,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAgB;QAC/B,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;CACF;AApDD,gCAoDC"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
export declare const MAX_TTL_DAYS: number;
|
|
5
5
|
export declare const MAX_LOOP_ITERATIONS = 100;
|
|
6
6
|
export declare const MAX_TOTAL_ITEMS_IN_MEMORY = 10000;
|
|
7
|
+
export declare const BATCH_WRITE_MAX = 25;
|
|
8
|
+
export declare const MAX_UNPROCESSED_RETRIES = 10;
|
|
7
9
|
/**
|
|
8
10
|
* Validate TTL days (shared logic)
|
|
9
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,YAAY,QAAU,CAAC;AACpC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,yBAAyB,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,YAAY,QAAU,CAAC;AACpC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAC/C,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAgBjE"}
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
* Shared constants for validation across store and checkpointer
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.MAX_TOTAL_ITEMS_IN_MEMORY = exports.MAX_LOOP_ITERATIONS = exports.MAX_TTL_DAYS = void 0;
|
|
6
|
+
exports.MAX_UNPROCESSED_RETRIES = exports.BATCH_WRITE_MAX = exports.MAX_TOTAL_ITEMS_IN_MEMORY = exports.MAX_LOOP_ITERATIONS = exports.MAX_TTL_DAYS = void 0;
|
|
7
7
|
exports.validateTTLDays = validateTTLDays;
|
|
8
8
|
// Common DynamoDB limits
|
|
9
9
|
exports.MAX_TTL_DAYS = 365 * 5; // 5 years
|
|
10
10
|
exports.MAX_LOOP_ITERATIONS = 100; // Maximum loop iterations to prevent infinite loops
|
|
11
11
|
exports.MAX_TOTAL_ITEMS_IN_MEMORY = 10000; // Maximum items to collect in memory
|
|
12
|
+
exports.BATCH_WRITE_MAX = 25; // DynamoDB BatchWriteItem limit per request
|
|
13
|
+
exports.MAX_UNPROCESSED_RETRIES = 10; // Maximum retries for UnprocessedItems loops
|
|
12
14
|
/**
|
|
13
15
|
* Validate TTL days (shared logic)
|
|
14
16
|
*/
|
|
@@ -25,11 +27,5 @@ function validateTTLDays(ttlDays) {
|
|
|
25
27
|
if (ttlDays > exports.MAX_TTL_DAYS) {
|
|
26
28
|
throw new Error(`TTL days cannot exceed ${exports.MAX_TTL_DAYS}`);
|
|
27
29
|
}
|
|
28
|
-
// Check for overflow when converting to Unix timestamp
|
|
29
|
-
const futureTimestamp = Math.floor(Date.now() / 1000) + ttlDays * 24 * 60 * 60;
|
|
30
|
-
if (futureTimestamp > 2147483647) {
|
|
31
|
-
// Max 32-bit integer
|
|
32
|
-
throw new Error('TTL would overflow Unix timestamp (max date: 2038-01-19)');
|
|
33
|
-
}
|
|
34
30
|
}
|
|
35
31
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/shared/utils/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/shared/utils/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAYH,0CAgBC;AA1BD,yBAAyB;AACZ,QAAA,YAAY,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU;AAClC,QAAA,mBAAmB,GAAG,GAAG,CAAC,CAAC,oDAAoD;AAC/E,QAAA,yBAAyB,GAAG,KAAK,CAAC,CAAC,qCAAqC;AACxE,QAAA,eAAe,GAAG,EAAE,CAAC,CAAC,4CAA4C;AAClE,QAAA,uBAAuB,GAAG,EAAE,CAAC,CAAC,6CAA6C;AAExF;;GAEG;AACH,SAAgB,eAAe,CAAC,OAA2B;IACzD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,GAAG,oBAAY,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,oBAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared utilities and types
|
|
3
3
|
*/
|
|
4
|
+
export * from './compressor';
|
|
4
5
|
export * from './constants';
|
|
6
|
+
export * from './logger';
|
|
5
7
|
export * from './retry';
|
|
8
|
+
export * from './s3-offloader';
|
|
9
|
+
export * from './batch-write';
|
|
6
10
|
export * from './ttl';
|
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC"}
|
|
@@ -17,7 +17,11 @@ 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("./compressor"), exports);
|
|
20
21
|
__exportStar(require("./constants"), exports);
|
|
22
|
+
__exportStar(require("./logger"), exports);
|
|
21
23
|
__exportStar(require("./retry"), exports);
|
|
24
|
+
__exportStar(require("./s3-offloader"), exports);
|
|
25
|
+
__exportStar(require("./batch-write"), exports);
|
|
22
26
|
__exportStar(require("./ttl"), exports);
|
|
23
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,8CAA4B;AAC5B,0CAAwB;AACxB,wCAAsB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/utils/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,iDAA+B;AAC/B,gDAA8B;AAC9B,wCAAsB"}
|