Skip to content

Commit 2d43b64

Browse files
authored
feat(replay): Capture exception when internal_sdk_error client report happens (#13072)
We currently have no visibility when this client report happens. Lets capture the exception if our experimental flag is on. Also refactors `_handleException()` to be a public method instead of private.
1 parent 67a067a commit 2d43b64

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

packages/replay-internal/src/replay.ts

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,15 @@ export class ReplayContainer implements ReplayContainerInterface {
241241
return this._options;
242242
}
243243

244+
/** A wrapper to conditionally capture exceptions. */
245+
public handleException(error: unknown): void {
246+
DEBUG_BUILD && logger.error('[Replay]', error);
247+
248+
if (DEBUG_BUILD && this._options._experiments && this._options._experiments.captureExceptions) {
249+
captureException(error);
250+
}
251+
}
252+
244253
/**
245254
* Initializes the plugin based on sampling configuration. Should not be
246255
* called outside of constructor.
@@ -264,7 +273,7 @@ export class ReplayContainer implements ReplayContainerInterface {
264273

265274
if (!this.session) {
266275
// This should not happen, something wrong has occurred
267-
this._handleException(new Error('Unable to initialize and create session'));
276+
this.handleException(new Error('Unable to initialize and create session'));
268277
return;
269278
}
270279

@@ -389,7 +398,7 @@ export class ReplayContainer implements ReplayContainerInterface {
389398
: {}),
390399
});
391400
} catch (err) {
392-
this._handleException(err);
401+
this.handleException(err);
393402
}
394403
}
395404

@@ -408,7 +417,7 @@ export class ReplayContainer implements ReplayContainerInterface {
408417

409418
return true;
410419
} catch (err) {
411-
this._handleException(err);
420+
this.handleException(err);
412421
return false;
413422
}
414423
}
@@ -450,7 +459,7 @@ export class ReplayContainer implements ReplayContainerInterface {
450459
// is started after, it will not have `previousSessionId`
451460
clearSession(this);
452461
} catch (err) {
453-
this._handleException(err);
462+
this.handleException(err);
454463
}
455464
}
456465

@@ -777,15 +786,6 @@ export class ReplayContainer implements ReplayContainerInterface {
777786
this.startRecording();
778787
}
779788

780-
/** A wrapper to conditionally capture exceptions. */
781-
private _handleException(error: unknown): void {
782-
DEBUG_BUILD && logger.error('[Replay]', error);
783-
784-
if (DEBUG_BUILD && this._options._experiments && this._options._experiments.captureExceptions) {
785-
captureException(error);
786-
}
787-
}
788-
789789
/**
790790
* Loads (or refreshes) the current session.
791791
*/
@@ -873,7 +873,7 @@ export class ReplayContainer implements ReplayContainerInterface {
873873
this._hasInitializedCoreListeners = true;
874874
}
875875
} catch (err) {
876-
this._handleException(err);
876+
this.handleException(err);
877877
}
878878

879879
this._performanceCleanupCallback = setupPerformanceObserver(this);
@@ -898,7 +898,7 @@ export class ReplayContainer implements ReplayContainerInterface {
898898
this._performanceCleanupCallback();
899899
}
900900
} catch (err) {
901-
this._handleException(err);
901+
this.handleException(err);
902902
}
903903
}
904904

@@ -1161,7 +1161,7 @@ export class ReplayContainer implements ReplayContainerInterface {
11611161
timestamp,
11621162
});
11631163
} catch (err) {
1164-
this._handleException(err);
1164+
this.handleException(err);
11651165

11661166
// This means we retried 3 times and all of them failed,
11671167
// or we ran into a problem we don't want to retry, like rate limiting.

packages/replay-internal/src/types/replay.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,7 @@ export interface ReplayContainer {
485485
checkAndHandleExpiredSession(): boolean | void;
486486
setInitialState(): void;
487487
getCurrentRoute(): string | undefined;
488+
handleException(err: unknown): void;
488489
}
489490

490491
type RequestBody = null | Blob | BufferSource | FormData | URLSearchParams | string;

packages/replay-internal/src/util/addEvent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ async function _addEvent(
7979
return await replay.eventBuffer.addEvent(eventAfterPossibleCallback);
8080
} catch (error) {
8181
const reason = error && error instanceof EventBufferSizeExceededError ? 'addEventSizeExceeded' : 'addEvent';
82+
replay.handleException(error);
8283

83-
DEBUG_BUILD && logger.error(error);
8484
await replay.stop({ reason });
8585

8686
const client = getClient();

0 commit comments

Comments
 (0)