Skip to content

Commit 7d36657

Browse files
committed
clean ups + add option event
1 parent 258de3f commit 7d36657

File tree

7 files changed

+68
-32
lines changed

7 files changed

+68
-32
lines changed

packages/replay/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
export { Replay } from './integration';
22
export type {
3+
BreadcrumbFrame,
4+
BreadcrumbFrameEvent,
35
ReplayFrame,
46
ReplayFrameEvent,
5-
CrumbFrame,
6-
CrumbFrameEvent,
77
SpanFrame,
88
SpanFrameEvent,
99
} from './types/replayFrame';

packages/replay/src/types/replay.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@ import type {
77
XhrBreadcrumbHint,
88
} from '@sentry/types';
99

10+
import type { SKIPPED, THROTTLED } from '../util/throttle';
1011
import type { AllPerformanceEntry } from './performance';
11-
import type { eventWithTime, recordOptions } from './types/rrweb';
12-
import type { SKIPPED, THROTTLED } from './util/throttle';
12+
import type { ReplayFrameEvent } from './replayFrame';
13+
import type { eventWithTime, recordOptions } from './rrweb';
1314

14-
export * from './types/replayFrame';
15-
16-
export type RecordingEvent = eventWithTime;
15+
export type RecordingEvent = ReplayFrameEvent | eventWithTime;
1716
export type RecordingOptions = recordOptions;
1817

1918
export interface SendReplayData {
@@ -54,7 +53,7 @@ export interface WorkerResponse {
5453
export type AddEventResult = void;
5554

5655
export interface BeforeAddRecordingEvent {
57-
(event: RecordingEvent): RecordingEvent | null | undefined;
56+
(event: ReplayFrameEvent): ReplayFrameEvent | null | undefined;
5857
}
5958

6059
export interface ReplayNetworkOptions {

packages/replay/src/types/replayFrame.ts

Lines changed: 53 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import type { customEvent } from '@sentry-internal/rrweb';
21
import type { Breadcrumb, FetchBreadcrumbData, XhrBreadcrumbData } from '@sentry/types';
32

43
import type { AllEntryData } from './performance';
4+
import type { EventType } from './rrweb';
55

66
interface BaseReplayFrame {
77
timestamp: number;
@@ -10,7 +10,7 @@ interface BaseReplayFrame {
1010
*/
1111
type: string;
1212
category: string;
13-
data?: Record<string, any>;
13+
data?: Record<string, unknown>;
1414
message?: string;
1515
}
1616

@@ -24,10 +24,10 @@ interface BaseDomFrameData {
2424
};
2525
}
2626

27-
/* Crumbs from Core SDK */
27+
/* Breadcrumbs from Core SDK */
2828
interface ConsoleFrameData {
2929
logger: string;
30-
arguments?: any[];
30+
arguments?: unknown[];
3131
}
3232
interface ConsoleFrame extends BaseReplayFrame {
3333
category: 'console';
@@ -60,7 +60,7 @@ interface XhrFrame extends BaseReplayFrame {
6060
data: XhrBreadcrumbData;
6161
}
6262

63-
/* Crumbs from Replay */
63+
/* Breadcrumbs from Replay */
6464
interface MutationFrameData {
6565
count: number;
6666
limit: boolean;
@@ -100,7 +100,21 @@ interface SlowClickFrame extends BaseReplayFrame {
100100
data: SlowClickFrameData;
101101
}
102102

103-
export type CrumbFrame =
103+
interface OptionFrame {
104+
sessionSampleRate: number;
105+
errorSampleRate: number;
106+
useCompressionOption: boolean;
107+
blockAllMedia: boolean;
108+
maskAllText: boolean;
109+
maskAllInputs: boolean;
110+
useCompression: boolean;
111+
networkDetailHasUrls: boolean;
112+
networkCaptureBodies: boolean;
113+
networkRequestHasHeaders: boolean;
114+
networkResponseHasHeaders: boolean;
115+
}
116+
117+
export type BreadcrumbFrame =
104118
| ConsoleFrame
105119
| ClickFrame
106120
| FetchFrame
@@ -121,17 +135,40 @@ export interface SpanFrame {
121135
data: AllEntryData;
122136
}
123137

124-
export type ReplayFrame = CrumbFrame | SpanFrame;
138+
export type ReplayFrame = BreadcrumbFrame | SpanFrame;
139+
140+
interface RecordingCustomEvent {
141+
type: EventType.Custom;
142+
timestamp: number;
143+
data: {
144+
tag: string;
145+
payload: unknown;
146+
};
147+
}
148+
149+
export interface BreadcrumbFrameEvent extends RecordingCustomEvent {
150+
data: {
151+
tag: 'breadcrumb';
152+
payload: BreadcrumbFrame;
153+
/**
154+
* This will indicate to backend to additionally log as a metric
155+
*/
156+
metric?: boolean;
157+
};
158+
}
125159

126-
export interface CrumbFrameEventData {
127-
tag: 'breadcrumb';
128-
payload: CrumbFrame;
160+
export interface SpanFrameEvent extends RecordingCustomEvent {
161+
data: {
162+
tag: 'performanceSpan';
163+
payload: SpanFrame;
164+
};
129165
}
130-
export interface SpanFrameEventData {
131-
tag: 'performanceSpan';
132-
payload: SpanFrame;
166+
167+
export interface OptionFrameEvent extends RecordingCustomEvent {
168+
data: {
169+
tag: 'options';
170+
payload: OptionFrame;
171+
};
133172
}
134173

135-
export type CrumbFrameEvent = customEvent<CrumbFrameEventData>;
136-
export type SpanFrameEvent = customEvent<SpanFrameEventData>;
137-
export type ReplayFrameEvent = CrumbFrameEvent | SpanFrameEvent;
174+
export type ReplayFrameEvent = BreadcrumbFrameEvent | SpanFrameEvent | OptionFrameEvent;

packages/replay/src/util/createBreadcrumb.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import type { CrumbFrame } from '../types/replayFrame';
1+
import type { BreadcrumbFrame } from '../types/replayFrame';
22

33
/**
44
* Create a breadcrumb for a replay.
55
*/
66
export function createBreadcrumb(
7-
breadcrumb: Omit<CrumbFrame, 'timestamp' | 'type'> & Partial<Pick<CrumbFrame, 'timestamp'>>,
8-
): CrumbFrame {
7+
breadcrumb: Omit<BreadcrumbFrame, 'timestamp' | 'type'> & Partial<Pick<BreadcrumbFrame, 'timestamp'>>,
8+
): BreadcrumbFrame {
99
return {
1010
timestamp: Date.now() / 1000,
1111
type: 'default',

packages/replay/src/util/handleRecordingEmit.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { logger } from '@sentry/utils';
22

33
import { saveSession } from '../session/saveSession';
4-
import type { AddEventResult, RecordingEvent, ReplayContainer } from '../types';
4+
import type { AddEventResult, OptionFrameEvent, RecordingEvent, ReplayContainer } from '../types';
55
import { EventType } from '../types/rrweb';
66
import { addEvent } from './addEvent';
77

@@ -121,7 +121,7 @@ export function getHandleRecordingEmit(replay: ReplayContainer): RecordingEmitCa
121121
/**
122122
* Exported for tests
123123
*/
124-
export function createOptionsEvent(replay: ReplayContainer): RecordingEvent {
124+
export function createOptionsEvent(replay: ReplayContainer): OptionFrameEvent {
125125
const options = replay.getOptions();
126126
return {
127127
type: EventType.Custom,

packages/replay/test/integration/beforeAddRecordingEvent.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ describe('Integration | beforeAddRecordingEvent', () => {
3737
({ replay, integration } = await mockSdk({
3838
replayOptions: {
3939
beforeAddRecordingEvent: event => {
40-
const eventData = event.data as Record<string, any>;
40+
const eventData = event.data;
4141

4242
if (eventData.tag === 'breadcrumb' && eventData.payload.category === 'ui.click') {
4343
return {

packages/replay/test/unit/util/handleRecordingEmit.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import { EventType } from '@sentry-internal/rrweb';
22

33
import { BASE_TIMESTAMP } from '../..';
4-
import type { RecordingEvent } from '../../../src/types';
4+
import type { OptionFrameEvent } from '../../../src/types';
55
import * as SentryAddEvent from '../../../src/util/addEvent';
66
import { createOptionsEvent, getHandleRecordingEmit } from '../../../src/util/handleRecordingEmit';
77
import { setupReplayContainer } from '../../utils/setupReplayContainer';
88
import { useFakeTimers } from '../../utils/use-fake-timers';
99

1010
useFakeTimers();
1111

12-
let optionsEvent: RecordingEvent;
12+
let optionsEvent: OptionFrameEvent;
1313

1414
describe('Unit | util | handleRecordingEmit', () => {
1515
let addEventMock: jest.SpyInstance;

0 commit comments

Comments
 (0)