diff --git a/packages/types/src/clientreport.ts b/packages/types/src/clientreport.ts new file mode 100644 index 000000000000..add2194c13ff --- /dev/null +++ b/packages/types/src/clientreport.ts @@ -0,0 +1,7 @@ +import { SentryRequestType } from './request'; +import { Outcome } from './transport'; + +export type ClientReport = { + timestamp: number; + discarded_events: { reason: Outcome; category: SentryRequestType; quantity: number }; +}; diff --git a/packages/types/src/envelope.ts b/packages/types/src/envelope.ts index 27921bc1a097..2a70cea96667 100644 --- a/packages/types/src/envelope.ts +++ b/packages/types/src/envelope.ts @@ -1,70 +1,51 @@ +import { ClientReport } from './clientreport'; import { Event } from './event'; -import { SentryRequestType } from './request'; import { SdkInfo } from './sdkinfo'; import { Session, SessionAggregates } from './session'; -import { Outcome } from './transport'; -import { User } from './user'; +import { UserFeedback } from './user'; // Based on: https://develop.sentry.dev/sdk/envelopes/ -type CommonEnvelopeHeaders = { +export type BaseEnvelopeHeaders = { + [key: string]: unknown; dsn?: string; sdk?: SdkInfo; }; -type CommonEnvelopeItemHeaders = { +export type BaseEnvelopeItemHeaders = { + [key: string]: unknown; + type: string; length?: number; }; -/** - * 1st Item: Item headers - * 2nd Item: Item payload - */ -type BaseEnvelopeItem = [ - CommonEnvelopeItemHeaders & ItemHeader, - Payload, -]; - -type UnknownEnvelopeItem = BaseEnvelopeItem<{ type: '__unknown__' }>; - -type BaseEnvelope< - EnvelopeHeaders extends Record, - EnvelopeItem extends BaseEnvelopeItem<{ type: string }>, -> = { - headers: CommonEnvelopeHeaders & EnvelopeHeaders; - items: Array; -}; - -export type EventEnvelopeItem = BaseEnvelopeItem<{ type: 'event' | 'transaction' }, Event>; - -type AttachmentEnvelopeItem = BaseEnvelopeItem<{ type: 'attachment'; filename: 'string' }>; - -type UserFeedbackEnvelopeItem = BaseEnvelopeItem< - { type: 'user_report' }, - { - event_id: string; - email: User['email']; - name: string; - comments: string; - } ->; - -export type EventEnvelope = BaseEnvelope< - { event_id: string; sent_at: string }, - EventEnvelopeItem | AttachmentEnvelopeItem | UserFeedbackEnvelopeItem ->; - -export type SessionEnvelopeItem = - | BaseEnvelopeItem<{ type: 'session' }, Session> - | BaseEnvelopeItem<{ type: 'sessions' }, SessionAggregates>; - -export type SessionEnvelope = BaseEnvelope<{ sent_at: string }, SessionEnvelopeItem>; - -export type ClientReportEnvelopeItem = BaseEnvelopeItem< - { type: 'client_report' }, - { timestamp: number; discarded_events: { reason: Outcome; category: SentryRequestType; quantity: number } } ->; - -export type ClientReportEnvelope = BaseEnvelope, ClientReportEnvelopeItem>; +export type BaseEnvelopeItem = [IH, P]; // P is for payload + +export type BaseEnvelope< + EH extends BaseEnvelopeHeaders, + I extends BaseEnvelopeItem, +> = [EH, I[]]; + +type EventItemHeaders = { type: 'event' | 'transaction' }; +type AttachmentItemHeaders = { type: 'attachment'; filename: string }; +type UserFeedbackItemHeaders = { type: 'user_report' }; +type SessionItemHeaders = { type: 'session' }; +type SessionAggregatesItemHeaders = { type: 'sessions' }; +type ClientReportItemHeaders = { type: 'client_report' }; + +export type EventItem = BaseEnvelopeItem; +export type AttachmentItem = BaseEnvelopeItem; +export type UserFeedbackItem = BaseEnvelopeItem; +export type SessionItem = + | BaseEnvelopeItem + | BaseEnvelopeItem; +export type ClientReportItem = BaseEnvelopeItem; + +type EventEnvelopeHeaders = { event_id: string; sent_at: string }; +type SessionEnvelopeHeaders = { sent_at: string }; +type ClientReportEnvelopeHeaders = BaseEnvelopeHeaders; + +export type EventEnvelope = BaseEnvelope; +export type SessionEnvelope = BaseEnvelope; +export type ClientReportEnvelope = BaseEnvelope; export type Envelope = EventEnvelope | SessionEnvelope | ClientReportEnvelope; diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 818f50759fa0..996f53c4c685 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,16 +1,23 @@ export { Breadcrumb, BreadcrumbHint } from './breadcrumb'; export { Client } from './client'; +export { ClientReport } from './clientreport'; export { Context, Contexts } from './context'; export { DsnComponents, DsnLike, DsnProtocol } from './dsn'; export { DebugImage, DebugImageType, DebugMeta } from './debugMeta'; export { + AttachmentItem, + BaseEnvelope, + BaseEnvelopeHeaders, + BaseEnvelopeItem, + BaseEnvelopeItemHeaders, ClientReportEnvelope, - ClientReportEnvelopeItem, + ClientReportItem, Envelope, EventEnvelope, - EventEnvelopeItem, + EventItem, SessionEnvelope, - SessionEnvelopeItem, + SessionItem, + UserFeedbackItem, } from './envelope'; export { ExtendedError } from './error'; export { Event, EventHint } from './event'; @@ -58,5 +65,5 @@ export { } from './transaction'; export { Thread } from './thread'; export { Outcome, Transport, TransportOptions, TransportClass } from './transport'; -export { User } from './user'; +export { User, UserFeedback } from './user'; export { WrappedFunction } from './wrappedfunction'; diff --git a/packages/types/src/user.ts b/packages/types/src/user.ts index eae46b008b3e..0f27df252cf6 100644 --- a/packages/types/src/user.ts +++ b/packages/types/src/user.ts @@ -6,3 +6,10 @@ export interface User { email?: string; username?: string; } + +export interface UserFeedback { + event_id: string; + email: User['email']; + name: string; + comments: string; +}