1 | import { _optionalChain } from '@sentry/utils/esm/buildPolyfills';
|
2 | import { BaseClient, SDK_VERSION } from '@sentry/core';
|
3 | import { SessionFlusher } from '@sentry/hub';
|
4 | import { logger, resolvedSyncPromise } from '@sentry/utils';
|
5 | import * as os from 'os';
|
6 | import { TextEncoder } from 'util';
|
7 | import { eventFromUnknownInput, eventFromMessage } from './eventbuilder.js';
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | class NodeClient extends BaseClient {
|
16 |
|
17 |
|
18 | |
19 |
|
20 |
|
21 |
|
22 | constructor(options) {
|
23 | options._metadata = options._metadata || {};
|
24 | options._metadata.sdk = options._metadata.sdk || {
|
25 | name: 'sentry.javascript.node',
|
26 | packages: [
|
27 | {
|
28 | name: 'npm:@sentry/node',
|
29 | version: SDK_VERSION,
|
30 | },
|
31 | ],
|
32 | version: SDK_VERSION,
|
33 | };
|
34 |
|
35 |
|
36 | options.transportOptions = {
|
37 | textEncoder: new TextEncoder(),
|
38 | ...options.transportOptions,
|
39 | };
|
40 |
|
41 | super(options);
|
42 | }
|
43 |
|
44 | |
45 |
|
46 |
|
47 | captureException(exception, hint, scope) {
|
48 |
|
49 |
|
50 |
|
51 | if (this._options.autoSessionTracking && this._sessionFlusher && scope) {
|
52 | var requestSession = scope.getRequestSession();
|
53 |
|
54 |
|
55 |
|
56 | if (requestSession && requestSession.status === 'ok') {
|
57 | requestSession.status = 'errored';
|
58 | }
|
59 | }
|
60 |
|
61 | return super.captureException(exception, hint, scope);
|
62 | }
|
63 |
|
64 | |
65 |
|
66 |
|
67 | captureEvent(event, hint, scope) {
|
68 |
|
69 |
|
70 |
|
71 | if (this._options.autoSessionTracking && this._sessionFlusher && scope) {
|
72 | var eventType = event.type || 'exception';
|
73 | var isException =
|
74 | eventType === 'exception' && event.exception && event.exception.values && event.exception.values.length > 0;
|
75 |
|
76 |
|
77 | if (isException) {
|
78 | var requestSession = scope.getRequestSession();
|
79 |
|
80 |
|
81 |
|
82 | if (requestSession && requestSession.status === 'ok') {
|
83 | requestSession.status = 'errored';
|
84 | }
|
85 | }
|
86 | }
|
87 |
|
88 | return super.captureEvent(event, hint, scope);
|
89 | }
|
90 |
|
91 | |
92 |
|
93 |
|
94 |
|
95 | close(timeout) {
|
96 | _optionalChain([this, 'access', _ => _._sessionFlusher, 'optionalAccess', _2 => _2.close, 'call', _3 => _3()]);
|
97 | return super.close(timeout);
|
98 | }
|
99 |
|
100 |
|
101 | initSessionFlusher() {
|
102 | const { release, environment } = this._options;
|
103 | if (!release) {
|
104 | (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Cannot initialise an instance of SessionFlusher if no release is provided!');
|
105 | } else {
|
106 | this._sessionFlusher = new SessionFlusher(this, {
|
107 | release,
|
108 | environment,
|
109 | });
|
110 | }
|
111 | }
|
112 |
|
113 | |
114 |
|
115 |
|
116 | eventFromException(exception, hint) {
|
117 | return resolvedSyncPromise(eventFromUnknownInput(this._options.stackParser, exception, hint));
|
118 | }
|
119 |
|
120 | |
121 |
|
122 |
|
123 | eventFromMessage(
|
124 | message,
|
125 | level = 'info',
|
126 | hint,
|
127 | ) {
|
128 | return resolvedSyncPromise(
|
129 | eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace),
|
130 | );
|
131 | }
|
132 |
|
133 | |
134 |
|
135 |
|
136 | _prepareEvent(event, hint, scope) {
|
137 | event.platform = event.platform || 'node';
|
138 | event.contexts = {
|
139 | ...event.contexts,
|
140 | runtime: _optionalChain([event, 'access', _4 => _4.contexts, 'optionalAccess', _5 => _5.runtime]) || {
|
141 | name: 'node',
|
142 | version: global.process.version,
|
143 | },
|
144 | };
|
145 | event.server_name =
|
146 | event.server_name || this.getOptions().serverName || global.process.env.SENTRY_NAME || os.hostname();
|
147 | return super._prepareEvent(event, hint, scope);
|
148 | }
|
149 |
|
150 | |
151 |
|
152 |
|
153 |
|
154 | _captureRequestSession() {
|
155 | if (!this._sessionFlusher) {
|
156 | (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Discarded request mode session because autoSessionTracking option was disabled');
|
157 | } else {
|
158 | this._sessionFlusher.incrementSessionStatusCount();
|
159 | }
|
160 | }
|
161 | }
|
162 |
|
163 | export { NodeClient };
|
164 |
|