Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 15 additions & 9 deletions packages/sdk-core/src/BacktraceCoreClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import {
BacktraceAttributeProvider,
BacktraceBreadcrumbs,
BacktraceConfiguration,
BacktraceReportSubmissionResult,
BacktraceRequestHandler,
BacktraceSessionProvider,
BacktraceSubmissionResponse,
DebugIdProvider,
FileSystem,
SdkOptions,
Expand All @@ -16,11 +18,11 @@ import { ReportEvents } from './events/ReportEvents';
import { AttributeType, BacktraceData } from './model/data/BacktraceData';
import { BacktraceReportSubmission, RequestBacktraceReportSubmission } from './model/http/BacktraceReportSubmission';
import { BacktraceReport } from './model/report/BacktraceReport';
import { BacktraceModule, BacktraceModuleBindData } from './modules/BacktraceModule';
import { BacktraceModuleCtor, BacktraceModules, ReadonlyBacktraceModules } from './modules/BacktraceModules';
import { AttributeManager } from './modules/attribute/AttributeManager';
import { ClientAttributeProvider } from './modules/attribute/ClientAttributeProvider';
import { UserAttributeProvider } from './modules/attribute/UserAttributeProvider';
import { BacktraceModule, BacktraceModuleBindData } from './modules/BacktraceModule';
import { BacktraceModuleCtor, BacktraceModules, ReadonlyBacktraceModules } from './modules/BacktraceModules';
import { BreadcrumbsManager } from './modules/breadcrumbs/BreadcrumbsManager';
import { V8StackTraceConverter } from './modules/converter/V8StackTraceConverter';
import { BacktraceDataBuilder } from './modules/data/BacktraceDataBuilder';
Expand Down Expand Up @@ -270,25 +272,28 @@ export abstract class BacktraceCoreClient<O extends BacktraceConfiguration = Bac
attributes?: Record<string, unknown>,
attachments?: BacktraceAttachment[],
abortSignal?: AbortSignal,
): Promise<void>;
): Promise<BacktraceReportSubmissionResult<BacktraceSubmissionResponse>>;
/**
* Asynchronously sends error data to Backtrace
* @param report Backtrace Report
* @param abortSignal Signal to abort sending
*/
public send(report: BacktraceReport, abortSignal?: AbortSignal): Promise<void>;
public send(
report: BacktraceReport,
abortSignal?: AbortSignal,
): Promise<BacktraceReportSubmissionResult<BacktraceSubmissionResponse>>;
// This function CANNOT be an async function due to possible async state machine stack frame inclusion, which breaks the skip stacks
public send(
data: BacktraceReport | Error | string,
reportAttributesOrAbortSignal?: Record<string, unknown> | AbortSignal,
reportAttachments: BacktraceAttachment[] = [],
abortSignal?: AbortSignal,
): Promise<void> {
): Promise<BacktraceReportSubmissionResult<BacktraceSubmissionResponse>> {
if (!this._enabled) {
return Promise.resolve();
return Promise.resolve(BacktraceReportSubmissionResult.SdkDisabled());
}
if (this._rateLimitWatcher.skipReport()) {
return Promise.resolve();
return Promise.resolve(BacktraceReportSubmissionResult.OnLimitReached('Client'));
}

// If data is BacktraceReport, we know that the second argument should be only AbortSignal
Expand All @@ -308,12 +313,12 @@ export abstract class BacktraceCoreClient<O extends BacktraceConfiguration = Bac
this.reportEvents.emit('before-skip', report);

if (this.options.skipReport && this.options.skipReport(report)) {
return Promise.resolve();
return Promise.resolve(BacktraceReportSubmissionResult.ReportSkipped());
}

const backtraceData = this.generateSubmissionData(report);
if (!backtraceData) {
return Promise.resolve();
return Promise.resolve(BacktraceReportSubmissionResult.ReportSkipped());
}

const submissionAttachments = this.generateSubmissionAttachments(report, reportAttachments);
Expand All @@ -324,6 +329,7 @@ export abstract class BacktraceCoreClient<O extends BacktraceConfiguration = Bac
.send(backtraceData, submissionAttachments, abortSignal)
.then((submissionResult) => {
this.reportEvents.emit('after-send', report, backtraceData, submissionAttachments, submissionResult);
return submissionResult;
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,16 @@ export class BacktraceReportSubmissionResult<T> {
this._result = statusOrResponse;
}

public static OnLimitReached<T>(): BacktraceReportSubmissionResult<T> {
return new BacktraceReportSubmissionResult('Limit reached', 'Client report limit reached');
public static OnLimitReached<T>(target: 'Server' | 'Client' = 'Server'): BacktraceReportSubmissionResult<T> {
return new BacktraceReportSubmissionResult('Limit reached', `${target} report limit reached`);
}

public static SdkDisabled<T>(): BacktraceReportSubmissionResult<T> {
return new BacktraceReportSubmissionResult<T>('Disabled SDK');
}

public static ReportSkipped<T>(): BacktraceReportSubmissionResult<T> {
return new BacktraceReportSubmissionResult<T>('Report skipped');
}

public static OnInternalServerError<T>(message: string): BacktraceReportSubmissionResult<T> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ export type BacktraceSubmissionStatus =
*/
| 'Ok'
/**
* Set on networking error (for example: connection reset )
* Set on networking error (for example: connection reset)
*/
| 'Network Error'
/**
* Set on internal server error.
* Set on internal server error
*/
| 'Server Error'
/**
Expand All @@ -22,4 +22,12 @@ export type BacktraceSubmissionStatus =
/**
* Unknown error
*/
| 'Unknown';
| 'Unknown'
/**
* SDK is disabled
*/
| 'Disabled SDK'
/**
* Due to before skip event or skipReport callback the user decided to skip the report
*/
| 'Report skipped';
2 changes: 2 additions & 0 deletions packages/sdk-core/src/model/data/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export * from './BacktraceData';
export * from './BacktraceStackTrace';
export * from './BacktraceSubmissionResult';
export * from './BacktraceSubmissionStatus';
export * from './JavaScriptEngine';
4 changes: 2 additions & 2 deletions packages/sdk-core/src/model/http/BacktraceReportSubmission.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import { jsonEscaper } from '../../common/jsonEscaper';
import { BacktraceAttachment } from '../attachment';
import { BacktraceConfiguration } from '../configuration/BacktraceConfiguration';
import { BacktraceData } from '../data/BacktraceData';
import { BacktraceReportSubmissionResult } from '../data/BacktraceSubmissionResult';
import { BacktraceRequestHandler } from './BacktraceRequestHandler';
import { SubmissionUrlInformation } from './SubmissionUrlInformation';
import { BacktraceSubmissionResponse } from './model/BacktraceSubmissionResponse';
import { BacktraceReportSubmissionResult } from './model/BacktraceSubmissionResult';
import { SubmissionUrlInformation } from './SubmissionUrlInformation';

export interface BacktraceReportSubmission {
send(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { BacktraceAttachment } from '../attachment';
import { BacktraceReportSubmissionResult } from '../data/BacktraceSubmissionResult';
import { BacktraceSubmissionResponse } from './model/BacktraceSubmissionResponse';
import { BacktraceReportSubmissionResult } from './model/BacktraceSubmissionResult';
export const DEFAULT_TIMEOUT = 15_000;
export interface BacktraceRequestHandler {
/**
Expand Down
5 changes: 2 additions & 3 deletions packages/sdk-core/src/model/http/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
export * from '../data/BacktraceSubmissionResult';
export * from './BacktraceReportSubmission';
export * from './BacktraceRequestHandler';
export * from './SubmissionUrlInformation';
export * from './common/ConnectionError';
export * from './model/BacktraceSubmissionResponse';
export * from './model/BacktraceSubmissionResult';
export * from './model/BacktraceSubmissionStatus';
export * from './SubmissionUrlInformation';