(
payload: IReplayPayload,
{ projectId, sessionId }: { projectId: string; sessionId: string | undefined }
)
| 335 | // Replay only needs the server-issued session id (the SDK echoes it back). Trust |
| 336 | // it — scoped to the authed project, unguessable, same trust level as event data. |
| 337 | export async function handleReplay( |
| 338 | payload: IReplayPayload, |
| 339 | { projectId, sessionId }: { projectId: string; sessionId: string | undefined } |
| 340 | ): Promise<void> { |
| 341 | if (!sessionId) { |
| 342 | throw new HttpError('Session ID is required for replay', { status: 400 }); |
| 343 | } |
| 344 | |
| 345 | const row = { |
| 346 | project_id: projectId, |
| 347 | session_id: sessionId, |
| 348 | chunk_index: payload.chunk_index, |
| 349 | started_at: payload.started_at, |
| 350 | ended_at: payload.ended_at, |
| 351 | events_count: payload.events_count, |
| 352 | is_full_snapshot: payload.is_full_snapshot, |
| 353 | payload: payload.payload, |
| 354 | }; |
| 355 | await replayBuffer.add(row); |
| 356 | } |
| 357 | |
| 358 | async function handleGroup( |
| 359 | payload: IGroupPayload, |
no test coverage detected