@devskin/browser-sdk 1.0.13 → 1.0.15

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.
@@ -5562,7 +5562,7 @@ class RRWebRecorder {
5562
5562
  }
5563
5563
  try {
5564
5564
  console.log('[RRWeb] Starting session recording:', this.sessionId);
5565
- console.log('[RRWeb] SDK Version: 1.0.13');
5565
+ console.log('[RRWeb] SDK Version: 1.0.14');
5566
5566
  this.stopFn = record({
5567
5567
  emit: (event) => {
5568
5568
  // DEBUG: Log ALL event types to diagnose issue
@@ -5751,7 +5751,18 @@ class Transport {
5751
5751
  acc[e.type] = (acc[e.type] || 0) + 1;
5752
5752
  return acc;
5753
5753
  }, {});
5754
+ // Calculate payload size
5755
+ const payload = {
5756
+ session_id: sessionId,
5757
+ events,
5758
+ timestamp: new Date().toISOString(),
5759
+ apiKey: this.config.apiKey,
5760
+ appId: this.config.appId,
5761
+ };
5762
+ const payloadSize = new Blob([JSON.stringify(payload)]).size;
5763
+ const payloadSizeMB = (payloadSize / 1024 / 1024).toFixed(2);
5754
5764
  console.log(`[DevSkin SDK] Sending ${events.length} recording events:`, eventTypes);
5765
+ console.log(`[DevSkin SDK] Payload size: ${payloadSizeMB} MB (${payloadSize} bytes)`);
5755
5766
  console.log(`[DevSkin SDK] First 3 events:`, events.slice(0, 3).map(e => ({ type: e.type, timestamp: e.timestamp })));
5756
5767
  // Check if this batch contains FullSnapshot (type 2)
5757
5768
  const hasFullSnapshot = events.some(e => e.type === 2);
@@ -5760,11 +5771,21 @@ class Transport {
5760
5771
  let lastError = null;
5761
5772
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
5762
5773
  try {
5763
- yield this.sendToBackend('/v1/rum/recordings', {
5764
- session_id: sessionId,
5765
- events,
5766
- timestamp: new Date().toISOString(),
5767
- });
5774
+ // Use XMLHttpRequest for large payloads (more reliable than fetch for large data)
5775
+ if (payloadSize > 100000) { // > 100KB
5776
+ yield this.sendToBackendXHR('/v1/rum/recordings', {
5777
+ session_id: sessionId,
5778
+ events,
5779
+ timestamp: new Date().toISOString(),
5780
+ });
5781
+ }
5782
+ else {
5783
+ yield this.sendToBackend('/v1/rum/recordings', {
5784
+ session_id: sessionId,
5785
+ events,
5786
+ timestamp: new Date().toISOString(),
5787
+ });
5788
+ }
5768
5789
  console.log(`[DevSkin SDK] ✅ Recording events sent successfully${attempt > 1 ? ` (attempt ${attempt})` : ''}`);
5769
5790
  return; // Success, exit
5770
5791
  }
@@ -5839,6 +5860,57 @@ class Transport {
5839
5860
  return '/v1/analytics/events';
5840
5861
  }
5841
5862
  }
5863
+ sendToBackendXHR(endpoint, data) {
5864
+ return __awaiter$1(this, void 0, void 0, function* () {
5865
+ const url = `${this.apiUrl}${endpoint}`;
5866
+ const payload = Object.assign(Object.assign({}, data), { apiKey: this.config.apiKey, appId: this.config.appId, environment: this.config.environment, release: this.config.release });
5867
+ // Apply beforeSend hook if provided
5868
+ if (this.config.beforeSend) {
5869
+ const processed = this.config.beforeSend(payload);
5870
+ if (!processed) {
5871
+ // Hook returned null, don't send
5872
+ return;
5873
+ }
5874
+ }
5875
+ return new Promise((resolve, reject) => {
5876
+ const xhr = new XMLHttpRequest();
5877
+ xhr.open('POST', url, true);
5878
+ xhr.setRequestHeader('Content-Type', 'application/json');
5879
+ xhr.setRequestHeader('Authorization', `Bearer ${this.config.apiKey}`);
5880
+ xhr.onload = () => {
5881
+ if (xhr.status >= 200 && xhr.status < 300) {
5882
+ if (this.config.debug) {
5883
+ console.log('[DevSkin] Data sent successfully via XHR:', endpoint);
5884
+ }
5885
+ resolve();
5886
+ }
5887
+ else {
5888
+ console.error('[DevSkin] XHR HTTP Error:', xhr.status, xhr.responseText);
5889
+ reject(new Error(`HTTP ${xhr.status}: ${xhr.statusText}`));
5890
+ }
5891
+ };
5892
+ xhr.onerror = () => {
5893
+ console.error('[DevSkin] XHR network error:', endpoint);
5894
+ reject(new Error('Network error'));
5895
+ };
5896
+ xhr.ontimeout = () => {
5897
+ console.error('[DevSkin] XHR timeout:', endpoint);
5898
+ reject(new Error('Request timeout'));
5899
+ };
5900
+ // Set a generous timeout for large payloads (30 seconds)
5901
+ xhr.timeout = 30000;
5902
+ try {
5903
+ const body = JSON.stringify(payload);
5904
+ console.log(`[DevSkin SDK] Using XMLHttpRequest for large payload (${(body.length / 1024).toFixed(2)} KB)`);
5905
+ xhr.send(body);
5906
+ }
5907
+ catch (error) {
5908
+ console.error('[DevSkin] Failed to send XHR request:', error);
5909
+ reject(error);
5910
+ }
5911
+ });
5912
+ });
5913
+ }
5842
5914
  sendToBackend(endpoint_1, data_1) {
5843
5915
  return __awaiter$1(this, arguments, void 0, function* (endpoint, data, useBeacon = false) {
5844
5916
  const url = `${this.apiUrl}${endpoint}`;