resourceFrame.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import type {RequestFrame, ResourceFrame, SpanFrame} from 'sentry/utils/replays/types';
  2. export function isRequestFrame(frame: SpanFrame): frame is RequestFrame {
  3. return ['resource.fetch', 'resource.xhr', 'resource.http'].includes(frame.op);
  4. }
  5. function isResourceFrame(frame: SpanFrame): frame is ResourceFrame {
  6. return [
  7. 'resource.css',
  8. 'resource.iframe',
  9. 'resource.img',
  10. 'resource.link',
  11. 'resource.other',
  12. 'resource.script',
  13. ].includes(frame.op);
  14. }
  15. export function getFrameMethod(frame: SpanFrame) {
  16. return isRequestFrame(frame) ? frame.data.method ?? 'GET' : 'GET';
  17. }
  18. export function getFrameStatus(frame: SpanFrame) {
  19. return isRequestFrame(frame)
  20. ? frame.data.statusCode
  21. : isResourceFrame(frame)
  22. ? frame.data.statusCode
  23. : undefined;
  24. }
  25. export function getReqRespContentTypes(frame: SpanFrame) {
  26. if (isRequestFrame(frame)) {
  27. return {
  28. req: frame.data.request?.headers?.['content-type'],
  29. resp: frame.data.response?.headers?.['content-type'],
  30. };
  31. }
  32. return {
  33. req: undefined,
  34. resp: undefined,
  35. };
  36. }
  37. export function getResponseBodySize(frame: SpanFrame) {
  38. if (isRequestFrame(frame)) {
  39. // `data.responseBodySize` is from SDK version 7.44-7.45
  40. return frame.data.response?.size ?? frame.data.responseBodySize;
  41. }
  42. if (isResourceFrame(frame)) {
  43. // What about these?
  44. // frame.data.decodedBodySize
  45. // frame.data.encodedBodySize
  46. return frame.data.size;
  47. }
  48. return undefined;
  49. }