@jaypie/express 1.2.4-rc6 → 1.2.4-rc8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +123 -15
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.js +123 -15
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -1126,6 +1126,64 @@ function getCurrentInvokeUuid(req) {
|
|
|
1126
1126
|
return getWebAdapterUuid();
|
|
1127
1127
|
}
|
|
1128
1128
|
|
|
1129
|
+
//
|
|
1130
|
+
//
|
|
1131
|
+
// Helpers
|
|
1132
|
+
//
|
|
1133
|
+
/**
|
|
1134
|
+
* Safely get a header value from response.
|
|
1135
|
+
* Handles both Express Response and Lambda adapter responses.
|
|
1136
|
+
* Defensive against dd-trace instrumentation issues.
|
|
1137
|
+
*/
|
|
1138
|
+
function safeGetHeader(res, name) {
|
|
1139
|
+
try {
|
|
1140
|
+
// Try direct _headers access first (Lambda adapter, avoids dd-trace)
|
|
1141
|
+
if (res._headers instanceof Map) {
|
|
1142
|
+
const value = res._headers.get(name.toLowerCase());
|
|
1143
|
+
return value ? String(value) : undefined;
|
|
1144
|
+
}
|
|
1145
|
+
// Fall back to getHeader (more standard than get)
|
|
1146
|
+
if (typeof res.getHeader === "function") {
|
|
1147
|
+
const value = res.getHeader(name);
|
|
1148
|
+
return value ? String(value) : undefined;
|
|
1149
|
+
}
|
|
1150
|
+
// Last resort: try get
|
|
1151
|
+
if (typeof res.get === "function") {
|
|
1152
|
+
const value = res.get(name);
|
|
1153
|
+
return value ? String(value) : undefined;
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
catch {
|
|
1157
|
+
// Silently fail - caller will handle missing value
|
|
1158
|
+
}
|
|
1159
|
+
return undefined;
|
|
1160
|
+
}
|
|
1161
|
+
/**
|
|
1162
|
+
* Safely set a header value on response.
|
|
1163
|
+
* Handles both Express Response and Lambda adapter responses.
|
|
1164
|
+
* Defensive against dd-trace instrumentation issues.
|
|
1165
|
+
*/
|
|
1166
|
+
function safeSetHeader(res, name, value) {
|
|
1167
|
+
try {
|
|
1168
|
+
// Try direct _headers access first (Lambda adapter, avoids dd-trace)
|
|
1169
|
+
if (res._headers instanceof Map) {
|
|
1170
|
+
res._headers.set(name.toLowerCase(), value);
|
|
1171
|
+
return;
|
|
1172
|
+
}
|
|
1173
|
+
// Fall back to setHeader (more standard than set)
|
|
1174
|
+
if (typeof res.setHeader === "function") {
|
|
1175
|
+
res.setHeader(name, value);
|
|
1176
|
+
return;
|
|
1177
|
+
}
|
|
1178
|
+
// Last resort: try set
|
|
1179
|
+
if (typeof res.set === "function") {
|
|
1180
|
+
res.set(name, value);
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
catch {
|
|
1184
|
+
// Silently fail - header just won't be set
|
|
1185
|
+
}
|
|
1186
|
+
}
|
|
1129
1187
|
//
|
|
1130
1188
|
//
|
|
1131
1189
|
// Main
|
|
@@ -1142,36 +1200,37 @@ const decorateResponse = (res, { handler = "", version = process.env.PROJECT_VER
|
|
|
1142
1200
|
log.warn("decorateResponse called but response is not an object");
|
|
1143
1201
|
return;
|
|
1144
1202
|
}
|
|
1203
|
+
const extRes = res;
|
|
1145
1204
|
try {
|
|
1146
1205
|
//
|
|
1147
1206
|
//
|
|
1148
1207
|
// Decorate Headers
|
|
1149
1208
|
//
|
|
1150
1209
|
// X-Powered-By, override "Express" but nothing else
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1210
|
+
const currentPoweredBy = safeGetHeader(extRes, kit.HTTP.HEADER.POWERED_BY);
|
|
1211
|
+
if (!currentPoweredBy || currentPoweredBy === "Express") {
|
|
1212
|
+
safeSetHeader(extRes, kit.HTTP.HEADER.POWERED_BY, kit.JAYPIE.LIB.EXPRESS);
|
|
1154
1213
|
}
|
|
1155
1214
|
// X-Project-Environment
|
|
1156
1215
|
if (process.env.PROJECT_ENV) {
|
|
1157
|
-
|
|
1216
|
+
safeSetHeader(extRes, kit.HTTP.HEADER.PROJECT.ENVIRONMENT, process.env.PROJECT_ENV);
|
|
1158
1217
|
}
|
|
1159
1218
|
// X-Project-Handler
|
|
1160
1219
|
if (handler) {
|
|
1161
|
-
|
|
1220
|
+
safeSetHeader(extRes, kit.HTTP.HEADER.PROJECT.HANDLER, handler);
|
|
1162
1221
|
}
|
|
1163
1222
|
// X-Project-Invocation
|
|
1164
1223
|
const currentInvoke = getCurrentInvokeUuid();
|
|
1165
1224
|
if (currentInvoke) {
|
|
1166
|
-
|
|
1225
|
+
safeSetHeader(extRes, kit.HTTP.HEADER.PROJECT.INVOCATION, currentInvoke);
|
|
1167
1226
|
}
|
|
1168
1227
|
// X-Project-Key
|
|
1169
1228
|
if (process.env.PROJECT_KEY) {
|
|
1170
|
-
|
|
1229
|
+
safeSetHeader(extRes, kit.HTTP.HEADER.PROJECT.KEY, process.env.PROJECT_KEY);
|
|
1171
1230
|
}
|
|
1172
1231
|
// X-Project-Version
|
|
1173
1232
|
if (version) {
|
|
1174
|
-
|
|
1233
|
+
safeSetHeader(extRes, kit.HTTP.HEADER.PROJECT.VERSION, version);
|
|
1175
1234
|
}
|
|
1176
1235
|
//
|
|
1177
1236
|
//
|
|
@@ -1231,6 +1290,55 @@ function summarizeResponse(res, extras) {
|
|
|
1231
1290
|
|
|
1232
1291
|
// Cast logger to extended interface for runtime features not in type definitions
|
|
1233
1292
|
const logger$1 = logger$2.log;
|
|
1293
|
+
//
|
|
1294
|
+
//
|
|
1295
|
+
// Helpers - Safe response methods to bypass dd-trace interception
|
|
1296
|
+
//
|
|
1297
|
+
/**
|
|
1298
|
+
* Check if response is a Lambda mock response with direct _headers access.
|
|
1299
|
+
*/
|
|
1300
|
+
function isLambdaMockResponse(res) {
|
|
1301
|
+
return res._headers instanceof Map;
|
|
1302
|
+
}
|
|
1303
|
+
/**
|
|
1304
|
+
* Safely send a JSON response, avoiding dd-trace interception.
|
|
1305
|
+
* For Lambda mock responses, directly sets headers and writes to stream.
|
|
1306
|
+
*/
|
|
1307
|
+
function safeSendJson(res, statusCode, data) {
|
|
1308
|
+
if (isLambdaMockResponse(res)) {
|
|
1309
|
+
// Direct access for Lambda mock responses - bypasses dd-trace
|
|
1310
|
+
res._headers.set("content-type", "application/json");
|
|
1311
|
+
res.statusCode = statusCode;
|
|
1312
|
+
res.end(JSON.stringify(data));
|
|
1313
|
+
return;
|
|
1314
|
+
}
|
|
1315
|
+
// Fall back to standard Express methods for real responses
|
|
1316
|
+
res.status(statusCode).json(data);
|
|
1317
|
+
}
|
|
1318
|
+
/**
|
|
1319
|
+
* Safely send a response body, avoiding dd-trace interception.
|
|
1320
|
+
* For Lambda mock responses, directly writes to stream.
|
|
1321
|
+
*/
|
|
1322
|
+
function safeSend(res, statusCode, body) {
|
|
1323
|
+
if (isLambdaMockResponse(res)) {
|
|
1324
|
+
// Direct access for Lambda mock responses - bypasses dd-trace
|
|
1325
|
+
res.statusCode = statusCode;
|
|
1326
|
+
if (body !== undefined) {
|
|
1327
|
+
res.end(body);
|
|
1328
|
+
}
|
|
1329
|
+
else {
|
|
1330
|
+
res.end();
|
|
1331
|
+
}
|
|
1332
|
+
return;
|
|
1333
|
+
}
|
|
1334
|
+
// Fall back to standard Express methods for real responses
|
|
1335
|
+
if (body !== undefined) {
|
|
1336
|
+
res.status(statusCode).send(body);
|
|
1337
|
+
}
|
|
1338
|
+
else {
|
|
1339
|
+
res.status(statusCode).send();
|
|
1340
|
+
}
|
|
1341
|
+
}
|
|
1234
1342
|
function expressHandler(handlerOrOptions, optionsOrHandler) {
|
|
1235
1343
|
/* eslint-enable no-redeclare */
|
|
1236
1344
|
let handler;
|
|
@@ -1447,30 +1555,30 @@ function expressHandler(handlerOrOptions, optionsOrHandler) {
|
|
|
1447
1555
|
if (typeof response === "object") {
|
|
1448
1556
|
if (typeof response.json ===
|
|
1449
1557
|
"function") {
|
|
1450
|
-
res
|
|
1558
|
+
safeSendJson(res, status, response.json());
|
|
1451
1559
|
}
|
|
1452
1560
|
else {
|
|
1453
|
-
res
|
|
1561
|
+
safeSendJson(res, status, response);
|
|
1454
1562
|
}
|
|
1455
1563
|
}
|
|
1456
1564
|
else if (typeof response === "string") {
|
|
1457
1565
|
try {
|
|
1458
|
-
res
|
|
1566
|
+
safeSendJson(res, status, JSON.parse(response));
|
|
1459
1567
|
}
|
|
1460
1568
|
catch {
|
|
1461
|
-
res
|
|
1569
|
+
safeSend(res, status, response);
|
|
1462
1570
|
}
|
|
1463
1571
|
}
|
|
1464
1572
|
else if (response === true) {
|
|
1465
|
-
res
|
|
1573
|
+
safeSend(res, kit.HTTP.CODE.CREATED);
|
|
1466
1574
|
}
|
|
1467
1575
|
else {
|
|
1468
|
-
res
|
|
1576
|
+
safeSend(res, status, response);
|
|
1469
1577
|
}
|
|
1470
1578
|
}
|
|
1471
1579
|
else {
|
|
1472
1580
|
// No response
|
|
1473
|
-
res
|
|
1581
|
+
safeSend(res, kit.HTTP.CODE.NO_CONTENT);
|
|
1474
1582
|
}
|
|
1475
1583
|
}
|
|
1476
1584
|
else {
|