resourceFrame.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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'].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 getResponseBodySize(frame: SpanFrame) {
  26. if (isRequestFrame(frame)) {
  27. // `data.responseBodySize` is from SDK version 7.44-7.45
  28. return frame.data.response?.size ?? frame.data.responseBodySize;
  29. }
  30. if (isResourceFrame(frame)) {
  31. // What about these?
  32. // frame.data.decodedBodySize
  33. // frame.data.encodedBodySize
  34. return frame.data.size;
  35. }
  36. return undefined;
  37. }