sentry-vir 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/event-context/event-context.d.ts +9 -1
- package/dist/cjs/event-context/event-context.js +10 -2
- package/dist/cjs/event-context/event-severity.d.ts +23 -8
- package/dist/cjs/event-context/event-severity.js +3 -11
- package/dist/cjs/event-context/extra-context.error.js +8 -0
- package/dist/cjs/init-sentry/base-sentry-init.js +1 -1
- package/dist/cjs/logging/attach-tags.js +1 -1
- package/dist/cjs/logging/handle-error.js +20 -8
- package/dist/cjs/logging/premature-events.d.ts +1 -6
- package/dist/cjs/logging/premature-events.js +2 -2
- package/dist/cjs/logging/send-log.d.ts +2 -2
- package/dist/cjs/logging/send-log.js +21 -10
- package/dist/cjs/processing/event-processor.d.ts +7 -1
- package/dist/cjs/processing/event-processor.js +13 -1
- package/dist/cjs/processing/handle-sentry-send.d.ts +0 -6
- package/dist/cjs/processing/handle-sentry-send.js +5 -28
- package/dist/cjs/processing/log-to-console.d.ts +20 -0
- package/dist/cjs/processing/log-to-console.js +49 -0
- package/dist/esm/event-context/event-context.d.ts +9 -1
- package/dist/esm/event-context/event-context.js +10 -2
- package/dist/esm/event-context/event-severity.d.ts +23 -8
- package/dist/esm/event-context/event-severity.js +2 -9
- package/dist/esm/event-context/extra-context.error.js +8 -0
- package/dist/esm/init-sentry/base-sentry-init.js +1 -1
- package/dist/esm/logging/attach-tags.js +1 -1
- package/dist/esm/logging/handle-error.js +19 -7
- package/dist/esm/logging/premature-events.d.ts +1 -6
- package/dist/esm/logging/premature-events.js +2 -2
- package/dist/esm/logging/send-log.d.ts +2 -2
- package/dist/esm/logging/send-log.js +21 -10
- package/dist/esm/processing/event-processor.d.ts +7 -1
- package/dist/esm/processing/event-processor.js +11 -0
- package/dist/esm/processing/handle-sentry-send.d.ts +0 -6
- package/dist/esm/processing/handle-sentry-send.js +4 -26
- package/dist/esm/processing/log-to-console.d.ts +20 -0
- package/dist/esm/processing/log-to-console.js +44 -0
- package/package.json +29 -24
|
@@ -12,5 +12,13 @@ export type EventDetails = {
|
|
|
12
12
|
extraContext?: EventExtraContext | undefined;
|
|
13
13
|
severity: EventSeverityEnum;
|
|
14
14
|
};
|
|
15
|
+
/** Options for creating contexts. Used internally. */
|
|
16
|
+
export type ContextOptions = {
|
|
17
|
+
/**
|
|
18
|
+
* If true, this means the message was sent before Sentry was initialized, which slightly
|
|
19
|
+
* changes how the event is logged in the browser.
|
|
20
|
+
*/
|
|
21
|
+
wasSentPrematurely: boolean;
|
|
22
|
+
};
|
|
15
23
|
/** Maps internal EventDetails type to Sentry's required type for event severity and extra context. */
|
|
16
|
-
export declare function convertEventDetailsToSentryContext(eventDetails: EventDetails): Pick<ScopeContext, 'extra' | 'level'>;
|
|
24
|
+
export declare function convertEventDetailsToSentryContext(eventDetails: EventDetails, options: ContextOptions): Pick<ScopeContext, 'extra' | 'level'>;
|
|
@@ -2,9 +2,17 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.convertEventDetailsToSentryContext = void 0;
|
|
4
4
|
/** Maps internal EventDetails type to Sentry's required type for event severity and extra context. */
|
|
5
|
-
function convertEventDetailsToSentryContext(eventDetails) {
|
|
5
|
+
function convertEventDetailsToSentryContext(eventDetails, options) {
|
|
6
|
+
const extra = {
|
|
7
|
+
...(options.wasSentPrematurely
|
|
8
|
+
? {
|
|
9
|
+
wasSentPrematurely: true,
|
|
10
|
+
}
|
|
11
|
+
: {}),
|
|
12
|
+
...eventDetails.extraContext,
|
|
13
|
+
};
|
|
6
14
|
return {
|
|
7
|
-
extra
|
|
15
|
+
extra,
|
|
8
16
|
level: eventDetails.severity,
|
|
9
17
|
};
|
|
10
18
|
}
|
|
@@ -9,13 +9,28 @@ export declare enum EventSeverityEnum {
|
|
|
9
9
|
}
|
|
10
10
|
/** Event severities that are not error-level. */
|
|
11
11
|
export type InfoEventSeverity = EventSeverityEnum.Debug | EventSeverityEnum.Info | EventSeverityEnum.Warning;
|
|
12
|
+
/** Maps severities to the console methods used to log them. */
|
|
13
|
+
export declare const consoleLogMethodPerSeverity: {
|
|
14
|
+
readonly warning: {
|
|
15
|
+
(...data: any[]): void;
|
|
16
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
17
|
+
};
|
|
18
|
+
readonly info: {
|
|
19
|
+
(...data: any[]): void;
|
|
20
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
21
|
+
};
|
|
22
|
+
readonly debug: {
|
|
23
|
+
(...data: any[]): void;
|
|
24
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
25
|
+
};
|
|
26
|
+
readonly fatal: {
|
|
27
|
+
(...data: any[]): void;
|
|
28
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
29
|
+
};
|
|
30
|
+
readonly error: {
|
|
31
|
+
(...data: any[]): void;
|
|
32
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
12
35
|
/** Extracts the severity level from a sentry event while defaulting to an info level severity. */
|
|
13
36
|
export declare function extractEventSeverity(event: SentryEvent): EventSeverityEnum;
|
|
14
|
-
/**
|
|
15
|
-
* Determines which console method should be used for local logging based on the given event's
|
|
16
|
-
* severity.
|
|
17
|
-
*/
|
|
18
|
-
export declare function getConsoleMethodForSeverity(event: SentryEvent): {
|
|
19
|
-
(...data: any[]): void;
|
|
20
|
-
(message?: any, ...optionalParams: any[]): void;
|
|
21
|
-
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.extractEventSeverity = exports.consoleLogMethodPerSeverity = exports.EventSeverityEnum = void 0;
|
|
4
4
|
const common_1 = require("@augment-vir/common");
|
|
5
5
|
/** Mapped from Sentry's values into an enum for convenience of use. */
|
|
6
6
|
var EventSeverityEnum;
|
|
@@ -11,7 +11,8 @@ var EventSeverityEnum;
|
|
|
11
11
|
EventSeverityEnum["Fatal"] = "fatal";
|
|
12
12
|
EventSeverityEnum["Error"] = "error";
|
|
13
13
|
})(EventSeverityEnum || (exports.EventSeverityEnum = EventSeverityEnum = {}));
|
|
14
|
-
|
|
14
|
+
/** Maps severities to the console methods used to log them. */
|
|
15
|
+
exports.consoleLogMethodPerSeverity = {
|
|
15
16
|
[EventSeverityEnum.Warning]: console.warn,
|
|
16
17
|
[EventSeverityEnum.Info]: console.info,
|
|
17
18
|
[EventSeverityEnum.Debug]: console.debug,
|
|
@@ -26,12 +27,3 @@ function extractEventSeverity(event) {
|
|
|
26
27
|
return event.level;
|
|
27
28
|
}
|
|
28
29
|
exports.extractEventSeverity = extractEventSeverity;
|
|
29
|
-
/**
|
|
30
|
-
* Determines which console method should be used for local logging based on the given event's
|
|
31
|
-
* severity.
|
|
32
|
-
*/
|
|
33
|
-
function getConsoleMethodForSeverity(event) {
|
|
34
|
-
const severity = extractEventSeverity(event);
|
|
35
|
-
return consoleLogMethodsPerSeverity[severity];
|
|
36
|
-
}
|
|
37
|
-
exports.getConsoleMethodForSeverity = getConsoleMethodForSeverity;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var _a;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.throwWithExtraContext = exports.ExtraContextError = void 0;
|
|
4
5
|
const common_1 = require("@augment-vir/common");
|
|
@@ -19,10 +20,17 @@ const extra_event_context_1 = require("./extra-event-context");
|
|
|
19
20
|
class ExtraContextError extends Error {
|
|
20
21
|
constructor(message, extraData) {
|
|
21
22
|
super(message);
|
|
23
|
+
Object.defineProperty(this, _a, {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: void 0
|
|
28
|
+
});
|
|
22
29
|
this[extra_event_context_1.extraEventContextSymbol] = extraData;
|
|
23
30
|
}
|
|
24
31
|
}
|
|
25
32
|
exports.ExtraContextError = ExtraContextError;
|
|
33
|
+
_a = extra_event_context_1.extraEventContextSymbol;
|
|
26
34
|
/**
|
|
27
35
|
* Adds extra context to an error without modifying the error's message or stack trace (or any of
|
|
28
36
|
* its other properties), then throws the error so it can propagate as usual.
|
|
@@ -17,7 +17,7 @@ async function baseInitSentry({ dsn, releaseEnv, releaseName, sentryConfigOverri
|
|
|
17
17
|
release: releaseName,
|
|
18
18
|
}, sentryConfigOverrides, isDev);
|
|
19
19
|
sentryDep.init(finalSentryConfig);
|
|
20
|
-
sentryDep.
|
|
20
|
+
sentryDep.addEventProcessor((event, hint) => (0, event_processor_1.processSentryEvent)(event, hint, createUniversalContext));
|
|
21
21
|
(0, sentry_client_for_logging_1.setSentryClientForLogging)(sentryDep);
|
|
22
22
|
return sentryDep;
|
|
23
23
|
}
|
|
@@ -7,7 +7,7 @@ const sentry_client_for_logging_1 = require("./sentry-client-for-logging");
|
|
|
7
7
|
function attachSentryTags(tags) {
|
|
8
8
|
try {
|
|
9
9
|
if (!sentry_client_for_logging_1.sentryClientForLogging) {
|
|
10
|
-
(0, premature_events_1.addPrematureEvent)(
|
|
10
|
+
(0, premature_events_1.addPrematureEvent)(attachSentryTags, [tags]);
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
13
|
sentry_client_for_logging_1.sentryClientForLogging.setTags(tags);
|
|
@@ -1,27 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handleError = void 0;
|
|
4
|
+
const common_1 = require("@augment-vir/common");
|
|
4
5
|
const event_context_1 = require("../event-context/event-context");
|
|
5
6
|
const event_severity_1 = require("../event-context/event-severity");
|
|
7
|
+
const log_to_console_1 = require("../processing/log-to-console");
|
|
6
8
|
const premature_events_1 = require("./premature-events");
|
|
7
9
|
const sentry_client_for_logging_1 = require("./sentry-client-for-logging");
|
|
8
10
|
/** Record an error to Sentry without throwing it. */
|
|
9
11
|
function handleError(error, extraContext) {
|
|
12
|
+
return internalHandleError(error, extraContext, {
|
|
13
|
+
wasSentPrematurely: false,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
exports.handleError = handleError;
|
|
17
|
+
function internalHandleError(error, extraContext, options) {
|
|
10
18
|
try {
|
|
11
19
|
if (!sentry_client_for_logging_1.sentryClientForLogging) {
|
|
12
|
-
(0,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
(0, log_to_console_1.logToConsoleWithoutSentry)(event_severity_1.EventSeverityEnum.Error, log_to_console_1.LoggingState.NoSentryYet, {
|
|
21
|
+
message: (0, common_1.extractErrorMessage)(error),
|
|
22
|
+
event: undefined,
|
|
23
|
+
extra: extraContext,
|
|
24
|
+
hint: undefined,
|
|
25
|
+
originalException: error,
|
|
18
26
|
});
|
|
27
|
+
(0, premature_events_1.addPrematureEvent)(internalHandleError, [
|
|
28
|
+
error,
|
|
29
|
+
extraContext,
|
|
30
|
+
{ wasSentPrematurely: true },
|
|
31
|
+
]);
|
|
19
32
|
return undefined;
|
|
20
33
|
}
|
|
21
34
|
const scopeContext = (0, event_context_1.convertEventDetailsToSentryContext)({
|
|
22
35
|
extraContext,
|
|
23
36
|
severity: event_severity_1.EventSeverityEnum.Error,
|
|
24
|
-
});
|
|
37
|
+
}, options);
|
|
25
38
|
const eventId = sentry_client_for_logging_1.sentryClientForLogging.captureException(error, scopeContext);
|
|
26
39
|
return eventId;
|
|
27
40
|
}
|
|
@@ -30,4 +43,3 @@ function handleError(error, extraContext) {
|
|
|
30
43
|
return undefined;
|
|
31
44
|
}
|
|
32
45
|
}
|
|
33
|
-
exports.handleError = handleError;
|
|
@@ -1,8 +1,3 @@
|
|
|
1
1
|
import { AnyFunction } from '@augment-vir/common';
|
|
2
|
-
/** An event that was triggered before setSentryClientForLogging was called. */
|
|
3
|
-
export type PrematureEvent<EntryPointFunction extends AnyFunction = AnyFunction> = {
|
|
4
|
-
callback: EntryPointFunction;
|
|
5
|
-
inputs: Parameters<EntryPointFunction>;
|
|
6
|
-
};
|
|
7
2
|
export declare function sendPrematureEvents(): void;
|
|
8
|
-
export declare function addPrematureEvent(
|
|
3
|
+
export declare function addPrematureEvent<EntryPointFunction extends AnyFunction = AnyFunction>(callback: EntryPointFunction, inputs: Parameters<EntryPointFunction>): void;
|
|
@@ -21,7 +21,7 @@ function sendPrematureEvents() {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
exports.sendPrematureEvents = sendPrematureEvents;
|
|
24
|
-
function addPrematureEvent(
|
|
25
|
-
prematureSentryEvents.push(
|
|
24
|
+
function addPrematureEvent(callback, inputs) {
|
|
25
|
+
prematureSentryEvents.push({ callback, inputs });
|
|
26
26
|
}
|
|
27
27
|
exports.addPrematureEvent = addPrematureEvent;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Event as SentryEvent } from '@sentry/types';
|
|
2
|
-
import { EventDetails, EventExtraContext } from '../event-context/event-context';
|
|
2
|
+
import { ContextOptions, EventDetails, EventExtraContext } from '../event-context/event-context';
|
|
3
3
|
/** Send non-error events to Sentry. */
|
|
4
4
|
export declare const sendLog: {
|
|
5
5
|
/** Sends an even to Sentry with debug severity. */
|
|
@@ -9,5 +9,5 @@ export declare const sendLog: {
|
|
|
9
9
|
/** Sends an even to Sentry with warning severity. */
|
|
10
10
|
readonly warning: (info: Parameters<typeof sendLogToSentry>[0], extraContext?: EventExtraContext) => string | undefined;
|
|
11
11
|
};
|
|
12
|
-
declare function sendLogToSentry(logInfo: string | Omit<SentryEvent, 'extra' | 'level'>, eventDetails: EventDetails): string | undefined;
|
|
12
|
+
declare function sendLogToSentry(logInfo: string | Omit<SentryEvent, 'extra' | 'level'>, eventDetails: EventDetails, options: ContextOptions): string | undefined;
|
|
13
13
|
export {};
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sendLog = void 0;
|
|
4
|
-
const
|
|
4
|
+
const run_time_assertions_1 = require("run-time-assertions");
|
|
5
5
|
const event_context_1 = require("../event-context/event-context");
|
|
6
6
|
const event_severity_1 = require("../event-context/event-severity");
|
|
7
|
+
const event_processor_1 = require("../processing/event-processor");
|
|
8
|
+
const log_to_console_1 = require("../processing/log-to-console");
|
|
7
9
|
const premature_events_1 = require("./premature-events");
|
|
8
10
|
const sentry_client_for_logging_1 = require("./sentry-client-for-logging");
|
|
9
11
|
/** Send non-error events to Sentry. */
|
|
@@ -20,23 +22,32 @@ function wrapLogWithSeverity(severity) {
|
|
|
20
22
|
return sendLogToSentry(info, {
|
|
21
23
|
extraContext,
|
|
22
24
|
severity,
|
|
25
|
+
}, {
|
|
26
|
+
wasSentPrematurely: false,
|
|
23
27
|
});
|
|
24
28
|
};
|
|
25
29
|
}
|
|
26
|
-
function sendLogToSentry(logInfo, eventDetails) {
|
|
30
|
+
function sendLogToSentry(logInfo, eventDetails, options) {
|
|
27
31
|
try {
|
|
28
32
|
if (!sentry_client_for_logging_1.sentryClientForLogging) {
|
|
29
|
-
(0,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
logInfo,
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
(0, log_to_console_1.logToConsoleWithoutSentry)(eventDetails.severity, log_to_console_1.LoggingState.NoSentryYet, {
|
|
34
|
+
message: (0, run_time_assertions_1.isRunTimeType)(logInfo, 'string')
|
|
35
|
+
? logInfo
|
|
36
|
+
: (0, event_processor_1.extractOriginalMessage)(logInfo, undefined),
|
|
37
|
+
event: (0, run_time_assertions_1.isRunTimeType)(logInfo, 'string') ? undefined : logInfo,
|
|
38
|
+
extra: eventDetails.extraContext,
|
|
39
|
+
hint: undefined,
|
|
40
|
+
originalException: undefined,
|
|
35
41
|
});
|
|
42
|
+
(0, premature_events_1.addPrematureEvent)(sendLogToSentry, [
|
|
43
|
+
logInfo,
|
|
44
|
+
eventDetails,
|
|
45
|
+
{ wasSentPrematurely: true },
|
|
46
|
+
]);
|
|
36
47
|
return undefined;
|
|
37
48
|
}
|
|
38
|
-
const scopeContext = (0, event_context_1.convertEventDetailsToSentryContext)(eventDetails);
|
|
39
|
-
const eventId = (0,
|
|
49
|
+
const scopeContext = (0, event_context_1.convertEventDetailsToSentryContext)(eventDetails, options);
|
|
50
|
+
const eventId = (0, run_time_assertions_1.isRunTimeType)(logInfo, 'string')
|
|
40
51
|
? sentry_client_for_logging_1.sentryClientForLogging.captureMessage(logInfo, scopeContext)
|
|
41
52
|
: sentry_client_for_logging_1.sentryClientForLogging.captureEvent({
|
|
42
53
|
...logInfo,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ErrorEvent, EventHint, Event as SentryEvent, TransactionEvent } from '@sentry/types';
|
|
2
2
|
import { EventExtraContextCreator } from '../event-context/event-context';
|
|
3
3
|
/** Attach extra event data for a sentry event. */
|
|
4
4
|
export declare function processSentryEvent(
|
|
@@ -8,3 +8,9 @@ event: SentryEvent,
|
|
|
8
8
|
hint: EventHint,
|
|
9
9
|
/** Optional callback for creating extra event context. */
|
|
10
10
|
createUniversalContext?: EventExtraContextCreator | undefined): SentryEvent;
|
|
11
|
+
/** Tries to extract the original event message from different possible Sentry types. */
|
|
12
|
+
export declare function extractOriginalMessage(
|
|
13
|
+
/** Event from Sentry. */
|
|
14
|
+
event: Pick<TransactionEvent | ErrorEvent, 'message'>,
|
|
15
|
+
/** EventHint generated by Sentry. */
|
|
16
|
+
hint: EventHint | undefined): string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processSentryEvent = void 0;
|
|
3
|
+
exports.extractOriginalMessage = exports.processSentryEvent = void 0;
|
|
4
4
|
const common_1 = require("@augment-vir/common");
|
|
5
5
|
const event_context_1 = require("../event-context/event-context");
|
|
6
6
|
const event_severity_1 = require("../event-context/event-severity");
|
|
@@ -22,8 +22,20 @@ createUniversalContext) {
|
|
|
22
22
|
const sentryContext = (0, event_context_1.convertEventDetailsToSentryContext)({
|
|
23
23
|
severity: (0, event_severity_1.extractEventSeverity)(event),
|
|
24
24
|
extraContext,
|
|
25
|
+
}, {
|
|
26
|
+
wasSentPrematurely: false,
|
|
25
27
|
});
|
|
26
28
|
Object.assign(event, sentryContext);
|
|
27
29
|
return event;
|
|
28
30
|
}
|
|
29
31
|
exports.processSentryEvent = processSentryEvent;
|
|
32
|
+
/** Tries to extract the original event message from different possible Sentry types. */
|
|
33
|
+
function extractOriginalMessage(
|
|
34
|
+
/** Event from Sentry. */
|
|
35
|
+
event,
|
|
36
|
+
/** EventHint generated by Sentry. */
|
|
37
|
+
hint) {
|
|
38
|
+
const message = event.message || (0, common_1.extractErrorMessage)(hint?.originalException);
|
|
39
|
+
return message;
|
|
40
|
+
}
|
|
41
|
+
exports.extractOriginalMessage = extractOriginalMessage;
|
|
@@ -4,9 +4,3 @@ import type { ErrorEvent, TransactionEvent } from '@sentry/types';
|
|
|
4
4
|
export declare function createSentryHandler(
|
|
5
5
|
/** If in dev, events won't be sent to Sentry. They will only be logged in the console. */
|
|
6
6
|
isDev: boolean): (event: TransactionEvent | ErrorEvent, hint: EventHint) => TransactionEvent | ErrorEvent | null;
|
|
7
|
-
/** Tries to extract the original event message from different possible Sentry types. */
|
|
8
|
-
export declare function extractOriginalMessage(
|
|
9
|
-
/** Event from Sentry. */
|
|
10
|
-
event: TransactionEvent | ErrorEvent,
|
|
11
|
-
/** EventHint generated by Sentry. */
|
|
12
|
-
hint: EventHint): string;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
const event_severity_1 = require("../event-context/event-severity");
|
|
3
|
+
exports.createSentryHandler = void 0;
|
|
4
|
+
const log_to_console_1 = require("./log-to-console");
|
|
6
5
|
/** Creates a handler for Sentry events based on the given env. */
|
|
7
6
|
function createSentryHandler(
|
|
8
7
|
/** If in dev, events won't be sent to Sentry. They will only be logged in the console. */
|
|
@@ -13,33 +12,11 @@ isDev) {
|
|
|
13
12
|
event,
|
|
14
13
|
/** The EventHint generated by Sentry. */
|
|
15
14
|
hint) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const logArgs = [
|
|
19
|
-
message,
|
|
20
|
-
event.extra,
|
|
21
|
-
{ event, hint },
|
|
22
|
-
hint.originalException,
|
|
23
|
-
].filter(common_1.isTruthy);
|
|
24
|
-
if (isDev) {
|
|
25
|
-
consoleMethod('Would have sent to Sentry:', ...logArgs);
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
consoleMethod('Sending to Sentry:', ...logArgs);
|
|
30
|
-
return event;
|
|
15
|
+
if (!event.extra?.wasSentPrematurely) {
|
|
16
|
+
(0, log_to_console_1.logToConsoleFromSentry)(event, hint, isDev ? log_to_console_1.LoggingState.Dev : log_to_console_1.LoggingState.Prod);
|
|
31
17
|
}
|
|
18
|
+
return isDev ? null : event;
|
|
32
19
|
}
|
|
33
20
|
return handleSentrySend;
|
|
34
21
|
}
|
|
35
22
|
exports.createSentryHandler = createSentryHandler;
|
|
36
|
-
/** Tries to extract the original event message from different possible Sentry types. */
|
|
37
|
-
function extractOriginalMessage(
|
|
38
|
-
/** Event from Sentry. */
|
|
39
|
-
event,
|
|
40
|
-
/** EventHint generated by Sentry. */
|
|
41
|
-
hint) {
|
|
42
|
-
const message = event.message || (0, common_1.extractErrorMessage)(hint.originalException);
|
|
43
|
-
return message;
|
|
44
|
-
}
|
|
45
|
-
exports.extractOriginalMessage = extractOriginalMessage;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EventHint } from '@sentry/browser';
|
|
2
|
+
import { Event, Extras } from '@sentry/types';
|
|
3
|
+
import { EventSeverityEnum } from '../event-context/event-severity';
|
|
4
|
+
export declare enum LoggingState {
|
|
5
|
+
Dev = "dev",
|
|
6
|
+
Prod = "prod",
|
|
7
|
+
NoSentryYet = "no-sentry-yet"
|
|
8
|
+
}
|
|
9
|
+
export declare function logToConsoleFromSentry(
|
|
10
|
+
/** The event from Sentry. */
|
|
11
|
+
event: Event,
|
|
12
|
+
/** The EventHint generated by Sentry. */
|
|
13
|
+
hint: EventHint, loggingState: LoggingState): void;
|
|
14
|
+
export declare function logToConsoleWithoutSentry(severity: EventSeverityEnum, loggingState: LoggingState, logData: {
|
|
15
|
+
message: string;
|
|
16
|
+
extra: undefined | Extras;
|
|
17
|
+
event: Event | undefined;
|
|
18
|
+
hint: EventHint | undefined;
|
|
19
|
+
originalException: unknown;
|
|
20
|
+
}): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logToConsoleWithoutSentry = exports.logToConsoleFromSentry = exports.LoggingState = void 0;
|
|
4
|
+
const common_1 = require("@augment-vir/common");
|
|
5
|
+
const event_severity_1 = require("../event-context/event-severity");
|
|
6
|
+
const event_processor_1 = require("./event-processor");
|
|
7
|
+
var LoggingState;
|
|
8
|
+
(function (LoggingState) {
|
|
9
|
+
LoggingState["Dev"] = "dev";
|
|
10
|
+
LoggingState["Prod"] = "prod";
|
|
11
|
+
LoggingState["NoSentryYet"] = "no-sentry-yet";
|
|
12
|
+
})(LoggingState || (exports.LoggingState = LoggingState = {}));
|
|
13
|
+
function logToConsoleFromSentry(
|
|
14
|
+
/** The event from Sentry. */
|
|
15
|
+
event,
|
|
16
|
+
/** The EventHint generated by Sentry. */
|
|
17
|
+
hint, loggingState) {
|
|
18
|
+
logToConsoleWithoutSentry((0, event_severity_1.extractEventSeverity)(event), loggingState, {
|
|
19
|
+
event,
|
|
20
|
+
extra: event.extra,
|
|
21
|
+
hint,
|
|
22
|
+
message: (0, event_processor_1.extractOriginalMessage)(event, hint),
|
|
23
|
+
originalException: hint.originalException,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
exports.logToConsoleFromSentry = logToConsoleFromSentry;
|
|
27
|
+
function logToConsoleWithoutSentry(severity, loggingState, logData) {
|
|
28
|
+
const consoleMethod = event_severity_1.consoleLogMethodPerSeverity[severity];
|
|
29
|
+
const eventLogArg = {
|
|
30
|
+
...(logData.event ? { event: logData.event } : undefined),
|
|
31
|
+
...(logData.hint ? { hint: logData.hint } : undefined),
|
|
32
|
+
};
|
|
33
|
+
const logArgs = [
|
|
34
|
+
logData.message,
|
|
35
|
+
logData.extra,
|
|
36
|
+
Object.keys(eventLogArg).length ? eventLogArg : undefined,
|
|
37
|
+
logData.originalException,
|
|
38
|
+
].filter(common_1.isTruthy);
|
|
39
|
+
if (loggingState === LoggingState.Dev) {
|
|
40
|
+
consoleMethod('Would have sent to Sentry:', ...logArgs);
|
|
41
|
+
}
|
|
42
|
+
else if (loggingState === LoggingState.Prod) {
|
|
43
|
+
consoleMethod('Sending to Sentry:', ...logArgs);
|
|
44
|
+
}
|
|
45
|
+
else if (loggingState === LoggingState.NoSentryYet) {
|
|
46
|
+
consoleMethod('Logging before Sentry init:', ...logArgs);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.logToConsoleWithoutSentry = logToConsoleWithoutSentry;
|
|
@@ -12,5 +12,13 @@ export type EventDetails = {
|
|
|
12
12
|
extraContext?: EventExtraContext | undefined;
|
|
13
13
|
severity: EventSeverityEnum;
|
|
14
14
|
};
|
|
15
|
+
/** Options for creating contexts. Used internally. */
|
|
16
|
+
export type ContextOptions = {
|
|
17
|
+
/**
|
|
18
|
+
* If true, this means the message was sent before Sentry was initialized, which slightly
|
|
19
|
+
* changes how the event is logged in the browser.
|
|
20
|
+
*/
|
|
21
|
+
wasSentPrematurely: boolean;
|
|
22
|
+
};
|
|
15
23
|
/** Maps internal EventDetails type to Sentry's required type for event severity and extra context. */
|
|
16
|
-
export declare function convertEventDetailsToSentryContext(eventDetails: EventDetails): Pick<ScopeContext, 'extra' | 'level'>;
|
|
24
|
+
export declare function convertEventDetailsToSentryContext(eventDetails: EventDetails, options: ContextOptions): Pick<ScopeContext, 'extra' | 'level'>;
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
/** Maps internal EventDetails type to Sentry's required type for event severity and extra context. */
|
|
2
|
-
export function convertEventDetailsToSentryContext(eventDetails) {
|
|
2
|
+
export function convertEventDetailsToSentryContext(eventDetails, options) {
|
|
3
|
+
const extra = {
|
|
4
|
+
...(options.wasSentPrematurely
|
|
5
|
+
? {
|
|
6
|
+
wasSentPrematurely: true,
|
|
7
|
+
}
|
|
8
|
+
: {}),
|
|
9
|
+
...eventDetails.extraContext,
|
|
10
|
+
};
|
|
3
11
|
return {
|
|
4
|
-
extra
|
|
12
|
+
extra,
|
|
5
13
|
level: eventDetails.severity,
|
|
6
14
|
};
|
|
7
15
|
}
|
|
@@ -9,13 +9,28 @@ export declare enum EventSeverityEnum {
|
|
|
9
9
|
}
|
|
10
10
|
/** Event severities that are not error-level. */
|
|
11
11
|
export type InfoEventSeverity = EventSeverityEnum.Debug | EventSeverityEnum.Info | EventSeverityEnum.Warning;
|
|
12
|
+
/** Maps severities to the console methods used to log them. */
|
|
13
|
+
export declare const consoleLogMethodPerSeverity: {
|
|
14
|
+
readonly warning: {
|
|
15
|
+
(...data: any[]): void;
|
|
16
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
17
|
+
};
|
|
18
|
+
readonly info: {
|
|
19
|
+
(...data: any[]): void;
|
|
20
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
21
|
+
};
|
|
22
|
+
readonly debug: {
|
|
23
|
+
(...data: any[]): void;
|
|
24
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
25
|
+
};
|
|
26
|
+
readonly fatal: {
|
|
27
|
+
(...data: any[]): void;
|
|
28
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
29
|
+
};
|
|
30
|
+
readonly error: {
|
|
31
|
+
(...data: any[]): void;
|
|
32
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
12
35
|
/** Extracts the severity level from a sentry event while defaulting to an info level severity. */
|
|
13
36
|
export declare function extractEventSeverity(event: SentryEvent): EventSeverityEnum;
|
|
14
|
-
/**
|
|
15
|
-
* Determines which console method should be used for local logging based on the given event's
|
|
16
|
-
* severity.
|
|
17
|
-
*/
|
|
18
|
-
export declare function getConsoleMethodForSeverity(event: SentryEvent): {
|
|
19
|
-
(...data: any[]): void;
|
|
20
|
-
(message?: any, ...optionalParams: any[]): void;
|
|
21
|
-
};
|
|
@@ -8,7 +8,8 @@ export var EventSeverityEnum;
|
|
|
8
8
|
EventSeverityEnum["Fatal"] = "fatal";
|
|
9
9
|
EventSeverityEnum["Error"] = "error";
|
|
10
10
|
})(EventSeverityEnum || (EventSeverityEnum = {}));
|
|
11
|
-
|
|
11
|
+
/** Maps severities to the console methods used to log them. */
|
|
12
|
+
export const consoleLogMethodPerSeverity = {
|
|
12
13
|
[EventSeverityEnum.Warning]: console.warn,
|
|
13
14
|
[EventSeverityEnum.Info]: console.info,
|
|
14
15
|
[EventSeverityEnum.Debug]: console.debug,
|
|
@@ -22,11 +23,3 @@ export function extractEventSeverity(event) {
|
|
|
22
23
|
}
|
|
23
24
|
return event.level;
|
|
24
25
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Determines which console method should be used for local logging based on the given event's
|
|
27
|
-
* severity.
|
|
28
|
-
*/
|
|
29
|
-
export function getConsoleMethodForSeverity(event) {
|
|
30
|
-
const severity = extractEventSeverity(event);
|
|
31
|
-
return consoleLogMethodsPerSeverity[severity];
|
|
32
|
-
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
var _a;
|
|
1
2
|
import { ensureError } from '@augment-vir/common';
|
|
2
3
|
import { extraEventContextSymbol } from './extra-event-context';
|
|
3
4
|
/**
|
|
@@ -16,9 +17,16 @@ import { extraEventContextSymbol } from './extra-event-context';
|
|
|
16
17
|
export class ExtraContextError extends Error {
|
|
17
18
|
constructor(message, extraData) {
|
|
18
19
|
super(message);
|
|
20
|
+
Object.defineProperty(this, _a, {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: void 0
|
|
25
|
+
});
|
|
19
26
|
this[extraEventContextSymbol] = extraData;
|
|
20
27
|
}
|
|
21
28
|
}
|
|
29
|
+
_a = extraEventContextSymbol;
|
|
22
30
|
/**
|
|
23
31
|
* Adds extra context to an error without modifying the error's message or stack trace (or any of
|
|
24
32
|
* its other properties), then throws the error so it can propagate as usual.
|
|
@@ -14,7 +14,7 @@ export async function baseInitSentry({ dsn, releaseEnv, releaseName, sentryConfi
|
|
|
14
14
|
release: releaseName,
|
|
15
15
|
}, sentryConfigOverrides, isDev);
|
|
16
16
|
sentryDep.init(finalSentryConfig);
|
|
17
|
-
sentryDep.
|
|
17
|
+
sentryDep.addEventProcessor((event, hint) => processSentryEvent(event, hint, createUniversalContext));
|
|
18
18
|
setSentryClientForLogging(sentryDep);
|
|
19
19
|
return sentryDep;
|
|
20
20
|
}
|
|
@@ -4,7 +4,7 @@ import { sentryClientForLogging } from './sentry-client-for-logging';
|
|
|
4
4
|
export function attachSentryTags(tags) {
|
|
5
5
|
try {
|
|
6
6
|
if (!sentryClientForLogging) {
|
|
7
|
-
addPrematureEvent(
|
|
7
|
+
addPrematureEvent(attachSentryTags, [tags]);
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
sentryClientForLogging.setTags(tags);
|
|
@@ -1,24 +1,36 @@
|
|
|
1
|
+
import { extractErrorMessage } from '@augment-vir/common';
|
|
1
2
|
import { convertEventDetailsToSentryContext, } from '../event-context/event-context';
|
|
2
3
|
import { EventSeverityEnum } from '../event-context/event-severity';
|
|
4
|
+
import { LoggingState, logToConsoleWithoutSentry } from '../processing/log-to-console';
|
|
3
5
|
import { addPrematureEvent } from './premature-events';
|
|
4
6
|
import { sentryClientForLogging } from './sentry-client-for-logging';
|
|
5
7
|
/** Record an error to Sentry without throwing it. */
|
|
6
8
|
export function handleError(error, extraContext) {
|
|
9
|
+
return internalHandleError(error, extraContext, {
|
|
10
|
+
wasSentPrematurely: false,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function internalHandleError(error, extraContext, options) {
|
|
7
14
|
try {
|
|
8
15
|
if (!sentryClientForLogging) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
logToConsoleWithoutSentry(EventSeverityEnum.Error, LoggingState.NoSentryYet, {
|
|
17
|
+
message: extractErrorMessage(error),
|
|
18
|
+
event: undefined,
|
|
19
|
+
extra: extraContext,
|
|
20
|
+
hint: undefined,
|
|
21
|
+
originalException: error,
|
|
15
22
|
});
|
|
23
|
+
addPrematureEvent(internalHandleError, [
|
|
24
|
+
error,
|
|
25
|
+
extraContext,
|
|
26
|
+
{ wasSentPrematurely: true },
|
|
27
|
+
]);
|
|
16
28
|
return undefined;
|
|
17
29
|
}
|
|
18
30
|
const scopeContext = convertEventDetailsToSentryContext({
|
|
19
31
|
extraContext,
|
|
20
32
|
severity: EventSeverityEnum.Error,
|
|
21
|
-
});
|
|
33
|
+
}, options);
|
|
22
34
|
const eventId = sentryClientForLogging.captureException(error, scopeContext);
|
|
23
35
|
return eventId;
|
|
24
36
|
}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
1
|
import { AnyFunction } from '@augment-vir/common';
|
|
2
|
-
/** An event that was triggered before setSentryClientForLogging was called. */
|
|
3
|
-
export type PrematureEvent<EntryPointFunction extends AnyFunction = AnyFunction> = {
|
|
4
|
-
callback: EntryPointFunction;
|
|
5
|
-
inputs: Parameters<EntryPointFunction>;
|
|
6
|
-
};
|
|
7
2
|
export declare function sendPrematureEvents(): void;
|
|
8
|
-
export declare function addPrematureEvent(
|
|
3
|
+
export declare function addPrematureEvent<EntryPointFunction extends AnyFunction = AnyFunction>(callback: EntryPointFunction, inputs: Parameters<EntryPointFunction>): void;
|
|
@@ -17,6 +17,6 @@ export function sendPrematureEvents() {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
export function addPrematureEvent(
|
|
21
|
-
prematureSentryEvents.push(
|
|
20
|
+
export function addPrematureEvent(callback, inputs) {
|
|
21
|
+
prematureSentryEvents.push({ callback, inputs });
|
|
22
22
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Event as SentryEvent } from '@sentry/types';
|
|
2
|
-
import { EventDetails, EventExtraContext } from '../event-context/event-context';
|
|
2
|
+
import { ContextOptions, EventDetails, EventExtraContext } from '../event-context/event-context';
|
|
3
3
|
/** Send non-error events to Sentry. */
|
|
4
4
|
export declare const sendLog: {
|
|
5
5
|
/** Sends an even to Sentry with debug severity. */
|
|
@@ -9,5 +9,5 @@ export declare const sendLog: {
|
|
|
9
9
|
/** Sends an even to Sentry with warning severity. */
|
|
10
10
|
readonly warning: (info: Parameters<typeof sendLogToSentry>[0], extraContext?: EventExtraContext) => string | undefined;
|
|
11
11
|
};
|
|
12
|
-
declare function sendLogToSentry(logInfo: string | Omit<SentryEvent, 'extra' | 'level'>, eventDetails: EventDetails): string | undefined;
|
|
12
|
+
declare function sendLogToSentry(logInfo: string | Omit<SentryEvent, 'extra' | 'level'>, eventDetails: EventDetails, options: ContextOptions): string | undefined;
|
|
13
13
|
export {};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isRunTimeType } from 'run-time-assertions';
|
|
2
2
|
import { convertEventDetailsToSentryContext, } from '../event-context/event-context';
|
|
3
3
|
import { EventSeverityEnum } from '../event-context/event-severity';
|
|
4
|
+
import { extractOriginalMessage } from '../processing/event-processor';
|
|
5
|
+
import { LoggingState, logToConsoleWithoutSentry } from '../processing/log-to-console';
|
|
4
6
|
import { addPrematureEvent } from './premature-events';
|
|
5
7
|
import { sentryClientForLogging } from './sentry-client-for-logging';
|
|
6
8
|
/** Send non-error events to Sentry. */
|
|
@@ -17,23 +19,32 @@ function wrapLogWithSeverity(severity) {
|
|
|
17
19
|
return sendLogToSentry(info, {
|
|
18
20
|
extraContext,
|
|
19
21
|
severity,
|
|
22
|
+
}, {
|
|
23
|
+
wasSentPrematurely: false,
|
|
20
24
|
});
|
|
21
25
|
};
|
|
22
26
|
}
|
|
23
|
-
function sendLogToSentry(logInfo, eventDetails) {
|
|
27
|
+
function sendLogToSentry(logInfo, eventDetails, options) {
|
|
24
28
|
try {
|
|
25
29
|
if (!sentryClientForLogging) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
logInfo,
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
logToConsoleWithoutSentry(eventDetails.severity, LoggingState.NoSentryYet, {
|
|
31
|
+
message: isRunTimeType(logInfo, 'string')
|
|
32
|
+
? logInfo
|
|
33
|
+
: extractOriginalMessage(logInfo, undefined),
|
|
34
|
+
event: isRunTimeType(logInfo, 'string') ? undefined : logInfo,
|
|
35
|
+
extra: eventDetails.extraContext,
|
|
36
|
+
hint: undefined,
|
|
37
|
+
originalException: undefined,
|
|
32
38
|
});
|
|
39
|
+
addPrematureEvent(sendLogToSentry, [
|
|
40
|
+
logInfo,
|
|
41
|
+
eventDetails,
|
|
42
|
+
{ wasSentPrematurely: true },
|
|
43
|
+
]);
|
|
33
44
|
return undefined;
|
|
34
45
|
}
|
|
35
|
-
const scopeContext = convertEventDetailsToSentryContext(eventDetails);
|
|
36
|
-
const eventId =
|
|
46
|
+
const scopeContext = convertEventDetailsToSentryContext(eventDetails, options);
|
|
47
|
+
const eventId = isRunTimeType(logInfo, 'string')
|
|
37
48
|
? sentryClientForLogging.captureMessage(logInfo, scopeContext)
|
|
38
49
|
: sentryClientForLogging.captureEvent({
|
|
39
50
|
...logInfo,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ErrorEvent, EventHint, Event as SentryEvent, TransactionEvent } from '@sentry/types';
|
|
2
2
|
import { EventExtraContextCreator } from '../event-context/event-context';
|
|
3
3
|
/** Attach extra event data for a sentry event. */
|
|
4
4
|
export declare function processSentryEvent(
|
|
@@ -8,3 +8,9 @@ event: SentryEvent,
|
|
|
8
8
|
hint: EventHint,
|
|
9
9
|
/** Optional callback for creating extra event context. */
|
|
10
10
|
createUniversalContext?: EventExtraContextCreator | undefined): SentryEvent;
|
|
11
|
+
/** Tries to extract the original event message from different possible Sentry types. */
|
|
12
|
+
export declare function extractOriginalMessage(
|
|
13
|
+
/** Event from Sentry. */
|
|
14
|
+
event: Pick<TransactionEvent | ErrorEvent, 'message'>,
|
|
15
|
+
/** EventHint generated by Sentry. */
|
|
16
|
+
hint: EventHint | undefined): string;
|
|
@@ -19,7 +19,18 @@ createUniversalContext) {
|
|
|
19
19
|
const sentryContext = convertEventDetailsToSentryContext({
|
|
20
20
|
severity: extractEventSeverity(event),
|
|
21
21
|
extraContext,
|
|
22
|
+
}, {
|
|
23
|
+
wasSentPrematurely: false,
|
|
22
24
|
});
|
|
23
25
|
Object.assign(event, sentryContext);
|
|
24
26
|
return event;
|
|
25
27
|
}
|
|
28
|
+
/** Tries to extract the original event message from different possible Sentry types. */
|
|
29
|
+
export function extractOriginalMessage(
|
|
30
|
+
/** Event from Sentry. */
|
|
31
|
+
event,
|
|
32
|
+
/** EventHint generated by Sentry. */
|
|
33
|
+
hint) {
|
|
34
|
+
const message = event.message || extractErrorMessage(hint?.originalException);
|
|
35
|
+
return message;
|
|
36
|
+
}
|
|
@@ -4,9 +4,3 @@ import type { ErrorEvent, TransactionEvent } from '@sentry/types';
|
|
|
4
4
|
export declare function createSentryHandler(
|
|
5
5
|
/** If in dev, events won't be sent to Sentry. They will only be logged in the console. */
|
|
6
6
|
isDev: boolean): (event: TransactionEvent | ErrorEvent, hint: EventHint) => TransactionEvent | ErrorEvent | null;
|
|
7
|
-
/** Tries to extract the original event message from different possible Sentry types. */
|
|
8
|
-
export declare function extractOriginalMessage(
|
|
9
|
-
/** Event from Sentry. */
|
|
10
|
-
event: TransactionEvent | ErrorEvent,
|
|
11
|
-
/** EventHint generated by Sentry. */
|
|
12
|
-
hint: EventHint): string;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getConsoleMethodForSeverity } from '../event-context/event-severity';
|
|
1
|
+
import { LoggingState, logToConsoleFromSentry } from './log-to-console';
|
|
3
2
|
/** Creates a handler for Sentry events based on the given env. */
|
|
4
3
|
export function createSentryHandler(
|
|
5
4
|
/** If in dev, events won't be sent to Sentry. They will only be logged in the console. */
|
|
@@ -10,31 +9,10 @@ isDev) {
|
|
|
10
9
|
event,
|
|
11
10
|
/** The EventHint generated by Sentry. */
|
|
12
11
|
hint) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const logArgs = [
|
|
16
|
-
message,
|
|
17
|
-
event.extra,
|
|
18
|
-
{ event, hint },
|
|
19
|
-
hint.originalException,
|
|
20
|
-
].filter(isTruthy);
|
|
21
|
-
if (isDev) {
|
|
22
|
-
consoleMethod('Would have sent to Sentry:', ...logArgs);
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
consoleMethod('Sending to Sentry:', ...logArgs);
|
|
27
|
-
return event;
|
|
12
|
+
if (!event.extra?.wasSentPrematurely) {
|
|
13
|
+
logToConsoleFromSentry(event, hint, isDev ? LoggingState.Dev : LoggingState.Prod);
|
|
28
14
|
}
|
|
15
|
+
return isDev ? null : event;
|
|
29
16
|
}
|
|
30
17
|
return handleSentrySend;
|
|
31
18
|
}
|
|
32
|
-
/** Tries to extract the original event message from different possible Sentry types. */
|
|
33
|
-
export function extractOriginalMessage(
|
|
34
|
-
/** Event from Sentry. */
|
|
35
|
-
event,
|
|
36
|
-
/** EventHint generated by Sentry. */
|
|
37
|
-
hint) {
|
|
38
|
-
const message = event.message || extractErrorMessage(hint.originalException);
|
|
39
|
-
return message;
|
|
40
|
-
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EventHint } from '@sentry/browser';
|
|
2
|
+
import { Event, Extras } from '@sentry/types';
|
|
3
|
+
import { EventSeverityEnum } from '../event-context/event-severity';
|
|
4
|
+
export declare enum LoggingState {
|
|
5
|
+
Dev = "dev",
|
|
6
|
+
Prod = "prod",
|
|
7
|
+
NoSentryYet = "no-sentry-yet"
|
|
8
|
+
}
|
|
9
|
+
export declare function logToConsoleFromSentry(
|
|
10
|
+
/** The event from Sentry. */
|
|
11
|
+
event: Event,
|
|
12
|
+
/** The EventHint generated by Sentry. */
|
|
13
|
+
hint: EventHint, loggingState: LoggingState): void;
|
|
14
|
+
export declare function logToConsoleWithoutSentry(severity: EventSeverityEnum, loggingState: LoggingState, logData: {
|
|
15
|
+
message: string;
|
|
16
|
+
extra: undefined | Extras;
|
|
17
|
+
event: Event | undefined;
|
|
18
|
+
hint: EventHint | undefined;
|
|
19
|
+
originalException: unknown;
|
|
20
|
+
}): void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { isTruthy } from '@augment-vir/common';
|
|
2
|
+
import { consoleLogMethodPerSeverity, extractEventSeverity, } from '../event-context/event-severity';
|
|
3
|
+
import { extractOriginalMessage } from './event-processor';
|
|
4
|
+
export var LoggingState;
|
|
5
|
+
(function (LoggingState) {
|
|
6
|
+
LoggingState["Dev"] = "dev";
|
|
7
|
+
LoggingState["Prod"] = "prod";
|
|
8
|
+
LoggingState["NoSentryYet"] = "no-sentry-yet";
|
|
9
|
+
})(LoggingState || (LoggingState = {}));
|
|
10
|
+
export function logToConsoleFromSentry(
|
|
11
|
+
/** The event from Sentry. */
|
|
12
|
+
event,
|
|
13
|
+
/** The EventHint generated by Sentry. */
|
|
14
|
+
hint, loggingState) {
|
|
15
|
+
logToConsoleWithoutSentry(extractEventSeverity(event), loggingState, {
|
|
16
|
+
event,
|
|
17
|
+
extra: event.extra,
|
|
18
|
+
hint,
|
|
19
|
+
message: extractOriginalMessage(event, hint),
|
|
20
|
+
originalException: hint.originalException,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function logToConsoleWithoutSentry(severity, loggingState, logData) {
|
|
24
|
+
const consoleMethod = consoleLogMethodPerSeverity[severity];
|
|
25
|
+
const eventLogArg = {
|
|
26
|
+
...(logData.event ? { event: logData.event } : undefined),
|
|
27
|
+
...(logData.hint ? { hint: logData.hint } : undefined),
|
|
28
|
+
};
|
|
29
|
+
const logArgs = [
|
|
30
|
+
logData.message,
|
|
31
|
+
logData.extra,
|
|
32
|
+
Object.keys(eventLogArg).length ? eventLogArg : undefined,
|
|
33
|
+
logData.originalException,
|
|
34
|
+
].filter(isTruthy);
|
|
35
|
+
if (loggingState === LoggingState.Dev) {
|
|
36
|
+
consoleMethod('Would have sent to Sentry:', ...logArgs);
|
|
37
|
+
}
|
|
38
|
+
else if (loggingState === LoggingState.Prod) {
|
|
39
|
+
consoleMethod('Sending to Sentry:', ...logArgs);
|
|
40
|
+
}
|
|
41
|
+
else if (loggingState === LoggingState.NoSentryYet) {
|
|
42
|
+
consoleMethod('Logging before Sentry init:', ...logArgs);
|
|
43
|
+
}
|
|
44
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sentry-vir",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"config",
|
|
6
6
|
"helper",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"docs": "virmator docs",
|
|
29
29
|
"format": "virmator format",
|
|
30
30
|
"publish": "virmator publish \"npm run compile && npm run test:all\"",
|
|
31
|
+
"start": "virmator frontend",
|
|
31
32
|
"test": "virmator test-web",
|
|
32
33
|
"test:all": "concurrently --colors --kill-others-on-fail -c auto --names types,tests,spelling,format,docs,deps \"npm run test:types\" \"npm run test:coverage\" \"npm run test:spelling\" \"npm run test:format\" \"npm run test:docs\" \"npm run test:deps\"",
|
|
33
34
|
"test:coverage": "npm run test coverage",
|
|
@@ -38,38 +39,42 @@
|
|
|
38
39
|
"test:types": "tsc --noEmit"
|
|
39
40
|
},
|
|
40
41
|
"dependencies": {
|
|
41
|
-
"@augment-vir/common": "^
|
|
42
|
-
"@sentry/browser": "^7.
|
|
43
|
-
"@sentry/core": "^7.
|
|
44
|
-
"@sentry/node": "^7.
|
|
45
|
-
"@sentry/types": "^7.
|
|
46
|
-
"type-fest": "^4.
|
|
42
|
+
"@augment-vir/common": "^23.3.2",
|
|
43
|
+
"@sentry/browser": "^7.101.1",
|
|
44
|
+
"@sentry/core": "^7.101.1",
|
|
45
|
+
"@sentry/node": "^7.101.1",
|
|
46
|
+
"@sentry/types": "^7.101.1",
|
|
47
|
+
"type-fest": "^4.10.2"
|
|
47
48
|
},
|
|
48
49
|
"devDependencies": {
|
|
49
|
-
"@augment-vir/browser-testing": "^
|
|
50
|
+
"@augment-vir/browser-testing": "^23.3.2",
|
|
51
|
+
"@augment-vir/node-js": "^23.3.2",
|
|
50
52
|
"@open-wc/testing": "^4.0.0",
|
|
51
|
-
"@types/mocha": "^10.0.
|
|
52
|
-
"@web/dev-server-esbuild": "^1.0.
|
|
53
|
+
"@types/mocha": "^10.0.6",
|
|
54
|
+
"@web/dev-server-esbuild": "^1.0.2",
|
|
53
55
|
"@web/test-runner": "^0.18.0",
|
|
54
56
|
"@web/test-runner-commands": "^0.9.0",
|
|
55
57
|
"@web/test-runner-playwright": "^0.11.0",
|
|
56
58
|
"@web/test-runner-visual-regression": "^0.9.0",
|
|
57
|
-
"cspell": "^8.
|
|
58
|
-
"dependency-cruiser": "^
|
|
59
|
-
"esbuild": "^0.
|
|
60
|
-
"istanbul-smart-text-reporter": "^1.1.
|
|
61
|
-
"markdown-code-example-inserter": "^0.3.
|
|
59
|
+
"cspell": "^8.3.2",
|
|
60
|
+
"dependency-cruiser": "^16.2.0",
|
|
61
|
+
"esbuild": "^0.20.0",
|
|
62
|
+
"istanbul-smart-text-reporter": "^1.1.3",
|
|
63
|
+
"markdown-code-example-inserter": "^0.3.3",
|
|
62
64
|
"npm-check-updates": "~16.12.3",
|
|
63
|
-
"prettier": "^3.
|
|
64
|
-
"prettier-plugin-interpolated-html-tags": "^1.0.
|
|
65
|
-
"prettier-plugin-jsdoc": "^1.
|
|
66
|
-
"prettier-plugin-multiline-arrays": "^3.0.
|
|
65
|
+
"prettier": "^3.2.2",
|
|
66
|
+
"prettier-plugin-interpolated-html-tags": "^1.0.3",
|
|
67
|
+
"prettier-plugin-jsdoc": "^1.3.0",
|
|
68
|
+
"prettier-plugin-multiline-arrays": "^3.0.3",
|
|
67
69
|
"prettier-plugin-organize-imports": "^3.2.4",
|
|
68
|
-
"prettier-plugin-packagejson": "^2.4.
|
|
70
|
+
"prettier-plugin-packagejson": "^2.4.11",
|
|
69
71
|
"prettier-plugin-sort-json": "^3.1.0",
|
|
70
|
-
"prettier-plugin-toml": "^
|
|
71
|
-
"run-time-assertions": "^0.
|
|
72
|
-
"typedoc": "^0.25.
|
|
73
|
-
"
|
|
72
|
+
"prettier-plugin-toml": "^2.0.1",
|
|
73
|
+
"run-time-assertions": "^0.3.0",
|
|
74
|
+
"typedoc": "^0.25.8",
|
|
75
|
+
"typescript": "^5.3.3",
|
|
76
|
+
"virmator": "^11.3.2",
|
|
77
|
+
"vite": "^4.5.2",
|
|
78
|
+
"vite-tsconfig-paths": "^4.3.1"
|
|
74
79
|
}
|
|
75
80
|
}
|