@jaypie/express 1.2.4-rc6 → 1.2.4-rc7
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 +67 -8
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.js +67 -8
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -1124,6 +1124,64 @@ function getCurrentInvokeUuid(req) {
|
|
|
1124
1124
|
return getWebAdapterUuid();
|
|
1125
1125
|
}
|
|
1126
1126
|
|
|
1127
|
+
//
|
|
1128
|
+
//
|
|
1129
|
+
// Helpers
|
|
1130
|
+
//
|
|
1131
|
+
/**
|
|
1132
|
+
* Safely get a header value from response.
|
|
1133
|
+
* Handles both Express Response and Lambda adapter responses.
|
|
1134
|
+
* Defensive against dd-trace instrumentation issues.
|
|
1135
|
+
*/
|
|
1136
|
+
function safeGetHeader(res, name) {
|
|
1137
|
+
try {
|
|
1138
|
+
// Try direct _headers access first (Lambda adapter, avoids dd-trace)
|
|
1139
|
+
if (res._headers instanceof Map) {
|
|
1140
|
+
const value = res._headers.get(name.toLowerCase());
|
|
1141
|
+
return value ? String(value) : undefined;
|
|
1142
|
+
}
|
|
1143
|
+
// Fall back to getHeader (more standard than get)
|
|
1144
|
+
if (typeof res.getHeader === "function") {
|
|
1145
|
+
const value = res.getHeader(name);
|
|
1146
|
+
return value ? String(value) : undefined;
|
|
1147
|
+
}
|
|
1148
|
+
// Last resort: try get
|
|
1149
|
+
if (typeof res.get === "function") {
|
|
1150
|
+
const value = res.get(name);
|
|
1151
|
+
return value ? String(value) : undefined;
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
catch {
|
|
1155
|
+
// Silently fail - caller will handle missing value
|
|
1156
|
+
}
|
|
1157
|
+
return undefined;
|
|
1158
|
+
}
|
|
1159
|
+
/**
|
|
1160
|
+
* Safely set a header value on response.
|
|
1161
|
+
* Handles both Express Response and Lambda adapter responses.
|
|
1162
|
+
* Defensive against dd-trace instrumentation issues.
|
|
1163
|
+
*/
|
|
1164
|
+
function safeSetHeader(res, name, value) {
|
|
1165
|
+
try {
|
|
1166
|
+
// Try direct _headers access first (Lambda adapter, avoids dd-trace)
|
|
1167
|
+
if (res._headers instanceof Map) {
|
|
1168
|
+
res._headers.set(name.toLowerCase(), value);
|
|
1169
|
+
return;
|
|
1170
|
+
}
|
|
1171
|
+
// Fall back to setHeader (more standard than set)
|
|
1172
|
+
if (typeof res.setHeader === "function") {
|
|
1173
|
+
res.setHeader(name, value);
|
|
1174
|
+
return;
|
|
1175
|
+
}
|
|
1176
|
+
// Last resort: try set
|
|
1177
|
+
if (typeof res.set === "function") {
|
|
1178
|
+
res.set(name, value);
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
catch {
|
|
1182
|
+
// Silently fail - header just won't be set
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1127
1185
|
//
|
|
1128
1186
|
//
|
|
1129
1187
|
// Main
|
|
@@ -1140,36 +1198,37 @@ const decorateResponse = (res, { handler = "", version = process.env.PROJECT_VER
|
|
|
1140
1198
|
log$1.warn("decorateResponse called but response is not an object");
|
|
1141
1199
|
return;
|
|
1142
1200
|
}
|
|
1201
|
+
const extRes = res;
|
|
1143
1202
|
try {
|
|
1144
1203
|
//
|
|
1145
1204
|
//
|
|
1146
1205
|
// Decorate Headers
|
|
1147
1206
|
//
|
|
1148
1207
|
// X-Powered-By, override "Express" but nothing else
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1208
|
+
const currentPoweredBy = safeGetHeader(extRes, HTTP.HEADER.POWERED_BY);
|
|
1209
|
+
if (!currentPoweredBy || currentPoweredBy === "Express") {
|
|
1210
|
+
safeSetHeader(extRes, HTTP.HEADER.POWERED_BY, JAYPIE.LIB.EXPRESS);
|
|
1152
1211
|
}
|
|
1153
1212
|
// X-Project-Environment
|
|
1154
1213
|
if (process.env.PROJECT_ENV) {
|
|
1155
|
-
|
|
1214
|
+
safeSetHeader(extRes, HTTP.HEADER.PROJECT.ENVIRONMENT, process.env.PROJECT_ENV);
|
|
1156
1215
|
}
|
|
1157
1216
|
// X-Project-Handler
|
|
1158
1217
|
if (handler) {
|
|
1159
|
-
|
|
1218
|
+
safeSetHeader(extRes, HTTP.HEADER.PROJECT.HANDLER, handler);
|
|
1160
1219
|
}
|
|
1161
1220
|
// X-Project-Invocation
|
|
1162
1221
|
const currentInvoke = getCurrentInvokeUuid();
|
|
1163
1222
|
if (currentInvoke) {
|
|
1164
|
-
|
|
1223
|
+
safeSetHeader(extRes, HTTP.HEADER.PROJECT.INVOCATION, currentInvoke);
|
|
1165
1224
|
}
|
|
1166
1225
|
// X-Project-Key
|
|
1167
1226
|
if (process.env.PROJECT_KEY) {
|
|
1168
|
-
|
|
1227
|
+
safeSetHeader(extRes, HTTP.HEADER.PROJECT.KEY, process.env.PROJECT_KEY);
|
|
1169
1228
|
}
|
|
1170
1229
|
// X-Project-Version
|
|
1171
1230
|
if (version) {
|
|
1172
|
-
|
|
1231
|
+
safeSetHeader(extRes, HTTP.HEADER.PROJECT.VERSION, version);
|
|
1173
1232
|
}
|
|
1174
1233
|
//
|
|
1175
1234
|
//
|