@jaypie/express 1.2.4-rc11 → 1.2.4-rc13

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.
@@ -30,6 +30,7 @@ export declare class LambdaResponseBuffered extends Writable {
30
30
  /**
31
31
  * Proxy for direct header access (e.g., res.headers['content-type']).
32
32
  * Required for compatibility with middleware like helmet that access headers directly.
33
+ * Uses direct _headers access to bypass dd-trace interception.
33
34
  */
34
35
  get headers(): Record<string, string | string[] | undefined>;
35
36
  writeHead(statusCode: number, statusMessageOrHeaders?: OutgoingHttpHeaders | string, headers?: OutgoingHttpHeaders): this;
@@ -52,6 +53,7 @@ export declare class LambdaResponseBuffered extends Writable {
52
53
  /**
53
54
  * Add a field to the Vary response header.
54
55
  * Used by CORS middleware to indicate response varies by Origin.
56
+ * Uses direct _headers access to bypass dd-trace interception.
55
57
  */
56
58
  vary(field: string): this;
57
59
  _write(chunk: Buffer | string, encoding: BufferEncoding, // eslint-disable-line no-undef
@@ -30,6 +30,7 @@ export declare class LambdaResponseStreaming extends Writable {
30
30
  /**
31
31
  * Proxy for direct header access (e.g., res.headers['content-type']).
32
32
  * Required for compatibility with middleware like helmet that access headers directly.
33
+ * Uses direct _headers access to bypass dd-trace interception.
33
34
  */
34
35
  get headers(): Record<string, string | string[] | undefined>;
35
36
  writeHead(statusCode: number, statusMessageOrHeaders?: OutgoingHttpHeaders | string, headers?: OutgoingHttpHeaders): this;
@@ -53,6 +54,7 @@ export declare class LambdaResponseStreaming extends Writable {
53
54
  /**
54
55
  * Add a field to the Vary response header.
55
56
  * Used by CORS middleware to indicate response varies by Origin.
57
+ * Uses direct _headers access to bypass dd-trace interception.
56
58
  */
57
59
  vary(field: string): this;
58
60
  _write(chunk: Buffer | string, encoding: BufferEncoding, // eslint-disable-line no-undef
@@ -303,36 +303,40 @@ class LambdaResponseBuffered extends node_stream.Writable {
303
303
  /**
304
304
  * Proxy for direct header access (e.g., res.headers['content-type']).
305
305
  * Required for compatibility with middleware like helmet that access headers directly.
306
+ * Uses direct _headers access to bypass dd-trace interception.
306
307
  */
307
308
  get headers() {
308
309
  return new Proxy({}, {
309
310
  deleteProperty: (_target, prop) => {
310
- this.removeHeader(String(prop));
311
+ this._headers.delete(String(prop).toLowerCase());
311
312
  return true;
312
313
  },
313
314
  get: (_target, prop) => {
314
315
  if (typeof prop === "symbol")
315
316
  return undefined;
316
- return this.getHeader(String(prop));
317
+ return this._headers.get(String(prop).toLowerCase());
317
318
  },
318
319
  getOwnPropertyDescriptor: (_target, prop) => {
319
- if (this.hasHeader(String(prop))) {
320
+ const lowerProp = String(prop).toLowerCase();
321
+ if (this._headers.has(lowerProp)) {
320
322
  return {
321
323
  configurable: true,
322
324
  enumerable: true,
323
- value: this.getHeader(String(prop)),
325
+ value: this._headers.get(lowerProp),
324
326
  };
325
327
  }
326
328
  return undefined;
327
329
  },
328
330
  has: (_target, prop) => {
329
- return this.hasHeader(String(prop));
331
+ return this._headers.has(String(prop).toLowerCase());
330
332
  },
331
333
  ownKeys: () => {
332
- return this.getHeaderNames();
334
+ return Array.from(this._headers.keys());
333
335
  },
334
336
  set: (_target, prop, value) => {
335
- this.setHeader(String(prop), value);
337
+ if (!this._headersSent) {
338
+ this._headers.set(String(prop).toLowerCase(), value);
339
+ }
336
340
  return true;
337
341
  },
338
342
  });
@@ -349,9 +353,10 @@ class LambdaResponseBuffered extends node_stream.Writable {
349
353
  headersToSet = statusMessageOrHeaders;
350
354
  }
351
355
  if (headersToSet) {
356
+ // Use direct _headers access to bypass dd-trace interception
352
357
  for (const [key, value] of Object.entries(headersToSet)) {
353
358
  if (value !== undefined) {
354
- this.setHeader(key, value);
359
+ this._headers.set(key.toLowerCase(), String(value));
355
360
  }
356
361
  }
357
362
  }
@@ -388,7 +393,8 @@ class LambdaResponseBuffered extends node_stream.Writable {
388
393
  return this;
389
394
  }
390
395
  json(data) {
391
- this.setHeader("content-type", "application/json");
396
+ // Use direct _headers access to bypass dd-trace interception
397
+ this._headers.set("content-type", "application/json");
392
398
  this.end(JSON.stringify(data));
393
399
  return this;
394
400
  }
@@ -402,11 +408,12 @@ class LambdaResponseBuffered extends node_stream.Writable {
402
408
  /**
403
409
  * Add a field to the Vary response header.
404
410
  * Used by CORS middleware to indicate response varies by Origin.
411
+ * Uses direct _headers access to bypass dd-trace interception.
405
412
  */
406
413
  vary(field) {
407
- const existing = this.getHeader("vary");
414
+ const existing = this._headers.get("vary");
408
415
  if (!existing) {
409
- this.setHeader("vary", field);
416
+ this._headers.set("vary", field);
410
417
  }
411
418
  else {
412
419
  // Append to existing Vary header if field not already present
@@ -414,7 +421,7 @@ class LambdaResponseBuffered extends node_stream.Writable {
414
421
  .split(",")
415
422
  .map((f) => f.trim().toLowerCase());
416
423
  if (!fields.includes(field.toLowerCase())) {
417
- this.setHeader("vary", `${existing}, ${field}`);
424
+ this._headers.set("vary", `${existing}, ${field}`);
418
425
  }
419
426
  }
420
427
  return this;
@@ -607,36 +614,42 @@ class LambdaResponseStreaming extends node_stream.Writable {
607
614
  /**
608
615
  * Proxy for direct header access (e.g., res.headers['content-type']).
609
616
  * Required for compatibility with middleware like helmet that access headers directly.
617
+ * Uses direct _headers access to bypass dd-trace interception.
610
618
  */
611
619
  get headers() {
612
620
  return new Proxy({}, {
613
621
  deleteProperty: (_target, prop) => {
614
- this.removeHeader(String(prop));
622
+ if (!this._headersSent) {
623
+ this._headers.delete(String(prop).toLowerCase());
624
+ }
615
625
  return true;
616
626
  },
617
627
  get: (_target, prop) => {
618
628
  if (typeof prop === "symbol")
619
629
  return undefined;
620
- return this.getHeader(String(prop));
630
+ return this._headers.get(String(prop).toLowerCase());
621
631
  },
622
632
  getOwnPropertyDescriptor: (_target, prop) => {
623
- if (this.hasHeader(String(prop))) {
633
+ const lowerProp = String(prop).toLowerCase();
634
+ if (this._headers.has(lowerProp)) {
624
635
  return {
625
636
  configurable: true,
626
637
  enumerable: true,
627
- value: this.getHeader(String(prop)),
638
+ value: this._headers.get(lowerProp),
628
639
  };
629
640
  }
630
641
  return undefined;
631
642
  },
632
643
  has: (_target, prop) => {
633
- return this.hasHeader(String(prop));
644
+ return this._headers.has(String(prop).toLowerCase());
634
645
  },
635
646
  ownKeys: () => {
636
- return this.getHeaderNames();
647
+ return Array.from(this._headers.keys());
637
648
  },
638
649
  set: (_target, prop, value) => {
639
- this.setHeader(String(prop), value);
650
+ if (!this._headersSent) {
651
+ this._headers.set(String(prop).toLowerCase(), value);
652
+ }
640
653
  return true;
641
654
  },
642
655
  });
@@ -656,9 +669,10 @@ class LambdaResponseStreaming extends node_stream.Writable {
656
669
  headersToSet = statusMessageOrHeaders;
657
670
  }
658
671
  if (headersToSet) {
672
+ // Use direct _headers access to bypass dd-trace interception
659
673
  for (const [key, value] of Object.entries(headersToSet)) {
660
674
  if (value !== undefined) {
661
- this.setHeader(key, value);
675
+ this._headers.set(key.toLowerCase(), String(value));
662
676
  }
663
677
  }
664
678
  }
@@ -716,7 +730,8 @@ class LambdaResponseStreaming extends node_stream.Writable {
716
730
  return this;
717
731
  }
718
732
  json(data) {
719
- this.setHeader("content-type", "application/json");
733
+ // Use direct _headers access to bypass dd-trace interception
734
+ this._headers.set("content-type", "application/json");
720
735
  this.end(JSON.stringify(data));
721
736
  return this;
722
737
  }
@@ -730,11 +745,12 @@ class LambdaResponseStreaming extends node_stream.Writable {
730
745
  /**
731
746
  * Add a field to the Vary response header.
732
747
  * Used by CORS middleware to indicate response varies by Origin.
748
+ * Uses direct _headers access to bypass dd-trace interception.
733
749
  */
734
750
  vary(field) {
735
- const existing = this.getHeader("vary");
751
+ const existing = this._headers.get("vary");
736
752
  if (!existing) {
737
- this.setHeader("vary", field);
753
+ this._headers.set("vary", field);
738
754
  }
739
755
  else {
740
756
  // Append to existing Vary header if field not already present
@@ -742,7 +758,7 @@ class LambdaResponseStreaming extends node_stream.Writable {
742
758
  .split(",")
743
759
  .map((f) => f.trim().toLowerCase());
744
760
  if (!fields.includes(field.toLowerCase())) {
745
- this.setHeader("vary", `${existing}, ${field}`);
761
+ this._headers.set("vary", `${existing}, ${field}`);
746
762
  }
747
763
  }
748
764
  return this;