|
| 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