@exabugs/dynamodb-client 0.3.7 → 0.4.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/CHANGELOG.md +34 -0
- package/dist/client/Collection.d.ts +1 -1
- package/dist/client/Collection.d.ts.map +1 -1
- package/dist/client/FindCursor.d.ts +1 -1
- package/dist/client/FindCursor.d.ts.map +1 -1
- package/dist/index.d.ts +1 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/server/handler.cjs +683 -553
- package/dist/server/handler.cjs.map +4 -4
- package/dist/server/handler.d.ts.map +1 -1
- package/dist/server/handler.js +1 -2
- package/dist/server/handler.js.map +1 -1
- package/dist/server/operations/deleteMany.js +1 -1
- package/dist/server/operations/deleteMany.js.map +1 -1
- package/dist/server/operations/deleteOne.js +1 -1
- package/dist/server/operations/deleteOne.js.map +1 -1
- package/dist/server/operations/find/handler.d.ts +21 -0
- package/dist/server/operations/find/handler.d.ts.map +1 -0
- package/dist/server/operations/find/handler.js +53 -0
- package/dist/server/operations/find/handler.js.map +1 -0
- package/dist/server/operations/find/idQuery.d.ts +16 -0
- package/dist/server/operations/find/idQuery.d.ts.map +1 -0
- package/dist/server/operations/find/idQuery.js +149 -0
- package/dist/server/operations/find/idQuery.js.map +1 -0
- package/dist/server/operations/find/index.d.ts +9 -0
- package/dist/server/operations/find/index.d.ts.map +1 -0
- package/dist/server/operations/find/index.js +9 -0
- package/dist/server/operations/find/index.js.map +1 -0
- package/dist/server/operations/find/shadowQuery.d.ts +16 -0
- package/dist/server/operations/find/shadowQuery.d.ts.map +1 -0
- package/dist/server/operations/find/shadowQuery.js +283 -0
- package/dist/server/operations/find/shadowQuery.js.map +1 -0
- package/dist/server/operations/find/types.d.ts +71 -0
- package/dist/server/operations/find/types.d.ts.map +1 -0
- package/dist/server/operations/find/types.js +5 -0
- package/dist/server/operations/find/types.js.map +1 -0
- package/dist/server/operations/find/utils.d.ts +37 -0
- package/dist/server/operations/find/utils.d.ts.map +1 -0
- package/dist/server/operations/find/utils.js +117 -0
- package/dist/server/operations/find/utils.js.map +1 -0
- package/dist/server/operations/find.d.ts +4 -14
- package/dist/server/operations/find.d.ts.map +1 -1
- package/dist/server/operations/find.js +2 -368
- package/dist/server/operations/find.js.map +1 -1
- package/dist/server/operations/findMany.js +1 -1
- package/dist/server/operations/findMany.js.map +1 -1
- package/dist/server/operations/findManyReference.d.ts.map +1 -1
- package/dist/server/operations/findManyReference.js +2 -1
- package/dist/server/operations/findManyReference.js.map +1 -1
- package/dist/server/operations/findOne.js +1 -1
- package/dist/server/operations/findOne.js.map +1 -1
- package/dist/server/operations/insertMany.d.ts.map +1 -1
- package/dist/server/operations/insertMany.js +2 -1
- package/dist/server/operations/insertMany.js.map +1 -1
- package/dist/server/operations/insertOne.d.ts.map +1 -1
- package/dist/server/operations/insertOne.js +2 -1
- package/dist/server/operations/insertOne.js.map +1 -1
- package/dist/server/operations/updateMany.d.ts.map +1 -1
- package/dist/server/operations/updateMany.js +2 -1
- package/dist/server/operations/updateMany.js.map +1 -1
- package/dist/server/operations/updateOne.d.ts.map +1 -1
- package/dist/server/operations/updateOne.js +2 -1
- package/dist/server/operations/updateOne.js.map +1 -1
- package/dist/server/query/converter.d.ts +1 -1
- package/dist/server/query/converter.d.ts.map +1 -1
- package/dist/server/shadow/differ.d.ts +3 -38
- package/dist/server/shadow/differ.d.ts.map +1 -1
- package/dist/server/shadow/differ.js +4 -62
- package/dist/server/shadow/differ.js.map +1 -1
- package/dist/server/shadow/generator.d.ts +1 -1
- package/dist/server/shadow/generator.d.ts.map +1 -1
- package/dist/server/shadow/generator.js +8 -19
- package/dist/server/shadow/generator.js.map +1 -1
- package/dist/server/shadow/types.d.ts +4 -17
- package/dist/server/shadow/types.d.ts.map +1 -1
- package/dist/server/shadow/types.js +5 -0
- package/dist/server/shadow/types.js.map +1 -1
- package/dist/server/utils/bulkOperations.d.ts +0 -15
- package/dist/server/utils/bulkOperations.d.ts.map +1 -1
- package/dist/server/utils/bulkOperations.js +1 -16
- package/dist/server/utils/bulkOperations.js.map +1 -1
- package/dist/server/utils/chunking.d.ts +0 -9
- package/dist/server/utils/chunking.d.ts.map +1 -1
- package/dist/server/utils/chunking.js +1 -10
- package/dist/server/utils/chunking.js.map +1 -1
- package/dist/server/utils/dynamodb.js +1 -1
- package/dist/server/utils/dynamodb.js.map +1 -1
- package/dist/shared/constants/dynamodb.d.ts +36 -0
- package/dist/shared/constants/dynamodb.d.ts.map +1 -0
- package/dist/shared/constants/dynamodb.js +100 -0
- package/dist/shared/constants/dynamodb.js.map +1 -0
- package/dist/shared/constants/http.d.ts +48 -0
- package/dist/shared/constants/http.d.ts.map +1 -0
- package/dist/shared/constants/http.js +48 -0
- package/dist/shared/constants/http.js.map +1 -0
- package/dist/shared/constants/index.d.ts +7 -0
- package/dist/shared/constants/index.d.ts.map +1 -0
- package/dist/shared/constants/index.js +7 -0
- package/dist/shared/constants/index.js.map +1 -0
- package/dist/shared/constants/lambda.d.ts +33 -0
- package/dist/shared/constants/lambda.d.ts.map +1 -0
- package/dist/shared/constants/lambda.js +33 -0
- package/dist/shared/constants/lambda.js.map +1 -0
- package/dist/{errors.d.ts → shared/errors/index.d.ts} +7 -1
- package/dist/shared/errors/index.d.ts.map +1 -0
- package/dist/{errors.js → shared/errors/index.js} +7 -1
- package/dist/shared/errors/index.js.map +1 -0
- package/dist/shared/index.d.ts +11 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +15 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/{types.d.ts → shared/types/index.d.ts} +7 -1
- package/dist/shared/types/index.d.ts.map +1 -0
- package/dist/shared/types/index.js +8 -0
- package/dist/shared/types/index.js.map +1 -0
- package/dist/shared/utils/dynamodb.d.ts +18 -0
- package/dist/shared/utils/dynamodb.d.ts.map +1 -0
- package/dist/shared/utils/dynamodb.js +32 -0
- package/dist/shared/utils/dynamodb.js.map +1 -0
- package/dist/shared/utils/index.d.ts +8 -0
- package/dist/shared/utils/index.d.ts.map +1 -0
- package/dist/shared/utils/index.js +8 -0
- package/dist/shared/utils/index.js.map +1 -0
- package/dist/{logger.d.ts → shared/utils/logger.d.ts} +7 -1
- package/dist/shared/utils/logger.d.ts.map +1 -0
- package/dist/{logger.js → shared/utils/logger.js} +7 -1
- package/dist/shared/utils/logger.js.map +1 -0
- package/dist/shared/utils/ulid.d.ts.map +1 -0
- package/dist/{ulid.js → shared/utils/ulid.js} +5 -0
- package/dist/shared/utils/ulid.js.map +1 -0
- package/dist/shared/utils/validation.d.ts +59 -0
- package/dist/shared/utils/validation.d.ts.map +1 -0
- package/dist/shared/utils/validation.js +114 -0
- package/dist/shared/utils/validation.js.map +1 -0
- package/package.json +4 -5
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/ulid.d.ts.map +0 -1
- package/dist/ulid.js.map +0 -1
- /package/dist/{ulid.d.ts → shared/utils/ulid.d.ts} +0 -0
package/dist/server/handler.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// @exabugs/dynamodb-client v0.
|
|
2
|
-
// Built: 2025-12-
|
|
1
|
+
// @exabugs/dynamodb-client v0.4.1
|
|
2
|
+
// Built: 2025-12-22T22:53:47.499Z
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
@@ -1241,12 +1241,12 @@ var require_dist_cjs7 = __commonJS({
|
|
|
1241
1241
|
var loggerMiddleware = /* @__PURE__ */ __name(() => (next, context) => async (args) => {
|
|
1242
1242
|
try {
|
|
1243
1243
|
const response = await next(args);
|
|
1244
|
-
const { clientName, commandName, logger:
|
|
1244
|
+
const { clientName, commandName, logger: logger21, dynamoDbDocumentClientOptions = {} } = context;
|
|
1245
1245
|
const { overrideInputFilterSensitiveLog, overrideOutputFilterSensitiveLog } = dynamoDbDocumentClientOptions;
|
|
1246
1246
|
const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;
|
|
1247
1247
|
const outputFilterSensitiveLog = overrideOutputFilterSensitiveLog ?? context.outputFilterSensitiveLog;
|
|
1248
1248
|
const { $metadata, ...outputWithoutMetadata } = response.output;
|
|
1249
|
-
|
|
1249
|
+
logger21?.info?.({
|
|
1250
1250
|
clientName,
|
|
1251
1251
|
commandName,
|
|
1252
1252
|
input: inputFilterSensitiveLog(args.input),
|
|
@@ -1255,10 +1255,10 @@ var require_dist_cjs7 = __commonJS({
|
|
|
1255
1255
|
});
|
|
1256
1256
|
return response;
|
|
1257
1257
|
} catch (error2) {
|
|
1258
|
-
const { clientName, commandName, logger:
|
|
1258
|
+
const { clientName, commandName, logger: logger21, dynamoDbDocumentClientOptions = {} } = context;
|
|
1259
1259
|
const { overrideInputFilterSensitiveLog } = dynamoDbDocumentClientOptions;
|
|
1260
1260
|
const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;
|
|
1261
|
-
|
|
1261
|
+
logger21?.error?.({
|
|
1262
1262
|
clientName,
|
|
1263
1263
|
commandName,
|
|
1264
1264
|
input: inputFilterSensitiveLog(args.input),
|
|
@@ -2194,7 +2194,7 @@ var require_createBufferedReadableStream = __commonJS({
|
|
|
2194
2194
|
exports2.sizeOf = sizeOf;
|
|
2195
2195
|
exports2.modeOf = modeOf;
|
|
2196
2196
|
var ByteArrayCollector_1 = require_ByteArrayCollector();
|
|
2197
|
-
function createBufferedReadableStream(upstream, size,
|
|
2197
|
+
function createBufferedReadableStream(upstream, size, logger21) {
|
|
2198
2198
|
const reader = upstream.getReader();
|
|
2199
2199
|
let streamBufferingLoggedWarning = false;
|
|
2200
2200
|
let bytesSeen = 0;
|
|
@@ -2232,7 +2232,7 @@ var require_createBufferedReadableStream = __commonJS({
|
|
|
2232
2232
|
const newSize = merge(buffers, mode, chunk);
|
|
2233
2233
|
if (!streamBufferingLoggedWarning && bytesSeen > size * 2) {
|
|
2234
2234
|
streamBufferingLoggedWarning = true;
|
|
2235
|
-
|
|
2235
|
+
logger21?.warn(`@smithy/util-stream - stream chunk size ${chunkSize} is below threshold of ${size}, automatically buffering.`);
|
|
2236
2236
|
}
|
|
2237
2237
|
if (newSize >= size) {
|
|
2238
2238
|
controller.enqueue(flush(buffers, mode));
|
|
@@ -2303,9 +2303,9 @@ var require_createBufferedReadable = __commonJS({
|
|
|
2303
2303
|
var ByteArrayCollector_1 = require_ByteArrayCollector();
|
|
2304
2304
|
var createBufferedReadableStream_1 = require_createBufferedReadableStream();
|
|
2305
2305
|
var stream_type_check_1 = require_stream_type_check();
|
|
2306
|
-
function createBufferedReadable(upstream, size,
|
|
2306
|
+
function createBufferedReadable(upstream, size, logger21) {
|
|
2307
2307
|
if ((0, stream_type_check_1.isReadableStream)(upstream)) {
|
|
2308
|
-
return (0, createBufferedReadableStream_1.createBufferedReadableStream)(upstream, size,
|
|
2308
|
+
return (0, createBufferedReadableStream_1.createBufferedReadableStream)(upstream, size, logger21);
|
|
2309
2309
|
}
|
|
2310
2310
|
const downstream = new node_stream_1.Readable({ read() {
|
|
2311
2311
|
} });
|
|
@@ -2338,7 +2338,7 @@ var require_createBufferedReadable = __commonJS({
|
|
|
2338
2338
|
const newSize = (0, createBufferedReadableStream_1.merge)(buffers, mode, chunk);
|
|
2339
2339
|
if (!streamBufferingLoggedWarning && bytesSeen > size * 2) {
|
|
2340
2340
|
streamBufferingLoggedWarning = true;
|
|
2341
|
-
|
|
2341
|
+
logger21?.warn(`@smithy/util-stream - stream chunk size ${chunkSize} is below threshold of ${size}, automatically buffering.`);
|
|
2342
2342
|
}
|
|
2343
2343
|
if (newSize >= size) {
|
|
2344
2344
|
downstream.push((0, createBufferedReadableStream_1.flush)(buffers, mode));
|
|
@@ -2586,7 +2586,7 @@ var require_dist_cjs16 = __commonJS({
|
|
|
2586
2586
|
}
|
|
2587
2587
|
return timing.setTimeout(registerTimeout.bind(null, DEFER_EVENT_LISTENER_TIME$2), DEFER_EVENT_LISTENER_TIME$2);
|
|
2588
2588
|
}, "setConnectionTimeout");
|
|
2589
|
-
var setRequestTimeout = /* @__PURE__ */ __name((req, reject, timeoutInMs = 0, throwOnRequestTimeout,
|
|
2589
|
+
var setRequestTimeout = /* @__PURE__ */ __name((req, reject, timeoutInMs = 0, throwOnRequestTimeout, logger21) => {
|
|
2590
2590
|
if (timeoutInMs) {
|
|
2591
2591
|
return timing.setTimeout(() => {
|
|
2592
2592
|
let msg = `@smithy/node-http-handler - [${throwOnRequestTimeout ? "ERROR" : "WARN"}] a request has exceeded the configured ${timeoutInMs} ms requestTimeout.`;
|
|
@@ -2599,7 +2599,7 @@ var require_dist_cjs16 = __commonJS({
|
|
|
2599
2599
|
reject(error2);
|
|
2600
2600
|
} else {
|
|
2601
2601
|
msg += ` Init client requestHandler with throwOnRequestTimeout=true to turn this into an error.`;
|
|
2602
|
-
|
|
2602
|
+
logger21?.warn?.(msg);
|
|
2603
2603
|
}
|
|
2604
2604
|
}, timeoutInMs);
|
|
2605
2605
|
}
|
|
@@ -2715,7 +2715,7 @@ var require_dist_cjs16 = __commonJS({
|
|
|
2715
2715
|
}
|
|
2716
2716
|
return new _NodeHttpHandler(instanceOrOptions);
|
|
2717
2717
|
}
|
|
2718
|
-
static checkSocketUsage(agent, socketWarningTimestamp,
|
|
2718
|
+
static checkSocketUsage(agent, socketWarningTimestamp, logger21 = console) {
|
|
2719
2719
|
const { sockets, requests, maxSockets } = agent;
|
|
2720
2720
|
if (typeof maxSockets !== "number" || maxSockets === Infinity) {
|
|
2721
2721
|
return socketWarningTimestamp;
|
|
@@ -2729,7 +2729,7 @@ var require_dist_cjs16 = __commonJS({
|
|
|
2729
2729
|
const socketsInUse = sockets[origin]?.length ?? 0;
|
|
2730
2730
|
const requestsEnqueued = requests[origin]?.length ?? 0;
|
|
2731
2731
|
if (socketsInUse >= maxSockets && requestsEnqueued >= 2 * maxSockets) {
|
|
2732
|
-
|
|
2732
|
+
logger21?.warn?.(`@smithy/node-http-handler:WARN - socket usage at capacity=${socketsInUse} and ${requestsEnqueued} additional requests are enqueued.
|
|
2733
2733
|
See https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/node-configuring-maxsockets.html
|
|
2734
2734
|
or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler config.`);
|
|
2735
2735
|
return Date.now();
|
|
@@ -7762,7 +7762,7 @@ var require_dist_cjs21 = __commonJS({
|
|
|
7762
7762
|
evaluateTreeRule
|
|
7763
7763
|
};
|
|
7764
7764
|
var resolveEndpoint4 = /* @__PURE__ */ __name((ruleSetObject, options) => {
|
|
7765
|
-
const { endpointParams, logger:
|
|
7765
|
+
const { endpointParams, logger: logger21 } = options;
|
|
7766
7766
|
const { parameters, rules } = ruleSetObject;
|
|
7767
7767
|
options.logger?.debug?.(`${debugId} Initial EndpointParams: ${toDebugString(endpointParams)}`);
|
|
7768
7768
|
const paramsWithDefault = Object.entries(parameters).filter(([, v4]) => v4.default != null).map(([k4, v4]) => [k4, v4.default]);
|
|
@@ -7777,7 +7777,7 @@ var require_dist_cjs21 = __commonJS({
|
|
|
7777
7777
|
throw new EndpointError(`Missing required parameter: '${requiredParam}'`);
|
|
7778
7778
|
}
|
|
7779
7779
|
}
|
|
7780
|
-
const endpoint = evaluateRules(rules, { endpointParams, logger:
|
|
7780
|
+
const endpoint = evaluateRules(rules, { endpointParams, logger: logger21, referenceRecord: {} });
|
|
7781
7781
|
options.logger?.debug?.(`${debugId} Resolved endpoint: ${toDebugString(endpoint)}`);
|
|
7782
7782
|
return endpoint;
|
|
7783
7783
|
}, "resolveEndpoint");
|
|
@@ -8564,19 +8564,19 @@ var require_dist_cjs25 = __commonJS({
|
|
|
8564
8564
|
name = "ProviderError";
|
|
8565
8565
|
tryNextLink;
|
|
8566
8566
|
constructor(message, options = true) {
|
|
8567
|
-
let
|
|
8567
|
+
let logger21;
|
|
8568
8568
|
let tryNextLink = true;
|
|
8569
8569
|
if (typeof options === "boolean") {
|
|
8570
|
-
|
|
8570
|
+
logger21 = void 0;
|
|
8571
8571
|
tryNextLink = options;
|
|
8572
8572
|
} else if (options != null && typeof options === "object") {
|
|
8573
|
-
|
|
8573
|
+
logger21 = options.logger;
|
|
8574
8574
|
tryNextLink = options.tryNextLink ?? true;
|
|
8575
8575
|
}
|
|
8576
8576
|
super(message);
|
|
8577
8577
|
this.tryNextLink = tryNextLink;
|
|
8578
8578
|
Object.setPrototypeOf(this, _ProviderError.prototype);
|
|
8579
|
-
|
|
8579
|
+
logger21?.debug?.(`@smithy/property-provider ${tryNextLink ? "->" : "(!)"} ${message}`);
|
|
8580
8580
|
}
|
|
8581
8581
|
static from(error2, options = true) {
|
|
8582
8582
|
return Object.assign(new this(error2.message, options), error2);
|
|
@@ -10801,9 +10801,9 @@ var require_dist_cjs28 = __commonJS({
|
|
|
10801
10801
|
this.middlewareStack.use(mw);
|
|
10802
10802
|
}
|
|
10803
10803
|
const stack = clientStack.concat(this.middlewareStack);
|
|
10804
|
-
const { logger:
|
|
10804
|
+
const { logger: logger21 } = configuration;
|
|
10805
10805
|
const handlerExecutionContext = {
|
|
10806
|
-
logger:
|
|
10806
|
+
logger: logger21,
|
|
10807
10807
|
clientName,
|
|
10808
10808
|
commandName,
|
|
10809
10809
|
inputFilterSensitiveLog,
|
|
@@ -14359,11 +14359,11 @@ var require_dist_cjs30 = __commonJS({
|
|
|
14359
14359
|
userAgentAppId: /* @__PURE__ */ __name(async () => {
|
|
14360
14360
|
const appId = await normalizedAppIdProvider();
|
|
14361
14361
|
if (!isValidUserAgentAppId(appId)) {
|
|
14362
|
-
const
|
|
14362
|
+
const logger21 = input.logger?.constructor?.name === "NoOpLogger" || !input.logger ? console : input.logger;
|
|
14363
14363
|
if (typeof appId !== "string") {
|
|
14364
|
-
|
|
14364
|
+
logger21?.warn("userAgentAppId must be a string or undefined.");
|
|
14365
14365
|
} else if (appId.length > 50) {
|
|
14366
|
-
|
|
14366
|
+
logger21?.warn("The provided userAgentAppId exceeds the maximum length of 50 characters.");
|
|
14367
14367
|
}
|
|
14368
14368
|
}
|
|
14369
14369
|
return appId;
|
|
@@ -15078,8 +15078,8 @@ var require_dist_cjs35 = __commonJS({
|
|
|
15078
15078
|
var isFunction = /* @__PURE__ */ __name((func) => typeof func === "function", "isFunction");
|
|
15079
15079
|
var fromStatic = /* @__PURE__ */ __name((defaultValue) => isFunction(defaultValue) ? async () => await defaultValue() : propertyProvider.fromStatic(defaultValue), "fromStatic");
|
|
15080
15080
|
var loadConfig = /* @__PURE__ */ __name(({ environmentVariableSelector, configFileSelector, default: defaultValue }, configuration = {}) => {
|
|
15081
|
-
const { signingName, logger:
|
|
15082
|
-
const envOptions = { signingName, logger:
|
|
15081
|
+
const { signingName, logger: logger21 } = configuration;
|
|
15082
|
+
const envOptions = { signingName, logger: logger21 };
|
|
15083
15083
|
return propertyProvider.memoize(propertyProvider.chain(fromEnv(environmentVariableSelector, envOptions), fromSharedConfigFiles(configFileSelector, configuration), fromStatic(defaultValue)));
|
|
15084
15084
|
}, "loadConfig");
|
|
15085
15085
|
exports2.loadConfig = loadConfig;
|
|
@@ -16393,7 +16393,7 @@ var require_dist_cjs41 = __commonJS({
|
|
|
16393
16393
|
"http:": true,
|
|
16394
16394
|
"https:": true
|
|
16395
16395
|
};
|
|
16396
|
-
var getCmdsUri = /* @__PURE__ */ __name(async ({ logger:
|
|
16396
|
+
var getCmdsUri = /* @__PURE__ */ __name(async ({ logger: logger21 }) => {
|
|
16397
16397
|
if (process.env[ENV_CMDS_RELATIVE_URI]) {
|
|
16398
16398
|
return {
|
|
16399
16399
|
hostname: CMDS_IP,
|
|
@@ -16405,13 +16405,13 @@ var require_dist_cjs41 = __commonJS({
|
|
|
16405
16405
|
if (!parsed.hostname || !(parsed.hostname in GREENGRASS_HOSTS)) {
|
|
16406
16406
|
throw new propertyProvider.CredentialsProviderError(`${parsed.hostname} is not a valid container metadata service hostname`, {
|
|
16407
16407
|
tryNextLink: false,
|
|
16408
|
-
logger:
|
|
16408
|
+
logger: logger21
|
|
16409
16409
|
});
|
|
16410
16410
|
}
|
|
16411
16411
|
if (!parsed.protocol || !(parsed.protocol in GREENGRASS_PROTOCOLS)) {
|
|
16412
16412
|
throw new propertyProvider.CredentialsProviderError(`${parsed.protocol} is not a valid container metadata service protocol`, {
|
|
16413
16413
|
tryNextLink: false,
|
|
16414
|
-
logger:
|
|
16414
|
+
logger: logger21
|
|
16415
16415
|
});
|
|
16416
16416
|
}
|
|
16417
16417
|
return {
|
|
@@ -16421,7 +16421,7 @@ var require_dist_cjs41 = __commonJS({
|
|
|
16421
16421
|
}
|
|
16422
16422
|
throw new propertyProvider.CredentialsProviderError(`The container metadata credential provider cannot be used unless the ${ENV_CMDS_RELATIVE_URI} or ${ENV_CMDS_FULL_URI} environment variable is set`, {
|
|
16423
16423
|
tryNextLink: false,
|
|
16424
|
-
logger:
|
|
16424
|
+
logger: logger21
|
|
16425
16425
|
});
|
|
16426
16426
|
}, "getCmdsUri");
|
|
16427
16427
|
var InstanceMetadataV1FallbackError = class _InstanceMetadataV1FallbackError extends propertyProvider.CredentialsProviderError {
|
|
@@ -16476,10 +16476,10 @@ var require_dist_cjs41 = __commonJS({
|
|
|
16476
16476
|
var STATIC_STABILITY_REFRESH_INTERVAL_SECONDS = 5 * 60;
|
|
16477
16477
|
var STATIC_STABILITY_REFRESH_INTERVAL_JITTER_WINDOW_SECONDS = 5 * 60;
|
|
16478
16478
|
var STATIC_STABILITY_DOC_URL = "https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html";
|
|
16479
|
-
var getExtendedInstanceMetadataCredentials = /* @__PURE__ */ __name((credentials,
|
|
16479
|
+
var getExtendedInstanceMetadataCredentials = /* @__PURE__ */ __name((credentials, logger21) => {
|
|
16480
16480
|
const refreshInterval = STATIC_STABILITY_REFRESH_INTERVAL_SECONDS + Math.floor(Math.random() * STATIC_STABILITY_REFRESH_INTERVAL_JITTER_WINDOW_SECONDS);
|
|
16481
16481
|
const newExpiration = new Date(Date.now() + refreshInterval * 1e3);
|
|
16482
|
-
|
|
16482
|
+
logger21.warn(`Attempting credential expiration extension due to a credential service availability issue. A refresh of these credentials will be attempted after ${new Date(newExpiration)}.
|
|
16483
16483
|
For more information, please visit: ` + STATIC_STABILITY_DOC_URL);
|
|
16484
16484
|
const originalExpiration = credentials.originalExpiration ?? credentials.expiration;
|
|
16485
16485
|
return {
|
|
@@ -16489,19 +16489,19 @@ For more information, please visit: ` + STATIC_STABILITY_DOC_URL);
|
|
|
16489
16489
|
};
|
|
16490
16490
|
}, "getExtendedInstanceMetadataCredentials");
|
|
16491
16491
|
var staticStabilityProvider = /* @__PURE__ */ __name((provider, options = {}) => {
|
|
16492
|
-
const
|
|
16492
|
+
const logger21 = options?.logger || console;
|
|
16493
16493
|
let pastCredentials;
|
|
16494
16494
|
return async () => {
|
|
16495
16495
|
let credentials;
|
|
16496
16496
|
try {
|
|
16497
16497
|
credentials = await provider();
|
|
16498
16498
|
if (credentials.expiration && credentials.expiration.getTime() < Date.now()) {
|
|
16499
|
-
credentials = getExtendedInstanceMetadataCredentials(credentials,
|
|
16499
|
+
credentials = getExtendedInstanceMetadataCredentials(credentials, logger21);
|
|
16500
16500
|
}
|
|
16501
16501
|
} catch (e4) {
|
|
16502
16502
|
if (pastCredentials) {
|
|
16503
|
-
|
|
16504
|
-
credentials = getExtendedInstanceMetadataCredentials(pastCredentials,
|
|
16503
|
+
logger21.warn("Credential renew failed: ", e4);
|
|
16504
|
+
credentials = getExtendedInstanceMetadataCredentials(pastCredentials, logger21);
|
|
16505
16505
|
} else {
|
|
16506
16506
|
throw e4;
|
|
16507
16507
|
}
|
|
@@ -16518,7 +16518,7 @@ For more information, please visit: ` + STATIC_STABILITY_DOC_URL);
|
|
|
16518
16518
|
var fromInstanceMetadata = /* @__PURE__ */ __name((init = {}) => staticStabilityProvider(getInstanceMetadataProvider(init), { logger: init.logger }), "fromInstanceMetadata");
|
|
16519
16519
|
var getInstanceMetadataProvider = /* @__PURE__ */ __name((init = {}) => {
|
|
16520
16520
|
let disableFetchToken = false;
|
|
16521
|
-
const { logger:
|
|
16521
|
+
const { logger: logger21, profile } = init;
|
|
16522
16522
|
const { timeout, maxRetries } = providerConfigFromInit(init);
|
|
16523
16523
|
const getCredentials = /* @__PURE__ */ __name(async (maxRetries2, options) => {
|
|
16524
16524
|
const isImdsV1Fallback = disableFetchToken || options.headers?.[X_AWS_EC2_METADATA_TOKEN] == null;
|
|
@@ -16582,7 +16582,7 @@ For more information, please visit: ` + STATIC_STABILITY_DOC_URL);
|
|
|
16582
16582
|
return async () => {
|
|
16583
16583
|
const endpoint = await getInstanceMetadataEndpoint();
|
|
16584
16584
|
if (disableFetchToken) {
|
|
16585
|
-
|
|
16585
|
+
logger21?.debug("AWS SDK Instance Metadata", "using v1 fallback (no token fetch)");
|
|
16586
16586
|
return getCredentials(maxRetries, { ...endpoint, timeout });
|
|
16587
16587
|
} else {
|
|
16588
16588
|
let token;
|
|
@@ -16596,7 +16596,7 @@ For more information, please visit: ` + STATIC_STABILITY_DOC_URL);
|
|
|
16596
16596
|
} else if (error2.message === "TimeoutError" || [403, 404, 405].includes(error2.statusCode)) {
|
|
16597
16597
|
disableFetchToken = true;
|
|
16598
16598
|
}
|
|
16599
|
-
|
|
16599
|
+
logger21?.debug("AWS SDK Instance Metadata", "using v1 fallback (initial)");
|
|
16600
16600
|
return getCredentials(maxRetries, { ...endpoint, timeout });
|
|
16601
16601
|
}
|
|
16602
16602
|
return getCredentials(maxRetries, {
|
|
@@ -16653,7 +16653,7 @@ var require_checkUrl = __commonJS({
|
|
|
16653
16653
|
var ECS_CONTAINER_HOST = "169.254.170.2";
|
|
16654
16654
|
var EKS_CONTAINER_HOST_IPv4 = "169.254.170.23";
|
|
16655
16655
|
var EKS_CONTAINER_HOST_IPv6 = "[fd00:ec2::23]";
|
|
16656
|
-
var checkUrl = /* @__PURE__ */ __name((url,
|
|
16656
|
+
var checkUrl = /* @__PURE__ */ __name((url, logger21) => {
|
|
16657
16657
|
if (url.protocol === "https:") {
|
|
16658
16658
|
return;
|
|
16659
16659
|
}
|
|
@@ -16680,7 +16680,7 @@ var require_checkUrl = __commonJS({
|
|
|
16680
16680
|
throw new property_provider_1.CredentialsProviderError(`URL not accepted. It must either be HTTPS or match one of the following:
|
|
16681
16681
|
- loopback CIDR 127.0.0.0/8 or [::1/128]
|
|
16682
16682
|
- ECS container host 169.254.170.2
|
|
16683
|
-
- EKS container host 169.254.170.23 or [fd00:ec2::23]`, { logger:
|
|
16683
|
+
- EKS container host 169.254.170.23 or [fd00:ec2::23]`, { logger: logger21 });
|
|
16684
16684
|
}, "checkUrl");
|
|
16685
16685
|
exports2.checkUrl = checkUrl;
|
|
16686
16686
|
}
|
|
@@ -16711,13 +16711,13 @@ var require_requestHelpers = __commonJS({
|
|
|
16711
16711
|
});
|
|
16712
16712
|
}
|
|
16713
16713
|
__name(createGetRequest, "createGetRequest");
|
|
16714
|
-
async function getCredentials(response,
|
|
16714
|
+
async function getCredentials(response, logger21) {
|
|
16715
16715
|
const stream = (0, util_stream_1.sdkStreamMixin)(response.body);
|
|
16716
16716
|
const str = await stream.transformToString();
|
|
16717
16717
|
if (response.statusCode === 200) {
|
|
16718
16718
|
const parsed = JSON.parse(str);
|
|
16719
16719
|
if (typeof parsed.AccessKeyId !== "string" || typeof parsed.SecretAccessKey !== "string" || typeof parsed.Token !== "string" || typeof parsed.Expiration !== "string") {
|
|
16720
|
-
throw new property_provider_1.CredentialsProviderError("HTTP credential provider response not of the required format, an object matching: { AccessKeyId: string, SecretAccessKey: string, Token: string, Expiration: string(rfc3339) }", { logger:
|
|
16720
|
+
throw new property_provider_1.CredentialsProviderError("HTTP credential provider response not of the required format, an object matching: { AccessKeyId: string, SecretAccessKey: string, Token: string, Expiration: string(rfc3339) }", { logger: logger21 });
|
|
16721
16721
|
}
|
|
16722
16722
|
return {
|
|
16723
16723
|
accessKeyId: parsed.AccessKeyId,
|
|
@@ -16732,12 +16732,12 @@ var require_requestHelpers = __commonJS({
|
|
|
16732
16732
|
parsedBody = JSON.parse(str);
|
|
16733
16733
|
} catch (e4) {
|
|
16734
16734
|
}
|
|
16735
|
-
throw Object.assign(new property_provider_1.CredentialsProviderError(`Server responded with status: ${response.statusCode}`, { logger:
|
|
16735
|
+
throw Object.assign(new property_provider_1.CredentialsProviderError(`Server responded with status: ${response.statusCode}`, { logger: logger21 }), {
|
|
16736
16736
|
Code: parsedBody.Code,
|
|
16737
16737
|
Message: parsedBody.Message
|
|
16738
16738
|
});
|
|
16739
16739
|
}
|
|
16740
|
-
throw new property_provider_1.CredentialsProviderError(`Server responded with status: ${response.statusCode}`, { logger:
|
|
16740
|
+
throw new property_provider_1.CredentialsProviderError(`Server responded with status: ${response.statusCode}`, { logger: logger21 });
|
|
16741
16741
|
}
|
|
16742
16742
|
__name(getCredentials, "getCredentials");
|
|
16743
16743
|
}
|
|
@@ -18101,14 +18101,14 @@ var require_dist_cjs48 = __commonJS({
|
|
|
18101
18101
|
var propertyProvider = require_dist_cjs25();
|
|
18102
18102
|
var sharedIniFileLoader = require_dist_cjs34();
|
|
18103
18103
|
var fs = require("fs");
|
|
18104
|
-
var fromEnvSigningName = /* @__PURE__ */ __name(({ logger:
|
|
18105
|
-
|
|
18104
|
+
var fromEnvSigningName = /* @__PURE__ */ __name(({ logger: logger21, signingName } = {}) => async () => {
|
|
18105
|
+
logger21?.debug?.("@aws-sdk/token-providers - fromEnvSigningName");
|
|
18106
18106
|
if (!signingName) {
|
|
18107
|
-
throw new propertyProvider.TokenProviderError("Please pass 'signingName' to compute environment variable key", { logger:
|
|
18107
|
+
throw new propertyProvider.TokenProviderError("Please pass 'signingName' to compute environment variable key", { logger: logger21 });
|
|
18108
18108
|
}
|
|
18109
18109
|
const bearerTokenKey = httpAuthSchemes.getBearerTokenEnvKey(signingName);
|
|
18110
18110
|
if (!(bearerTokenKey in process.env)) {
|
|
18111
|
-
throw new propertyProvider.TokenProviderError(`Token not present in '${bearerTokenKey}' environment variable`, { logger:
|
|
18111
|
+
throw new propertyProvider.TokenProviderError(`Token not present in '${bearerTokenKey}' environment variable`, { logger: logger21 });
|
|
18112
18112
|
}
|
|
18113
18113
|
const token = { token: process.env[bearerTokenKey] };
|
|
18114
18114
|
client.setTokenFeature(token, "BEARER_SERVICE_ENV_VARS", "3");
|
|
@@ -18229,8 +18229,8 @@ var require_dist_cjs48 = __commonJS({
|
|
|
18229
18229
|
return existingToken;
|
|
18230
18230
|
}
|
|
18231
18231
|
}, "fromSso");
|
|
18232
|
-
var fromStatic = /* @__PURE__ */ __name(({ token, logger:
|
|
18233
|
-
|
|
18232
|
+
var fromStatic = /* @__PURE__ */ __name(({ token, logger: logger21 }) => async () => {
|
|
18233
|
+
logger21?.debug("@aws-sdk/token-providers - fromStatic");
|
|
18234
18234
|
if (!token || !token.token) {
|
|
18235
18235
|
throw new propertyProvider.TokenProviderError(`Please pass a valid token to fromStatic`, false);
|
|
18236
18236
|
}
|
|
@@ -19019,7 +19019,7 @@ var require_dist_cjs50 = __commonJS({
|
|
|
19019
19019
|
var tokenProviders = require_dist_cjs48();
|
|
19020
19020
|
var isSsoProfile = /* @__PURE__ */ __name((arg) => arg && (typeof arg.sso_start_url === "string" || typeof arg.sso_account_id === "string" || typeof arg.sso_session === "string" || typeof arg.sso_region === "string" || typeof arg.sso_role_name === "string"), "isSsoProfile");
|
|
19021
19021
|
var SHOULD_FAIL_CREDENTIAL_CHAIN = false;
|
|
19022
|
-
var resolveSSOCredentials = /* @__PURE__ */ __name(async ({ ssoStartUrl, ssoSession, ssoAccountId, ssoRegion, ssoRoleName, ssoClient, clientConfig, parentClientConfig, profile, filepath, configFilepath, ignoreCache, logger:
|
|
19022
|
+
var resolveSSOCredentials = /* @__PURE__ */ __name(async ({ ssoStartUrl, ssoSession, ssoAccountId, ssoRegion, ssoRoleName, ssoClient, clientConfig, parentClientConfig, profile, filepath, configFilepath, ignoreCache, logger: logger21 }) => {
|
|
19023
19023
|
let token;
|
|
19024
19024
|
const refreshMessage = `To refresh this SSO session run aws sso login with the corresponding profile.`;
|
|
19025
19025
|
if (ssoSession) {
|
|
@@ -19037,7 +19037,7 @@ var require_dist_cjs50 = __commonJS({
|
|
|
19037
19037
|
} catch (e4) {
|
|
19038
19038
|
throw new propertyProvider.CredentialsProviderError(e4.message, {
|
|
19039
19039
|
tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
|
|
19040
|
-
logger:
|
|
19040
|
+
logger: logger21
|
|
19041
19041
|
});
|
|
19042
19042
|
}
|
|
19043
19043
|
} else {
|
|
@@ -19046,14 +19046,14 @@ var require_dist_cjs50 = __commonJS({
|
|
|
19046
19046
|
} catch (e4) {
|
|
19047
19047
|
throw new propertyProvider.CredentialsProviderError(`The SSO session associated with this profile is invalid. ${refreshMessage}`, {
|
|
19048
19048
|
tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
|
|
19049
|
-
logger:
|
|
19049
|
+
logger: logger21
|
|
19050
19050
|
});
|
|
19051
19051
|
}
|
|
19052
19052
|
}
|
|
19053
19053
|
if (new Date(token.expiresAt).getTime() - Date.now() <= 0) {
|
|
19054
19054
|
throw new propertyProvider.CredentialsProviderError(`The SSO session associated with this profile has expired. ${refreshMessage}`, {
|
|
19055
19055
|
tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
|
|
19056
|
-
logger:
|
|
19056
|
+
logger: logger21
|
|
19057
19057
|
});
|
|
19058
19058
|
}
|
|
19059
19059
|
const { accessToken } = token;
|
|
@@ -19075,14 +19075,14 @@ var require_dist_cjs50 = __commonJS({
|
|
|
19075
19075
|
} catch (e4) {
|
|
19076
19076
|
throw new propertyProvider.CredentialsProviderError(e4, {
|
|
19077
19077
|
tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
|
|
19078
|
-
logger:
|
|
19078
|
+
logger: logger21
|
|
19079
19079
|
});
|
|
19080
19080
|
}
|
|
19081
19081
|
const { roleCredentials: { accessKeyId, secretAccessKey, sessionToken, expiration, credentialScope, accountId } = {} } = ssoResp;
|
|
19082
19082
|
if (!accessKeyId || !secretAccessKey || !sessionToken || !expiration) {
|
|
19083
19083
|
throw new propertyProvider.CredentialsProviderError("SSO returns an invalid temporary credential.", {
|
|
19084
19084
|
tryNextLink: SHOULD_FAIL_CREDENTIAL_CHAIN,
|
|
19085
|
-
logger:
|
|
19085
|
+
logger: logger21
|
|
19086
19086
|
});
|
|
19087
19087
|
}
|
|
19088
19088
|
const credentials = {
|
|
@@ -19100,11 +19100,11 @@ var require_dist_cjs50 = __commonJS({
|
|
|
19100
19100
|
}
|
|
19101
19101
|
return credentials;
|
|
19102
19102
|
}, "resolveSSOCredentials");
|
|
19103
|
-
var validateSsoProfile = /* @__PURE__ */ __name((profile,
|
|
19103
|
+
var validateSsoProfile = /* @__PURE__ */ __name((profile, logger21) => {
|
|
19104
19104
|
const { sso_start_url, sso_account_id, sso_region, sso_role_name } = profile;
|
|
19105
19105
|
if (!sso_start_url || !sso_account_id || !sso_region || !sso_role_name) {
|
|
19106
19106
|
throw new propertyProvider.CredentialsProviderError(`Profile is configured with invalid SSO credentials. Required parameters "sso_account_id", "sso_region", "sso_role_name", "sso_start_url". Got ${Object.keys(profile).join(", ")}
|
|
19107
|
-
Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`, { tryNextLink: false, logger:
|
|
19107
|
+
Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`, { tryNextLink: false, logger: logger21 });
|
|
19108
19108
|
}
|
|
19109
19109
|
return profile;
|
|
19110
19110
|
}, "validateSsoProfile");
|
|
@@ -19887,7 +19887,7 @@ var require_dist_cjs51 = __commonJS({
|
|
|
19887
19887
|
}
|
|
19888
19888
|
async refresh(token) {
|
|
19889
19889
|
const { SigninClient: SigninClient2, CreateOAuth2TokenCommand: CreateOAuth2TokenCommand2 } = await Promise.resolve().then(() => (init_signin(), signin_exports));
|
|
19890
|
-
const { logger:
|
|
19890
|
+
const { logger: logger21, userAgentAppId } = this.callerClientConfig ?? {};
|
|
19891
19891
|
const isH22 = /* @__PURE__ */ __name((requestHandler2) => {
|
|
19892
19892
|
return requestHandler2?.metadata?.handlerProtocol === "h2";
|
|
19893
19893
|
}, "isH2");
|
|
@@ -19900,7 +19900,7 @@ var require_dist_cjs51 = __commonJS({
|
|
|
19900
19900
|
},
|
|
19901
19901
|
region,
|
|
19902
19902
|
requestHandler,
|
|
19903
|
-
logger:
|
|
19903
|
+
logger: logger21,
|
|
19904
19904
|
userAgentAppId,
|
|
19905
19905
|
...this.init?.clientConfig
|
|
19906
19906
|
});
|
|
@@ -20918,9 +20918,9 @@ var init_defaultStsRoleAssumers = __esm({
|
|
|
20918
20918
|
return async (sourceCreds, params) => {
|
|
20919
20919
|
closureSourceCreds = sourceCreds;
|
|
20920
20920
|
if (!stsClient) {
|
|
20921
|
-
const { logger:
|
|
20921
|
+
const { logger: logger21 = stsOptions?.parentClientConfig?.logger, profile = stsOptions?.parentClientConfig?.profile, region, requestHandler = stsOptions?.parentClientConfig?.requestHandler, credentialProviderLogger, userAgentAppId = stsOptions?.parentClientConfig?.userAgentAppId } = stsOptions;
|
|
20922
20922
|
const resolvedRegion = await resolveRegion(region, stsOptions?.parentClientConfig?.region, credentialProviderLogger, {
|
|
20923
|
-
logger:
|
|
20923
|
+
logger: logger21,
|
|
20924
20924
|
profile
|
|
20925
20925
|
});
|
|
20926
20926
|
const isCompatibleRequestHandler = !isH2(requestHandler);
|
|
@@ -20931,7 +20931,7 @@ var init_defaultStsRoleAssumers = __esm({
|
|
|
20931
20931
|
credentialDefaultProvider: /* @__PURE__ */ __name(() => async () => closureSourceCreds, "credentialDefaultProvider"),
|
|
20932
20932
|
region: resolvedRegion,
|
|
20933
20933
|
requestHandler: isCompatibleRequestHandler ? requestHandler : void 0,
|
|
20934
|
-
logger:
|
|
20934
|
+
logger: logger21
|
|
20935
20935
|
});
|
|
20936
20936
|
}
|
|
20937
20937
|
const { Credentials: Credentials2, AssumedRoleUser: AssumedRoleUser2 } = await stsClient.send(new AssumeRoleCommand(params));
|
|
@@ -20955,9 +20955,9 @@ var init_defaultStsRoleAssumers = __esm({
|
|
|
20955
20955
|
let stsClient;
|
|
20956
20956
|
return async (params) => {
|
|
20957
20957
|
if (!stsClient) {
|
|
20958
|
-
const { logger:
|
|
20958
|
+
const { logger: logger21 = stsOptions?.parentClientConfig?.logger, profile = stsOptions?.parentClientConfig?.profile, region, requestHandler = stsOptions?.parentClientConfig?.requestHandler, credentialProviderLogger, userAgentAppId = stsOptions?.parentClientConfig?.userAgentAppId } = stsOptions;
|
|
20959
20959
|
const resolvedRegion = await resolveRegion(region, stsOptions?.parentClientConfig?.region, credentialProviderLogger, {
|
|
20960
|
-
logger:
|
|
20960
|
+
logger: logger21,
|
|
20961
20961
|
profile
|
|
20962
20962
|
});
|
|
20963
20963
|
const isCompatibleRequestHandler = !isH2(requestHandler);
|
|
@@ -20967,7 +20967,7 @@ var init_defaultStsRoleAssumers = __esm({
|
|
|
20967
20967
|
profile,
|
|
20968
20968
|
region: resolvedRegion,
|
|
20969
20969
|
requestHandler: isCompatibleRequestHandler ? requestHandler : void 0,
|
|
20970
|
-
logger:
|
|
20970
|
+
logger: logger21
|
|
20971
20971
|
});
|
|
20972
20972
|
}
|
|
20973
20973
|
const { Credentials: Credentials2, AssumedRoleUser: AssumedRoleUser2 } = await stsClient.send(new AssumeRoleWithWebIdentityCommand(params));
|
|
@@ -21097,7 +21097,7 @@ var require_dist_cjs52 = __commonJS({
|
|
|
21097
21097
|
client.setCredentialFeature(credentials, "CREDENTIALS_PROCESS", "w");
|
|
21098
21098
|
return credentials;
|
|
21099
21099
|
}, "getValidatedProcessCredentials");
|
|
21100
|
-
var resolveProcessCredentials = /* @__PURE__ */ __name(async (profileName, profiles,
|
|
21100
|
+
var resolveProcessCredentials = /* @__PURE__ */ __name(async (profileName, profiles, logger21) => {
|
|
21101
21101
|
const profile = profiles[profileName];
|
|
21102
21102
|
if (profiles[profileName]) {
|
|
21103
21103
|
const credentialProcess = profile["credential_process"];
|
|
@@ -21113,14 +21113,14 @@ var require_dist_cjs52 = __commonJS({
|
|
|
21113
21113
|
}
|
|
21114
21114
|
return getValidatedProcessCredentials(profileName, data2, profiles);
|
|
21115
21115
|
} catch (error2) {
|
|
21116
|
-
throw new propertyProvider.CredentialsProviderError(error2.message, { logger:
|
|
21116
|
+
throw new propertyProvider.CredentialsProviderError(error2.message, { logger: logger21 });
|
|
21117
21117
|
}
|
|
21118
21118
|
} else {
|
|
21119
|
-
throw new propertyProvider.CredentialsProviderError(`Profile ${profileName} did not contain credential_process.`, { logger:
|
|
21119
|
+
throw new propertyProvider.CredentialsProviderError(`Profile ${profileName} did not contain credential_process.`, { logger: logger21 });
|
|
21120
21120
|
}
|
|
21121
21121
|
} else {
|
|
21122
21122
|
throw new propertyProvider.CredentialsProviderError(`Profile ${profileName} could not be found in shared credentials file.`, {
|
|
21123
|
-
logger:
|
|
21123
|
+
logger: logger21
|
|
21124
21124
|
});
|
|
21125
21125
|
}
|
|
21126
21126
|
}, "resolveProcessCredentials");
|
|
@@ -21279,21 +21279,21 @@ var require_dist_cjs54 = __commonJS({
|
|
|
21279
21279
|
var propertyProvider = require_dist_cjs25();
|
|
21280
21280
|
var client = (init_client(), __toCommonJS(client_exports));
|
|
21281
21281
|
var credentialProviderLogin = require_dist_cjs51();
|
|
21282
|
-
var resolveCredentialSource = /* @__PURE__ */ __name((credentialSource, profileName,
|
|
21282
|
+
var resolveCredentialSource = /* @__PURE__ */ __name((credentialSource, profileName, logger21) => {
|
|
21283
21283
|
const sourceProvidersMap = {
|
|
21284
21284
|
EcsContainer: /* @__PURE__ */ __name(async (options) => {
|
|
21285
21285
|
const { fromHttp } = await Promise.resolve().then(() => __toESM(require_dist_cjs42()));
|
|
21286
21286
|
const { fromContainerMetadata } = await Promise.resolve().then(() => __toESM(require_dist_cjs41()));
|
|
21287
|
-
|
|
21287
|
+
logger21?.debug("@aws-sdk/credential-provider-ini - credential_source is EcsContainer");
|
|
21288
21288
|
return async () => propertyProvider.chain(fromHttp(options ?? {}), fromContainerMetadata(options))().then(setNamedProvider);
|
|
21289
21289
|
}, "EcsContainer"),
|
|
21290
21290
|
Ec2InstanceMetadata: /* @__PURE__ */ __name(async (options) => {
|
|
21291
|
-
|
|
21291
|
+
logger21?.debug("@aws-sdk/credential-provider-ini - credential_source is Ec2InstanceMetadata");
|
|
21292
21292
|
const { fromInstanceMetadata } = await Promise.resolve().then(() => __toESM(require_dist_cjs41()));
|
|
21293
21293
|
return async () => fromInstanceMetadata(options)().then(setNamedProvider);
|
|
21294
21294
|
}, "Ec2InstanceMetadata"),
|
|
21295
21295
|
Environment: /* @__PURE__ */ __name(async (options) => {
|
|
21296
|
-
|
|
21296
|
+
logger21?.debug("@aws-sdk/credential-provider-ini - credential_source is Environment");
|
|
21297
21297
|
const { fromEnv } = await Promise.resolve().then(() => __toESM(require_dist_cjs40()));
|
|
21298
21298
|
return async () => fromEnv(options)().then(setNamedProvider);
|
|
21299
21299
|
}, "Environment")
|
|
@@ -21301,24 +21301,24 @@ var require_dist_cjs54 = __commonJS({
|
|
|
21301
21301
|
if (credentialSource in sourceProvidersMap) {
|
|
21302
21302
|
return sourceProvidersMap[credentialSource];
|
|
21303
21303
|
} else {
|
|
21304
|
-
throw new propertyProvider.CredentialsProviderError(`Unsupported credential source in profile ${profileName}. Got ${credentialSource}, expected EcsContainer or Ec2InstanceMetadata or Environment.`, { logger:
|
|
21304
|
+
throw new propertyProvider.CredentialsProviderError(`Unsupported credential source in profile ${profileName}. Got ${credentialSource}, expected EcsContainer or Ec2InstanceMetadata or Environment.`, { logger: logger21 });
|
|
21305
21305
|
}
|
|
21306
21306
|
}, "resolveCredentialSource");
|
|
21307
21307
|
var setNamedProvider = /* @__PURE__ */ __name((creds) => client.setCredentialFeature(creds, "CREDENTIALS_PROFILE_NAMED_PROVIDER", "p"), "setNamedProvider");
|
|
21308
|
-
var isAssumeRoleProfile = /* @__PURE__ */ __name((arg, { profile = "default", logger:
|
|
21309
|
-
return Boolean(arg) && typeof arg === "object" && typeof arg.role_arn === "string" && ["undefined", "string"].indexOf(typeof arg.role_session_name) > -1 && ["undefined", "string"].indexOf(typeof arg.external_id) > -1 && ["undefined", "string"].indexOf(typeof arg.mfa_serial) > -1 && (isAssumeRoleWithSourceProfile(arg, { profile, logger:
|
|
21308
|
+
var isAssumeRoleProfile = /* @__PURE__ */ __name((arg, { profile = "default", logger: logger21 } = {}) => {
|
|
21309
|
+
return Boolean(arg) && typeof arg === "object" && typeof arg.role_arn === "string" && ["undefined", "string"].indexOf(typeof arg.role_session_name) > -1 && ["undefined", "string"].indexOf(typeof arg.external_id) > -1 && ["undefined", "string"].indexOf(typeof arg.mfa_serial) > -1 && (isAssumeRoleWithSourceProfile(arg, { profile, logger: logger21 }) || isCredentialSourceProfile(arg, { profile, logger: logger21 }));
|
|
21310
21310
|
}, "isAssumeRoleProfile");
|
|
21311
|
-
var isAssumeRoleWithSourceProfile = /* @__PURE__ */ __name((arg, { profile, logger:
|
|
21311
|
+
var isAssumeRoleWithSourceProfile = /* @__PURE__ */ __name((arg, { profile, logger: logger21 }) => {
|
|
21312
21312
|
const withSourceProfile = typeof arg.source_profile === "string" && typeof arg.credential_source === "undefined";
|
|
21313
21313
|
if (withSourceProfile) {
|
|
21314
|
-
|
|
21314
|
+
logger21?.debug?.(` ${profile} isAssumeRoleWithSourceProfile source_profile=${arg.source_profile}`);
|
|
21315
21315
|
}
|
|
21316
21316
|
return withSourceProfile;
|
|
21317
21317
|
}, "isAssumeRoleWithSourceProfile");
|
|
21318
|
-
var isCredentialSourceProfile = /* @__PURE__ */ __name((arg, { profile, logger:
|
|
21318
|
+
var isCredentialSourceProfile = /* @__PURE__ */ __name((arg, { profile, logger: logger21 }) => {
|
|
21319
21319
|
const withProviderProfile = typeof arg.credential_source === "string" && typeof arg.source_profile === "undefined";
|
|
21320
21320
|
if (withProviderProfile) {
|
|
21321
|
-
|
|
21321
|
+
logger21?.debug?.(` ${profile} isCredentialSourceProfile credential_source=${arg.credential_source}`);
|
|
21322
21322
|
}
|
|
21323
21323
|
return withProviderProfile;
|
|
21324
21324
|
}, "isCredentialSourceProfile");
|
|
@@ -25710,7 +25710,7 @@ var require_dist_cjs58 = __commonJS({
|
|
|
25710
25710
|
__name(this, "PutResourcePolicyCommand");
|
|
25711
25711
|
}
|
|
25712
25712
|
};
|
|
25713
|
-
var
|
|
25713
|
+
var QueryCommand4 = class extends smithyClient.Command.classBuilder().ep({
|
|
25714
25714
|
...commonParams4,
|
|
25715
25715
|
ResourceArn: { type: "contextParams", name: "TableName" }
|
|
25716
25716
|
}).m(function(Command, cs, config, o4) {
|
|
@@ -25927,7 +25927,7 @@ var require_dist_cjs58 = __commonJS({
|
|
|
25927
25927
|
ListTagsOfResourceCommand,
|
|
25928
25928
|
PutItemCommand,
|
|
25929
25929
|
PutResourcePolicyCommand,
|
|
25930
|
-
QueryCommand:
|
|
25930
|
+
QueryCommand: QueryCommand4,
|
|
25931
25931
|
RestoreTableFromBackupCommand,
|
|
25932
25932
|
RestoreTableToPointInTimeCommand,
|
|
25933
25933
|
ScanCommand,
|
|
@@ -25955,7 +25955,7 @@ var require_dist_cjs58 = __commonJS({
|
|
|
25955
25955
|
var paginateListExports = core.createPaginator(DynamoDBClient2, ListExportsCommand, "NextToken", "NextToken", "MaxResults");
|
|
25956
25956
|
var paginateListImports = core.createPaginator(DynamoDBClient2, ListImportsCommand, "NextToken", "NextToken", "PageSize");
|
|
25957
25957
|
var paginateListTables = core.createPaginator(DynamoDBClient2, ListTablesCommand, "ExclusiveStartTableName", "LastEvaluatedTableName", "Limit");
|
|
25958
|
-
var paginateQuery = core.createPaginator(DynamoDBClient2,
|
|
25958
|
+
var paginateQuery = core.createPaginator(DynamoDBClient2, QueryCommand4, "ExclusiveStartKey", "LastEvaluatedKey", "Limit");
|
|
25959
25959
|
var paginateScan = core.createPaginator(DynamoDBClient2, ScanCommand, "ExclusiveStartKey", "LastEvaluatedKey", "Limit");
|
|
25960
25960
|
var checkState$1 = /* @__PURE__ */ __name(async (client, input) => {
|
|
25961
25961
|
let reason;
|
|
@@ -26354,7 +26354,7 @@ var require_dist_cjs58 = __commonJS({
|
|
|
26354
26354
|
exports2.ProvisionedThroughputExceededException = ProvisionedThroughputExceededException$1;
|
|
26355
26355
|
exports2.PutItemCommand = PutItemCommand;
|
|
26356
26356
|
exports2.PutResourcePolicyCommand = PutResourcePolicyCommand;
|
|
26357
|
-
exports2.QueryCommand =
|
|
26357
|
+
exports2.QueryCommand = QueryCommand4;
|
|
26358
26358
|
exports2.ReplicaAlreadyExistsException = ReplicaAlreadyExistsException$1;
|
|
26359
26359
|
exports2.ReplicaNotFoundException = ReplicaNotFoundException$1;
|
|
26360
26360
|
exports2.ReplicaStatus = ReplicaStatus;
|
|
@@ -27098,7 +27098,7 @@ var require_dist_cjs60 = __commonJS({
|
|
|
27098
27098
|
return async () => handler2(this.clientCommand);
|
|
27099
27099
|
}
|
|
27100
27100
|
};
|
|
27101
|
-
var
|
|
27101
|
+
var QueryCommand4 = class extends DynamoDBDocumentClientCommand {
|
|
27102
27102
|
static {
|
|
27103
27103
|
__name(this, "QueryCommand");
|
|
27104
27104
|
}
|
|
@@ -27433,7 +27433,7 @@ var require_dist_cjs60 = __commonJS({
|
|
|
27433
27433
|
}
|
|
27434
27434
|
}
|
|
27435
27435
|
query(args, optionsOrCb, cb) {
|
|
27436
|
-
const command = new
|
|
27436
|
+
const command = new QueryCommand4(args);
|
|
27437
27437
|
if (typeof optionsOrCb === "function") {
|
|
27438
27438
|
this.send(command, optionsOrCb);
|
|
27439
27439
|
} else if (typeof cb === "function") {
|
|
@@ -27498,7 +27498,7 @@ var require_dist_cjs60 = __commonJS({
|
|
|
27498
27498
|
}
|
|
27499
27499
|
}
|
|
27500
27500
|
};
|
|
27501
|
-
var paginateQuery = core$1.createPaginator(DynamoDBDocumentClient2,
|
|
27501
|
+
var paginateQuery = core$1.createPaginator(DynamoDBDocumentClient2, QueryCommand4, "ExclusiveStartKey", "LastEvaluatedKey", "Limit");
|
|
27502
27502
|
var paginateScan = core$1.createPaginator(DynamoDBDocumentClient2, ScanCommand, "ExclusiveStartKey", "LastEvaluatedKey", "Limit");
|
|
27503
27503
|
Object.defineProperty(exports2, "$Command", {
|
|
27504
27504
|
enumerable: true,
|
|
@@ -27529,7 +27529,7 @@ var require_dist_cjs60 = __commonJS({
|
|
|
27529
27529
|
exports2.ExecuteTransactionCommand = ExecuteTransactionCommand;
|
|
27530
27530
|
exports2.GetCommand = GetCommand4;
|
|
27531
27531
|
exports2.PutCommand = PutCommand2;
|
|
27532
|
-
exports2.QueryCommand =
|
|
27532
|
+
exports2.QueryCommand = QueryCommand4;
|
|
27533
27533
|
exports2.ScanCommand = ScanCommand;
|
|
27534
27534
|
exports2.TransactGetCommand = TransactGetCommand;
|
|
27535
27535
|
exports2.TransactWriteCommand = TransactWriteCommand6;
|
|
@@ -27546,7 +27546,7 @@ __export(handler_exports, {
|
|
|
27546
27546
|
});
|
|
27547
27547
|
module.exports = __toCommonJS(handler_exports);
|
|
27548
27548
|
|
|
27549
|
-
// src/errors.ts
|
|
27549
|
+
// src/shared/errors/index.ts
|
|
27550
27550
|
var AppError = class extends Error {
|
|
27551
27551
|
constructor(code, message, statusCode = 500, details) {
|
|
27552
27552
|
super(message);
|
|
@@ -27608,7 +27608,7 @@ function isAppError(error2) {
|
|
|
27608
27608
|
}
|
|
27609
27609
|
__name(isAppError, "isAppError");
|
|
27610
27610
|
|
|
27611
|
-
// src/logger.ts
|
|
27611
|
+
// src/shared/utils/logger.ts
|
|
27612
27612
|
var LOG_LEVELS = {
|
|
27613
27613
|
debug: 0,
|
|
27614
27614
|
info: 1,
|
|
@@ -27665,31 +27665,6 @@ function createLogger(config = {}) {
|
|
|
27665
27665
|
}
|
|
27666
27666
|
__name(createLogger, "createLogger");
|
|
27667
27667
|
|
|
27668
|
-
// src/server/operations/deleteMany.ts
|
|
27669
|
-
var import_lib_dynamodb2 = __toESM(require_dist_cjs60(), 1);
|
|
27670
|
-
|
|
27671
|
-
// src/dynamodb.ts
|
|
27672
|
-
var import_client_dynamodb = __toESM(require_dist_cjs58(), 1);
|
|
27673
|
-
var import_lib_dynamodb = __toESM(require_dist_cjs60(), 1);
|
|
27674
|
-
function createDynamoDBClient(config = {}) {
|
|
27675
|
-
const { region = process.env.AWS_REGION || "us-east-1", endpoint } = config;
|
|
27676
|
-
const client = new import_client_dynamodb.DynamoDBClient({
|
|
27677
|
-
region,
|
|
27678
|
-
...endpoint && { endpoint }
|
|
27679
|
-
});
|
|
27680
|
-
const docClient = import_lib_dynamodb.DynamoDBDocumentClient.from(client, {
|
|
27681
|
-
marshallOptions: {
|
|
27682
|
-
removeUndefinedValues: true,
|
|
27683
|
-
convertEmptyValues: false
|
|
27684
|
-
},
|
|
27685
|
-
unmarshallOptions: {
|
|
27686
|
-
wrapNumbers: false
|
|
27687
|
-
}
|
|
27688
|
-
});
|
|
27689
|
-
return docClient;
|
|
27690
|
-
}
|
|
27691
|
-
__name(createDynamoDBClient, "createDynamoDBClient");
|
|
27692
|
-
|
|
27693
27668
|
// node_modules/ulid/dist/node/index.js
|
|
27694
27669
|
var import_node_crypto = __toESM(require("node:crypto"), 1);
|
|
27695
27670
|
var ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
|
|
@@ -27795,12 +27770,51 @@ function ulid(seedTime, prng) {
|
|
|
27795
27770
|
}
|
|
27796
27771
|
__name(ulid, "ulid");
|
|
27797
27772
|
|
|
27798
|
-
// src/ulid.ts
|
|
27773
|
+
// src/shared/utils/ulid.ts
|
|
27799
27774
|
function ulid2() {
|
|
27800
27775
|
return ulid();
|
|
27801
27776
|
}
|
|
27802
27777
|
__name(ulid2, "ulid");
|
|
27803
27778
|
|
|
27779
|
+
// src/shared/utils/dynamodb.ts
|
|
27780
|
+
var import_client_dynamodb = __toESM(require_dist_cjs58(), 1);
|
|
27781
|
+
var import_lib_dynamodb = __toESM(require_dist_cjs60(), 1);
|
|
27782
|
+
function createDynamoDBClient(config = {}) {
|
|
27783
|
+
const { region = process.env.AWS_REGION || "us-east-1", endpoint } = config;
|
|
27784
|
+
const client = new import_client_dynamodb.DynamoDBClient({
|
|
27785
|
+
region,
|
|
27786
|
+
...endpoint && { endpoint }
|
|
27787
|
+
});
|
|
27788
|
+
const docClient = import_lib_dynamodb.DynamoDBDocumentClient.from(client, {
|
|
27789
|
+
marshallOptions: {
|
|
27790
|
+
removeUndefinedValues: true,
|
|
27791
|
+
convertEmptyValues: false
|
|
27792
|
+
},
|
|
27793
|
+
unmarshallOptions: {
|
|
27794
|
+
wrapNumbers: false
|
|
27795
|
+
}
|
|
27796
|
+
});
|
|
27797
|
+
return docClient;
|
|
27798
|
+
}
|
|
27799
|
+
__name(createDynamoDBClient, "createDynamoDBClient");
|
|
27800
|
+
|
|
27801
|
+
// src/shared/constants/dynamodb.ts
|
|
27802
|
+
var DYNAMODB_TRANSACT_WRITE_MAX_ITEMS = 100;
|
|
27803
|
+
var DYNAMODB_QUERY_MAX_SIZE_BYTES = 1024 * 1024;
|
|
27804
|
+
var DYNAMODB_SCAN_MAX_SIZE_BYTES = 1024 * 1024;
|
|
27805
|
+
|
|
27806
|
+
// src/shared/constants/lambda.ts
|
|
27807
|
+
var LAMBDA_TIMEOUT_MS = 15 * 60 * 1e3;
|
|
27808
|
+
var LARGE_BATCH_WARNING_THRESHOLD = 1e3;
|
|
27809
|
+
var TIMEOUT_RISK_THRESHOLD = 0.2;
|
|
27810
|
+
var LAMBDA_MAX_PAYLOAD_SIZE_SYNC = 6 * 1024 * 1024;
|
|
27811
|
+
var LAMBDA_MAX_PAYLOAD_SIZE_ASYNC = 256 * 1024;
|
|
27812
|
+
var LAMBDA_MAX_RESPONSE_SIZE = 6 * 1024 * 1024;
|
|
27813
|
+
var LAMBDA_MAX_ENV_VARS_SIZE = 4 * 1024;
|
|
27814
|
+
|
|
27815
|
+
// src/server/operations/deleteMany.ts
|
|
27816
|
+
var import_lib_dynamodb2 = __toESM(require_dist_cjs60(), 1);
|
|
27817
|
+
|
|
27804
27818
|
// src/server/shadow/typeInference.ts
|
|
27805
27819
|
function inferFieldType(value) {
|
|
27806
27820
|
if (value === null || value === void 0) {
|
|
@@ -27828,6 +27842,51 @@ function inferFieldType(value) {
|
|
|
27828
27842
|
}
|
|
27829
27843
|
__name(inferFieldType, "inferFieldType");
|
|
27830
27844
|
|
|
27845
|
+
// src/shadows/generator.ts
|
|
27846
|
+
function escapeString(value) {
|
|
27847
|
+
return value.replace(/#/g, "##").replace(/ /g, "#");
|
|
27848
|
+
}
|
|
27849
|
+
__name(escapeString, "escapeString");
|
|
27850
|
+
function formatDatetime(value) {
|
|
27851
|
+
if (value === null || value === void 0) {
|
|
27852
|
+
return "";
|
|
27853
|
+
}
|
|
27854
|
+
const date2 = typeof value === "string" ? new Date(value) : value;
|
|
27855
|
+
if (isNaN(date2.getTime())) {
|
|
27856
|
+
throw new Error(`Invalid datetime value: ${value}`);
|
|
27857
|
+
}
|
|
27858
|
+
return date2.toISOString();
|
|
27859
|
+
}
|
|
27860
|
+
__name(formatDatetime, "formatDatetime");
|
|
27861
|
+
function formatBoolean(value) {
|
|
27862
|
+
if (value === null || value === void 0) {
|
|
27863
|
+
return "";
|
|
27864
|
+
}
|
|
27865
|
+
return value ? "true" : "false";
|
|
27866
|
+
}
|
|
27867
|
+
__name(formatBoolean, "formatBoolean");
|
|
27868
|
+
function generateMainRecordSK(recordId) {
|
|
27869
|
+
return `id#${recordId}`;
|
|
27870
|
+
}
|
|
27871
|
+
__name(generateMainRecordSK, "generateMainRecordSK");
|
|
27872
|
+
|
|
27873
|
+
// src/shadows/differ.ts
|
|
27874
|
+
function calculateShadowDiff(oldShadowKeys, newShadowKeys) {
|
|
27875
|
+
const oldSet = new Set(oldShadowKeys);
|
|
27876
|
+
const newSet = new Set(newShadowKeys);
|
|
27877
|
+
const toDelete = oldShadowKeys.filter((key) => !newSet.has(key));
|
|
27878
|
+
const toAdd = newShadowKeys.filter((key) => !oldSet.has(key));
|
|
27879
|
+
return {
|
|
27880
|
+
toDelete,
|
|
27881
|
+
toAdd
|
|
27882
|
+
};
|
|
27883
|
+
}
|
|
27884
|
+
__name(calculateShadowDiff, "calculateShadowDiff");
|
|
27885
|
+
function isDiffEmpty(diff) {
|
|
27886
|
+
return diff.toDelete.length === 0 && diff.toAdd.length === 0;
|
|
27887
|
+
}
|
|
27888
|
+
__name(isDiffEmpty, "isDiffEmpty");
|
|
27889
|
+
|
|
27831
27890
|
// src/server/shadow/generator.ts
|
|
27832
27891
|
function normalizeJson(value) {
|
|
27833
27892
|
if (value === null || value === void 0) return value;
|
|
@@ -27859,10 +27918,10 @@ function truncateString(value, maxBytes) {
|
|
|
27859
27918
|
return truncated;
|
|
27860
27919
|
}
|
|
27861
27920
|
__name(truncateString, "truncateString");
|
|
27862
|
-
function
|
|
27863
|
-
return value
|
|
27921
|
+
function escapeString2(value) {
|
|
27922
|
+
return escapeString(value);
|
|
27864
27923
|
}
|
|
27865
|
-
__name(
|
|
27924
|
+
__name(escapeString2, "escapeString");
|
|
27866
27925
|
function formatNumberWithOffset(value, padding) {
|
|
27867
27926
|
if (!Number.isFinite(value)) {
|
|
27868
27927
|
throw new Error(`Invalid number value: ${value}`);
|
|
@@ -27876,25 +27935,15 @@ function formatNumberWithOffset(value, padding) {
|
|
|
27876
27935
|
return adjusted.toString().padStart(padding + 1, "0");
|
|
27877
27936
|
}
|
|
27878
27937
|
__name(formatNumberWithOffset, "formatNumberWithOffset");
|
|
27879
|
-
function
|
|
27880
|
-
|
|
27881
|
-
return "";
|
|
27882
|
-
}
|
|
27883
|
-
const date2 = typeof value === "string" ? new Date(value) : value;
|
|
27884
|
-
if (isNaN(date2.getTime())) {
|
|
27885
|
-
throw new Error(`Invalid datetime value: ${value}`);
|
|
27886
|
-
}
|
|
27887
|
-
return date2.toISOString();
|
|
27938
|
+
function formatDatetime2(value) {
|
|
27939
|
+
return formatDatetime(value);
|
|
27888
27940
|
}
|
|
27889
|
-
__name(
|
|
27890
|
-
function
|
|
27891
|
-
|
|
27892
|
-
return "";
|
|
27893
|
-
}
|
|
27894
|
-
return value ? "1" : "0";
|
|
27941
|
+
__name(formatDatetime2, "formatDatetime");
|
|
27942
|
+
function formatBoolean2(value) {
|
|
27943
|
+
return formatBoolean(value);
|
|
27895
27944
|
}
|
|
27896
|
-
__name(
|
|
27897
|
-
function
|
|
27945
|
+
__name(formatBoolean2, "formatBoolean");
|
|
27946
|
+
function formatFieldValue2(type, value, config) {
|
|
27898
27947
|
switch (type) {
|
|
27899
27948
|
case "string": {
|
|
27900
27949
|
if (value === null || value === void 0) {
|
|
@@ -27902,31 +27951,31 @@ function formatFieldValue(type, value, config) {
|
|
|
27902
27951
|
}
|
|
27903
27952
|
const str = String(value);
|
|
27904
27953
|
const truncated = truncateString(str, config.stringMaxBytes);
|
|
27905
|
-
return
|
|
27954
|
+
return escapeString2(truncated);
|
|
27906
27955
|
}
|
|
27907
27956
|
case "number":
|
|
27908
27957
|
return formatNumberWithOffset(value, config.numberPadding);
|
|
27909
27958
|
case "datetime":
|
|
27910
|
-
return
|
|
27959
|
+
return formatDatetime2(value);
|
|
27911
27960
|
case "boolean":
|
|
27912
|
-
return
|
|
27961
|
+
return formatBoolean2(value);
|
|
27913
27962
|
case "array":
|
|
27914
27963
|
case "object": {
|
|
27915
27964
|
const normalized = normalizeJson(value);
|
|
27916
27965
|
const jsonStr = JSON.stringify(normalized);
|
|
27917
27966
|
const maxBytes = config.stringMaxBytes * 2;
|
|
27918
27967
|
const truncated = truncateString(jsonStr, maxBytes);
|
|
27919
|
-
return
|
|
27968
|
+
return escapeString2(truncated);
|
|
27920
27969
|
}
|
|
27921
27970
|
default:
|
|
27922
27971
|
throw new Error(`Unknown shadow field type: ${type}`);
|
|
27923
27972
|
}
|
|
27924
27973
|
}
|
|
27925
|
-
__name(
|
|
27926
|
-
function
|
|
27927
|
-
return
|
|
27974
|
+
__name(formatFieldValue2, "formatFieldValue");
|
|
27975
|
+
function generateMainRecordSK2(recordId) {
|
|
27976
|
+
return generateMainRecordSK(recordId);
|
|
27928
27977
|
}
|
|
27929
|
-
__name(
|
|
27978
|
+
__name(generateMainRecordSK2, "generateMainRecordSK");
|
|
27930
27979
|
function generateShadowRecords(record, resourceName, config) {
|
|
27931
27980
|
const shadows = [];
|
|
27932
27981
|
for (const [fieldName, value] of Object.entries(record)) {
|
|
@@ -27943,7 +27992,7 @@ function generateShadowRecords(record, resourceName, config) {
|
|
|
27943
27992
|
if (!type) {
|
|
27944
27993
|
continue;
|
|
27945
27994
|
}
|
|
27946
|
-
const formattedValue =
|
|
27995
|
+
const formattedValue = formatFieldValue2(type, value, config);
|
|
27947
27996
|
const sk = `${fieldName}#${formattedValue}#id#${record.id}`;
|
|
27948
27997
|
shadows.push({
|
|
27949
27998
|
PK: resourceName,
|
|
@@ -27954,23 +28003,6 @@ function generateShadowRecords(record, resourceName, config) {
|
|
|
27954
28003
|
}
|
|
27955
28004
|
__name(generateShadowRecords, "generateShadowRecords");
|
|
27956
28005
|
|
|
27957
|
-
// src/server/shadow/differ.ts
|
|
27958
|
-
function calculateShadowDiff(oldShadowKeys, newShadowKeys) {
|
|
27959
|
-
const oldSet = new Set(oldShadowKeys);
|
|
27960
|
-
const newSet = new Set(newShadowKeys);
|
|
27961
|
-
const toDelete = oldShadowKeys.filter((key) => !newSet.has(key));
|
|
27962
|
-
const toAdd = newShadowKeys.filter((key) => !oldSet.has(key));
|
|
27963
|
-
return {
|
|
27964
|
-
toDelete,
|
|
27965
|
-
toAdd
|
|
27966
|
-
};
|
|
27967
|
-
}
|
|
27968
|
-
__name(calculateShadowDiff, "calculateShadowDiff");
|
|
27969
|
-
function isDiffEmpty(diff) {
|
|
27970
|
-
return diff.toDelete.length === 0 && diff.toAdd.length === 0;
|
|
27971
|
-
}
|
|
27972
|
-
__name(isDiffEmpty, "isDiffEmpty");
|
|
27973
|
-
|
|
27974
28006
|
// src/server/shadow/config.ts
|
|
27975
28007
|
var cachedShadowConfig = null;
|
|
27976
28008
|
function getShadowConfig() {
|
|
@@ -27994,9 +28026,6 @@ __name(getShadowConfig, "getShadowConfig");
|
|
|
27994
28026
|
|
|
27995
28027
|
// src/server/utils/bulkOperations.ts
|
|
27996
28028
|
var logger2 = createLogger({ service: "records-lambda" });
|
|
27997
|
-
var LAMBDA_TIMEOUT_MS = 15 * 60 * 1e3;
|
|
27998
|
-
var LARGE_BATCH_WARNING_THRESHOLD = 1e3;
|
|
27999
|
-
var TIMEOUT_RISK_THRESHOLD = 0.2;
|
|
28000
28029
|
function logLargeBatchWarning(operation2, recordCount, requestId, resource) {
|
|
28001
28030
|
if (recordCount > LARGE_BATCH_WARNING_THRESHOLD) {
|
|
28002
28031
|
logger2.warn(`Large batch ${operation2} operation detected`, {
|
|
@@ -28078,7 +28107,6 @@ __name(logPartialFailure, "logPartialFailure");
|
|
|
28078
28107
|
|
|
28079
28108
|
// src/server/utils/chunking.ts
|
|
28080
28109
|
var logger3 = createLogger({ service: "records-lambda" });
|
|
28081
|
-
var DYNAMODB_TRANSACT_WRITE_MAX_ITEMS = 100;
|
|
28082
28110
|
function calculateChunks(records, getItemCount) {
|
|
28083
28111
|
const chunks = [];
|
|
28084
28112
|
const itemCounts = [];
|
|
@@ -28286,7 +28314,7 @@ async function handleDeleteMany(resource, params, requestId) {
|
|
|
28286
28314
|
const tableName = getTableName();
|
|
28287
28315
|
const keys = ids.map((id) => ({
|
|
28288
28316
|
PK: resource,
|
|
28289
|
-
SK:
|
|
28317
|
+
SK: generateMainRecordSK2(id)
|
|
28290
28318
|
}));
|
|
28291
28319
|
const batchGetResult = await executeDynamoDBOperation(
|
|
28292
28320
|
() => dbClient2.send(
|
|
@@ -28311,7 +28339,7 @@ async function handleDeleteMany(resource, params, requestId) {
|
|
|
28311
28339
|
existingIds.add(id);
|
|
28312
28340
|
preparedRecords.push({
|
|
28313
28341
|
id,
|
|
28314
|
-
mainSK:
|
|
28342
|
+
mainSK: generateMainRecordSK2(id),
|
|
28315
28343
|
shadowKeys
|
|
28316
28344
|
});
|
|
28317
28345
|
}
|
|
@@ -28485,7 +28513,7 @@ async function handleDeleteOne(resource, params, requestId) {
|
|
|
28485
28513
|
});
|
|
28486
28514
|
const dbClient2 = getDBClient();
|
|
28487
28515
|
const tableName = getTableName();
|
|
28488
|
-
const mainSK =
|
|
28516
|
+
const mainSK = generateMainRecordSK2(id);
|
|
28489
28517
|
const getResult = await executeDynamoDBOperation(
|
|
28490
28518
|
() => dbClient2.send(
|
|
28491
28519
|
new import_lib_dynamodb3.GetCommand({
|
|
@@ -28543,8 +28571,27 @@ async function handleDeleteOne(resource, params, requestId) {
|
|
|
28543
28571
|
}
|
|
28544
28572
|
__name(handleDeleteOne, "handleDeleteOne");
|
|
28545
28573
|
|
|
28546
|
-
// src/server/
|
|
28547
|
-
|
|
28574
|
+
// src/server/utils/validation.ts
|
|
28575
|
+
function validateSortField(_config, _resource, _sort) {
|
|
28576
|
+
return;
|
|
28577
|
+
}
|
|
28578
|
+
__name(validateSortField, "validateSortField");
|
|
28579
|
+
function normalizePagination(pagination) {
|
|
28580
|
+
const perPage = Math.min(pagination?.perPage || 50, 50);
|
|
28581
|
+
const nextToken = pagination?.nextToken;
|
|
28582
|
+
return { perPage, nextToken };
|
|
28583
|
+
}
|
|
28584
|
+
__name(normalizePagination, "normalizePagination");
|
|
28585
|
+
function normalizeSort(config, _resource, sort) {
|
|
28586
|
+
if (sort) {
|
|
28587
|
+
return sort;
|
|
28588
|
+
}
|
|
28589
|
+
return {
|
|
28590
|
+
field: config.updatedAtField,
|
|
28591
|
+
order: "DESC"
|
|
28592
|
+
};
|
|
28593
|
+
}
|
|
28594
|
+
__name(normalizeSort, "normalizeSort");
|
|
28548
28595
|
|
|
28549
28596
|
// src/server/utils/filter.ts
|
|
28550
28597
|
function parseFilterField(fieldKey) {
|
|
@@ -28581,60 +28628,89 @@ function isValidType(type) {
|
|
|
28581
28628
|
return ["string", "number", "date", "boolean"].includes(type);
|
|
28582
28629
|
}
|
|
28583
28630
|
__name(isValidType, "isValidType");
|
|
28584
|
-
|
|
28585
|
-
|
|
28586
|
-
|
|
28587
|
-
|
|
28588
|
-
|
|
28589
|
-
|
|
28590
|
-
|
|
28591
|
-
|
|
28592
|
-
case "boolean":
|
|
28593
|
-
if (typeof value === "boolean") return value;
|
|
28594
|
-
return String(value).toLowerCase() === "true";
|
|
28595
|
-
default:
|
|
28596
|
-
return String(value);
|
|
28597
|
-
}
|
|
28631
|
+
|
|
28632
|
+
// src/server/operations/find/utils.ts
|
|
28633
|
+
var logger7 = createLogger({
|
|
28634
|
+
service: "find-utils",
|
|
28635
|
+
level: process.env.LOG_LEVEL || "info"
|
|
28636
|
+
});
|
|
28637
|
+
function initializeFindConfig() {
|
|
28638
|
+
return getShadowConfig();
|
|
28598
28639
|
}
|
|
28599
|
-
__name(
|
|
28600
|
-
function
|
|
28601
|
-
const
|
|
28602
|
-
|
|
28603
|
-
|
|
28640
|
+
__name(initializeFindConfig, "initializeFindConfig");
|
|
28641
|
+
function normalizeFindParams(config, resource, params) {
|
|
28642
|
+
const sort = normalizeSort(config, resource, params.sort);
|
|
28643
|
+
const pagination = normalizePagination(params.pagination);
|
|
28644
|
+
const parsedFilters = parseFilters(params.filter);
|
|
28645
|
+
return {
|
|
28646
|
+
sort,
|
|
28647
|
+
pagination,
|
|
28648
|
+
parsedFilters
|
|
28649
|
+
};
|
|
28650
|
+
}
|
|
28651
|
+
__name(normalizeFindParams, "normalizeFindParams");
|
|
28652
|
+
function parseFilters(filter) {
|
|
28653
|
+
const parsedFilters = [];
|
|
28654
|
+
if (!filter || Object.keys(filter).length === 0) {
|
|
28655
|
+
return parsedFilters;
|
|
28604
28656
|
}
|
|
28605
|
-
const
|
|
28606
|
-
|
|
28607
|
-
|
|
28608
|
-
|
|
28609
|
-
|
|
28610
|
-
|
|
28611
|
-
|
|
28612
|
-
|
|
28613
|
-
|
|
28614
|
-
|
|
28615
|
-
|
|
28616
|
-
|
|
28617
|
-
|
|
28618
|
-
|
|
28619
|
-
return String(typedFieldValue).startsWith(String(typedFilterValue));
|
|
28620
|
-
case "ends":
|
|
28621
|
-
return String(typedFieldValue).endsWith(String(typedFilterValue));
|
|
28622
|
-
default:
|
|
28623
|
-
return false;
|
|
28657
|
+
for (const [fieldKey, value] of Object.entries(filter)) {
|
|
28658
|
+
try {
|
|
28659
|
+
const parsed = parseFilterField(fieldKey);
|
|
28660
|
+
parsedFilters.push({ parsed, value });
|
|
28661
|
+
} catch (error2) {
|
|
28662
|
+
logger7.error("Invalid filter field syntax", {
|
|
28663
|
+
fieldKey,
|
|
28664
|
+
error: error2 instanceof Error ? error2.message : String(error2)
|
|
28665
|
+
});
|
|
28666
|
+
throw new ConfigError(`Invalid filter field syntax: ${fieldKey}`, {
|
|
28667
|
+
field: fieldKey,
|
|
28668
|
+
error: error2 instanceof Error ? error2.message : String(error2)
|
|
28669
|
+
});
|
|
28670
|
+
}
|
|
28624
28671
|
}
|
|
28672
|
+
return parsedFilters;
|
|
28625
28673
|
}
|
|
28626
|
-
__name(
|
|
28627
|
-
function matchesAllFilters(record, parsedFilters) {
|
|
28628
|
-
return parsedFilters.every((f4) => matchesFilter(record, f4.parsed, f4.value));
|
|
28629
|
-
}
|
|
28630
|
-
__name(matchesAllFilters, "matchesAllFilters");
|
|
28674
|
+
__name(parseFilters, "parseFilters");
|
|
28631
28675
|
function findOptimizableFilter(sortField, parsedFilters) {
|
|
28632
|
-
const queryableOperators = ["eq", "lt", "lte", "gt", "gte", "starts"];
|
|
28633
28676
|
return parsedFilters.find(
|
|
28634
|
-
(
|
|
28635
|
-
)
|
|
28677
|
+
(filter) => filter.parsed.field === sortField
|
|
28678
|
+
);
|
|
28636
28679
|
}
|
|
28637
28680
|
__name(findOptimizableFilter, "findOptimizableFilter");
|
|
28681
|
+
function matchesAllFilters(record, parsedFilters) {
|
|
28682
|
+
return parsedFilters.every((filter) => {
|
|
28683
|
+
const { field, operator } = filter.parsed;
|
|
28684
|
+
const recordValue = record[field];
|
|
28685
|
+
const filterValue = filter.value;
|
|
28686
|
+
switch (operator) {
|
|
28687
|
+
case "eq":
|
|
28688
|
+
return recordValue === filterValue;
|
|
28689
|
+
case "ne":
|
|
28690
|
+
return recordValue !== filterValue;
|
|
28691
|
+
case "gt":
|
|
28692
|
+
return recordValue != null && recordValue > filterValue;
|
|
28693
|
+
case "gte":
|
|
28694
|
+
return recordValue != null && recordValue >= filterValue;
|
|
28695
|
+
case "lt":
|
|
28696
|
+
return recordValue != null && recordValue < filterValue;
|
|
28697
|
+
case "lte":
|
|
28698
|
+
return recordValue != null && recordValue <= filterValue;
|
|
28699
|
+
case "in":
|
|
28700
|
+
return Array.isArray(filterValue) && filterValue.includes(recordValue);
|
|
28701
|
+
case "nin":
|
|
28702
|
+
return Array.isArray(filterValue) && !filterValue.includes(recordValue);
|
|
28703
|
+
case "starts":
|
|
28704
|
+
return typeof recordValue === "string" && typeof filterValue === "string" && recordValue.startsWith(filterValue);
|
|
28705
|
+
default:
|
|
28706
|
+
return true;
|
|
28707
|
+
}
|
|
28708
|
+
});
|
|
28709
|
+
}
|
|
28710
|
+
__name(matchesAllFilters, "matchesAllFilters");
|
|
28711
|
+
|
|
28712
|
+
// src/server/operations/find/idQuery.ts
|
|
28713
|
+
var import_lib_dynamodb4 = __toESM(require_dist_cjs60(), 1);
|
|
28638
28714
|
|
|
28639
28715
|
// src/server/utils/pagination.ts
|
|
28640
28716
|
function encodeNextToken(pk, sk) {
|
|
@@ -28666,173 +28742,71 @@ function decodeNextToken(token) {
|
|
|
28666
28742
|
}
|
|
28667
28743
|
__name(decodeNextToken, "decodeNextToken");
|
|
28668
28744
|
|
|
28669
|
-
// src/server/
|
|
28670
|
-
|
|
28671
|
-
|
|
28672
|
-
|
|
28673
|
-
|
|
28674
|
-
function
|
|
28675
|
-
const
|
|
28676
|
-
const nextToken = pagination
|
|
28677
|
-
|
|
28678
|
-
|
|
28679
|
-
|
|
28680
|
-
|
|
28681
|
-
|
|
28682
|
-
|
|
28683
|
-
|
|
28684
|
-
|
|
28685
|
-
|
|
28686
|
-
order: "DESC"
|
|
28687
|
-
};
|
|
28688
|
-
}
|
|
28689
|
-
__name(normalizeSort, "normalizeSort");
|
|
28690
|
-
|
|
28691
|
-
// src/server/operations/find.ts
|
|
28692
|
-
var logger7 = createLogger({ service: "records-lambda" });
|
|
28693
|
-
async function handleFind(resource, params, requestId) {
|
|
28694
|
-
logger7.debug("Executing find", {
|
|
28695
|
-
requestId,
|
|
28696
|
-
resource,
|
|
28697
|
-
params
|
|
28698
|
-
});
|
|
28699
|
-
const shadowConfig = getShadowConfig();
|
|
28700
|
-
logger7.debug("Shadow config loaded", {
|
|
28701
|
-
requestId,
|
|
28702
|
-
resource,
|
|
28703
|
-
createdAtField: shadowConfig.createdAtField,
|
|
28704
|
-
updatedAtField: shadowConfig.updatedAtField
|
|
28705
|
-
});
|
|
28706
|
-
logger7.debug("Normalizing sort", {
|
|
28707
|
-
requestId,
|
|
28708
|
-
resource,
|
|
28709
|
-
inputSort: params.sort
|
|
28710
|
-
});
|
|
28711
|
-
const sort = normalizeSort(shadowConfig, resource, params.sort);
|
|
28712
|
-
logger7.debug("Sort normalized", {
|
|
28713
|
-
requestId,
|
|
28714
|
-
resource,
|
|
28715
|
-
sort
|
|
28716
|
-
});
|
|
28717
|
-
validateSortField(shadowConfig, resource, sort);
|
|
28718
|
-
const { perPage, nextToken } = normalizePagination(params.pagination);
|
|
28719
|
-
const parsedFilters = [];
|
|
28720
|
-
if (params.filter && Object.keys(params.filter).length > 0) {
|
|
28721
|
-
for (const [fieldKey, value] of Object.entries(params.filter)) {
|
|
28722
|
-
try {
|
|
28723
|
-
const parsed = parseFilterField(fieldKey);
|
|
28724
|
-
parsedFilters.push({ parsed, value });
|
|
28725
|
-
} catch (error2) {
|
|
28726
|
-
logger7.error("Invalid filter field syntax", {
|
|
28727
|
-
requestId,
|
|
28728
|
-
fieldKey,
|
|
28729
|
-
error: error2 instanceof Error ? error2.message : String(error2)
|
|
28730
|
-
});
|
|
28731
|
-
throw new ConfigError(`Invalid filter field syntax: ${fieldKey}`, {
|
|
28732
|
-
field: fieldKey,
|
|
28733
|
-
error: error2 instanceof Error ? error2.message : String(error2)
|
|
28734
|
-
});
|
|
28735
|
-
}
|
|
28736
|
-
}
|
|
28737
|
-
}
|
|
28738
|
-
const dbClient2 = getDBClient();
|
|
28739
|
-
const tableName = getTableName();
|
|
28740
|
-
if (sort.field === "id") {
|
|
28741
|
-
const idFilter = parsedFilters.find((f4) => f4.parsed.field === "id");
|
|
28742
|
-
if (idFilter && idFilter.parsed.operator === "eq") {
|
|
28743
|
-
const targetId = String(idFilter.value);
|
|
28744
|
-
const queryResult3 = await executeDynamoDBOperation(
|
|
28745
|
-
() => dbClient2.send(
|
|
28746
|
-
new import_lib_dynamodb4.QueryCommand({
|
|
28747
|
-
TableName: tableName,
|
|
28748
|
-
KeyConditionExpression: "PK = :pk AND SK = :sk",
|
|
28749
|
-
ExpressionAttributeValues: {
|
|
28750
|
-
":pk": resource,
|
|
28751
|
-
":sk": `id#${targetId}`
|
|
28752
|
-
},
|
|
28753
|
-
ConsistentRead: true
|
|
28754
|
-
})
|
|
28755
|
-
),
|
|
28756
|
-
"Query"
|
|
28757
|
-
);
|
|
28758
|
-
const mainRecords3 = queryResult3.Items || [];
|
|
28759
|
-
const items3 = mainRecords3.map((item) => extractCleanRecord(item));
|
|
28760
|
-
logger7.info("find succeeded (id sort optimization with filter)", {
|
|
28761
|
-
requestId,
|
|
28762
|
-
resource,
|
|
28763
|
-
count: items3.length,
|
|
28764
|
-
hasNextPage: false
|
|
28765
|
-
});
|
|
28766
|
-
return {
|
|
28767
|
-
items: items3,
|
|
28768
|
-
pageInfo: {
|
|
28769
|
-
hasNextPage: false,
|
|
28770
|
-
hasPreviousPage: false
|
|
28771
|
-
}
|
|
28772
|
-
};
|
|
28773
|
-
}
|
|
28774
|
-
let exclusiveStartKey2;
|
|
28775
|
-
if (nextToken) {
|
|
28776
|
-
const decoded = decodeNextToken(nextToken);
|
|
28777
|
-
exclusiveStartKey2 = {
|
|
28778
|
-
PK: decoded.PK,
|
|
28779
|
-
SK: decoded.SK
|
|
28780
|
-
};
|
|
28781
|
-
}
|
|
28782
|
-
const queryResult2 = await executeDynamoDBOperation(
|
|
28783
|
-
() => dbClient2.send(
|
|
28784
|
-
new import_lib_dynamodb4.QueryCommand({
|
|
28785
|
-
TableName: tableName,
|
|
28786
|
-
KeyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix)",
|
|
28787
|
-
ExpressionAttributeValues: {
|
|
28788
|
-
":pk": resource,
|
|
28789
|
-
":skPrefix": "id#"
|
|
28790
|
-
},
|
|
28791
|
-
ScanIndexForward: sort.order === "ASC",
|
|
28792
|
-
// ASC: true, DESC: false
|
|
28793
|
-
Limit: perPage,
|
|
28794
|
-
ExclusiveStartKey: exclusiveStartKey2,
|
|
28795
|
-
ConsistentRead: true
|
|
28796
|
-
})
|
|
28797
|
-
),
|
|
28798
|
-
"Query"
|
|
28799
|
-
);
|
|
28800
|
-
const mainRecords2 = queryResult2.Items || [];
|
|
28801
|
-
if (mainRecords2.length === 0) {
|
|
28802
|
-
return {
|
|
28803
|
-
items: [],
|
|
28804
|
-
pageInfo: {
|
|
28805
|
-
hasNextPage: false,
|
|
28806
|
-
hasPreviousPage: false
|
|
28807
|
-
}
|
|
28808
|
-
};
|
|
28809
|
-
}
|
|
28810
|
-
let items2 = mainRecords2.map((item) => extractCleanRecord(item));
|
|
28811
|
-
if (parsedFilters.length > 0) {
|
|
28812
|
-
items2 = items2.filter((record) => matchesAllFilters(record, parsedFilters));
|
|
28813
|
-
}
|
|
28814
|
-
const hasNextPage2 = mainRecords2.length < perPage ? false : queryResult2.LastEvaluatedKey !== void 0;
|
|
28815
|
-
const nextTokenValue2 = hasNextPage2 && queryResult2.LastEvaluatedKey ? encodeNextToken(
|
|
28816
|
-
queryResult2.LastEvaluatedKey.PK,
|
|
28817
|
-
queryResult2.LastEvaluatedKey.SK
|
|
28818
|
-
) : void 0;
|
|
28819
|
-
logger7.info("find succeeded (id sort optimization)", {
|
|
28820
|
-
requestId,
|
|
28821
|
-
resource,
|
|
28822
|
-
count: items2.length,
|
|
28823
|
-
hasNextPage: hasNextPage2
|
|
28824
|
-
});
|
|
28825
|
-
return {
|
|
28826
|
-
items: items2,
|
|
28827
|
-
pageInfo: {
|
|
28828
|
-
hasNextPage: hasNextPage2,
|
|
28829
|
-
hasPreviousPage: !!nextToken
|
|
28830
|
-
},
|
|
28831
|
-
...nextTokenValue2 && { nextToken: nextTokenValue2 }
|
|
28832
|
-
};
|
|
28745
|
+
// src/server/operations/find/idQuery.ts
|
|
28746
|
+
var logger8 = createLogger({
|
|
28747
|
+
service: "id-query",
|
|
28748
|
+
level: process.env.LOG_LEVEL || "info"
|
|
28749
|
+
});
|
|
28750
|
+
async function executeIdQuery(resource, normalizedParams, requestId) {
|
|
28751
|
+
const { sort, pagination, parsedFilters } = normalizedParams;
|
|
28752
|
+
const { perPage, nextToken } = pagination;
|
|
28753
|
+
logger8.debug("Executing ID optimized query", {
|
|
28754
|
+
requestId,
|
|
28755
|
+
resource,
|
|
28756
|
+
sort,
|
|
28757
|
+
hasFilters: parsedFilters.length > 0
|
|
28758
|
+
});
|
|
28759
|
+
const idFilter = parsedFilters.find((f4) => f4.parsed.field === "id");
|
|
28760
|
+
if (idFilter && idFilter.parsed.operator === "eq") {
|
|
28761
|
+
return await executeSpecificIdQuery(resource, String(idFilter.value), requestId);
|
|
28833
28762
|
}
|
|
28834
|
-
|
|
28835
|
-
|
|
28763
|
+
return await executeAllRecordsQuery(
|
|
28764
|
+
resource,
|
|
28765
|
+
sort,
|
|
28766
|
+
perPage,
|
|
28767
|
+
nextToken,
|
|
28768
|
+
parsedFilters,
|
|
28769
|
+
requestId
|
|
28770
|
+
);
|
|
28771
|
+
}
|
|
28772
|
+
__name(executeIdQuery, "executeIdQuery");
|
|
28773
|
+
async function executeSpecificIdQuery(resource, targetId, requestId) {
|
|
28774
|
+
const dbClient2 = getDBClient();
|
|
28775
|
+
const tableName = getTableName();
|
|
28776
|
+
const queryResult = await executeDynamoDBOperation(
|
|
28777
|
+
() => dbClient2.send(
|
|
28778
|
+
new import_lib_dynamodb4.QueryCommand({
|
|
28779
|
+
TableName: tableName,
|
|
28780
|
+
KeyConditionExpression: "PK = :pk AND SK = :sk",
|
|
28781
|
+
ExpressionAttributeValues: {
|
|
28782
|
+
":pk": resource,
|
|
28783
|
+
":sk": `id#${targetId}`
|
|
28784
|
+
},
|
|
28785
|
+
ConsistentRead: true
|
|
28786
|
+
})
|
|
28787
|
+
),
|
|
28788
|
+
"Query"
|
|
28789
|
+
);
|
|
28790
|
+
const mainRecords = queryResult.Items || [];
|
|
28791
|
+
const items = mainRecords.map((item) => extractCleanRecord(item));
|
|
28792
|
+
logger8.info("ID specific query succeeded", {
|
|
28793
|
+
requestId,
|
|
28794
|
+
resource,
|
|
28795
|
+
targetId,
|
|
28796
|
+
count: items.length
|
|
28797
|
+
});
|
|
28798
|
+
return {
|
|
28799
|
+
items,
|
|
28800
|
+
pageInfo: {
|
|
28801
|
+
hasNextPage: false,
|
|
28802
|
+
hasPreviousPage: false
|
|
28803
|
+
}
|
|
28804
|
+
};
|
|
28805
|
+
}
|
|
28806
|
+
__name(executeSpecificIdQuery, "executeSpecificIdQuery");
|
|
28807
|
+
async function executeAllRecordsQuery(resource, sort, perPage, nextToken, parsedFilters, requestId) {
|
|
28808
|
+
const dbClient2 = getDBClient();
|
|
28809
|
+
const tableName = getTableName();
|
|
28836
28810
|
let exclusiveStartKey;
|
|
28837
28811
|
if (nextToken) {
|
|
28838
28812
|
const decoded = decodeNextToken(nextToken);
|
|
@@ -28841,73 +28815,16 @@ async function handleFind(resource, params, requestId) {
|
|
|
28841
28815
|
SK: decoded.SK
|
|
28842
28816
|
};
|
|
28843
28817
|
}
|
|
28844
|
-
let keyConditionExpression;
|
|
28845
|
-
const expressionAttributeValues = {
|
|
28846
|
-
":pk": resource
|
|
28847
|
-
};
|
|
28848
|
-
if (optimizableFilter) {
|
|
28849
|
-
const { operator, type } = optimizableFilter.parsed;
|
|
28850
|
-
const value = optimizableFilter.value;
|
|
28851
|
-
let encodedValue;
|
|
28852
|
-
if (type === "number") {
|
|
28853
|
-
encodedValue = String(value).padStart(20, "0");
|
|
28854
|
-
} else if (type === "date") {
|
|
28855
|
-
encodedValue = new Date(String(value)).toISOString();
|
|
28856
|
-
} else if (type === "boolean") {
|
|
28857
|
-
encodedValue = String(value);
|
|
28858
|
-
} else {
|
|
28859
|
-
encodedValue = String(value).replace(/#/g, "##").replace(/ /g, "#");
|
|
28860
|
-
}
|
|
28861
|
-
const skValue = `${sort.field}#${encodedValue}`;
|
|
28862
|
-
switch (operator) {
|
|
28863
|
-
case "eq":
|
|
28864
|
-
keyConditionExpression = "PK = :pk AND begins_with(SK, :skValue)";
|
|
28865
|
-
expressionAttributeValues[":skValue"] = `${skValue}#id#`;
|
|
28866
|
-
break;
|
|
28867
|
-
case "gt":
|
|
28868
|
-
keyConditionExpression = "PK = :pk AND SK > :skValue";
|
|
28869
|
-
expressionAttributeValues[":skValue"] = `${skValue}#id#~`;
|
|
28870
|
-
break;
|
|
28871
|
-
case "gte":
|
|
28872
|
-
keyConditionExpression = "PK = :pk AND SK >= :skValue";
|
|
28873
|
-
expressionAttributeValues[":skValue"] = `${skValue}#id#`;
|
|
28874
|
-
break;
|
|
28875
|
-
case "lt":
|
|
28876
|
-
keyConditionExpression = "PK = :pk AND SK < :skValue";
|
|
28877
|
-
expressionAttributeValues[":skValue"] = `${skValue}#id#`;
|
|
28878
|
-
break;
|
|
28879
|
-
case "lte":
|
|
28880
|
-
keyConditionExpression = "PK = :pk AND SK <= :skValue";
|
|
28881
|
-
expressionAttributeValues[":skValue"] = `${skValue}#id#~`;
|
|
28882
|
-
break;
|
|
28883
|
-
case "starts":
|
|
28884
|
-
keyConditionExpression = "PK = :pk AND begins_with(SK, :skValue)";
|
|
28885
|
-
expressionAttributeValues[":skValue"] = `${skValue}`;
|
|
28886
|
-
break;
|
|
28887
|
-
default:
|
|
28888
|
-
keyConditionExpression = "PK = :pk AND begins_with(SK, :skPrefix)";
|
|
28889
|
-
expressionAttributeValues[":skPrefix"] = skPrefix;
|
|
28890
|
-
}
|
|
28891
|
-
logger7.debug("Query optimization applied", {
|
|
28892
|
-
requestId,
|
|
28893
|
-
sortField: sort.field,
|
|
28894
|
-
operator,
|
|
28895
|
-
type,
|
|
28896
|
-
value,
|
|
28897
|
-
skValue
|
|
28898
|
-
});
|
|
28899
|
-
} else {
|
|
28900
|
-
keyConditionExpression = "PK = :pk AND begins_with(SK, :skPrefix)";
|
|
28901
|
-
expressionAttributeValues[":skPrefix"] = skPrefix;
|
|
28902
|
-
}
|
|
28903
28818
|
const queryResult = await executeDynamoDBOperation(
|
|
28904
28819
|
() => dbClient2.send(
|
|
28905
28820
|
new import_lib_dynamodb4.QueryCommand({
|
|
28906
28821
|
TableName: tableName,
|
|
28907
|
-
KeyConditionExpression:
|
|
28908
|
-
ExpressionAttributeValues:
|
|
28822
|
+
KeyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix)",
|
|
28823
|
+
ExpressionAttributeValues: {
|
|
28824
|
+
":pk": resource,
|
|
28825
|
+
":skPrefix": "id#"
|
|
28826
|
+
},
|
|
28909
28827
|
ScanIndexForward: sort.order === "ASC",
|
|
28910
|
-
// ASC: true, DESC: false
|
|
28911
28828
|
Limit: perPage,
|
|
28912
28829
|
ExclusiveStartKey: exclusiveStartKey,
|
|
28913
28830
|
ConsistentRead: true
|
|
@@ -28915,8 +28832,8 @@ async function handleFind(resource, params, requestId) {
|
|
|
28915
28832
|
),
|
|
28916
28833
|
"Query"
|
|
28917
28834
|
);
|
|
28918
|
-
const
|
|
28919
|
-
if (
|
|
28835
|
+
const mainRecords = queryResult.Items || [];
|
|
28836
|
+
if (mainRecords.length === 0) {
|
|
28920
28837
|
return {
|
|
28921
28838
|
items: [],
|
|
28922
28839
|
pageInfo: {
|
|
@@ -28925,29 +28842,67 @@ async function handleFind(resource, params, requestId) {
|
|
|
28925
28842
|
}
|
|
28926
28843
|
};
|
|
28927
28844
|
}
|
|
28928
|
-
|
|
28929
|
-
|
|
28930
|
-
|
|
28931
|
-
|
|
28845
|
+
let items = mainRecords.map((item) => extractCleanRecord(item));
|
|
28846
|
+
if (parsedFilters.length > 0) {
|
|
28847
|
+
items = items.filter((record) => matchesAllFilters(record, parsedFilters));
|
|
28848
|
+
}
|
|
28849
|
+
const hasNextPage = mainRecords.length < perPage ? false : queryResult.LastEvaluatedKey !== void 0;
|
|
28850
|
+
const nextTokenValue = hasNextPage && queryResult.LastEvaluatedKey ? encodeNextToken(
|
|
28851
|
+
queryResult.LastEvaluatedKey.PK,
|
|
28852
|
+
queryResult.LastEvaluatedKey.SK
|
|
28853
|
+
) : void 0;
|
|
28854
|
+
logger8.info("ID all records query succeeded", {
|
|
28855
|
+
requestId,
|
|
28856
|
+
resource,
|
|
28857
|
+
count: items.length,
|
|
28858
|
+
hasNextPage
|
|
28932
28859
|
});
|
|
28933
|
-
|
|
28934
|
-
|
|
28935
|
-
|
|
28936
|
-
|
|
28937
|
-
|
|
28938
|
-
|
|
28939
|
-
|
|
28940
|
-
|
|
28941
|
-
|
|
28942
|
-
|
|
28943
|
-
|
|
28944
|
-
|
|
28945
|
-
|
|
28946
|
-
|
|
28947
|
-
|
|
28948
|
-
|
|
28860
|
+
return {
|
|
28861
|
+
items,
|
|
28862
|
+
pageInfo: {
|
|
28863
|
+
hasNextPage,
|
|
28864
|
+
hasPreviousPage: !!nextToken
|
|
28865
|
+
},
|
|
28866
|
+
...nextTokenValue && { nextToken: nextTokenValue }
|
|
28867
|
+
};
|
|
28868
|
+
}
|
|
28869
|
+
__name(executeAllRecordsQuery, "executeAllRecordsQuery");
|
|
28870
|
+
|
|
28871
|
+
// src/server/operations/find/shadowQuery.ts
|
|
28872
|
+
var import_lib_dynamodb5 = __toESM(require_dist_cjs60(), 1);
|
|
28873
|
+
var logger9 = createLogger({
|
|
28874
|
+
service: "shadow-query",
|
|
28875
|
+
level: process.env.LOG_LEVEL || "info"
|
|
28876
|
+
});
|
|
28877
|
+
async function executeShadowQuery(resource, normalizedParams, requestId) {
|
|
28878
|
+
const { sort, pagination, parsedFilters } = normalizedParams;
|
|
28879
|
+
const { perPage, nextToken } = pagination;
|
|
28880
|
+
logger9.debug("Executing shadow query", {
|
|
28881
|
+
requestId,
|
|
28882
|
+
resource,
|
|
28883
|
+
sortField: sort.field,
|
|
28884
|
+
hasFilters: parsedFilters.length > 0
|
|
28885
|
+
});
|
|
28886
|
+
const optimizableFilter = findOptimizableFilter(sort.field, parsedFilters);
|
|
28887
|
+
const shadowRecords = await executeShadowRecordQuery(
|
|
28888
|
+
resource,
|
|
28889
|
+
sort,
|
|
28890
|
+
perPage,
|
|
28891
|
+
nextToken,
|
|
28892
|
+
optimizableFilter,
|
|
28893
|
+
requestId
|
|
28949
28894
|
);
|
|
28950
|
-
const
|
|
28895
|
+
const recordIds = extractRecordIds(shadowRecords.Items || []);
|
|
28896
|
+
if (recordIds.length === 0) {
|
|
28897
|
+
return {
|
|
28898
|
+
items: [],
|
|
28899
|
+
pageInfo: {
|
|
28900
|
+
hasNextPage: false,
|
|
28901
|
+
hasPreviousPage: false
|
|
28902
|
+
}
|
|
28903
|
+
};
|
|
28904
|
+
}
|
|
28905
|
+
const mainRecords = await fetchMainRecords(resource, recordIds, requestId);
|
|
28951
28906
|
const recordMap = new Map(
|
|
28952
28907
|
mainRecords.map((item) => {
|
|
28953
28908
|
const data2 = item.data;
|
|
@@ -28963,25 +28918,19 @@ async function handleFind(resource, params, requestId) {
|
|
|
28963
28918
|
return true;
|
|
28964
28919
|
}).map((id) => recordMap.get(id)).filter((record) => record !== void 0);
|
|
28965
28920
|
if (parsedFilters.length > 0) {
|
|
28966
|
-
const itemsBeforeFilter = items.length;
|
|
28967
28921
|
items = items.filter((record) => matchesAllFilters(record, parsedFilters));
|
|
28968
|
-
logger7.debug("Memory filtering applied", {
|
|
28969
|
-
requestId,
|
|
28970
|
-
filtersCount: parsedFilters.length,
|
|
28971
|
-
itemsBeforeFilter,
|
|
28972
|
-
itemsAfterFilter: items.length,
|
|
28973
|
-
filtered: itemsBeforeFilter - items.length
|
|
28974
|
-
});
|
|
28975
28922
|
}
|
|
28976
|
-
const hasNextPage =
|
|
28977
|
-
const nextTokenValue = hasNextPage &&
|
|
28978
|
-
|
|
28979
|
-
|
|
28923
|
+
const hasNextPage = (shadowRecords.Items?.length || 0) < perPage ? false : shadowRecords.LastEvaluatedKey !== void 0;
|
|
28924
|
+
const nextTokenValue = hasNextPage && shadowRecords.LastEvaluatedKey ? encodeNextToken(
|
|
28925
|
+
shadowRecords.LastEvaluatedKey.PK,
|
|
28926
|
+
shadowRecords.LastEvaluatedKey.SK
|
|
28980
28927
|
) : void 0;
|
|
28981
|
-
|
|
28928
|
+
logger9.info("Shadow query succeeded", {
|
|
28982
28929
|
requestId,
|
|
28983
28930
|
resource,
|
|
28984
|
-
|
|
28931
|
+
sortField: sort.field,
|
|
28932
|
+
shadowCount: shadowRecords.Items?.length || 0,
|
|
28933
|
+
mainCount: items.length,
|
|
28985
28934
|
hasNextPage
|
|
28986
28935
|
});
|
|
28987
28936
|
return {
|
|
@@ -28993,14 +28942,195 @@ async function handleFind(resource, params, requestId) {
|
|
|
28993
28942
|
...nextTokenValue && { nextToken: nextTokenValue }
|
|
28994
28943
|
};
|
|
28995
28944
|
}
|
|
28945
|
+
__name(executeShadowQuery, "executeShadowQuery");
|
|
28946
|
+
async function executeShadowRecordQuery(resource, sort, perPage, nextToken, optimizableFilter, _requestId) {
|
|
28947
|
+
const dbClient2 = getDBClient();
|
|
28948
|
+
const tableName = getTableName();
|
|
28949
|
+
let exclusiveStartKey;
|
|
28950
|
+
if (nextToken) {
|
|
28951
|
+
const decoded = decodeNextToken(nextToken);
|
|
28952
|
+
exclusiveStartKey = {
|
|
28953
|
+
PK: decoded.PK,
|
|
28954
|
+
SK: decoded.SK
|
|
28955
|
+
};
|
|
28956
|
+
}
|
|
28957
|
+
const { keyConditionExpression, expressionAttributeValues } = buildKeyCondition(
|
|
28958
|
+
resource,
|
|
28959
|
+
sort.field,
|
|
28960
|
+
optimizableFilter
|
|
28961
|
+
);
|
|
28962
|
+
return await executeDynamoDBOperation(
|
|
28963
|
+
() => dbClient2.send(
|
|
28964
|
+
new import_lib_dynamodb5.QueryCommand({
|
|
28965
|
+
TableName: tableName,
|
|
28966
|
+
KeyConditionExpression: keyConditionExpression,
|
|
28967
|
+
ExpressionAttributeValues: expressionAttributeValues,
|
|
28968
|
+
ScanIndexForward: sort.order === "ASC",
|
|
28969
|
+
Limit: perPage,
|
|
28970
|
+
ExclusiveStartKey: exclusiveStartKey,
|
|
28971
|
+
ConsistentRead: true
|
|
28972
|
+
})
|
|
28973
|
+
),
|
|
28974
|
+
"Query"
|
|
28975
|
+
);
|
|
28976
|
+
}
|
|
28977
|
+
__name(executeShadowRecordQuery, "executeShadowRecordQuery");
|
|
28978
|
+
function buildKeyCondition(resource, sortField, optimizableFilter) {
|
|
28979
|
+
const expressionAttributeValues = {
|
|
28980
|
+
":pk": resource
|
|
28981
|
+
};
|
|
28982
|
+
if (!optimizableFilter) {
|
|
28983
|
+
return {
|
|
28984
|
+
keyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix)",
|
|
28985
|
+
expressionAttributeValues: {
|
|
28986
|
+
...expressionAttributeValues,
|
|
28987
|
+
":skPrefix": `${sortField}#`
|
|
28988
|
+
}
|
|
28989
|
+
};
|
|
28990
|
+
}
|
|
28991
|
+
const { operator, type } = optimizableFilter.parsed;
|
|
28992
|
+
const value = optimizableFilter.value;
|
|
28993
|
+
const encodedValue = encodeValueForShadowSK(value, type);
|
|
28994
|
+
const skValue = `${sortField}#${encodedValue}`;
|
|
28995
|
+
switch (operator) {
|
|
28996
|
+
case "eq":
|
|
28997
|
+
return {
|
|
28998
|
+
keyConditionExpression: "PK = :pk AND begins_with(SK, :skValue)",
|
|
28999
|
+
expressionAttributeValues: {
|
|
29000
|
+
...expressionAttributeValues,
|
|
29001
|
+
":skValue": `${skValue}#id#`
|
|
29002
|
+
}
|
|
29003
|
+
};
|
|
29004
|
+
case "gt":
|
|
29005
|
+
return {
|
|
29006
|
+
keyConditionExpression: "PK = :pk AND SK > :skValue",
|
|
29007
|
+
expressionAttributeValues: {
|
|
29008
|
+
...expressionAttributeValues,
|
|
29009
|
+
":skValue": `${skValue}#id#~`
|
|
29010
|
+
}
|
|
29011
|
+
};
|
|
29012
|
+
case "gte":
|
|
29013
|
+
return {
|
|
29014
|
+
keyConditionExpression: "PK = :pk AND SK >= :skValue",
|
|
29015
|
+
expressionAttributeValues: {
|
|
29016
|
+
...expressionAttributeValues,
|
|
29017
|
+
":skValue": `${skValue}#id#`
|
|
29018
|
+
}
|
|
29019
|
+
};
|
|
29020
|
+
case "lt":
|
|
29021
|
+
return {
|
|
29022
|
+
keyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix) AND SK < :skValue",
|
|
29023
|
+
expressionAttributeValues: {
|
|
29024
|
+
...expressionAttributeValues,
|
|
29025
|
+
":skPrefix": `${sortField}#`,
|
|
29026
|
+
":skValue": `${skValue}#id#`
|
|
29027
|
+
}
|
|
29028
|
+
};
|
|
29029
|
+
case "lte":
|
|
29030
|
+
return {
|
|
29031
|
+
keyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix) AND SK <= :skValue",
|
|
29032
|
+
expressionAttributeValues: {
|
|
29033
|
+
...expressionAttributeValues,
|
|
29034
|
+
":skPrefix": `${sortField}#`,
|
|
29035
|
+
":skValue": `${skValue}#id#~`
|
|
29036
|
+
}
|
|
29037
|
+
};
|
|
29038
|
+
default:
|
|
29039
|
+
return {
|
|
29040
|
+
keyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix)",
|
|
29041
|
+
expressionAttributeValues: {
|
|
29042
|
+
...expressionAttributeValues,
|
|
29043
|
+
":skPrefix": `${sortField}#`
|
|
29044
|
+
}
|
|
29045
|
+
};
|
|
29046
|
+
}
|
|
29047
|
+
}
|
|
29048
|
+
__name(buildKeyCondition, "buildKeyCondition");
|
|
29049
|
+
function encodeValueForShadowSK(value, type) {
|
|
29050
|
+
if (type === "number") {
|
|
29051
|
+
return String(value).padStart(20, "0");
|
|
29052
|
+
} else if (type === "date") {
|
|
29053
|
+
return new Date(String(value)).toISOString();
|
|
29054
|
+
} else if (type === "boolean") {
|
|
29055
|
+
return String(value);
|
|
29056
|
+
} else {
|
|
29057
|
+
return String(value).replace(/#/g, "##").replace(/ /g, "#");
|
|
29058
|
+
}
|
|
29059
|
+
}
|
|
29060
|
+
__name(encodeValueForShadowSK, "encodeValueForShadowSK");
|
|
29061
|
+
function extractRecordIds(shadowRecords) {
|
|
29062
|
+
return shadowRecords.map((record) => {
|
|
29063
|
+
const sk = record.SK;
|
|
29064
|
+
const parts = sk.split("#id#");
|
|
29065
|
+
return parts.length > 1 ? parts[1] : null;
|
|
29066
|
+
}).filter((id) => id !== null);
|
|
29067
|
+
}
|
|
29068
|
+
__name(extractRecordIds, "extractRecordIds");
|
|
29069
|
+
async function fetchMainRecords(resource, recordIds, requestId) {
|
|
29070
|
+
const dbClient2 = getDBClient();
|
|
29071
|
+
const tableName = getTableName();
|
|
29072
|
+
const uniqueRecordIds = Array.from(new Set(recordIds));
|
|
29073
|
+
const batchGetResult = await executeDynamoDBOperation(
|
|
29074
|
+
() => dbClient2.send(
|
|
29075
|
+
new import_lib_dynamodb5.BatchGetCommand({
|
|
29076
|
+
RequestItems: {
|
|
29077
|
+
[tableName]: {
|
|
29078
|
+
Keys: uniqueRecordIds.map((id) => ({
|
|
29079
|
+
PK: resource,
|
|
29080
|
+
SK: `id#${id}`
|
|
29081
|
+
})),
|
|
29082
|
+
ConsistentRead: true
|
|
29083
|
+
}
|
|
29084
|
+
}
|
|
29085
|
+
})
|
|
29086
|
+
),
|
|
29087
|
+
"BatchGetItem"
|
|
29088
|
+
);
|
|
29089
|
+
const mainRecords = batchGetResult.Responses?.[tableName] || [];
|
|
29090
|
+
logger9.debug("Main records fetched", {
|
|
29091
|
+
requestId,
|
|
29092
|
+
resource,
|
|
29093
|
+
requestedCount: uniqueRecordIds.length,
|
|
29094
|
+
fetchedCount: mainRecords.length
|
|
29095
|
+
});
|
|
29096
|
+
return mainRecords;
|
|
29097
|
+
}
|
|
29098
|
+
__name(fetchMainRecords, "fetchMainRecords");
|
|
29099
|
+
|
|
29100
|
+
// src/server/operations/find/handler.ts
|
|
29101
|
+
var logger10 = createLogger({
|
|
29102
|
+
service: "find-handler",
|
|
29103
|
+
level: process.env.LOG_LEVEL || "info"
|
|
29104
|
+
});
|
|
29105
|
+
async function handleFind(resource, params, requestId) {
|
|
29106
|
+
logger10.debug("Executing find", {
|
|
29107
|
+
requestId,
|
|
29108
|
+
resource,
|
|
29109
|
+
params
|
|
29110
|
+
});
|
|
29111
|
+
const config = initializeFindConfig();
|
|
29112
|
+
const normalizedParams = normalizeFindParams(config, resource, params);
|
|
29113
|
+
validateSortField(config, resource, normalizedParams.sort);
|
|
29114
|
+
logger10.debug("Find parameters normalized", {
|
|
29115
|
+
requestId,
|
|
29116
|
+
resource,
|
|
29117
|
+
sort: normalizedParams.sort,
|
|
29118
|
+
pagination: normalizedParams.pagination,
|
|
29119
|
+
filterCount: normalizedParams.parsedFilters.length
|
|
29120
|
+
});
|
|
29121
|
+
if (normalizedParams.sort.field === "id") {
|
|
29122
|
+
return executeIdQuery(resource, normalizedParams, requestId);
|
|
29123
|
+
}
|
|
29124
|
+
return executeShadowQuery(resource, normalizedParams, requestId);
|
|
29125
|
+
}
|
|
28996
29126
|
__name(handleFind, "handleFind");
|
|
28997
29127
|
|
|
28998
29128
|
// src/server/operations/findMany.ts
|
|
28999
|
-
var
|
|
29000
|
-
var
|
|
29129
|
+
var import_lib_dynamodb6 = __toESM(require_dist_cjs60(), 1);
|
|
29130
|
+
var logger11 = createLogger({ service: "records-lambda" });
|
|
29001
29131
|
async function handleFindMany(resource, params, requestId) {
|
|
29002
29132
|
const { ids } = params;
|
|
29003
|
-
|
|
29133
|
+
logger11.debug("Executing findMany", {
|
|
29004
29134
|
requestId,
|
|
29005
29135
|
resource,
|
|
29006
29136
|
count: ids.length
|
|
@@ -29012,11 +29142,11 @@ async function handleFindMany(resource, params, requestId) {
|
|
|
29012
29142
|
const tableName = getTableName();
|
|
29013
29143
|
const keys = ids.map((id) => ({
|
|
29014
29144
|
PK: resource,
|
|
29015
|
-
SK:
|
|
29145
|
+
SK: generateMainRecordSK2(id)
|
|
29016
29146
|
}));
|
|
29017
29147
|
const result = await executeDynamoDBOperation(
|
|
29018
29148
|
() => dbClient2.send(
|
|
29019
|
-
new
|
|
29149
|
+
new import_lib_dynamodb6.BatchGetCommand({
|
|
29020
29150
|
RequestItems: {
|
|
29021
29151
|
[tableName]: {
|
|
29022
29152
|
Keys: keys,
|
|
@@ -29029,7 +29159,7 @@ async function handleFindMany(resource, params, requestId) {
|
|
|
29029
29159
|
);
|
|
29030
29160
|
const items = result.Responses?.[tableName] || [];
|
|
29031
29161
|
const records = items.map((item) => extractCleanRecord(item));
|
|
29032
|
-
|
|
29162
|
+
logger11.info("findMany succeeded", {
|
|
29033
29163
|
requestId,
|
|
29034
29164
|
resource,
|
|
29035
29165
|
requested: ids.length,
|
|
@@ -29040,11 +29170,11 @@ async function handleFindMany(resource, params, requestId) {
|
|
|
29040
29170
|
__name(handleFindMany, "handleFindMany");
|
|
29041
29171
|
|
|
29042
29172
|
// src/server/operations/findManyReference.ts
|
|
29043
|
-
var
|
|
29044
|
-
var
|
|
29173
|
+
var import_lib_dynamodb7 = __toESM(require_dist_cjs60(), 1);
|
|
29174
|
+
var logger12 = createLogger({ service: "records-lambda" });
|
|
29045
29175
|
async function handleFindManyReference(resource, params, requestId) {
|
|
29046
29176
|
const { target, id, filter, sort: sortParam, pagination } = params;
|
|
29047
|
-
|
|
29177
|
+
logger12.debug("Executing findManyReference", {
|
|
29048
29178
|
requestId,
|
|
29049
29179
|
resource,
|
|
29050
29180
|
target,
|
|
@@ -29067,7 +29197,7 @@ async function handleFindManyReference(resource, params, requestId) {
|
|
|
29067
29197
|
}
|
|
29068
29198
|
const queryResult = await executeDynamoDBOperation(
|
|
29069
29199
|
() => dbClient2.send(
|
|
29070
|
-
new
|
|
29200
|
+
new import_lib_dynamodb7.QueryCommand({
|
|
29071
29201
|
TableName: tableName,
|
|
29072
29202
|
KeyConditionExpression: "PK = :pk AND begins_with(SK, :skPrefix)",
|
|
29073
29203
|
ExpressionAttributeValues: {
|
|
@@ -29099,7 +29229,7 @@ async function handleFindManyReference(resource, params, requestId) {
|
|
|
29099
29229
|
});
|
|
29100
29230
|
const batchGetResult = await executeDynamoDBOperation(
|
|
29101
29231
|
() => dbClient2.send(
|
|
29102
|
-
new
|
|
29232
|
+
new import_lib_dynamodb7.BatchGetCommand({
|
|
29103
29233
|
RequestItems: {
|
|
29104
29234
|
[tableName]: {
|
|
29105
29235
|
Keys: recordIds.map((recordId) => ({
|
|
@@ -29134,7 +29264,7 @@ async function handleFindManyReference(resource, params, requestId) {
|
|
|
29134
29264
|
queryResult.LastEvaluatedKey.PK,
|
|
29135
29265
|
queryResult.LastEvaluatedKey.SK
|
|
29136
29266
|
) : void 0;
|
|
29137
|
-
|
|
29267
|
+
logger12.info("findManyReference succeeded", {
|
|
29138
29268
|
requestId,
|
|
29139
29269
|
resource,
|
|
29140
29270
|
target,
|
|
@@ -29154,21 +29284,21 @@ async function handleFindManyReference(resource, params, requestId) {
|
|
|
29154
29284
|
__name(handleFindManyReference, "handleFindManyReference");
|
|
29155
29285
|
|
|
29156
29286
|
// src/server/operations/findOne.ts
|
|
29157
|
-
var
|
|
29158
|
-
var
|
|
29287
|
+
var import_lib_dynamodb8 = __toESM(require_dist_cjs60(), 1);
|
|
29288
|
+
var logger13 = createLogger({ service: "records-lambda" });
|
|
29159
29289
|
async function handleFindOne(resource, params, requestId) {
|
|
29160
29290
|
const { id } = params;
|
|
29161
|
-
|
|
29291
|
+
logger13.debug("Executing findOne", {
|
|
29162
29292
|
requestId,
|
|
29163
29293
|
resource,
|
|
29164
29294
|
id
|
|
29165
29295
|
});
|
|
29166
29296
|
const dbClient2 = getDBClient();
|
|
29167
29297
|
const tableName = getTableName();
|
|
29168
|
-
const sk =
|
|
29298
|
+
const sk = generateMainRecordSK2(id);
|
|
29169
29299
|
const result = await executeDynamoDBOperation(
|
|
29170
29300
|
() => dbClient2.send(
|
|
29171
|
-
new
|
|
29301
|
+
new import_lib_dynamodb8.GetCommand({
|
|
29172
29302
|
TableName: tableName,
|
|
29173
29303
|
Key: {
|
|
29174
29304
|
PK: resource,
|
|
@@ -29183,7 +29313,7 @@ async function handleFindOne(resource, params, requestId) {
|
|
|
29183
29313
|
throw new ItemNotFoundError(`Record not found: ${id}`, { resource, id });
|
|
29184
29314
|
}
|
|
29185
29315
|
const record = extractCleanRecord(result.Item);
|
|
29186
|
-
|
|
29316
|
+
logger13.info("findOne succeeded", {
|
|
29187
29317
|
requestId,
|
|
29188
29318
|
resource,
|
|
29189
29319
|
id
|
|
@@ -29193,7 +29323,7 @@ async function handleFindOne(resource, params, requestId) {
|
|
|
29193
29323
|
__name(handleFindOne, "handleFindOne");
|
|
29194
29324
|
|
|
29195
29325
|
// src/server/operations/insertMany.ts
|
|
29196
|
-
var
|
|
29326
|
+
var import_lib_dynamodb9 = __toESM(require_dist_cjs60(), 1);
|
|
29197
29327
|
|
|
29198
29328
|
// src/server/utils/timestamps.ts
|
|
29199
29329
|
function getTimestampFields() {
|
|
@@ -29231,7 +29361,7 @@ function addUpdateTimestamp(data2) {
|
|
|
29231
29361
|
__name(addUpdateTimestamp, "addUpdateTimestamp");
|
|
29232
29362
|
|
|
29233
29363
|
// src/server/utils/ttl.ts
|
|
29234
|
-
var
|
|
29364
|
+
var logger14 = createLogger({ service: "records-lambda" });
|
|
29235
29365
|
function calculateTTL(resource, createdAt) {
|
|
29236
29366
|
const envKey = `${resource.toUpperCase()}_TTL_DAYS`;
|
|
29237
29367
|
const ttlDaysStr = process.env[envKey];
|
|
@@ -29240,13 +29370,13 @@ function calculateTTL(resource, createdAt) {
|
|
|
29240
29370
|
}
|
|
29241
29371
|
const ttlDays = parseInt(ttlDaysStr, 10);
|
|
29242
29372
|
if (isNaN(ttlDays) || ttlDays <= 0) {
|
|
29243
|
-
|
|
29373
|
+
logger14.warn("Invalid TTL_DAYS value", { resource, envKey, value: ttlDaysStr });
|
|
29244
29374
|
return void 0;
|
|
29245
29375
|
}
|
|
29246
29376
|
const createdAtMs = new Date(createdAt).getTime();
|
|
29247
29377
|
const ttlMs = createdAtMs + ttlDays * 24 * 60 * 60 * 1e3;
|
|
29248
29378
|
const ttl = Math.floor(ttlMs / 1e3);
|
|
29249
|
-
|
|
29379
|
+
logger14.debug("TTL calculated", {
|
|
29250
29380
|
resource,
|
|
29251
29381
|
ttlDays,
|
|
29252
29382
|
createdAt,
|
|
@@ -29259,7 +29389,7 @@ __name(calculateTTL, "calculateTTL");
|
|
|
29259
29389
|
function addTTL(resource, recordData) {
|
|
29260
29390
|
const createdAt = recordData.createdAt;
|
|
29261
29391
|
if (!createdAt) {
|
|
29262
|
-
|
|
29392
|
+
logger14.warn("createdAt not found, skipping TTL calculation", { resource });
|
|
29263
29393
|
return recordData;
|
|
29264
29394
|
}
|
|
29265
29395
|
const ttl = calculateTTL(resource, createdAt);
|
|
@@ -29274,11 +29404,11 @@ function addTTL(resource, recordData) {
|
|
|
29274
29404
|
__name(addTTL, "addTTL");
|
|
29275
29405
|
|
|
29276
29406
|
// src/server/operations/insertMany.ts
|
|
29277
|
-
var
|
|
29407
|
+
var logger15 = createLogger({ service: "records-lambda" });
|
|
29278
29408
|
async function handleInsertMany(resource, params, requestId) {
|
|
29279
29409
|
const { data: recordsData } = params;
|
|
29280
29410
|
const startTime = Date.now();
|
|
29281
|
-
|
|
29411
|
+
logger15.debug("Executing insertMany", {
|
|
29282
29412
|
requestId,
|
|
29283
29413
|
resource,
|
|
29284
29414
|
count: recordsData.length
|
|
@@ -29309,7 +29439,7 @@ async function handleInsertMany(resource, params, requestId) {
|
|
|
29309
29439
|
fullRecordData = addTTL(resource, fullRecordData);
|
|
29310
29440
|
const shadowRecords = generateShadowRecords(fullRecordData, resource, shadowConfig);
|
|
29311
29441
|
const shadowKeys = shadowRecords.map((shadow) => shadow.SK);
|
|
29312
|
-
const mainSK =
|
|
29442
|
+
const mainSK = generateMainRecordSK2(id);
|
|
29313
29443
|
preparedRecords.push({
|
|
29314
29444
|
id,
|
|
29315
29445
|
fullRecordData,
|
|
@@ -29320,7 +29450,7 @@ async function handleInsertMany(resource, params, requestId) {
|
|
|
29320
29450
|
const failedId = recordData.id || `temp-id-${i4}`;
|
|
29321
29451
|
const errorMessage = error2 instanceof Error ? error2.message : "Unknown preparation error";
|
|
29322
29452
|
const errorCode = getPreparationErrorCode(error2);
|
|
29323
|
-
|
|
29453
|
+
logger15.error("Failed to prepare record for creation", {
|
|
29324
29454
|
requestId,
|
|
29325
29455
|
recordId: failedId,
|
|
29326
29456
|
error: errorMessage,
|
|
@@ -29378,7 +29508,7 @@ async function handleInsertMany(resource, params, requestId) {
|
|
|
29378
29508
|
}
|
|
29379
29509
|
await executeDynamoDBOperation(
|
|
29380
29510
|
() => dbClient2.send(
|
|
29381
|
-
new
|
|
29511
|
+
new import_lib_dynamodb9.TransactWriteCommand({
|
|
29382
29512
|
TransactItems: transactItems
|
|
29383
29513
|
})
|
|
29384
29514
|
),
|
|
@@ -29480,10 +29610,10 @@ function getPreparationErrorCode(error2) {
|
|
|
29480
29610
|
__name(getPreparationErrorCode, "getPreparationErrorCode");
|
|
29481
29611
|
|
|
29482
29612
|
// src/server/operations/insertOne.ts
|
|
29483
|
-
var
|
|
29484
|
-
var
|
|
29613
|
+
var import_lib_dynamodb10 = __toESM(require_dist_cjs60(), 1);
|
|
29614
|
+
var logger16 = createLogger({ service: "records-lambda" });
|
|
29485
29615
|
async function handleInsertOne(resource, params, requestId) {
|
|
29486
|
-
|
|
29616
|
+
logger16.debug("Executing insertOne", {
|
|
29487
29617
|
requestId,
|
|
29488
29618
|
resource
|
|
29489
29619
|
});
|
|
@@ -29497,10 +29627,10 @@ async function handleInsertOne(resource, params, requestId) {
|
|
|
29497
29627
|
recordData = addTTL(resource, recordData);
|
|
29498
29628
|
const shadowConfig = getShadowConfig();
|
|
29499
29629
|
const shadowRecords = generateShadowRecords(recordData, resource, shadowConfig);
|
|
29500
|
-
const mainSK =
|
|
29630
|
+
const mainSK = generateMainRecordSK2(id);
|
|
29501
29631
|
await executeDynamoDBOperation(
|
|
29502
29632
|
() => dbClient2.send(
|
|
29503
|
-
new
|
|
29633
|
+
new import_lib_dynamodb10.PutCommand({
|
|
29504
29634
|
TableName: tableName,
|
|
29505
29635
|
Item: {
|
|
29506
29636
|
PK: resource,
|
|
@@ -29514,7 +29644,7 @@ async function handleInsertOne(resource, params, requestId) {
|
|
|
29514
29644
|
for (const shadowRecord of shadowRecords) {
|
|
29515
29645
|
await executeDynamoDBOperation(
|
|
29516
29646
|
() => dbClient2.send(
|
|
29517
|
-
new
|
|
29647
|
+
new import_lib_dynamodb10.PutCommand({
|
|
29518
29648
|
TableName: tableName,
|
|
29519
29649
|
Item: shadowRecord
|
|
29520
29650
|
})
|
|
@@ -29522,7 +29652,7 @@ async function handleInsertOne(resource, params, requestId) {
|
|
|
29522
29652
|
"PutItem"
|
|
29523
29653
|
);
|
|
29524
29654
|
}
|
|
29525
|
-
|
|
29655
|
+
logger16.info("insertOne succeeded", {
|
|
29526
29656
|
requestId,
|
|
29527
29657
|
resource,
|
|
29528
29658
|
id,
|
|
@@ -29533,8 +29663,8 @@ async function handleInsertOne(resource, params, requestId) {
|
|
|
29533
29663
|
__name(handleInsertOne, "handleInsertOne");
|
|
29534
29664
|
|
|
29535
29665
|
// src/server/operations/updateMany.ts
|
|
29536
|
-
var
|
|
29537
|
-
var
|
|
29666
|
+
var import_lib_dynamodb11 = __toESM(require_dist_cjs60(), 1);
|
|
29667
|
+
var logger17 = createLogger({ service: "records-lambda" });
|
|
29538
29668
|
function applyJsonMergePatch(target, patch) {
|
|
29539
29669
|
const result = { ...target };
|
|
29540
29670
|
for (const [key, value] of Object.entries(patch)) {
|
|
@@ -29555,7 +29685,7 @@ __name(applyJsonMergePatch, "applyJsonMergePatch");
|
|
|
29555
29685
|
async function handleUpdateMany(resource, params, requestId) {
|
|
29556
29686
|
const { ids, data: patchData } = params;
|
|
29557
29687
|
const startTime = Date.now();
|
|
29558
|
-
|
|
29688
|
+
logger17.debug("Executing updateMany", {
|
|
29559
29689
|
requestId,
|
|
29560
29690
|
resource,
|
|
29561
29691
|
count: ids.length
|
|
@@ -29573,11 +29703,11 @@ async function handleUpdateMany(resource, params, requestId) {
|
|
|
29573
29703
|
const tableName = getTableName();
|
|
29574
29704
|
const keys = ids.map((id) => ({
|
|
29575
29705
|
PK: resource,
|
|
29576
|
-
SK:
|
|
29706
|
+
SK: generateMainRecordSK2(id)
|
|
29577
29707
|
}));
|
|
29578
29708
|
const batchGetResult = await executeDynamoDBOperation(
|
|
29579
29709
|
() => dbClient2.send(
|
|
29580
|
-
new
|
|
29710
|
+
new import_lib_dynamodb11.BatchGetCommand({
|
|
29581
29711
|
RequestItems: {
|
|
29582
29712
|
[tableName]: {
|
|
29583
29713
|
Keys: keys,
|
|
@@ -29612,7 +29742,7 @@ async function handleUpdateMany(resource, params, requestId) {
|
|
|
29612
29742
|
});
|
|
29613
29743
|
const newShadowRecords = generateShadowRecords(updatedData, resource, shadowConfig);
|
|
29614
29744
|
const newShadowKeys = newShadowRecords.map((shadow) => shadow.SK);
|
|
29615
|
-
const mainSK =
|
|
29745
|
+
const mainSK = generateMainRecordSK2(id);
|
|
29616
29746
|
preparedRecords.push({
|
|
29617
29747
|
id,
|
|
29618
29748
|
updatedData,
|
|
@@ -29625,7 +29755,7 @@ async function handleUpdateMany(resource, params, requestId) {
|
|
|
29625
29755
|
const failedId = existingData.id || "unknown-id";
|
|
29626
29756
|
const errorMessage = error2 instanceof Error ? error2.message : "Unknown preparation error";
|
|
29627
29757
|
const errorCode = getPreparationErrorCode2(error2);
|
|
29628
|
-
|
|
29758
|
+
logger17.error("Failed to prepare record for update", {
|
|
29629
29759
|
requestId,
|
|
29630
29760
|
recordId: failedId,
|
|
29631
29761
|
error: errorMessage,
|
|
@@ -29695,7 +29825,7 @@ async function handleUpdateMany(resource, params, requestId) {
|
|
|
29695
29825
|
}
|
|
29696
29826
|
await executeDynamoDBOperation(
|
|
29697
29827
|
() => dbClient2.send(
|
|
29698
|
-
new
|
|
29828
|
+
new import_lib_dynamodb11.TransactWriteCommand({
|
|
29699
29829
|
TransactItems: transactItems
|
|
29700
29830
|
})
|
|
29701
29831
|
),
|
|
@@ -29809,8 +29939,8 @@ function getPreparationErrorCode2(error2) {
|
|
|
29809
29939
|
__name(getPreparationErrorCode2, "getPreparationErrorCode");
|
|
29810
29940
|
|
|
29811
29941
|
// src/server/operations/updateOne.ts
|
|
29812
|
-
var
|
|
29813
|
-
var
|
|
29942
|
+
var import_lib_dynamodb12 = __toESM(require_dist_cjs60(), 1);
|
|
29943
|
+
var logger18 = createLogger({ service: "records-lambda" });
|
|
29814
29944
|
function applyJsonMergePatch2(target, patch) {
|
|
29815
29945
|
const result = { ...target };
|
|
29816
29946
|
for (const [key, value] of Object.entries(patch)) {
|
|
@@ -29830,17 +29960,17 @@ function applyJsonMergePatch2(target, patch) {
|
|
|
29830
29960
|
__name(applyJsonMergePatch2, "applyJsonMergePatch");
|
|
29831
29961
|
async function handleUpdateOne(resource, params, requestId) {
|
|
29832
29962
|
const { id, data: patchData } = params;
|
|
29833
|
-
|
|
29963
|
+
logger18.debug("Executing updateOne", {
|
|
29834
29964
|
requestId,
|
|
29835
29965
|
resource,
|
|
29836
29966
|
id
|
|
29837
29967
|
});
|
|
29838
29968
|
const dbClient2 = getDBClient();
|
|
29839
29969
|
const tableName = getTableName();
|
|
29840
|
-
const mainSK =
|
|
29970
|
+
const mainSK = generateMainRecordSK2(id);
|
|
29841
29971
|
const getResult = await executeDynamoDBOperation(
|
|
29842
29972
|
() => dbClient2.send(
|
|
29843
|
-
new
|
|
29973
|
+
new import_lib_dynamodb12.GetCommand({
|
|
29844
29974
|
TableName: tableName,
|
|
29845
29975
|
Key: {
|
|
29846
29976
|
PK: resource,
|
|
@@ -29903,13 +30033,13 @@ async function handleUpdateOne(resource, params, requestId) {
|
|
|
29903
30033
|
}
|
|
29904
30034
|
await executeDynamoDBOperation(
|
|
29905
30035
|
() => dbClient2.send(
|
|
29906
|
-
new
|
|
30036
|
+
new import_lib_dynamodb12.TransactWriteCommand({
|
|
29907
30037
|
TransactItems: transactItems
|
|
29908
30038
|
})
|
|
29909
30039
|
),
|
|
29910
30040
|
"TransactWriteItems"
|
|
29911
30041
|
);
|
|
29912
|
-
|
|
30042
|
+
logger18.info("updateOne succeeded", {
|
|
29913
30043
|
requestId,
|
|
29914
30044
|
resource,
|
|
29915
30045
|
id,
|
|
@@ -31086,11 +31216,11 @@ var CognitoJwtVerifier = class _CognitoJwtVerifier extends JwtVerifierBase {
|
|
|
31086
31216
|
CognitoJwtVerifier.USER_POOL_ID_REGEX = /^(?<region>[a-z]{2}-(gov-)?[a-z]+-\d)_[a-zA-Z0-9]+$/;
|
|
31087
31217
|
|
|
31088
31218
|
// src/server/utils/auth.ts
|
|
31089
|
-
var
|
|
31219
|
+
var logger19 = createLogger({ service: "records-lambda" });
|
|
31090
31220
|
var verifierInstance = null;
|
|
31091
31221
|
function getVerifier(userPoolId, clientId) {
|
|
31092
31222
|
if (!verifierInstance) {
|
|
31093
|
-
|
|
31223
|
+
logger19.debug("Creating JWT verifier instance", { userPoolId, clientId });
|
|
31094
31224
|
verifierInstance = CognitoJwtVerifier.create({
|
|
31095
31225
|
userPoolId,
|
|
31096
31226
|
tokenUse: "id",
|
|
@@ -31103,18 +31233,18 @@ function getVerifier(userPoolId, clientId) {
|
|
|
31103
31233
|
}
|
|
31104
31234
|
__name(getVerifier, "getVerifier");
|
|
31105
31235
|
async function verifyJwt(token, userPoolId, clientId) {
|
|
31106
|
-
|
|
31236
|
+
logger19.debug("Verifying JWT token with signature validation");
|
|
31107
31237
|
try {
|
|
31108
31238
|
const verifier = getVerifier(userPoolId, clientId);
|
|
31109
31239
|
const payload2 = await verifier.verify(token);
|
|
31110
|
-
|
|
31240
|
+
logger19.debug("JWT token verified successfully", {
|
|
31111
31241
|
sub: payload2.sub,
|
|
31112
31242
|
email: payload2.email,
|
|
31113
31243
|
tokenUse: payload2.token_use
|
|
31114
31244
|
});
|
|
31115
31245
|
return payload2;
|
|
31116
31246
|
} catch (error2) {
|
|
31117
|
-
|
|
31247
|
+
logger19.error("JWT verification failed", {
|
|
31118
31248
|
error: error2 instanceof Error ? error2.message : String(error2)
|
|
31119
31249
|
});
|
|
31120
31250
|
let message = "JWT verification failed";
|
|
@@ -31155,15 +31285,15 @@ async function verifyAuthHeader(authHeader, userPoolId, clientId) {
|
|
|
31155
31285
|
__name(verifyAuthHeader, "verifyAuthHeader");
|
|
31156
31286
|
|
|
31157
31287
|
// src/server/handler.ts
|
|
31158
|
-
var
|
|
31288
|
+
var logger20 = createLogger({
|
|
31159
31289
|
service: "records-lambda",
|
|
31160
31290
|
level: process.env.LOG_LEVEL || "info"
|
|
31161
31291
|
});
|
|
31162
|
-
|
|
31292
|
+
logger20.info("Records Lambda started with automatic shadow field detection");
|
|
31163
31293
|
var CORS_HEADERS = {};
|
|
31164
31294
|
async function handler(event) {
|
|
31165
31295
|
const requestId = event.requestContext.requestId;
|
|
31166
|
-
|
|
31296
|
+
logger20.info("Received request", {
|
|
31167
31297
|
requestId,
|
|
31168
31298
|
method: event.requestContext.http.method,
|
|
31169
31299
|
path: event.requestContext.http.path
|
|
@@ -31184,7 +31314,7 @@ async function handler(event) {
|
|
|
31184
31314
|
const hasAmzDate = event.headers["x-amz-date"] || event.headers["X-Amz-Date"];
|
|
31185
31315
|
const hasAmzContentSha = event.headers["x-amz-content-sha256"] || event.headers["X-Amz-Content-Sha256"];
|
|
31186
31316
|
const hasAwsSigV4Auth = authHeader?.startsWith("AWS4-HMAC-SHA256");
|
|
31187
|
-
|
|
31317
|
+
logger20.debug("Authentication check", {
|
|
31188
31318
|
requestId,
|
|
31189
31319
|
hasAuthHeader: !!authHeader,
|
|
31190
31320
|
hasAmzDate: !!hasAmzDate,
|
|
@@ -31194,7 +31324,7 @@ async function handler(event) {
|
|
|
31194
31324
|
});
|
|
31195
31325
|
const isIAMAuth = hasAwsSigV4Auth || !!(hasAmzDate && hasAmzContentSha);
|
|
31196
31326
|
if (isIAMAuth) {
|
|
31197
|
-
|
|
31327
|
+
logger20.info("IAM authenticated request", {
|
|
31198
31328
|
requestId,
|
|
31199
31329
|
sourceIp: event.requestContext.http.sourceIp
|
|
31200
31330
|
});
|
|
@@ -31205,14 +31335,14 @@ async function handler(event) {
|
|
|
31205
31335
|
throw new Error("COGNITO_USER_POOL_ID environment variable is required");
|
|
31206
31336
|
}
|
|
31207
31337
|
const jwtPayload = await verifyAuthHeader(authHeader, userPoolId, clientId);
|
|
31208
|
-
|
|
31338
|
+
logger20.debug("Cognito JWT verified", {
|
|
31209
31339
|
requestId,
|
|
31210
31340
|
sub: jwtPayload.sub,
|
|
31211
31341
|
email: jwtPayload.email
|
|
31212
31342
|
});
|
|
31213
31343
|
}
|
|
31214
31344
|
const request2 = parseRequestBody(event.body);
|
|
31215
|
-
|
|
31345
|
+
logger20.info("Parsed request", {
|
|
31216
31346
|
requestId,
|
|
31217
31347
|
operation: request2.op,
|
|
31218
31348
|
resource: request2.resource
|
|
@@ -31255,7 +31385,7 @@ function parseRequestBody(body) {
|
|
|
31255
31385
|
__name(parseRequestBody, "parseRequestBody");
|
|
31256
31386
|
async function executeOperation(request2, requestId) {
|
|
31257
31387
|
const { op: op2, resource } = request2;
|
|
31258
|
-
|
|
31388
|
+
logger20.debug("Executing operation", {
|
|
31259
31389
|
requestId,
|
|
31260
31390
|
operation: op2,
|
|
31261
31391
|
resource
|
|
@@ -31265,7 +31395,7 @@ async function executeOperation(request2, requestId) {
|
|
|
31265
31395
|
const mongoParams = request2.params;
|
|
31266
31396
|
const { filter = {}, options = {} } = mongoParams;
|
|
31267
31397
|
const { sort, limit, nextToken } = options;
|
|
31268
|
-
|
|
31398
|
+
logger20.debug("Processing find operation", {
|
|
31269
31399
|
requestId,
|
|
31270
31400
|
hasSort: !!sort,
|
|
31271
31401
|
sortType: typeof sort,
|
|
@@ -31383,7 +31513,7 @@ function createSuccessResponse(data2, requestId) {
|
|
|
31383
31513
|
success: true,
|
|
31384
31514
|
data: data2
|
|
31385
31515
|
};
|
|
31386
|
-
|
|
31516
|
+
logger20.info("Request succeeded", { requestId });
|
|
31387
31517
|
return {
|
|
31388
31518
|
statusCode: 200,
|
|
31389
31519
|
headers: {
|
|
@@ -31404,7 +31534,7 @@ function createErrorResponse(code, message, statusCode, requestId, details) {
|
|
|
31404
31534
|
details
|
|
31405
31535
|
}
|
|
31406
31536
|
};
|
|
31407
|
-
|
|
31537
|
+
logger20.error("Request failed", {
|
|
31408
31538
|
requestId,
|
|
31409
31539
|
code,
|
|
31410
31540
|
message,
|
|
@@ -31439,7 +31569,7 @@ function handleError(error2, requestId) {
|
|
|
31439
31569
|
);
|
|
31440
31570
|
}
|
|
31441
31571
|
if (error2 instanceof Error) {
|
|
31442
|
-
|
|
31572
|
+
logger20.error("Error stack trace", {
|
|
31443
31573
|
requestId,
|
|
31444
31574
|
stack: error2.stack,
|
|
31445
31575
|
message: error2.message
|