@getlimelight/sdk 0.5.2 → 0.5.5

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/index.js CHANGED
@@ -201,6 +201,15 @@ var getInitiator = () => {
201
201
  }
202
202
  };
203
203
 
204
+ // src/helpers/detection/detectGlobalObject.ts
205
+ var detectGlobalObject = () => {
206
+ if (typeof globalThis !== "undefined") return globalThis;
207
+ if (typeof window !== "undefined") return window;
208
+ if (typeof global !== "undefined") return global;
209
+ if (typeof self !== "undefined") return self;
210
+ throw new Error("Unable to locate global object");
211
+ };
212
+
204
213
  // src/helpers/graphql/detectGraphQlOperationType.ts
205
214
  var detectGraphQlOperationType = (query) => {
206
215
  if (!query) return null;
@@ -276,7 +285,7 @@ var SENSITIVE_HEADERS = [
276
285
  var LIMELIGHT_WEB_WSS_URL = "wss://api.getlimelight.io";
277
286
  var LIMELIGHT_DESKTOP_WSS_URL = "ws://localhost:8484";
278
287
  var WS_PATH = "/limelight";
279
- var SDK_VERSION = true ? "0.5.2" : "test-version";
288
+ var SDK_VERSION = true ? "0.5.5" : "test-version";
280
289
  var RENDER_THRESHOLDS = {
281
290
  HOT_VELOCITY: 5,
282
291
  HIGH_RENDER_COUNT: 50,
@@ -593,7 +602,7 @@ var ConsoleInterceptor = class {
593
602
  }
594
603
  this.isSetup = true;
595
604
  this.config = config;
596
- const self = this;
605
+ const self2 = this;
597
606
  const methods = [
598
607
  "log" /* LOG */,
599
608
  "warn" /* WARN */,
@@ -606,28 +615,28 @@ var ConsoleInterceptor = class {
606
615
  const original = console[level];
607
616
  this.originalConsole[level] = original;
608
617
  console[level] = function(...args) {
609
- if (self.isInternalLog) {
618
+ if (self2.isInternalLog) {
610
619
  return original.apply(console, args);
611
620
  }
612
- self.isInternalLog = true;
621
+ self2.isInternalLog = true;
613
622
  try {
614
623
  const source = detectLogSource();
615
624
  const consoleType = detectConsoleType(level, args);
616
- const stackTrace = self.captureStackTrace();
625
+ const stackTrace = self2.captureStackTrace();
617
626
  let consoleEvent = {
618
- id: `${self.getSessionId()}-${Date.now()}-${self.counter++}`,
627
+ id: `${self2.getSessionId()}-${Date.now()}-${self2.counter++}`,
619
628
  phase: "CONSOLE",
620
629
  type: "CONSOLE" /* CONSOLE */,
621
630
  level,
622
631
  timestamp: Date.now(),
623
- sessionId: self.getSessionId(),
632
+ sessionId: self2.getSessionId(),
624
633
  source,
625
634
  consoleType,
626
635
  args: args.map((arg) => safeStringify(arg)),
627
636
  stackTrace
628
637
  };
629
- if (self.config?.beforeSend) {
630
- const modifiedEvent = self.config.beforeSend(consoleEvent);
638
+ if (self2.config?.beforeSend) {
639
+ const modifiedEvent = self2.config.beforeSend(consoleEvent);
631
640
  if (!modifiedEvent) {
632
641
  return original.apply(console, args);
633
642
  }
@@ -639,10 +648,10 @@ var ConsoleInterceptor = class {
639
648
  }
640
649
  consoleEvent = modifiedEvent;
641
650
  }
642
- self.sendMessage(consoleEvent);
651
+ self2.sendMessage(consoleEvent);
643
652
  } catch (error) {
644
653
  } finally {
645
- self.isInternalLog = false;
654
+ self2.isInternalLog = false;
646
655
  }
647
656
  return original.apply(console, args);
648
657
  };
@@ -700,11 +709,13 @@ var NetworkInterceptor = class {
700
709
  constructor(sendMessage, getSessionId) {
701
710
  this.sendMessage = sendMessage;
702
711
  this.getSessionId = getSessionId;
703
- this.originalFetch = global.fetch;
712
+ this.globalObject = detectGlobalObject();
713
+ this.originalFetch = this.globalObject.fetch.bind(this.globalObject);
704
714
  }
705
715
  originalFetch;
706
716
  config = null;
707
717
  isSetup = false;
718
+ globalObject;
708
719
  /**
709
720
  * Sets up fetch interception by wrapping the global fetch function.
710
721
  * Intercepts all fetch requests to capture network events.
@@ -721,8 +732,8 @@ var NetworkInterceptor = class {
721
732
  }
722
733
  this.isSetup = true;
723
734
  this.config = config;
724
- const self = this;
725
- global.fetch = async function(input, init = {}) {
735
+ const self2 = this;
736
+ this.globalObject.fetch = async function(input, init = {}) {
726
737
  const requestId = generateRequestId();
727
738
  const startTime = Date.now();
728
739
  const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
@@ -752,7 +763,7 @@ var NetworkInterceptor = class {
752
763
  }
753
764
  } catch {
754
765
  requestBodyToSerialize = void 0;
755
- if (self.config?.enableInternalLogging) {
766
+ if (self2.config?.enableInternalLogging) {
756
767
  console.warn(
757
768
  "[Limelight] Failed to read request body from Request object"
758
769
  );
@@ -761,10 +772,10 @@ var NetworkInterceptor = class {
761
772
  }
762
773
  const requestBody = serializeBody(
763
774
  requestBodyToSerialize,
764
- self.config?.disableBodyCapture
775
+ self2.config?.disableBodyCapture
765
776
  );
766
777
  let graphqlData = void 0;
767
- if (self.config?.enableGraphQL && isGraphQLRequest(url, requestBody)) {
778
+ if (self2.config?.enableGraphQL && isGraphQLRequest(url, requestBody)) {
768
779
  const rawBody = requestBody?.raw;
769
780
  if (rawBody) {
770
781
  graphqlData = parseGraphQL(rawBody) ?? void 0;
@@ -772,7 +783,7 @@ var NetworkInterceptor = class {
772
783
  }
773
784
  let requestEvent = {
774
785
  id: requestId,
775
- sessionId: self.getSessionId(),
786
+ sessionId: self2.getSessionId(),
776
787
  timestamp: startTime,
777
788
  phase: "REQUEST" /* REQUEST */,
778
789
  networkType: "fetch" /* FETCH */,
@@ -785,20 +796,20 @@ var NetworkInterceptor = class {
785
796
  requestSize: requestBody?.size ?? 0,
786
797
  graphql: graphqlData
787
798
  };
788
- if (self.config?.beforeSend) {
789
- const modifiedEvent = self.config.beforeSend(requestEvent);
799
+ if (self2.config?.beforeSend) {
800
+ const modifiedEvent = self2.config.beforeSend(requestEvent);
790
801
  if (!modifiedEvent) {
791
- return self.originalFetch(input, modifiedInit);
802
+ return self2.originalFetch(input, modifiedInit);
792
803
  }
793
804
  if (modifiedEvent.phase !== "REQUEST" /* REQUEST */) {
794
805
  console.error("[Limelight] beforeSend must return same event type");
795
- return self.originalFetch(input, modifiedInit);
806
+ return self2.originalFetch(input, modifiedInit);
796
807
  }
797
808
  requestEvent = modifiedEvent;
798
809
  }
799
- self.sendMessage(requestEvent);
810
+ self2.sendMessage(requestEvent);
800
811
  try {
801
- const response = await self.originalFetch(input, modifiedInit);
812
+ const response = await self2.originalFetch(input, modifiedInit);
802
813
  const clone = response.clone();
803
814
  const endTime = Date.now();
804
815
  const duration = endTime - startTime;
@@ -814,11 +825,11 @@ var NetworkInterceptor = class {
814
825
  }
815
826
  const responseBody = serializeBody(
816
827
  responseText,
817
- self.config?.disableBodyCapture
828
+ self2.config?.disableBodyCapture
818
829
  );
819
830
  let responseEvent = {
820
831
  id: requestId,
821
- sessionId: self.getSessionId(),
832
+ sessionId: self2.getSessionId(),
822
833
  timestamp: endTime,
823
834
  phase: "RESPONSE" /* RESPONSE */,
824
835
  networkType: "fetch" /* FETCH */,
@@ -831,8 +842,8 @@ var NetworkInterceptor = class {
831
842
  redirected: response.redirected,
832
843
  ok: response.ok
833
844
  };
834
- if (self.config?.beforeSend) {
835
- const modifiedEvent = self.config.beforeSend(responseEvent);
845
+ if (self2.config?.beforeSend) {
846
+ const modifiedEvent = self2.config.beforeSend(responseEvent);
836
847
  if (!modifiedEvent) {
837
848
  return response;
838
849
  }
@@ -842,28 +853,28 @@ var NetworkInterceptor = class {
842
853
  }
843
854
  responseEvent = modifiedEvent;
844
855
  }
845
- self.sendMessage(responseEvent);
856
+ self2.sendMessage(responseEvent);
846
857
  return response;
847
858
  } catch (err) {
859
+ const isAbort = err instanceof Error && (err.name === "AbortError" || err.message.includes("aborted"));
848
860
  const errorMessage = err instanceof Error ? err.message : String(err);
849
861
  const errorStack = err instanceof Error ? err.stack : void 0;
850
- const isAbort = err instanceof DOMException && err.name === "AbortError";
851
862
  let errorEvent = {
852
863
  id: requestId,
853
- sessionId: self.getSessionId(),
864
+ sessionId: self2.getSessionId(),
854
865
  timestamp: Date.now(),
855
866
  phase: isAbort ? "ABORT" /* ABORT */ : "ERROR" /* ERROR */,
856
867
  networkType: "fetch" /* FETCH */,
857
868
  errorMessage: isAbort ? "Request aborted" : errorMessage,
858
869
  stack: errorStack
859
870
  };
860
- if (self.config?.beforeSend) {
861
- const modifiedEvent = self.config.beforeSend(errorEvent);
862
- if (modifiedEvent && modifiedEvent.phase === "ERROR" /* ERROR */) {
871
+ if (self2.config?.beforeSend) {
872
+ const modifiedEvent = self2.config.beforeSend(errorEvent);
873
+ if (modifiedEvent && (modifiedEvent.phase === "ERROR" /* ERROR */ || modifiedEvent.phase === "ABORT" /* ABORT */)) {
863
874
  errorEvent = modifiedEvent;
864
875
  }
865
876
  }
866
- self.sendMessage(errorEvent);
877
+ self2.sendMessage(errorEvent);
867
878
  throw err;
868
879
  }
869
880
  };
@@ -880,7 +891,7 @@ var NetworkInterceptor = class {
880
891
  return;
881
892
  }
882
893
  this.isSetup = false;
883
- global.fetch = this.originalFetch;
894
+ this.globalObject.fetch = this.originalFetch;
884
895
  }
885
896
  };
886
897
 
@@ -914,7 +925,7 @@ var XHRInterceptor = class {
914
925
  }
915
926
  this.isSetup = true;
916
927
  this.config = config;
917
- const self = this;
928
+ const self2 = this;
918
929
  XMLHttpRequest.prototype.open = function(method, url) {
919
930
  this._limelightData = {
920
931
  id: generateRequestId(),
@@ -924,7 +935,7 @@ var XHRInterceptor = class {
924
935
  startTime: Date.now(),
925
936
  listeners: /* @__PURE__ */ new Map()
926
937
  };
927
- return self.originalXHROpen.apply(
938
+ return self2.originalXHROpen.apply(
928
939
  this,
929
940
  arguments
930
941
  );
@@ -936,21 +947,21 @@ var XHRInterceptor = class {
936
947
  this._limelightData.skipIntercept = true;
937
948
  }
938
949
  }
939
- return self.originalXHRSetRequestHeader.apply(this, arguments);
950
+ return self2.originalXHRSetRequestHeader.apply(this, arguments);
940
951
  };
941
952
  XMLHttpRequest.prototype.send = function(body) {
942
953
  const data = this._limelightData;
943
954
  if (data?.skipIntercept) {
944
- return self.originalXHRSend.apply(this, arguments);
955
+ return self2.originalXHRSend.apply(this, arguments);
945
956
  }
946
957
  if (data) {
947
958
  const requestBody = serializeBody(
948
959
  body,
949
- self.config?.disableBodyCapture
960
+ self2.config?.disableBodyCapture
950
961
  );
951
962
  let requestEvent = {
952
963
  id: data.id,
953
- sessionId: self.getSessionId(),
964
+ sessionId: self2.getSessionId(),
954
965
  timestamp: data.startTime,
955
966
  phase: "REQUEST" /* REQUEST */,
956
967
  networkType: "xhr" /* XHR */,
@@ -962,18 +973,18 @@ var XHRInterceptor = class {
962
973
  initiator: getInitiator(),
963
974
  requestSize: requestBody?.size ?? 0
964
975
  };
965
- if (self.config?.beforeSend) {
966
- const modifiedEvent = self.config.beforeSend(requestEvent);
976
+ if (self2.config?.beforeSend) {
977
+ const modifiedEvent = self2.config.beforeSend(requestEvent);
967
978
  if (!modifiedEvent) {
968
- return self.originalXHRSend.apply(this, arguments);
979
+ return self2.originalXHRSend.apply(this, arguments);
969
980
  }
970
981
  if (modifiedEvent.phase !== "REQUEST" /* REQUEST */) {
971
982
  console.error("[Limelight] beforeSend must return same event type");
972
- return self.originalXHRSend.apply(this, arguments);
983
+ return self2.originalXHRSend.apply(this, arguments);
973
984
  }
974
985
  requestEvent = modifiedEvent;
975
986
  }
976
- self.sendMessage(requestEvent);
987
+ self2.sendMessage(requestEvent);
977
988
  let responseSent = false;
978
989
  const cleanup = () => {
979
990
  if (data.listeners) {
@@ -989,7 +1000,7 @@ var XHRInterceptor = class {
989
1000
  responseSent = true;
990
1001
  const endTime = Date.now();
991
1002
  const duration = endTime - data.startTime;
992
- const responseHeaders = self.parseResponseHeaders(
1003
+ const responseHeaders = self2.parseResponseHeaders(
993
1004
  this.getAllResponseHeaders()
994
1005
  );
995
1006
  let responseData;
@@ -1005,11 +1016,11 @@ var XHRInterceptor = class {
1005
1016
  }
1006
1017
  const responseBody = serializeBody(
1007
1018
  responseData,
1008
- self.config?.disableBodyCapture
1019
+ self2.config?.disableBodyCapture
1009
1020
  );
1010
1021
  let responseEvent = {
1011
1022
  id: data.id,
1012
- sessionId: self.getSessionId(),
1023
+ sessionId: self2.getSessionId(),
1013
1024
  timestamp: endTime,
1014
1025
  phase: "RESPONSE" /* RESPONSE */,
1015
1026
  networkType: "xhr" /* XHR */,
@@ -1022,8 +1033,8 @@ var XHRInterceptor = class {
1022
1033
  redirected: false,
1023
1034
  ok: this.status >= 200 && this.status < 300
1024
1035
  };
1025
- if (self.config?.beforeSend) {
1026
- const modifiedEvent = self.config.beforeSend(responseEvent);
1036
+ if (self2.config?.beforeSend) {
1037
+ const modifiedEvent = self2.config.beforeSend(responseEvent);
1027
1038
  if (!modifiedEvent) {
1028
1039
  return;
1029
1040
  }
@@ -1035,7 +1046,7 @@ var XHRInterceptor = class {
1035
1046
  }
1036
1047
  responseEvent = modifiedEvent;
1037
1048
  }
1038
- self.sendMessage(responseEvent);
1049
+ self2.sendMessage(responseEvent);
1039
1050
  cleanup.call(this);
1040
1051
  };
1041
1052
  const sendError = (errorMessage, phase = "ERROR" /* ERROR */) => {
@@ -1043,19 +1054,19 @@ var XHRInterceptor = class {
1043
1054
  responseSent = true;
1044
1055
  let errorEvent = {
1045
1056
  id: data.id,
1046
- sessionId: self.getSessionId(),
1057
+ sessionId: self2.getSessionId(),
1047
1058
  timestamp: Date.now(),
1048
1059
  phase,
1049
1060
  networkType: "xhr" /* XHR */,
1050
1061
  errorMessage
1051
1062
  };
1052
- if (self.config?.beforeSend) {
1053
- const modifiedEvent = self.config.beforeSend(errorEvent);
1063
+ if (self2.config?.beforeSend) {
1064
+ const modifiedEvent = self2.config.beforeSend(errorEvent);
1054
1065
  if (modifiedEvent && modifiedEvent.phase === "ERROR" /* ERROR */) {
1055
1066
  errorEvent = modifiedEvent;
1056
1067
  }
1057
1068
  }
1058
- self.sendMessage(errorEvent);
1069
+ self2.sendMessage(errorEvent);
1059
1070
  cleanup.call(this);
1060
1071
  };
1061
1072
  const readyStateChangeHandler = function() {
@@ -1094,7 +1105,7 @@ var XHRInterceptor = class {
1094
1105
  data.listeners.set("timeout", timeoutHandler);
1095
1106
  data.listeners.set("loadend", loadEndHandler);
1096
1107
  }
1097
- return self.originalXHRSend.apply(this, arguments);
1108
+ return self2.originalXHRSend.apply(this, arguments);
1098
1109
  };
1099
1110
  }
1100
1111
  /**