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