|
| 1 | +import { ClientReport } from './clientreport'; |
1 | 2 | import { Event } from './event';
|
2 |
| -import { SentryRequestType } from './request'; |
3 | 3 | import { SdkInfo } from './sdkinfo';
|
4 | 4 | import { Session, SessionAggregates } from './session';
|
5 |
| -import { Outcome } from './transport'; |
6 |
| -import { User } from './user'; |
| 5 | +import { UserFeedback } from './user'; |
7 | 6 |
|
8 | 7 | // Based on: https://develop.sentry.dev/sdk/envelopes/
|
9 | 8 |
|
10 |
| -type CommonEnvelopeHeaders = { |
| 9 | +export type BaseEnvelopeHeaders = { |
| 10 | + [key: string]: unknown; |
11 | 11 | dsn?: string;
|
12 | 12 | sdk?: SdkInfo;
|
13 | 13 | };
|
14 | 14 |
|
15 |
| -type CommonEnvelopeItemHeaders = { |
| 15 | +export type BaseEnvelopeItemHeaders = { |
| 16 | + [key: string]: unknown; |
| 17 | + type: string; |
16 | 18 | length?: number;
|
17 | 19 | };
|
18 | 20 |
|
19 |
| -/** |
20 |
| - * 1st Item: Item headers |
21 |
| - * 2nd Item: Item payload |
22 |
| - */ |
23 |
| -type BaseEnvelopeItem<ItemHeader extends { type: string }, Payload = unknown> = [ |
24 |
| - CommonEnvelopeItemHeaders & ItemHeader, |
25 |
| - Payload, |
26 |
| -]; |
27 |
| - |
28 |
| -type UnknownEnvelopeItem = BaseEnvelopeItem<{ type: '__unknown__' }>; |
29 |
| - |
30 |
| -type BaseEnvelope< |
31 |
| - EnvelopeHeaders extends Record<string, unknown>, |
32 |
| - EnvelopeItem extends BaseEnvelopeItem<{ type: string }>, |
33 |
| -> = { |
34 |
| - headers: CommonEnvelopeHeaders & EnvelopeHeaders; |
35 |
| - items: Array<EnvelopeItem | UnknownEnvelopeItem>; |
36 |
| -}; |
37 |
| - |
38 |
| -export type EventEnvelopeItem = BaseEnvelopeItem<{ type: 'event' | 'transaction' }, Event>; |
39 |
| - |
40 |
| -type AttachmentEnvelopeItem = BaseEnvelopeItem<{ type: 'attachment'; filename: 'string' }>; |
41 |
| - |
42 |
| -type UserFeedbackEnvelopeItem = BaseEnvelopeItem< |
43 |
| - { type: 'user_report' }, |
44 |
| - { |
45 |
| - event_id: string; |
46 |
| - email: User['email']; |
47 |
| - name: string; |
48 |
| - comments: string; |
49 |
| - } |
50 |
| ->; |
51 |
| - |
52 |
| -export type EventEnvelope = BaseEnvelope< |
53 |
| - { event_id: string; sent_at: string }, |
54 |
| - EventEnvelopeItem | AttachmentEnvelopeItem | UserFeedbackEnvelopeItem |
55 |
| ->; |
56 |
| - |
57 |
| -export type SessionEnvelopeItem = |
58 |
| - | BaseEnvelopeItem<{ type: 'session' }, Session> |
59 |
| - | BaseEnvelopeItem<{ type: 'sessions' }, SessionAggregates>; |
60 |
| - |
61 |
| -export type SessionEnvelope = BaseEnvelope<{ sent_at: string }, SessionEnvelopeItem>; |
62 |
| - |
63 |
| -export type ClientReportEnvelopeItem = BaseEnvelopeItem< |
64 |
| - { type: 'client_report' }, |
65 |
| - { timestamp: number; discarded_events: { reason: Outcome; category: SentryRequestType; quantity: number } } |
66 |
| ->; |
67 |
| - |
68 |
| -export type ClientReportEnvelope = BaseEnvelope<Record<string, unknown>, ClientReportEnvelopeItem>; |
| 21 | +export type BaseEnvelopeItem<IH extends BaseEnvelopeItemHeaders, P extends unknown> = [IH, P]; // P is for payload |
| 22 | + |
| 23 | +export type BaseEnvelope< |
| 24 | + EH extends BaseEnvelopeHeaders, |
| 25 | + I extends BaseEnvelopeItem<BaseEnvelopeItemHeaders, unknown>, |
| 26 | +> = [EH, I[]]; |
| 27 | + |
| 28 | +type EventItemHeaders = { type: 'event' | 'transaction' }; |
| 29 | +type AttachmentItemHeaders = { type: 'attachment'; filename: string }; |
| 30 | +type UserFeedbackItemHeaders = { type: 'user_report' }; |
| 31 | +type SessionItemHeaders = { type: 'session' }; |
| 32 | +type SessionAggregatesItemHeaders = { type: 'sessions' }; |
| 33 | +type ClientReportItemHeaders = { type: 'client_report' }; |
| 34 | + |
| 35 | +export type EventItem = BaseEnvelopeItem<EventItemHeaders, Event>; |
| 36 | +export type AttachmentItem = BaseEnvelopeItem<AttachmentItemHeaders, unknown>; |
| 37 | +export type UserFeedbackItem = BaseEnvelopeItem<UserFeedbackItemHeaders, UserFeedback>; |
| 38 | +export type SessionItem = |
| 39 | + | BaseEnvelopeItem<SessionItemHeaders, Session> |
| 40 | + | BaseEnvelopeItem<SessionAggregatesItemHeaders, SessionAggregates>; |
| 41 | +export type ClientReportItem = BaseEnvelopeItem<ClientReportItemHeaders, ClientReport>; |
| 42 | + |
| 43 | +type EventEnvelopeHeaders = { event_id: string; sent_at: string }; |
| 44 | +type SessionEnvelopeHeaders = { sent_at: string }; |
| 45 | +type ClientReportEnvelopeHeaders = BaseEnvelopeHeaders; |
| 46 | + |
| 47 | +export type EventEnvelope = BaseEnvelope<EventEnvelopeHeaders, EventItem | AttachmentItem | UserFeedbackItem>; |
| 48 | +export type SessionEnvelope = BaseEnvelope<SessionEnvelopeHeaders, SessionItem>; |
| 49 | +export type ClientReportEnvelope = BaseEnvelope<ClientReportEnvelopeHeaders, ClientReportItem>; |
69 | 50 |
|
70 | 51 | export type Envelope = EventEnvelope | SessionEnvelope | ClientReportEnvelope;
|
0 commit comments