@sentry/node 8.0.0-rc.3 → 8.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/cjs/cron/common.js +56 -0
- package/cjs/cron/common.js.map +1 -0
- package/cjs/cron/cron.js +112 -0
- package/cjs/cron/cron.js.map +1 -0
- package/cjs/cron/index.js +15 -0
- package/cjs/cron/index.js.map +1 -0
- package/cjs/cron/node-cron.js +72 -0
- package/cjs/cron/node-cron.js.map +1 -0
- package/cjs/cron/node-schedule.js +69 -0
- package/cjs/cron/node-schedule.js.map +1 -0
- package/cjs/debug-build.js +11 -0
- package/cjs/debug-build.js.map +1 -0
- package/cjs/index.js +85 -4005
- package/cjs/index.js.map +1 -1
- package/cjs/integrations/anr/index.js +211 -0
- package/cjs/integrations/anr/index.js.map +1 -0
- package/cjs/integrations/console.js +40 -0
- package/cjs/integrations/console.js.map +1 -0
- package/cjs/integrations/context.js +435 -0
- package/cjs/integrations/context.js.map +1 -0
- package/cjs/integrations/contextlines.js +137 -0
- package/cjs/integrations/contextlines.js.map +1 -0
- package/cjs/integrations/http.js +161 -0
- package/cjs/integrations/http.js.map +1 -0
- package/cjs/integrations/local-variables/common.js +87 -0
- package/cjs/integrations/local-variables/common.js.map +1 -0
- package/cjs/integrations/local-variables/index.js +12 -0
- package/cjs/integrations/local-variables/index.js.map +1 -0
- package/cjs/integrations/local-variables/local-variables-async.js +149 -0
- package/cjs/integrations/local-variables/local-variables-async.js.map +1 -0
- package/cjs/integrations/local-variables/local-variables-sync.js +376 -0
- package/cjs/integrations/local-variables/local-variables-sync.js.map +1 -0
- package/cjs/integrations/modules.js +99 -0
- package/cjs/integrations/modules.js.map +1 -0
- package/cjs/integrations/node-fetch.js +81 -0
- package/cjs/integrations/node-fetch.js.map +1 -0
- package/cjs/integrations/onuncaughtexception.js +135 -0
- package/cjs/integrations/onuncaughtexception.js.map +1 -0
- package/cjs/integrations/onunhandledrejection.js +90 -0
- package/cjs/integrations/onunhandledrejection.js.map +1 -0
- package/cjs/integrations/spotlight.js +109 -0
- package/cjs/integrations/spotlight.js.map +1 -0
- package/cjs/integrations/tracing/connect.js +41 -0
- package/cjs/integrations/tracing/connect.js.map +1 -0
- package/cjs/integrations/tracing/express.js +127 -0
- package/cjs/integrations/tracing/express.js.map +1 -0
- package/cjs/integrations/tracing/fastify.js +84 -0
- package/cjs/integrations/tracing/fastify.js.map +1 -0
- package/cjs/integrations/tracing/graphql.js +32 -0
- package/cjs/integrations/tracing/graphql.js.map +1 -0
- package/cjs/integrations/tracing/hapi/index.js +106 -0
- package/cjs/integrations/tracing/hapi/index.js.map +1 -0
- package/cjs/integrations/tracing/index.js +43 -0
- package/cjs/integrations/tracing/index.js.map +1 -0
- package/cjs/integrations/tracing/koa.js +60 -0
- package/cjs/integrations/tracing/koa.js.map +1 -0
- package/cjs/integrations/tracing/mongo.js +31 -0
- package/cjs/integrations/tracing/mongo.js.map +1 -0
- package/cjs/integrations/tracing/mongoose.js +31 -0
- package/cjs/integrations/tracing/mongoose.js.map +1 -0
- package/cjs/integrations/tracing/mysql.js +24 -0
- package/cjs/integrations/tracing/mysql.js.map +1 -0
- package/cjs/integrations/tracing/mysql2.js +31 -0
- package/cjs/integrations/tracing/mysql2.js.map +1 -0
- package/cjs/integrations/tracing/nest.js +69 -0
- package/cjs/integrations/tracing/nest.js.map +1 -0
- package/cjs/integrations/tracing/postgres.js +32 -0
- package/cjs/integrations/tracing/postgres.js.map +1 -0
- package/cjs/integrations/tracing/prisma.js +48 -0
- package/cjs/integrations/tracing/prisma.js.map +1 -0
- package/cjs/integrations/tracing/redis.js +29 -0
- package/cjs/integrations/tracing/redis.js.map +1 -0
- package/cjs/nodeVersion.js +10 -0
- package/cjs/nodeVersion.js.map +1 -0
- package/cjs/otel/contextManager.js +16 -0
- package/cjs/otel/contextManager.js.map +1 -0
- package/cjs/proxy/base.js +127 -0
- package/cjs/proxy/base.js.map +1 -0
- package/cjs/proxy/index.js +178 -0
- package/cjs/proxy/index.js.map +1 -0
- package/cjs/proxy/parse-proxy-response.js +104 -0
- package/cjs/proxy/parse-proxy-response.js.map +1 -0
- package/cjs/sdk/api.js +45 -0
- package/cjs/sdk/api.js.map +1 -0
- package/cjs/sdk/client.js +63 -0
- package/cjs/sdk/client.js.map +1 -0
- package/cjs/sdk/init.js +318 -0
- package/cjs/sdk/init.js.map +1 -0
- package/cjs/sdk/initOtel.js +58 -0
- package/cjs/sdk/initOtel.js.map +1 -0
- package/cjs/sdk/scope.js +18 -0
- package/cjs/sdk/scope.js.map +1 -0
- package/cjs/transports/http.js +163 -0
- package/cjs/transports/http.js.map +1 -0
- package/cjs/utils/addOriginToSpan.js +11 -0
- package/cjs/utils/addOriginToSpan.js.map +1 -0
- package/cjs/utils/errorhandling.js +44 -0
- package/cjs/utils/errorhandling.js.map +1 -0
- package/cjs/utils/getRequestUrl.js +18 -0
- package/cjs/utils/getRequestUrl.js.map +1 -0
- package/cjs/utils/module.js +62 -0
- package/cjs/utils/module.js.map +1 -0
- package/esm/cron/common.js +54 -0
- package/esm/cron/common.js.map +1 -0
- package/esm/cron/cron.js +110 -0
- package/esm/cron/cron.js.map +1 -0
- package/esm/cron/index.js +13 -0
- package/esm/cron/index.js.map +1 -0
- package/esm/cron/node-cron.js +67 -0
- package/esm/cron/node-cron.js.map +1 -0
- package/esm/cron/node-schedule.js +64 -0
- package/esm/cron/node-schedule.js.map +1 -0
- package/esm/debug-build.js +9 -0
- package/esm/debug-build.js.map +1 -0
- package/esm/index.js +35 -3961
- package/esm/index.js.map +1 -1
- package/esm/integrations/anr/index.js +204 -0
- package/esm/integrations/anr/index.js.map +1 -0
- package/esm/integrations/anr/worker-script.js +2 -2
- package/esm/integrations/console.js +38 -0
- package/esm/integrations/console.js.map +1 -0
- package/esm/integrations/context.js +427 -0
- package/esm/integrations/context.js.map +1 -0
- package/esm/integrations/contextlines.js +131 -0
- package/esm/integrations/contextlines.js.map +1 -0
- package/esm/integrations/http.js +156 -0
- package/esm/integrations/http.js.map +1 -0
- package/esm/integrations/local-variables/common.js +81 -0
- package/esm/integrations/local-variables/common.js.map +1 -0
- package/esm/integrations/local-variables/index.js +10 -0
- package/esm/integrations/local-variables/index.js.map +1 -0
- package/esm/integrations/local-variables/local-variables-async.js +143 -0
- package/esm/integrations/local-variables/local-variables-async.js.map +1 -0
- package/esm/integrations/local-variables/local-variables-sync.js +370 -0
- package/esm/integrations/local-variables/local-variables-sync.js.map +1 -0
- package/esm/integrations/local-variables/worker-script.js +1 -1
- package/esm/integrations/modules.js +97 -0
- package/esm/integrations/modules.js.map +1 -0
- package/esm/integrations/node-fetch.js +79 -0
- package/esm/integrations/node-fetch.js.map +1 -0
- package/esm/integrations/onuncaughtexception.js +132 -0
- package/esm/integrations/onuncaughtexception.js.map +1 -0
- package/esm/integrations/onunhandledrejection.js +87 -0
- package/esm/integrations/onunhandledrejection.js.map +1 -0
- package/esm/integrations/spotlight.js +106 -0
- package/esm/integrations/spotlight.js.map +1 -0
- package/esm/integrations/tracing/connect.js +38 -0
- package/esm/integrations/tracing/connect.js.map +1 -0
- package/esm/integrations/tracing/express.js +120 -0
- package/esm/integrations/tracing/express.js.map +1 -0
- package/esm/integrations/tracing/fastify.js +78 -0
- package/esm/integrations/tracing/fastify.js.map +1 -0
- package/esm/integrations/tracing/graphql.js +30 -0
- package/esm/integrations/tracing/graphql.js.map +1 -0
- package/esm/integrations/tracing/hapi/index.js +99 -0
- package/esm/integrations/tracing/hapi/index.js.map +1 -0
- package/esm/integrations/tracing/index.js +41 -0
- package/esm/integrations/tracing/index.js.map +1 -0
- package/esm/integrations/tracing/koa.js +57 -0
- package/esm/integrations/tracing/koa.js.map +1 -0
- package/esm/integrations/tracing/mongo.js +29 -0
- package/esm/integrations/tracing/mongo.js.map +1 -0
- package/esm/integrations/tracing/mongoose.js +29 -0
- package/esm/integrations/tracing/mongoose.js.map +1 -0
- package/esm/integrations/tracing/mysql.js +22 -0
- package/esm/integrations/tracing/mysql.js.map +1 -0
- package/esm/integrations/tracing/mysql2.js +29 -0
- package/esm/integrations/tracing/mysql2.js.map +1 -0
- package/esm/integrations/tracing/nest.js +63 -0
- package/esm/integrations/tracing/nest.js.map +1 -0
- package/esm/integrations/tracing/postgres.js +30 -0
- package/esm/integrations/tracing/postgres.js.map +1 -0
- package/esm/integrations/tracing/prisma.js +43 -0
- package/esm/integrations/tracing/prisma.js.map +1 -0
- package/esm/integrations/tracing/redis.js +27 -0
- package/esm/integrations/tracing/redis.js.map +1 -0
- package/esm/nodeVersion.js +7 -0
- package/esm/nodeVersion.js.map +1 -0
- package/esm/otel/contextManager.js +14 -0
- package/esm/otel/contextManager.js.map +1 -0
- package/esm/proxy/base.js +122 -0
- package/esm/proxy/base.js.map +1 -0
- package/esm/proxy/index.js +172 -0
- package/esm/proxy/index.js.map +1 -0
- package/esm/proxy/parse-proxy-response.js +102 -0
- package/esm/proxy/parse-proxy-response.js.map +1 -0
- package/esm/sdk/api.js +42 -0
- package/esm/sdk/api.js.map +1 -0
- package/esm/sdk/client.js +58 -0
- package/esm/sdk/client.js.map +1 -0
- package/esm/sdk/init.js +312 -0
- package/esm/sdk/init.js.map +1 -0
- package/esm/sdk/initOtel.js +55 -0
- package/esm/sdk/initOtel.js.map +1 -0
- package/esm/sdk/scope.js +16 -0
- package/esm/sdk/scope.js.map +1 -0
- package/esm/transports/http.js +158 -0
- package/esm/transports/http.js.map +1 -0
- package/esm/utils/addOriginToSpan.js +9 -0
- package/esm/utils/addOriginToSpan.js.map +1 -0
- package/esm/utils/errorhandling.js +42 -0
- package/esm/utils/errorhandling.js.map +1 -0
- package/esm/utils/getRequestUrl.js +16 -0
- package/esm/utils/getRequestUrl.js.map +1 -0
- package/esm/utils/module.js +60 -0
- package/esm/utils/module.js.map +1 -0
- package/package.json +16 -16
- package/types/index.d.ts +2 -2
- package/types/index.d.ts.map +1 -1
- package/types/integrations/tracing/hapi/index.d.ts.map +1 -1
- package/types/integrations/tracing/koa.d.ts.map +1 -1
- package/types/sdk/init.d.ts +9 -1
- package/types/sdk/init.d.ts.map +1 -1
- package/types-ts3.8/index.d.ts +2 -2
- package/types-ts3.8/sdk/init.d.ts +9 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { logger } from '@sentry/utils';
|
|
2
|
+
|
|
3
|
+
function debug(...args) {
|
|
4
|
+
logger.log('[https-proxy-agent:parse-proxy-response]', ...args);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function parseProxyResponse(socket) {
|
|
8
|
+
return new Promise((resolve, reject) => {
|
|
9
|
+
// we need to buffer any HTTP traffic that happens with the proxy before we get
|
|
10
|
+
// the CONNECT response, so that if the response is anything other than an "200"
|
|
11
|
+
// response code, then we can re-play the "data" events on the socket once the
|
|
12
|
+
// HTTP parser is hooked up...
|
|
13
|
+
let buffersLength = 0;
|
|
14
|
+
const buffers = [];
|
|
15
|
+
|
|
16
|
+
function read() {
|
|
17
|
+
const b = socket.read();
|
|
18
|
+
if (b) ondata(b);
|
|
19
|
+
else socket.once('readable', read);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function cleanup() {
|
|
23
|
+
socket.removeListener('end', onend);
|
|
24
|
+
socket.removeListener('error', onerror);
|
|
25
|
+
socket.removeListener('readable', read);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function onend() {
|
|
29
|
+
cleanup();
|
|
30
|
+
debug('onend');
|
|
31
|
+
reject(new Error('Proxy connection ended before receiving CONNECT response'));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function onerror(err) {
|
|
35
|
+
cleanup();
|
|
36
|
+
debug('onerror %o', err);
|
|
37
|
+
reject(err);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function ondata(b) {
|
|
41
|
+
buffers.push(b);
|
|
42
|
+
buffersLength += b.length;
|
|
43
|
+
|
|
44
|
+
const buffered = Buffer.concat(buffers, buffersLength);
|
|
45
|
+
const endOfHeaders = buffered.indexOf('\r\n\r\n');
|
|
46
|
+
|
|
47
|
+
if (endOfHeaders === -1) {
|
|
48
|
+
// keep buffering
|
|
49
|
+
debug('have not received end of HTTP headers yet...');
|
|
50
|
+
read();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const headerParts = buffered.slice(0, endOfHeaders).toString('ascii').split('\r\n');
|
|
55
|
+
const firstLine = headerParts.shift();
|
|
56
|
+
if (!firstLine) {
|
|
57
|
+
socket.destroy();
|
|
58
|
+
return reject(new Error('No header received from proxy CONNECT response'));
|
|
59
|
+
}
|
|
60
|
+
const firstLineParts = firstLine.split(' ');
|
|
61
|
+
const statusCode = +firstLineParts[1];
|
|
62
|
+
const statusText = firstLineParts.slice(2).join(' ');
|
|
63
|
+
const headers = {};
|
|
64
|
+
for (const header of headerParts) {
|
|
65
|
+
if (!header) continue;
|
|
66
|
+
const firstColon = header.indexOf(':');
|
|
67
|
+
if (firstColon === -1) {
|
|
68
|
+
socket.destroy();
|
|
69
|
+
return reject(new Error(`Invalid header from proxy CONNECT response: "${header}"`));
|
|
70
|
+
}
|
|
71
|
+
const key = header.slice(0, firstColon).toLowerCase();
|
|
72
|
+
const value = header.slice(firstColon + 1).trimStart();
|
|
73
|
+
const current = headers[key];
|
|
74
|
+
if (typeof current === 'string') {
|
|
75
|
+
headers[key] = [current, value];
|
|
76
|
+
} else if (Array.isArray(current)) {
|
|
77
|
+
current.push(value);
|
|
78
|
+
} else {
|
|
79
|
+
headers[key] = value;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
debug('got proxy server response: %o %o', firstLine, headers);
|
|
83
|
+
cleanup();
|
|
84
|
+
resolve({
|
|
85
|
+
connect: {
|
|
86
|
+
statusCode,
|
|
87
|
+
statusText,
|
|
88
|
+
headers,
|
|
89
|
+
},
|
|
90
|
+
buffered,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
socket.on('error', onerror);
|
|
95
|
+
socket.on('end', onend);
|
|
96
|
+
|
|
97
|
+
read();
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export { parseProxyResponse };
|
|
102
|
+
//# sourceMappingURL=parse-proxy-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-proxy-response.js","sources":["../../../src/proxy/parse-proxy-response.ts"],"sourcesContent":["/**\n * This code was originally forked from https://github.com/TooTallNate/proxy-agents/tree/b133295fd16f6475578b6b15bd9b4e33ecb0d0b7\n * With the following licence:\n *\n * (The MIT License)\n *\n * Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>*\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:*\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.*\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable jsdoc/require-jsdoc */\nimport type { IncomingHttpHeaders } from 'http';\nimport type { Readable } from 'stream';\nimport { logger } from '@sentry/utils';\n\nfunction debug(...args: unknown[]): void {\n logger.log('[https-proxy-agent:parse-proxy-response]', ...args);\n}\n\nexport interface ConnectResponse {\n statusCode: number;\n statusText: string;\n headers: IncomingHttpHeaders;\n}\n\nexport function parseProxyResponse(socket: Readable): Promise<{ connect: ConnectResponse; buffered: Buffer }> {\n return new Promise((resolve, reject) => {\n // we need to buffer any HTTP traffic that happens with the proxy before we get\n // the CONNECT response, so that if the response is anything other than an \"200\"\n // response code, then we can re-play the \"data\" events on the socket once the\n // HTTP parser is hooked up...\n let buffersLength = 0;\n const buffers: Buffer[] = [];\n\n function read() {\n const b = socket.read();\n if (b) ondata(b);\n else socket.once('readable', read);\n }\n\n function cleanup() {\n socket.removeListener('end', onend);\n socket.removeListener('error', onerror);\n socket.removeListener('readable', read);\n }\n\n function onend() {\n cleanup();\n debug('onend');\n reject(new Error('Proxy connection ended before receiving CONNECT response'));\n }\n\n function onerror(err: Error) {\n cleanup();\n debug('onerror %o', err);\n reject(err);\n }\n\n function ondata(b: Buffer) {\n buffers.push(b);\n buffersLength += b.length;\n\n const buffered = Buffer.concat(buffers, buffersLength);\n const endOfHeaders = buffered.indexOf('\\r\\n\\r\\n');\n\n if (endOfHeaders === -1) {\n // keep buffering\n debug('have not received end of HTTP headers yet...');\n read();\n return;\n }\n\n const headerParts = buffered.slice(0, endOfHeaders).toString('ascii').split('\\r\\n');\n const firstLine = headerParts.shift();\n if (!firstLine) {\n socket.destroy();\n return reject(new Error('No header received from proxy CONNECT response'));\n }\n const firstLineParts = firstLine.split(' ');\n const statusCode = +firstLineParts[1];\n const statusText = firstLineParts.slice(2).join(' ');\n const headers: IncomingHttpHeaders = {};\n for (const header of headerParts) {\n if (!header) continue;\n const firstColon = header.indexOf(':');\n if (firstColon === -1) {\n socket.destroy();\n return reject(new Error(`Invalid header from proxy CONNECT response: \"${header}\"`));\n }\n const key = header.slice(0, firstColon).toLowerCase();\n const value = header.slice(firstColon + 1).trimStart();\n const current = headers[key];\n if (typeof current === 'string') {\n headers[key] = [current, value];\n } else if (Array.isArray(current)) {\n current.push(value);\n } else {\n headers[key] = value;\n }\n }\n debug('got proxy server response: %o %o', firstLine, headers);\n cleanup();\n resolve({\n connect: {\n statusCode,\n statusText,\n headers,\n },\n buffered,\n });\n }\n\n socket.on('error', onerror);\n socket.on('end', onend);\n\n read();\n });\n}\n"],"names":[],"mappings":"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"}
|
package/esm/sdk/api.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createStackParser, nodeStackLineParser, GLOBAL_OBJ } from '@sentry/utils';
|
|
2
|
+
import { createGetModuleFromFilename } from '../utils/module.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Returns a release dynamically from environment variables.
|
|
6
|
+
*/
|
|
7
|
+
function getSentryRelease(fallback) {
|
|
8
|
+
// Always read first as Sentry takes this as precedence
|
|
9
|
+
if (process.env.SENTRY_RELEASE) {
|
|
10
|
+
return process.env.SENTRY_RELEASE;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// This supports the variable that sentry-webpack-plugin injects
|
|
14
|
+
if (GLOBAL_OBJ.SENTRY_RELEASE && GLOBAL_OBJ.SENTRY_RELEASE.id) {
|
|
15
|
+
return GLOBAL_OBJ.SENTRY_RELEASE.id;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
// GitHub Actions - https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables
|
|
20
|
+
process.env.GITHUB_SHA ||
|
|
21
|
+
// Netlify - https://docs.netlify.com/configure-builds/environment-variables/#build-metadata
|
|
22
|
+
process.env.COMMIT_REF ||
|
|
23
|
+
// Vercel - https://vercel.com/docs/v2/build-step#system-environment-variables
|
|
24
|
+
process.env.VERCEL_GIT_COMMIT_SHA ||
|
|
25
|
+
process.env.VERCEL_GITHUB_COMMIT_SHA ||
|
|
26
|
+
process.env.VERCEL_GITLAB_COMMIT_SHA ||
|
|
27
|
+
process.env.VERCEL_BITBUCKET_COMMIT_SHA ||
|
|
28
|
+
// Zeit (now known as Vercel)
|
|
29
|
+
process.env.ZEIT_GITHUB_COMMIT_SHA ||
|
|
30
|
+
process.env.ZEIT_GITLAB_COMMIT_SHA ||
|
|
31
|
+
process.env.ZEIT_BITBUCKET_COMMIT_SHA ||
|
|
32
|
+
// Cloudflare Pages - https://developers.cloudflare.com/pages/platform/build-configuration/#environment-variables
|
|
33
|
+
process.env.CF_PAGES_COMMIT_SHA ||
|
|
34
|
+
fallback
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Node.js stack parser */
|
|
39
|
+
const defaultStackParser = createStackParser(nodeStackLineParser(createGetModuleFromFilename()));
|
|
40
|
+
|
|
41
|
+
export { defaultStackParser, getSentryRelease };
|
|
42
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sources":["../../../src/sdk/api.ts"],"sourcesContent":["// PUBLIC APIS\n\nimport type { StackParser } from '@sentry/types';\nimport { GLOBAL_OBJ, createStackParser, nodeStackLineParser } from '@sentry/utils';\nimport { createGetModuleFromFilename } from '../utils/module';\n\n/**\n * Returns a release dynamically from environment variables.\n */\nexport function getSentryRelease(fallback?: string): string | undefined {\n // Always read first as Sentry takes this as precedence\n if (process.env.SENTRY_RELEASE) {\n return process.env.SENTRY_RELEASE;\n }\n\n // This supports the variable that sentry-webpack-plugin injects\n if (GLOBAL_OBJ.SENTRY_RELEASE && GLOBAL_OBJ.SENTRY_RELEASE.id) {\n return GLOBAL_OBJ.SENTRY_RELEASE.id;\n }\n\n return (\n // GitHub Actions - https://help.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables#default-environment-variables\n process.env.GITHUB_SHA ||\n // Netlify - https://docs.netlify.com/configure-builds/environment-variables/#build-metadata\n process.env.COMMIT_REF ||\n // Vercel - https://vercel.com/docs/v2/build-step#system-environment-variables\n process.env.VERCEL_GIT_COMMIT_SHA ||\n process.env.VERCEL_GITHUB_COMMIT_SHA ||\n process.env.VERCEL_GITLAB_COMMIT_SHA ||\n process.env.VERCEL_BITBUCKET_COMMIT_SHA ||\n // Zeit (now known as Vercel)\n process.env.ZEIT_GITHUB_COMMIT_SHA ||\n process.env.ZEIT_GITLAB_COMMIT_SHA ||\n process.env.ZEIT_BITBUCKET_COMMIT_SHA ||\n // Cloudflare Pages - https://developers.cloudflare.com/pages/platform/build-configuration/#environment-variables\n process.env.CF_PAGES_COMMIT_SHA ||\n fallback\n );\n}\n\n/** Node.js stack parser */\nexport const defaultStackParser: StackParser = createStackParser(nodeStackLineParser(createGetModuleFromFilename()));\n"],"names":[],"mappings":";;;AAMA;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,QAAQ,EAA+B;AACxE;AACA,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;AAClC,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;AACrC,GAAE;AACF;AACA;AACA,EAAE,IAAI,UAAU,CAAC,cAAA,IAAkB,UAAU,CAAC,cAAc,CAAC,EAAE,EAAE;AACjE,IAAI,OAAO,UAAU,CAAC,cAAc,CAAC,EAAE,CAAA;AACvC,GAAE;AACF;AACA,EAAE;AACF;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,UAAW;AAC3B;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,UAAW;AAC3B;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAsB;AACtC,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAyB;AACzC,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAyB;AACzC,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA4B;AAC5C;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAuB;AACvC,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAuB;AACvC,IAAI,OAAO,CAAC,GAAG,CAAC,yBAA0B;AAC1C;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAoB;AACpC,IAAI,QAAA;AACJ,IAAG;AACH,CAAA;AACA;AACA;AACa,MAAA,kBAAkB,GAAgB,iBAAiB,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,CAAC;;;;"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { _optionalChain } from '@sentry/utils';
|
|
2
|
+
import * as os from 'os';
|
|
3
|
+
import { trace } from '@opentelemetry/api';
|
|
4
|
+
import { ServerRuntimeClient, applySdkMetadata, SDK_VERSION } from '@sentry/core';
|
|
5
|
+
import { logger } from '@sentry/utils';
|
|
6
|
+
import { isMainThread, threadId } from 'worker_threads';
|
|
7
|
+
|
|
8
|
+
/** A client for using Sentry with Node & OpenTelemetry. */
|
|
9
|
+
class NodeClient extends ServerRuntimeClient {
|
|
10
|
+
|
|
11
|
+
constructor(options) {
|
|
12
|
+
const clientOptions = {
|
|
13
|
+
...options,
|
|
14
|
+
platform: 'node',
|
|
15
|
+
runtime: { name: 'node', version: global.process.version },
|
|
16
|
+
serverName: options.serverName || global.process.env.SENTRY_NAME || os.hostname(),
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
applySdkMetadata(clientOptions, 'node');
|
|
20
|
+
|
|
21
|
+
logger.log(
|
|
22
|
+
`Initializing Sentry: process: ${process.pid}, thread: ${isMainThread ? 'main' : `worker-${threadId}`}.`,
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
super(clientOptions);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Get the OTEL tracer. */
|
|
29
|
+
get tracer() {
|
|
30
|
+
if (this._tracer) {
|
|
31
|
+
return this._tracer;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const name = '@sentry/node';
|
|
35
|
+
const version = SDK_VERSION;
|
|
36
|
+
const tracer = trace.getTracer(name, version);
|
|
37
|
+
this._tracer = tracer;
|
|
38
|
+
|
|
39
|
+
return tracer;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @inheritDoc
|
|
44
|
+
*/
|
|
45
|
+
async flush(timeout) {
|
|
46
|
+
const provider = this.traceProvider;
|
|
47
|
+
const spanProcessor = _optionalChain([provider, 'optionalAccess', _ => _.activeSpanProcessor]);
|
|
48
|
+
|
|
49
|
+
if (spanProcessor) {
|
|
50
|
+
await spanProcessor.forceFlush();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return super.flush(timeout);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { NodeClient };
|
|
58
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../../../src/sdk/client.ts"],"sourcesContent":["import * as os from 'os';\nimport type { Tracer } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport type { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';\nimport type { ServerRuntimeClientOptions } from '@sentry/core';\nimport { SDK_VERSION, ServerRuntimeClient, applySdkMetadata } from '@sentry/core';\nimport { logger } from '@sentry/utils';\nimport { isMainThread, threadId } from 'worker_threads';\nimport type { NodeClientOptions } from '../types';\n\n/** A client for using Sentry with Node & OpenTelemetry. */\nexport class NodeClient extends ServerRuntimeClient<NodeClientOptions> {\n public traceProvider: BasicTracerProvider | undefined;\n private _tracer: Tracer | undefined;\n\n public constructor(options: NodeClientOptions) {\n const clientOptions: ServerRuntimeClientOptions = {\n ...options,\n platform: 'node',\n runtime: { name: 'node', version: global.process.version },\n serverName: options.serverName || global.process.env.SENTRY_NAME || os.hostname(),\n };\n\n applySdkMetadata(clientOptions, 'node');\n\n logger.log(\n `Initializing Sentry: process: ${process.pid}, thread: ${isMainThread ? 'main' : `worker-${threadId}`}.`,\n );\n\n super(clientOptions);\n }\n\n /** Get the OTEL tracer. */\n public get tracer(): Tracer {\n if (this._tracer) {\n return this._tracer;\n }\n\n const name = '@sentry/node';\n const version = SDK_VERSION;\n const tracer = trace.getTracer(name, version);\n this._tracer = tracer;\n\n return tracer;\n }\n\n /**\n * @inheritDoc\n */\n public async flush(timeout?: number): Promise<boolean> {\n const provider = this.traceProvider;\n const spanProcessor = provider?.activeSpanProcessor;\n\n if (spanProcessor) {\n await spanProcessor.forceFlush();\n }\n\n return super.flush(timeout);\n }\n}\n"],"names":[],"mappings":"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"}
|
package/esm/sdk/init.js
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { inboundFiltersIntegration, functionToStringIntegration, linkedErrorsIntegration, requestDataIntegration, hasTracingEnabled, getCurrentScope, getIntegrationsToSetup, getClient, startSession, getIsolationScope, endSession } from '@sentry/core';
|
|
2
|
+
import { setOpenTelemetryContextAsyncContextStrategy, openTelemetrySetupCheck } from '@sentry/opentelemetry';
|
|
3
|
+
import { logger, consoleSandbox, GLOBAL_OBJ, dropUndefinedKeys, stackParserFromStackParserOptions, propagationContextFromHeaders } from '@sentry/utils';
|
|
4
|
+
import { DEBUG_BUILD } from '../debug-build.js';
|
|
5
|
+
import { consoleIntegration } from '../integrations/console.js';
|
|
6
|
+
import { nodeContextIntegration } from '../integrations/context.js';
|
|
7
|
+
import { contextLinesIntegration } from '../integrations/contextlines.js';
|
|
8
|
+
import moduleModule from 'module';
|
|
9
|
+
import { httpIntegration } from '../integrations/http.js';
|
|
10
|
+
import { localVariablesIntegration } from '../integrations/local-variables/index.js';
|
|
11
|
+
import { modulesIntegration } from '../integrations/modules.js';
|
|
12
|
+
import { nativeNodeFetchIntegration } from '../integrations/node-fetch.js';
|
|
13
|
+
import { onUncaughtExceptionIntegration } from '../integrations/onuncaughtexception.js';
|
|
14
|
+
import { onUnhandledRejectionIntegration } from '../integrations/onunhandledrejection.js';
|
|
15
|
+
import { spotlightIntegration } from '../integrations/spotlight.js';
|
|
16
|
+
import { getAutoPerformanceIntegrations } from '../integrations/tracing/index.js';
|
|
17
|
+
import { makeNodeTransport } from '../transports/http.js';
|
|
18
|
+
import { defaultStackParser, getSentryRelease } from './api.js';
|
|
19
|
+
import { NodeClient } from './client.js';
|
|
20
|
+
import { initOpenTelemetry } from './initOtel.js';
|
|
21
|
+
|
|
22
|
+
function isCjs() {
|
|
23
|
+
return typeof require !== 'undefined';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function getCjsOnlyIntegrations() {
|
|
27
|
+
return isCjs() ? [modulesIntegration()] : [];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Get default integrations, excluding performance.
|
|
32
|
+
*/
|
|
33
|
+
function getDefaultIntegrationsWithoutPerformance() {
|
|
34
|
+
return [
|
|
35
|
+
// Common
|
|
36
|
+
inboundFiltersIntegration(),
|
|
37
|
+
functionToStringIntegration(),
|
|
38
|
+
linkedErrorsIntegration(),
|
|
39
|
+
requestDataIntegration(),
|
|
40
|
+
// Native Wrappers
|
|
41
|
+
consoleIntegration(),
|
|
42
|
+
httpIntegration(),
|
|
43
|
+
nativeNodeFetchIntegration(),
|
|
44
|
+
// Global Handlers
|
|
45
|
+
onUncaughtExceptionIntegration(),
|
|
46
|
+
onUnhandledRejectionIntegration(),
|
|
47
|
+
// Event Info
|
|
48
|
+
contextLinesIntegration(),
|
|
49
|
+
localVariablesIntegration(),
|
|
50
|
+
nodeContextIntegration(),
|
|
51
|
+
...getCjsOnlyIntegrations(),
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Get the default integrations for the Node SDK. */
|
|
56
|
+
function getDefaultIntegrations(options) {
|
|
57
|
+
return [
|
|
58
|
+
...getDefaultIntegrationsWithoutPerformance(),
|
|
59
|
+
...(hasTracingEnabled(options) ? getAutoPerformanceIntegrations() : []),
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Initialize Sentry for Node.
|
|
65
|
+
*/
|
|
66
|
+
function init(options = {}) {
|
|
67
|
+
return _init(options, getDefaultIntegrations);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Initialize Sentry for Node, without any integrations added by default.
|
|
72
|
+
*/
|
|
73
|
+
function initWithoutDefaultIntegrations(options = {}) {
|
|
74
|
+
return _init(options, () => []);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Initialize Sentry for Node, without performance instrumentation.
|
|
79
|
+
*/
|
|
80
|
+
function _init(
|
|
81
|
+
options = {},
|
|
82
|
+
getDefaultIntegrationsImpl,
|
|
83
|
+
) {
|
|
84
|
+
const clientOptions = getClientOptions(options, getDefaultIntegrationsImpl);
|
|
85
|
+
|
|
86
|
+
if (clientOptions.debug === true) {
|
|
87
|
+
if (DEBUG_BUILD) {
|
|
88
|
+
logger.enable();
|
|
89
|
+
} else {
|
|
90
|
+
// use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped
|
|
91
|
+
consoleSandbox(() => {
|
|
92
|
+
// eslint-disable-next-line no-console
|
|
93
|
+
console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (!isCjs()) {
|
|
99
|
+
const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(Number);
|
|
100
|
+
|
|
101
|
+
// Register hook was added in v20.6.0 and v18.19.0
|
|
102
|
+
if (nodeMajor >= 22 || (nodeMajor === 20 && nodeMinor >= 6) || (nodeMajor === 18 && nodeMinor >= 19)) {
|
|
103
|
+
// We need to work around using import.meta.url directly because jest complains about it.
|
|
104
|
+
const importMetaUrl =
|
|
105
|
+
typeof import.meta.url !== 'undefined' ? import.meta.url : undefined;
|
|
106
|
+
|
|
107
|
+
if (!GLOBAL_OBJ._sentryEsmLoaderHookRegistered && importMetaUrl) {
|
|
108
|
+
// @ts-expect-error register is available in these versions
|
|
109
|
+
moduleModule.register('@opentelemetry/instrumentation/hook.mjs', importMetaUrl);
|
|
110
|
+
GLOBAL_OBJ._sentryEsmLoaderHookRegistered = true;
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
consoleSandbox(() => {
|
|
114
|
+
// eslint-disable-next-line no-console
|
|
115
|
+
console.warn(
|
|
116
|
+
'[Sentry] You are using Node.js in ESM mode ("import syntax"). The Sentry Node.js SDK is not compatible with ESM in Node.js versions before 18.19.0 or before 20.6.0. Please either build your application with CommonJS ("require() syntax"), or use version 7.x of the Sentry Node.js SDK.',
|
|
117
|
+
);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
setOpenTelemetryContextAsyncContextStrategy();
|
|
123
|
+
|
|
124
|
+
const scope = getCurrentScope();
|
|
125
|
+
scope.update(options.initialScope);
|
|
126
|
+
|
|
127
|
+
const client = new NodeClient(clientOptions);
|
|
128
|
+
// The client is on the current scope, from where it generally is inherited
|
|
129
|
+
getCurrentScope().setClient(client);
|
|
130
|
+
|
|
131
|
+
if (isEnabled(client)) {
|
|
132
|
+
client.init();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (options.autoSessionTracking) {
|
|
136
|
+
startSessionTracking();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
updateScopeFromEnvVariables();
|
|
140
|
+
|
|
141
|
+
if (options.spotlight) {
|
|
142
|
+
// force integrations to be setup even if no DSN was set
|
|
143
|
+
// If they have already been added before, they will be ignored anyhow
|
|
144
|
+
const integrations = client.getOptions().integrations;
|
|
145
|
+
for (const integration of integrations) {
|
|
146
|
+
client.addIntegration(integration);
|
|
147
|
+
}
|
|
148
|
+
client.addIntegration(
|
|
149
|
+
spotlightIntegration({
|
|
150
|
+
sidecarUrl: typeof options.spotlight === 'string' ? options.spotlight : undefined,
|
|
151
|
+
}),
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// If users opt-out of this, they _have_ to set up OpenTelemetry themselves
|
|
156
|
+
// There is no way to use this SDK without OpenTelemetry!
|
|
157
|
+
if (!options.skipOpenTelemetrySetup) {
|
|
158
|
+
initOpenTelemetry(client);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
validateOpenTelemetrySetup();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function validateOpenTelemetrySetup() {
|
|
165
|
+
if (!DEBUG_BUILD) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const setup = openTelemetrySetupCheck();
|
|
170
|
+
|
|
171
|
+
const required = ['SentrySpanProcessor', 'SentryContextManager', 'SentryPropagator'] ;
|
|
172
|
+
for (const k of required) {
|
|
173
|
+
if (!setup.includes(k)) {
|
|
174
|
+
logger.error(
|
|
175
|
+
`You have to set up the ${k}. Without this, the OpenTelemetry & Sentry integration will not work properly.`,
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (!setup.includes('SentrySampler')) {
|
|
181
|
+
logger.warn(
|
|
182
|
+
'You have to set up the SentrySampler. Without this, the OpenTelemetry & Sentry integration may still work, but sample rates set for the Sentry SDK will not be respected.',
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function getClientOptions(
|
|
188
|
+
options,
|
|
189
|
+
getDefaultIntegrationsImpl,
|
|
190
|
+
) {
|
|
191
|
+
const release = getRelease(options.release);
|
|
192
|
+
|
|
193
|
+
const autoSessionTracking =
|
|
194
|
+
typeof release !== 'string'
|
|
195
|
+
? false
|
|
196
|
+
: options.autoSessionTracking === undefined
|
|
197
|
+
? true
|
|
198
|
+
: options.autoSessionTracking;
|
|
199
|
+
|
|
200
|
+
const tracesSampleRate = getTracesSampleRate(options.tracesSampleRate);
|
|
201
|
+
|
|
202
|
+
const baseOptions = dropUndefinedKeys({
|
|
203
|
+
transport: makeNodeTransport,
|
|
204
|
+
dsn: process.env.SENTRY_DSN,
|
|
205
|
+
environment: process.env.SENTRY_ENVIRONMENT,
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
const overwriteOptions = dropUndefinedKeys({
|
|
209
|
+
release,
|
|
210
|
+
autoSessionTracking,
|
|
211
|
+
tracesSampleRate,
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
const mergedOptions = {
|
|
215
|
+
...baseOptions,
|
|
216
|
+
...options,
|
|
217
|
+
...overwriteOptions,
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
if (options.defaultIntegrations === undefined) {
|
|
221
|
+
options.defaultIntegrations = getDefaultIntegrationsImpl(mergedOptions);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const clientOptions = {
|
|
225
|
+
...mergedOptions,
|
|
226
|
+
stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),
|
|
227
|
+
integrations: getIntegrationsToSetup({
|
|
228
|
+
defaultIntegrations: options.defaultIntegrations,
|
|
229
|
+
integrations: options.integrations,
|
|
230
|
+
}),
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
return clientOptions;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function getRelease(release) {
|
|
237
|
+
if (release !== undefined) {
|
|
238
|
+
return release;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const detectedRelease = getSentryRelease();
|
|
242
|
+
if (detectedRelease !== undefined) {
|
|
243
|
+
return detectedRelease;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function getTracesSampleRate(tracesSampleRate) {
|
|
250
|
+
if (tracesSampleRate !== undefined) {
|
|
251
|
+
return tracesSampleRate;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const sampleRateFromEnv = process.env.SENTRY_TRACES_SAMPLE_RATE;
|
|
255
|
+
if (!sampleRateFromEnv) {
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const parsed = parseFloat(sampleRateFromEnv);
|
|
260
|
+
return isFinite(parsed) ? parsed : undefined;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Update scope and propagation context based on environmental variables.
|
|
265
|
+
*
|
|
266
|
+
* See https://github.com/getsentry/rfcs/blob/main/text/0071-continue-trace-over-process-boundaries.md
|
|
267
|
+
* for more details.
|
|
268
|
+
*/
|
|
269
|
+
function updateScopeFromEnvVariables() {
|
|
270
|
+
const sentryUseEnvironment = (process.env.SENTRY_USE_ENVIRONMENT || '').toLowerCase();
|
|
271
|
+
if (!['false', 'n', 'no', 'off', '0'].includes(sentryUseEnvironment)) {
|
|
272
|
+
const sentryTraceEnv = process.env.SENTRY_TRACE;
|
|
273
|
+
const baggageEnv = process.env.SENTRY_BAGGAGE;
|
|
274
|
+
const propagationContext = propagationContextFromHeaders(sentryTraceEnv, baggageEnv);
|
|
275
|
+
getCurrentScope().setPropagationContext(propagationContext);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Enable automatic Session Tracking for the node process.
|
|
281
|
+
*/
|
|
282
|
+
function startSessionTracking() {
|
|
283
|
+
const client = getClient();
|
|
284
|
+
if (client && client.getOptions().autoSessionTracking) {
|
|
285
|
+
client.initSessionFlusher();
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
startSession();
|
|
289
|
+
|
|
290
|
+
// Emitted in the case of healthy sessions, error of `mechanism.handled: true` and unhandledrejections because
|
|
291
|
+
// The 'beforeExit' event is not emitted for conditions causing explicit termination,
|
|
292
|
+
// such as calling process.exit() or uncaught exceptions.
|
|
293
|
+
// Ref: https://nodejs.org/api/process.html#process_event_beforeexit
|
|
294
|
+
process.on('beforeExit', () => {
|
|
295
|
+
const session = getIsolationScope().getSession();
|
|
296
|
+
|
|
297
|
+
// Only call endSession, if the Session exists on Scope and SessionStatus is not a
|
|
298
|
+
// Terminal Status i.e. Exited or Crashed because
|
|
299
|
+
// "When a session is moved away from ok it must not be updated anymore."
|
|
300
|
+
// Ref: https://develop.sentry.dev/sdk/sessions/
|
|
301
|
+
if (session && session.status !== 'ok') {
|
|
302
|
+
endSession();
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
function isEnabled(client) {
|
|
308
|
+
return client.getOptions().enabled !== false && client.getTransport() !== undefined;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
export { getDefaultIntegrations, getDefaultIntegrationsWithoutPerformance, init, initWithoutDefaultIntegrations };
|
|
312
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sources":["../../../src/sdk/init.ts"],"sourcesContent":["import {\n endSession,\n functionToStringIntegration,\n getClient,\n getCurrentScope,\n getIntegrationsToSetup,\n getIsolationScope,\n hasTracingEnabled,\n inboundFiltersIntegration,\n linkedErrorsIntegration,\n requestDataIntegration,\n startSession,\n} from '@sentry/core';\nimport { openTelemetrySetupCheck, setOpenTelemetryContextAsyncContextStrategy } from '@sentry/opentelemetry';\nimport type { Client, Integration, Options } from '@sentry/types';\nimport {\n GLOBAL_OBJ,\n consoleSandbox,\n dropUndefinedKeys,\n logger,\n propagationContextFromHeaders,\n stackParserFromStackParserOptions,\n} from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build';\nimport { consoleIntegration } from '../integrations/console';\nimport { nodeContextIntegration } from '../integrations/context';\nimport { contextLinesIntegration } from '../integrations/contextlines';\n\nimport moduleModule from 'module';\nimport { httpIntegration } from '../integrations/http';\nimport { localVariablesIntegration } from '../integrations/local-variables';\nimport { modulesIntegration } from '../integrations/modules';\nimport { nativeNodeFetchIntegration } from '../integrations/node-fetch';\nimport { onUncaughtExceptionIntegration } from '../integrations/onuncaughtexception';\nimport { onUnhandledRejectionIntegration } from '../integrations/onunhandledrejection';\nimport { spotlightIntegration } from '../integrations/spotlight';\nimport { getAutoPerformanceIntegrations } from '../integrations/tracing';\nimport { makeNodeTransport } from '../transports';\nimport type { NodeClientOptions, NodeOptions } from '../types';\nimport { defaultStackParser, getSentryRelease } from './api';\nimport { NodeClient } from './client';\nimport { initOpenTelemetry } from './initOtel';\n\nfunction isCjs(): boolean {\n return typeof require !== 'undefined';\n}\n\nfunction getCjsOnlyIntegrations(): Integration[] {\n return isCjs() ? [modulesIntegration()] : [];\n}\n\n/**\n * Get default integrations, excluding performance.\n */\nexport function getDefaultIntegrationsWithoutPerformance(): Integration[] {\n return [\n // Common\n inboundFiltersIntegration(),\n functionToStringIntegration(),\n linkedErrorsIntegration(),\n requestDataIntegration(),\n // Native Wrappers\n consoleIntegration(),\n httpIntegration(),\n nativeNodeFetchIntegration(),\n // Global Handlers\n onUncaughtExceptionIntegration(),\n onUnhandledRejectionIntegration(),\n // Event Info\n contextLinesIntegration(),\n localVariablesIntegration(),\n nodeContextIntegration(),\n ...getCjsOnlyIntegrations(),\n ];\n}\n\n/** Get the default integrations for the Node SDK. */\nexport function getDefaultIntegrations(options: Options): Integration[] {\n return [\n ...getDefaultIntegrationsWithoutPerformance(),\n ...(hasTracingEnabled(options) ? getAutoPerformanceIntegrations() : []),\n ];\n}\n\ndeclare const __IMPORT_META_URL_REPLACEMENT__: string;\n\n/**\n * Initialize Sentry for Node.\n */\nexport function init(options: NodeOptions | undefined = {}): void {\n return _init(options, getDefaultIntegrations);\n}\n\n/**\n * Initialize Sentry for Node, without any integrations added by default.\n */\nexport function initWithoutDefaultIntegrations(options: NodeOptions | undefined = {}): void {\n return _init(options, () => []);\n}\n\n/**\n * Initialize Sentry for Node, without performance instrumentation.\n */\nfunction _init(\n options: NodeOptions | undefined = {},\n getDefaultIntegrationsImpl: (options: Options) => Integration[],\n): void {\n const clientOptions = getClientOptions(options, getDefaultIntegrationsImpl);\n\n if (clientOptions.debug === true) {\n if (DEBUG_BUILD) {\n logger.enable();\n } else {\n // use `console.warn` rather than `logger.warn` since by non-debug bundles have all `logger.x` statements stripped\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n });\n }\n }\n\n if (!isCjs()) {\n const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(Number);\n\n // Register hook was added in v20.6.0 and v18.19.0\n if (nodeMajor >= 22 || (nodeMajor === 20 && nodeMinor >= 6) || (nodeMajor === 18 && nodeMinor >= 19)) {\n // We need to work around using import.meta.url directly because jest complains about it.\n const importMetaUrl =\n typeof __IMPORT_META_URL_REPLACEMENT__ !== 'undefined' ? __IMPORT_META_URL_REPLACEMENT__ : undefined;\n\n if (!GLOBAL_OBJ._sentryEsmLoaderHookRegistered && importMetaUrl) {\n // @ts-expect-error register is available in these versions\n moduleModule.register('@opentelemetry/instrumentation/hook.mjs', importMetaUrl);\n GLOBAL_OBJ._sentryEsmLoaderHookRegistered = true;\n }\n } else {\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.warn(\n '[Sentry] You are using Node.js in ESM mode (\"import syntax\"). The Sentry Node.js SDK is not compatible with ESM in Node.js versions before 18.19.0 or before 20.6.0. Please either build your application with CommonJS (\"require() syntax\"), or use version 7.x of the Sentry Node.js SDK.',\n );\n });\n }\n }\n\n setOpenTelemetryContextAsyncContextStrategy();\n\n const scope = getCurrentScope();\n scope.update(options.initialScope);\n\n const client = new NodeClient(clientOptions);\n // The client is on the current scope, from where it generally is inherited\n getCurrentScope().setClient(client);\n\n if (isEnabled(client)) {\n client.init();\n }\n\n if (options.autoSessionTracking) {\n startSessionTracking();\n }\n\n updateScopeFromEnvVariables();\n\n if (options.spotlight) {\n // force integrations to be setup even if no DSN was set\n // If they have already been added before, they will be ignored anyhow\n const integrations = client.getOptions().integrations;\n for (const integration of integrations) {\n client.addIntegration(integration);\n }\n client.addIntegration(\n spotlightIntegration({\n sidecarUrl: typeof options.spotlight === 'string' ? options.spotlight : undefined,\n }),\n );\n }\n\n // If users opt-out of this, they _have_ to set up OpenTelemetry themselves\n // There is no way to use this SDK without OpenTelemetry!\n if (!options.skipOpenTelemetrySetup) {\n initOpenTelemetry(client);\n }\n\n validateOpenTelemetrySetup();\n}\n\nfunction validateOpenTelemetrySetup(): void {\n if (!DEBUG_BUILD) {\n return;\n }\n\n const setup = openTelemetrySetupCheck();\n\n const required = ['SentrySpanProcessor', 'SentryContextManager', 'SentryPropagator'] as const;\n for (const k of required) {\n if (!setup.includes(k)) {\n logger.error(\n `You have to set up the ${k}. Without this, the OpenTelemetry & Sentry integration will not work properly.`,\n );\n }\n }\n\n if (!setup.includes('SentrySampler')) {\n logger.warn(\n 'You have to set up the SentrySampler. Without this, the OpenTelemetry & Sentry integration may still work, but sample rates set for the Sentry SDK will not be respected.',\n );\n }\n}\n\nfunction getClientOptions(\n options: NodeOptions,\n getDefaultIntegrationsImpl: (options: Options) => Integration[],\n): NodeClientOptions {\n const release = getRelease(options.release);\n\n const autoSessionTracking =\n typeof release !== 'string'\n ? false\n : options.autoSessionTracking === undefined\n ? true\n : options.autoSessionTracking;\n\n const tracesSampleRate = getTracesSampleRate(options.tracesSampleRate);\n\n const baseOptions = dropUndefinedKeys({\n transport: makeNodeTransport,\n dsn: process.env.SENTRY_DSN,\n environment: process.env.SENTRY_ENVIRONMENT,\n });\n\n const overwriteOptions = dropUndefinedKeys({\n release,\n autoSessionTracking,\n tracesSampleRate,\n });\n\n const mergedOptions = {\n ...baseOptions,\n ...options,\n ...overwriteOptions,\n };\n\n if (options.defaultIntegrations === undefined) {\n options.defaultIntegrations = getDefaultIntegrationsImpl(mergedOptions);\n }\n\n const clientOptions: NodeClientOptions = {\n ...mergedOptions,\n stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),\n integrations: getIntegrationsToSetup({\n defaultIntegrations: options.defaultIntegrations,\n integrations: options.integrations,\n }),\n };\n\n return clientOptions;\n}\n\nfunction getRelease(release: NodeOptions['release']): string | undefined {\n if (release !== undefined) {\n return release;\n }\n\n const detectedRelease = getSentryRelease();\n if (detectedRelease !== undefined) {\n return detectedRelease;\n }\n\n return undefined;\n}\n\nfunction getTracesSampleRate(tracesSampleRate: NodeOptions['tracesSampleRate']): number | undefined {\n if (tracesSampleRate !== undefined) {\n return tracesSampleRate;\n }\n\n const sampleRateFromEnv = process.env.SENTRY_TRACES_SAMPLE_RATE;\n if (!sampleRateFromEnv) {\n return undefined;\n }\n\n const parsed = parseFloat(sampleRateFromEnv);\n return isFinite(parsed) ? parsed : undefined;\n}\n\n/**\n * Update scope and propagation context based on environmental variables.\n *\n * See https://github.com/getsentry/rfcs/blob/main/text/0071-continue-trace-over-process-boundaries.md\n * for more details.\n */\nfunction updateScopeFromEnvVariables(): void {\n const sentryUseEnvironment = (process.env.SENTRY_USE_ENVIRONMENT || '').toLowerCase();\n if (!['false', 'n', 'no', 'off', '0'].includes(sentryUseEnvironment)) {\n const sentryTraceEnv = process.env.SENTRY_TRACE;\n const baggageEnv = process.env.SENTRY_BAGGAGE;\n const propagationContext = propagationContextFromHeaders(sentryTraceEnv, baggageEnv);\n getCurrentScope().setPropagationContext(propagationContext);\n }\n}\n\n/**\n * Enable automatic Session Tracking for the node process.\n */\nfunction startSessionTracking(): void {\n const client = getClient<NodeClient>();\n if (client && client.getOptions().autoSessionTracking) {\n client.initSessionFlusher();\n }\n\n startSession();\n\n // Emitted in the case of healthy sessions, error of `mechanism.handled: true` and unhandledrejections because\n // The 'beforeExit' event is not emitted for conditions causing explicit termination,\n // such as calling process.exit() or uncaught exceptions.\n // Ref: https://nodejs.org/api/process.html#process_event_beforeexit\n process.on('beforeExit', () => {\n const session = getIsolationScope().getSession();\n\n // Only call endSession, if the Session exists on Scope and SessionStatus is not a\n // Terminal Status i.e. Exited or Crashed because\n // \"When a session is moved away from ok it must not be updated anymore.\"\n // Ref: https://develop.sentry.dev/sdk/sessions/\n if (session && session.status !== 'ok') {\n endSession();\n }\n });\n}\n\nfunction isEnabled(client: Client): boolean {\n return client.getOptions().enabled !== false && client.getTransport() !== undefined;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { diag, DiagLogLevel } from '@opentelemetry/api';
|
|
2
|
+
import { Resource } from '@opentelemetry/resources';
|
|
3
|
+
import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
|
|
4
|
+
import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_NAMESPACE, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
|
|
5
|
+
import { SDK_VERSION } from '@sentry/core';
|
|
6
|
+
import { setupEventContextTrace, SentrySampler, SentrySpanProcessor, SentryPropagator } from '@sentry/opentelemetry';
|
|
7
|
+
import { logger } from '@sentry/utils';
|
|
8
|
+
import { SentryContextManager } from '../otel/contextManager.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Initialize OpenTelemetry for Node.
|
|
12
|
+
*/
|
|
13
|
+
function initOpenTelemetry(client) {
|
|
14
|
+
if (client.getOptions().debug) {
|
|
15
|
+
const otelLogger = new Proxy(logger , {
|
|
16
|
+
get(target, prop, receiver) {
|
|
17
|
+
const actualProp = prop === 'verbose' ? 'debug' : prop;
|
|
18
|
+
return Reflect.get(target, actualProp, receiver);
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
diag.setLogger(otelLogger, DiagLogLevel.DEBUG);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
setupEventContextTrace(client);
|
|
26
|
+
|
|
27
|
+
const provider = setupOtel(client);
|
|
28
|
+
client.traceProvider = provider;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Just exported for tests. */
|
|
32
|
+
function setupOtel(client) {
|
|
33
|
+
// Create and configure NodeTracerProvider
|
|
34
|
+
const provider = new BasicTracerProvider({
|
|
35
|
+
sampler: new SentrySampler(client),
|
|
36
|
+
resource: new Resource({
|
|
37
|
+
[SEMRESATTRS_SERVICE_NAME]: 'node',
|
|
38
|
+
[SEMRESATTRS_SERVICE_NAMESPACE]: 'sentry',
|
|
39
|
+
[SEMRESATTRS_SERVICE_VERSION]: SDK_VERSION,
|
|
40
|
+
}),
|
|
41
|
+
forceFlushTimeoutMillis: 500,
|
|
42
|
+
});
|
|
43
|
+
provider.addSpanProcessor(new SentrySpanProcessor());
|
|
44
|
+
|
|
45
|
+
// Initialize the provider
|
|
46
|
+
provider.register({
|
|
47
|
+
propagator: new SentryPropagator(),
|
|
48
|
+
contextManager: new SentryContextManager(),
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return provider;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { initOpenTelemetry, setupOtel };
|
|
55
|
+
//# sourceMappingURL=initOtel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initOtel.js","sources":["../../../src/sdk/initOtel.ts"],"sourcesContent":["import { DiagLogLevel, diag } from '@opentelemetry/api';\nimport { Resource } from '@opentelemetry/resources';\nimport { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';\nimport {\n SEMRESATTRS_SERVICE_NAME,\n SEMRESATTRS_SERVICE_NAMESPACE,\n SEMRESATTRS_SERVICE_VERSION,\n} from '@opentelemetry/semantic-conventions';\nimport { SDK_VERSION } from '@sentry/core';\nimport { SentryPropagator, SentrySampler, SentrySpanProcessor, setupEventContextTrace } from '@sentry/opentelemetry';\nimport { logger } from '@sentry/utils';\n\nimport { SentryContextManager } from '../otel/contextManager';\nimport type { NodeClient } from './client';\n\n/**\n * Initialize OpenTelemetry for Node.\n */\nexport function initOpenTelemetry(client: NodeClient): void {\n if (client.getOptions().debug) {\n const otelLogger = new Proxy(logger as typeof logger & { verbose: (typeof logger)['debug'] }, {\n get(target, prop, receiver) {\n const actualProp = prop === 'verbose' ? 'debug' : prop;\n return Reflect.get(target, actualProp, receiver);\n },\n });\n\n diag.setLogger(otelLogger, DiagLogLevel.DEBUG);\n }\n\n setupEventContextTrace(client);\n\n const provider = setupOtel(client);\n client.traceProvider = provider;\n}\n\n/** Just exported for tests. */\nexport function setupOtel(client: NodeClient): BasicTracerProvider {\n // Create and configure NodeTracerProvider\n const provider = new BasicTracerProvider({\n sampler: new SentrySampler(client),\n resource: new Resource({\n [SEMRESATTRS_SERVICE_NAME]: 'node',\n [SEMRESATTRS_SERVICE_NAMESPACE]: 'sentry',\n [SEMRESATTRS_SERVICE_VERSION]: SDK_VERSION,\n }),\n forceFlushTimeoutMillis: 500,\n });\n provider.addSpanProcessor(new SentrySpanProcessor());\n\n // Initialize the provider\n provider.register({\n propagator: new SentryPropagator(),\n contextManager: new SentryContextManager(),\n });\n\n return provider;\n}\n"],"names":[],"mappings":";;;;;;;;;AAeA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,MAAM,EAAoB;AAC5D,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE;AACjC,IAAI,MAAM,UAAW,GAAE,IAAI,KAAK,CAAC,SAAiE;AAClG,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;AAClC,QAAQ,MAAM,aAAa,IAAA,KAAS,SAAU,GAAE,OAAQ,GAAE,IAAI,CAAA;AAC9D,QAAQ,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;AACxD,OAAO;AACP,KAAK,CAAC,CAAA;AACN;AACA,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;AAClD,GAAE;AACF;AACA,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAA;AAChC;AACA,EAAE,MAAM,QAAS,GAAE,SAAS,CAAC,MAAM,CAAC,CAAA;AACpC,EAAE,MAAM,CAAC,aAAc,GAAE,QAAQ,CAAA;AACjC,CAAA;AACA;AACA;AACO,SAAS,SAAS,CAAC,MAAM,EAAmC;AACnE;AACA,EAAE,MAAM,QAAA,GAAW,IAAI,mBAAmB,CAAC;AAC3C,IAAI,OAAO,EAAE,IAAI,aAAa,CAAC,MAAM,CAAC;AACtC,IAAI,QAAQ,EAAE,IAAI,QAAQ,CAAC;AAC3B,MAAM,CAAC,wBAAwB,GAAG,MAAM;AACxC,MAAM,CAAC,6BAA6B,GAAG,QAAQ;AAC/C,MAAM,CAAC,2BAA2B,GAAG,WAAW;AAChD,KAAK,CAAC;AACN,IAAI,uBAAuB,EAAE,GAAG;AAChC,GAAG,CAAC,CAAA;AACJ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAA;AACtD;AACA;AACA,EAAE,QAAQ,CAAC,QAAQ,CAAC;AACpB,IAAI,UAAU,EAAE,IAAI,gBAAgB,EAAE;AACtC,IAAI,cAAc,EAAE,IAAI,oBAAoB,EAAE;AAC9C,GAAG,CAAC,CAAA;AACJ;AACA,EAAE,OAAO,QAAQ,CAAA;AACjB;;;;"}
|