@allma/core-sdk 1.0.5 → 1.0.6
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/dist/s3Utils.d.ts +12 -0
- package/dist/s3Utils.d.ts.map +1 -1
- package/dist/s3Utils.js +82 -1
- package/dist/s3Utils.js.map +1 -1
- package/package.json +2 -2
package/dist/s3Utils.d.ts
CHANGED
|
@@ -17,4 +17,16 @@ export declare function resolveS3Pointer(s3Pointer: S3Pointer, correlationId?: s
|
|
|
17
17
|
* @returns The original payload if it's small, or an S3OutputPointerWrapper if it was offloaded.
|
|
18
18
|
*/
|
|
19
19
|
export declare function offloadIfLarge(payload: Record<string, any> | undefined, bucketName: string, keyPrefix: string, correlationId: string, thresholdBytes?: number): Promise<Record<string, any> | S3OutputPointerWrapper | undefined>;
|
|
20
|
+
/**
|
|
21
|
+
* Recursively traverses a data structure (object or array) and offloads any field
|
|
22
|
+
* whose value exceeds a size threshold to S3, replacing it with an S3 pointer.
|
|
23
|
+
*
|
|
24
|
+
* @param data The data structure to process.
|
|
25
|
+
* @param bucketName The S3 bucket to upload large fields to.
|
|
26
|
+
* @param keyPrefix A prefix for generating S3 keys (e.g., 'log_artifacts/exec-id/step-id').
|
|
27
|
+
* @param correlationId For logging.
|
|
28
|
+
* @param thresholdBytes The size in bytes above which a field's value is offloaded.
|
|
29
|
+
* @returns A new data structure with large fields replaced by S3 pointers.
|
|
30
|
+
*/
|
|
31
|
+
export declare function recursivelyOffloadLargeFields(data: any, bucketName: string, keyPrefix: string, correlationId: string, thresholdBytes: number): Promise<any>;
|
|
20
32
|
//# sourceMappingURL=s3Utils.d.ts.map
|
package/dist/s3Utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3Utils.d.ts","sourceRoot":"","sources":["../src/s3Utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"s3Utils.d.ts","sourceRoot":"","sources":["../src/s3Utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAa3E;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAwBjG;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EACxC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,cAAc,GAAE,MAAwC,GACzD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,sBAAsB,GAAG,SAAS,CAAC,CAgCnE;AAGD;;;;;;;;;;GAUG;AACH,wBAAsB,6BAA6B,CAC/C,IAAI,EAAE,GAAG,EACT,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACvB,OAAO,CAAC,GAAG,CAAC,CAqFd"}
|
package/dist/s3Utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3';
|
|
2
|
-
import { ENV_VAR_NAMES } from '@allma/core-types';
|
|
2
|
+
import { ENV_VAR_NAMES, isS3OutputPointerWrapper } from '@allma/core-types';
|
|
3
3
|
import { log_info, log_error, log_warn, log_debug } from "./logger.js";
|
|
4
|
+
import { isObject } from './objectUtils.js';
|
|
4
5
|
const s3Client = new S3Client({});
|
|
5
6
|
const MAX_CONTEXT_DATA_SIZE_BYTES_DEFAULT = 10 * 1024; // 10KB default
|
|
6
7
|
const PAYLOAD_OFFLOAD_THRESHOLD_BYTES = process.env[ENV_VAR_NAMES.MAX_CONTEXT_DATA_SIZE_BYTES]
|
|
@@ -76,4 +77,84 @@ export async function offloadIfLarge(payload, bucketName, keyPrefix, correlation
|
|
|
76
77
|
throw new Error(`Failed during S3 offload attempt: ${e.message}`);
|
|
77
78
|
}
|
|
78
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Recursively traverses a data structure (object or array) and offloads any field
|
|
82
|
+
* whose value exceeds a size threshold to S3, replacing it with an S3 pointer.
|
|
83
|
+
*
|
|
84
|
+
* @param data The data structure to process.
|
|
85
|
+
* @param bucketName The S3 bucket to upload large fields to.
|
|
86
|
+
* @param keyPrefix A prefix for generating S3 keys (e.g., 'log_artifacts/exec-id/step-id').
|
|
87
|
+
* @param correlationId For logging.
|
|
88
|
+
* @param thresholdBytes The size in bytes above which a field's value is offloaded.
|
|
89
|
+
* @returns A new data structure with large fields replaced by S3 pointers.
|
|
90
|
+
*/
|
|
91
|
+
export async function recursivelyOffloadLargeFields(data, bucketName, keyPrefix, correlationId, thresholdBytes) {
|
|
92
|
+
if (Array.isArray(data)) {
|
|
93
|
+
// Process each item in the array recursively.
|
|
94
|
+
return Promise.all(data.map((item, index) => recursivelyOffloadLargeFields(item, bucketName, `${keyPrefix}/${index}`, correlationId, thresholdBytes)));
|
|
95
|
+
}
|
|
96
|
+
if (isObject(data)) {
|
|
97
|
+
// Do not process S3 pointers themselves.
|
|
98
|
+
if (isS3OutputPointerWrapper(data)) {
|
|
99
|
+
return data;
|
|
100
|
+
}
|
|
101
|
+
const newObject = {};
|
|
102
|
+
for (const key in data) {
|
|
103
|
+
if (Object.prototype.hasOwnProperty.call(data, key)) {
|
|
104
|
+
const value = data[key];
|
|
105
|
+
try {
|
|
106
|
+
// Gracefully skip properties with an 'undefined' value.
|
|
107
|
+
// These properties are omitted in JSON.stringify and cause Buffer.byteLength to fail.
|
|
108
|
+
if (value === undefined) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// First, check the size of the value.
|
|
112
|
+
const valueString = (typeof value === 'string') ? value : JSON.stringify(value);
|
|
113
|
+
const valueSize = Buffer.byteLength(valueString, 'utf-8');
|
|
114
|
+
if (valueSize > thresholdBytes) {
|
|
115
|
+
// Value is large, offload it.
|
|
116
|
+
log_warn(`Field '${key}' in '${keyPrefix}' is large (${valueSize} bytes), offloading to S3.`, {}, correlationId);
|
|
117
|
+
const isString = typeof value === 'string';
|
|
118
|
+
const s3Key = `${keyPrefix}/${key}_${new Date().toISOString()}.${isString ? 'txt' : 'json'}`;
|
|
119
|
+
await s3Client.send(new PutObjectCommand({
|
|
120
|
+
Bucket: bucketName,
|
|
121
|
+
Key: s3Key,
|
|
122
|
+
Body: valueString,
|
|
123
|
+
ContentType: isString ? 'text/plain' : 'application/json',
|
|
124
|
+
}));
|
|
125
|
+
const s3Pointer = { bucket: bucketName, key: s3Key };
|
|
126
|
+
newObject[key] = { _s3_output_pointer: s3Pointer };
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// Value is small enough, recurse into it in case it contains large nested fields.
|
|
130
|
+
newObject[key] = await recursivelyOffloadLargeFields(value, bucketName, `${keyPrefix}/${key}`, // a more descriptive path for nested objects
|
|
131
|
+
correlationId, thresholdBytes);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch (e) {
|
|
135
|
+
log_error(`Error processing field '${key}' during recursive offload. Replacing with error message.`, { error: e.message }, correlationId);
|
|
136
|
+
newObject[key] = { _offload_error: `Failed to process or serialize field: ${e.message}` };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return newObject;
|
|
141
|
+
}
|
|
142
|
+
// It's a primitive (string, number, boolean, null)
|
|
143
|
+
if (typeof data === 'string') {
|
|
144
|
+
const valueSize = Buffer.byteLength(data, 'utf-8');
|
|
145
|
+
if (valueSize > thresholdBytes) {
|
|
146
|
+
log_warn(`String value at path '${keyPrefix}' is large (${valueSize} bytes), offloading to S3.`, {}, correlationId);
|
|
147
|
+
const s3Key = `${keyPrefix}_${new Date().toISOString()}.txt`;
|
|
148
|
+
await s3Client.send(new PutObjectCommand({
|
|
149
|
+
Bucket: bucketName,
|
|
150
|
+
Key: s3Key,
|
|
151
|
+
Body: data,
|
|
152
|
+
ContentType: 'text/plain',
|
|
153
|
+
}));
|
|
154
|
+
const s3Pointer = { bucket: bucketName, key: s3Key };
|
|
155
|
+
return { _s3_output_pointer: s3Pointer };
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return data; // Return other primitives as-is
|
|
159
|
+
}
|
|
79
160
|
//# sourceMappingURL=s3Utils.js.map
|
package/dist/s3Utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3Utils.js","sourceRoot":"","sources":["../src/s3Utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"s3Utils.js","sourceRoot":"","sources":["../src/s3Utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allma/core-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Core SDK with shared utilities (logging, auth, S3 utils) for building on the Allma serverless AI orchestration platform.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"access": "public"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@allma/core-types": "^1.0.
|
|
37
|
+
"@allma/core-types": "^1.0.17",
|
|
38
38
|
"@aws-sdk/client-s3": "^3.500.0",
|
|
39
39
|
"@aws-sdk/client-secrets-manager": "^3.500.0",
|
|
40
40
|
"@aws-sdk/client-sns": "^3.500.0",
|