@sentry/node 8.0.0-alpha.2 → 8.0.0-alpha.3

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.
Files changed (228) hide show
  1. package/README.md +14 -93
  2. package/cjs/index.js +3665 -77
  3. package/cjs/index.js.map +1 -1
  4. package/esm/index.js +3614 -31
  5. package/esm/index.js.map +1 -1
  6. package/esm/integrations/anr/worker-script.js +2 -2
  7. package/esm/package.json +1 -0
  8. package/package.json +21 -6
  9. package/types/index.d.ts +6 -5
  10. package/types/index.d.ts.map +1 -1
  11. package/types/integrations/anr/worker-script.d.ts +1 -1
  12. package/types/integrations/anr/worker-script.d.ts.map +1 -1
  13. package/types/integrations/http.d.ts +4 -0
  14. package/types/integrations/http.d.ts.map +1 -1
  15. package/types/integrations/tracing/fastify.d.ts +9 -0
  16. package/types/integrations/tracing/fastify.d.ts.map +1 -1
  17. package/types/integrations/tracing/prisma.d.ts.map +1 -1
  18. package/types/proxy/helpers.d.ts +2 -2
  19. package/types/proxy/helpers.d.ts.map +1 -1
  20. package/types/proxy/index.d.ts.map +1 -1
  21. package/types/sdk/hub.d.ts.map +1 -1
  22. package/types/sdk/init.d.ts.map +1 -1
  23. package/types/transports/http-module.d.ts +2 -2
  24. package/types/transports/http-module.d.ts.map +1 -1
  25. package/types/types.d.ts +3 -4
  26. package/types/types.d.ts.map +1 -1
  27. package/types-ts3.8/index.d.ts +6 -5
  28. package/types-ts3.8/integrations/anr/worker-script.d.ts +1 -1
  29. package/types-ts3.8/integrations/http.d.ts +4 -0
  30. package/types-ts3.8/integrations/tracing/fastify.d.ts +9 -0
  31. package/types-ts3.8/proxy/helpers.d.ts +2 -2
  32. package/types-ts3.8/transports/http-module.d.ts +2 -2
  33. package/types-ts3.8/types.d.ts +3 -4
  34. package/cjs/cron/common.js +0 -56
  35. package/cjs/cron/common.js.map +0 -1
  36. package/cjs/cron/cron.js +0 -102
  37. package/cjs/cron/cron.js.map +0 -1
  38. package/cjs/cron/index.js +0 -15
  39. package/cjs/cron/index.js.map +0 -1
  40. package/cjs/cron/node-cron.js +0 -61
  41. package/cjs/cron/node-cron.js.map +0 -1
  42. package/cjs/cron/node-schedule.js +0 -57
  43. package/cjs/cron/node-schedule.js.map +0 -1
  44. package/cjs/debug-build.js +0 -11
  45. package/cjs/debug-build.js.map +0 -1
  46. package/cjs/integrations/anr/index.js +0 -144
  47. package/cjs/integrations/anr/index.js.map +0 -1
  48. package/cjs/integrations/anr/worker-script.js +0 -2
  49. package/cjs/integrations/anr/worker-script.js.map +0 -1
  50. package/cjs/integrations/console.js +0 -40
  51. package/cjs/integrations/console.js.map +0 -1
  52. package/cjs/integrations/context.js +0 -435
  53. package/cjs/integrations/context.js.map +0 -1
  54. package/cjs/integrations/contextlines.js +0 -137
  55. package/cjs/integrations/contextlines.js.map +0 -1
  56. package/cjs/integrations/http.js +0 -137
  57. package/cjs/integrations/http.js.map +0 -1
  58. package/cjs/integrations/local-variables/common.js +0 -87
  59. package/cjs/integrations/local-variables/common.js.map +0 -1
  60. package/cjs/integrations/local-variables/index.js +0 -8
  61. package/cjs/integrations/local-variables/index.js.map +0 -1
  62. package/cjs/integrations/local-variables/local-variables-sync.js +0 -385
  63. package/cjs/integrations/local-variables/local-variables-sync.js.map +0 -1
  64. package/cjs/integrations/modules.js +0 -99
  65. package/cjs/integrations/modules.js.map +0 -1
  66. package/cjs/integrations/node-fetch.js +0 -82
  67. package/cjs/integrations/node-fetch.js.map +0 -1
  68. package/cjs/integrations/onuncaughtexception.js +0 -137
  69. package/cjs/integrations/onuncaughtexception.js.map +0 -1
  70. package/cjs/integrations/onunhandledrejection.js +0 -90
  71. package/cjs/integrations/onunhandledrejection.js.map +0 -1
  72. package/cjs/integrations/spotlight.js +0 -109
  73. package/cjs/integrations/spotlight.js.map +0 -1
  74. package/cjs/integrations/tracing/express.js +0 -103
  75. package/cjs/integrations/tracing/express.js.map +0 -1
  76. package/cjs/integrations/tracing/fastify.js +0 -33
  77. package/cjs/integrations/tracing/fastify.js.map +0 -1
  78. package/cjs/integrations/tracing/graphql.js +0 -34
  79. package/cjs/integrations/tracing/graphql.js.map +0 -1
  80. package/cjs/integrations/tracing/hapi/index.js +0 -81
  81. package/cjs/integrations/tracing/hapi/index.js.map +0 -1
  82. package/cjs/integrations/tracing/index.js +0 -37
  83. package/cjs/integrations/tracing/index.js.map +0 -1
  84. package/cjs/integrations/tracing/koa.js +0 -21
  85. package/cjs/integrations/tracing/koa.js.map +0 -1
  86. package/cjs/integrations/tracing/mongo.js +0 -33
  87. package/cjs/integrations/tracing/mongo.js.map +0 -1
  88. package/cjs/integrations/tracing/mongoose.js +0 -33
  89. package/cjs/integrations/tracing/mongoose.js.map +0 -1
  90. package/cjs/integrations/tracing/mysql.js +0 -26
  91. package/cjs/integrations/tracing/mysql.js.map +0 -1
  92. package/cjs/integrations/tracing/mysql2.js +0 -33
  93. package/cjs/integrations/tracing/mysql2.js.map +0 -1
  94. package/cjs/integrations/tracing/nest.js +0 -26
  95. package/cjs/integrations/tracing/nest.js.map +0 -1
  96. package/cjs/integrations/tracing/postgres.js +0 -34
  97. package/cjs/integrations/tracing/postgres.js.map +0 -1
  98. package/cjs/integrations/tracing/prisma.js +0 -33
  99. package/cjs/integrations/tracing/prisma.js.map +0 -1
  100. package/cjs/nodeVersion.js +0 -12
  101. package/cjs/nodeVersion.js.map +0 -1
  102. package/cjs/otel/contextManager.js +0 -16
  103. package/cjs/otel/contextManager.js.map +0 -1
  104. package/cjs/proxy/base.js +0 -126
  105. package/cjs/proxy/base.js.map +0 -1
  106. package/cjs/proxy/index.js +0 -209
  107. package/cjs/proxy/index.js.map +0 -1
  108. package/cjs/proxy/parse-proxy-response.js +0 -104
  109. package/cjs/proxy/parse-proxy-response.js.map +0 -1
  110. package/cjs/sdk/api.js +0 -74
  111. package/cjs/sdk/api.js.map +0 -1
  112. package/cjs/sdk/client.js +0 -57
  113. package/cjs/sdk/client.js.map +0 -1
  114. package/cjs/sdk/hub.js +0 -104
  115. package/cjs/sdk/hub.js.map +0 -1
  116. package/cjs/sdk/init.js +0 -252
  117. package/cjs/sdk/init.js.map +0 -1
  118. package/cjs/sdk/initOtel.js +0 -70
  119. package/cjs/sdk/initOtel.js.map +0 -1
  120. package/cjs/sdk/scope.js +0 -18
  121. package/cjs/sdk/scope.js.map +0 -1
  122. package/cjs/transports/http.js +0 -160
  123. package/cjs/transports/http.js.map +0 -1
  124. package/cjs/utils/addOriginToSpan.js +0 -11
  125. package/cjs/utils/addOriginToSpan.js.map +0 -1
  126. package/cjs/utils/errorhandling.js +0 -44
  127. package/cjs/utils/errorhandling.js.map +0 -1
  128. package/cjs/utils/getRequestUrl.js +0 -18
  129. package/cjs/utils/getRequestUrl.js.map +0 -1
  130. package/cjs/utils/module.js +0 -62
  131. package/cjs/utils/module.js.map +0 -1
  132. package/esm/cron/common.js +0 -54
  133. package/esm/cron/common.js.map +0 -1
  134. package/esm/cron/cron.js +0 -100
  135. package/esm/cron/cron.js.map +0 -1
  136. package/esm/cron/index.js +0 -13
  137. package/esm/cron/index.js.map +0 -1
  138. package/esm/cron/node-cron.js +0 -56
  139. package/esm/cron/node-cron.js.map +0 -1
  140. package/esm/cron/node-schedule.js +0 -55
  141. package/esm/cron/node-schedule.js.map +0 -1
  142. package/esm/debug-build.js +0 -9
  143. package/esm/debug-build.js.map +0 -1
  144. package/esm/integrations/anr/index.js +0 -138
  145. package/esm/integrations/anr/index.js.map +0 -1
  146. package/esm/integrations/anr/worker-script.js.map +0 -1
  147. package/esm/integrations/console.js +0 -38
  148. package/esm/integrations/console.js.map +0 -1
  149. package/esm/integrations/context.js +0 -427
  150. package/esm/integrations/context.js.map +0 -1
  151. package/esm/integrations/contextlines.js +0 -131
  152. package/esm/integrations/contextlines.js.map +0 -1
  153. package/esm/integrations/http.js +0 -132
  154. package/esm/integrations/http.js.map +0 -1
  155. package/esm/integrations/local-variables/common.js +0 -81
  156. package/esm/integrations/local-variables/common.js.map +0 -1
  157. package/esm/integrations/local-variables/index.js +0 -6
  158. package/esm/integrations/local-variables/index.js.map +0 -1
  159. package/esm/integrations/local-variables/local-variables-sync.js +0 -379
  160. package/esm/integrations/local-variables/local-variables-sync.js.map +0 -1
  161. package/esm/integrations/modules.js +0 -97
  162. package/esm/integrations/modules.js.map +0 -1
  163. package/esm/integrations/node-fetch.js +0 -80
  164. package/esm/integrations/node-fetch.js.map +0 -1
  165. package/esm/integrations/onuncaughtexception.js +0 -134
  166. package/esm/integrations/onuncaughtexception.js.map +0 -1
  167. package/esm/integrations/onunhandledrejection.js +0 -87
  168. package/esm/integrations/onunhandledrejection.js.map +0 -1
  169. package/esm/integrations/spotlight.js +0 -106
  170. package/esm/integrations/spotlight.js.map +0 -1
  171. package/esm/integrations/tracing/express.js +0 -96
  172. package/esm/integrations/tracing/express.js.map +0 -1
  173. package/esm/integrations/tracing/fastify.js +0 -31
  174. package/esm/integrations/tracing/fastify.js.map +0 -1
  175. package/esm/integrations/tracing/graphql.js +0 -32
  176. package/esm/integrations/tracing/graphql.js.map +0 -1
  177. package/esm/integrations/tracing/hapi/index.js +0 -77
  178. package/esm/integrations/tracing/hapi/index.js.map +0 -1
  179. package/esm/integrations/tracing/index.js +0 -35
  180. package/esm/integrations/tracing/index.js.map +0 -1
  181. package/esm/integrations/tracing/koa.js +0 -19
  182. package/esm/integrations/tracing/koa.js.map +0 -1
  183. package/esm/integrations/tracing/mongo.js +0 -31
  184. package/esm/integrations/tracing/mongo.js.map +0 -1
  185. package/esm/integrations/tracing/mongoose.js +0 -31
  186. package/esm/integrations/tracing/mongoose.js.map +0 -1
  187. package/esm/integrations/tracing/mysql.js +0 -24
  188. package/esm/integrations/tracing/mysql.js.map +0 -1
  189. package/esm/integrations/tracing/mysql2.js +0 -31
  190. package/esm/integrations/tracing/mysql2.js.map +0 -1
  191. package/esm/integrations/tracing/nest.js +0 -24
  192. package/esm/integrations/tracing/nest.js.map +0 -1
  193. package/esm/integrations/tracing/postgres.js +0 -32
  194. package/esm/integrations/tracing/postgres.js.map +0 -1
  195. package/esm/integrations/tracing/prisma.js +0 -31
  196. package/esm/integrations/tracing/prisma.js.map +0 -1
  197. package/esm/nodeVersion.js +0 -9
  198. package/esm/nodeVersion.js.map +0 -1
  199. package/esm/otel/contextManager.js +0 -14
  200. package/esm/otel/contextManager.js.map +0 -1
  201. package/esm/proxy/base.js +0 -121
  202. package/esm/proxy/base.js.map +0 -1
  203. package/esm/proxy/index.js +0 -203
  204. package/esm/proxy/index.js.map +0 -1
  205. package/esm/proxy/parse-proxy-response.js +0 -102
  206. package/esm/proxy/parse-proxy-response.js.map +0 -1
  207. package/esm/sdk/api.js +0 -69
  208. package/esm/sdk/api.js.map +0 -1
  209. package/esm/sdk/client.js +0 -52
  210. package/esm/sdk/client.js.map +0 -1
  211. package/esm/sdk/hub.js +0 -102
  212. package/esm/sdk/hub.js.map +0 -1
  213. package/esm/sdk/init.js +0 -249
  214. package/esm/sdk/init.js.map +0 -1
  215. package/esm/sdk/initOtel.js +0 -67
  216. package/esm/sdk/initOtel.js.map +0 -1
  217. package/esm/sdk/scope.js +0 -16
  218. package/esm/sdk/scope.js.map +0 -1
  219. package/esm/transports/http.js +0 -155
  220. package/esm/transports/http.js.map +0 -1
  221. package/esm/utils/addOriginToSpan.js +0 -9
  222. package/esm/utils/addOriginToSpan.js.map +0 -1
  223. package/esm/utils/errorhandling.js +0 -42
  224. package/esm/utils/errorhandling.js.map +0 -1
  225. package/esm/utils/getRequestUrl.js +0 -16
  226. package/esm/utils/getRequestUrl.js.map +0 -1
  227. package/esm/utils/module.js +0 -60
  228. package/esm/utils/module.js.map +0 -1
@@ -1,138 +0,0 @@
1
- import { _optionalChain, _optionalChainDelete } from '@sentry/utils';
2
- import { defineIntegration, getCurrentScope } from '@sentry/core';
3
- import { logger } from '@sentry/utils';
4
- import * as inspector from 'inspector';
5
- import { Worker } from 'worker_threads';
6
- import { NODE_MAJOR, NODE_VERSION } from '../../nodeVersion.js';
7
- import { base64WorkerScript } from './worker-script.js';
8
-
9
- const DEFAULT_INTERVAL = 50;
10
- const DEFAULT_HANG_THRESHOLD = 5000;
11
-
12
- function log(message, ...args) {
13
- logger.log(`[ANR] ${message}`, ...args);
14
- }
15
-
16
- /**
17
- * Gets contexts by calling all event processors. This relies on being called after all integrations are setup
18
- */
19
- async function getContexts(client) {
20
- let event = { message: 'ANR' };
21
- const eventHint = {};
22
-
23
- for (const processor of client.getEventProcessors()) {
24
- if (event === null) break;
25
- event = await processor(event, eventHint);
26
- }
27
-
28
- return _optionalChain([event, 'optionalAccess', _2 => _2.contexts]) || {};
29
- }
30
-
31
- const INTEGRATION_NAME = 'Anr';
32
-
33
- const _anrIntegration = ((options = {}) => {
34
- return {
35
- name: INTEGRATION_NAME,
36
- setup(client) {
37
- if (NODE_MAJOR < 16 || (NODE_MAJOR === 16 && (NODE_VERSION.minor || 0) < 17)) {
38
- throw new Error('ANR detection requires Node 16.17.0 or later');
39
- }
40
-
41
- // setImmediate is used to ensure that all other integrations have been setup
42
- setImmediate(() => _startWorker(client, options));
43
- },
44
- };
45
- }) ;
46
-
47
- const anrIntegration = defineIntegration(_anrIntegration);
48
-
49
- /**
50
- * Starts the ANR worker thread
51
- */
52
- async function _startWorker(client, _options) {
53
- const contexts = await getContexts(client);
54
- const dsn = client.getDsn();
55
-
56
- if (!dsn) {
57
- return;
58
- }
59
-
60
- // These will not be accurate if sent later from the worker thread
61
- _optionalChainDelete([contexts, 'access', _3 => _3.app, 'optionalAccess', _4 => delete _4.app_memory]);
62
- _optionalChainDelete([contexts, 'access', _5 => _5.device, 'optionalAccess', _6 => delete _6.free_memory]);
63
-
64
- const initOptions = client.getOptions();
65
-
66
- const sdkMetadata = client.getSdkMetadata() || {};
67
- if (sdkMetadata.sdk) {
68
- sdkMetadata.sdk.integrations = initOptions.integrations.map(i => i.name);
69
- }
70
-
71
- const options = {
72
- debug: logger.isEnabled(),
73
- dsn,
74
- environment: initOptions.environment || 'production',
75
- release: initOptions.release,
76
- dist: initOptions.dist,
77
- sdkMetadata,
78
- appRootPath: _options.appRootPath,
79
- pollInterval: _options.pollInterval || DEFAULT_INTERVAL,
80
- anrThreshold: _options.anrThreshold || DEFAULT_HANG_THRESHOLD,
81
- captureStackTrace: !!_options.captureStackTrace,
82
- staticTags: _options.staticTags || {},
83
- contexts,
84
- };
85
-
86
- if (options.captureStackTrace) {
87
- if (!inspector.url()) {
88
- inspector.open(0);
89
- }
90
- }
91
-
92
- const worker = new Worker(new URL(`data:application/javascript;base64,${base64WorkerScript}`), {
93
- workerData: options,
94
- });
95
-
96
- process.on('exit', () => {
97
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
98
- worker.terminate();
99
- });
100
-
101
- const timer = setInterval(() => {
102
- try {
103
- const currentSession = getCurrentScope().getSession();
104
- // We need to copy the session object and remove the toJSON method so it can be sent to the worker
105
- // serialized without making it a SerializedSession
106
- const session = currentSession ? { ...currentSession, toJSON: undefined } : undefined;
107
- // message the worker to tell it the main event loop is still running
108
- worker.postMessage({ session });
109
- } catch (_) {
110
- //
111
- }
112
- }, options.pollInterval);
113
- // Timer should not block exit
114
- timer.unref();
115
-
116
- worker.on('message', (msg) => {
117
- if (msg === 'session-ended') {
118
- log('ANR event sent from ANR worker. Clearing session in this thread.');
119
- getCurrentScope().setSession(undefined);
120
- }
121
- });
122
-
123
- worker.once('error', (err) => {
124
- clearInterval(timer);
125
- log('ANR worker error', err);
126
- });
127
-
128
- worker.once('exit', (code) => {
129
- clearInterval(timer);
130
- log('ANR worker exit', code);
131
- });
132
-
133
- // Ensure this thread can't block app exit
134
- worker.unref();
135
- }
136
-
137
- export { anrIntegration };
138
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/integrations/anr/index.ts"],"sourcesContent":["import { defineIntegration, getCurrentScope } from '@sentry/core';\nimport type { Contexts, Event, EventHint, IntegrationFn } from '@sentry/types';\nimport { logger } from '@sentry/utils';\nimport * as inspector from 'inspector';\nimport { Worker } from 'worker_threads';\nimport { NODE_MAJOR, NODE_VERSION } from '../../nodeVersion';\nimport type { NodeClient } from '../../sdk/client';\nimport type { AnrIntegrationOptions, WorkerStartData } from './common';\nimport { base64WorkerScript } from './worker-script';\n\nconst DEFAULT_INTERVAL = 50;\nconst DEFAULT_HANG_THRESHOLD = 5000;\n\nfunction log(message: string, ...args: unknown[]): void {\n logger.log(`[ANR] ${message}`, ...args);\n}\n\n/**\n * Gets contexts by calling all event processors. This relies on being called after all integrations are setup\n */\nasync function getContexts(client: NodeClient): Promise<Contexts> {\n let event: Event | null = { message: 'ANR' };\n const eventHint: EventHint = {};\n\n for (const processor of client.getEventProcessors()) {\n if (event === null) break;\n event = await processor(event, eventHint);\n }\n\n return event?.contexts || {};\n}\n\nconst INTEGRATION_NAME = 'Anr';\n\nconst _anrIntegration = ((options: Partial<AnrIntegrationOptions> = {}) => {\n return {\n name: INTEGRATION_NAME,\n setup(client: NodeClient) {\n if (NODE_MAJOR < 16 || (NODE_MAJOR === 16 && (NODE_VERSION.minor || 0) < 17)) {\n throw new Error('ANR detection requires Node 16.17.0 or later');\n }\n\n // setImmediate is used to ensure that all other integrations have been setup\n setImmediate(() => _startWorker(client, options));\n },\n };\n}) satisfies IntegrationFn;\n\nexport const anrIntegration = defineIntegration(_anrIntegration);\n\n/**\n * Starts the ANR worker thread\n */\nasync function _startWorker(client: NodeClient, _options: Partial<AnrIntegrationOptions>): Promise<void> {\n const contexts = await getContexts(client);\n const dsn = client.getDsn();\n\n if (!dsn) {\n return;\n }\n\n // These will not be accurate if sent later from the worker thread\n delete contexts.app?.app_memory;\n delete contexts.device?.free_memory;\n\n const initOptions = client.getOptions();\n\n const sdkMetadata = client.getSdkMetadata() || {};\n if (sdkMetadata.sdk) {\n sdkMetadata.sdk.integrations = initOptions.integrations.map(i => i.name);\n }\n\n const options: WorkerStartData = {\n debug: logger.isEnabled(),\n dsn,\n environment: initOptions.environment || 'production',\n release: initOptions.release,\n dist: initOptions.dist,\n sdkMetadata,\n appRootPath: _options.appRootPath,\n pollInterval: _options.pollInterval || DEFAULT_INTERVAL,\n anrThreshold: _options.anrThreshold || DEFAULT_HANG_THRESHOLD,\n captureStackTrace: !!_options.captureStackTrace,\n staticTags: _options.staticTags || {},\n contexts,\n };\n\n if (options.captureStackTrace) {\n if (!inspector.url()) {\n inspector.open(0);\n }\n }\n\n const worker = new Worker(new URL(`data:application/javascript;base64,${base64WorkerScript}`), {\n workerData: options,\n });\n\n process.on('exit', () => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n worker.terminate();\n });\n\n const timer = setInterval(() => {\n try {\n const currentSession = getCurrentScope().getSession();\n // We need to copy the session object and remove the toJSON method so it can be sent to the worker\n // serialized without making it a SerializedSession\n const session = currentSession ? { ...currentSession, toJSON: undefined } : undefined;\n // message the worker to tell it the main event loop is still running\n worker.postMessage({ session });\n } catch (_) {\n //\n }\n }, options.pollInterval);\n // Timer should not block exit\n timer.unref();\n\n worker.on('message', (msg: string) => {\n if (msg === 'session-ended') {\n log('ANR event sent from ANR worker. Clearing session in this thread.');\n getCurrentScope().setSession(undefined);\n }\n });\n\n worker.once('error', (err: Error) => {\n clearInterval(timer);\n log('ANR worker error', err);\n });\n\n worker.once('exit', (code: number) => {\n clearInterval(timer);\n log('ANR worker exit', code);\n });\n\n // Ensure this thread can't block app exit\n worker.unref();\n}\n"],"names":[],"mappings":"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,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;GACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;GACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,MAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;EAEA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;;EAEA,CAAA,CAAA,CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;EACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;IACA,WAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,WAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EACA;;EAEA,CAAA,CAAA,CAAA,CAAA,EAAA,QAAA,EAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA;IACA,WAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,YAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,YAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,iBAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,UAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EACA,CAAA;;EAEA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;IACA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA;MACA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA;EACA;;EAEA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,mCAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EACA,CAAA,CAAA;;EAEA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA;IACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EACA,CAAA,CAAA;;EAEA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA;IACA,CAAA,CAAA,EAAA;MACA,CAAA,CAAA,CAAA,CAAA,EAAA,eAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA;MACA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;MACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;MACA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,MAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAAA,SAAA;MACA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;MACA,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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-script.js","sources":["../../../../src/integrations/anr/worker-script.ts"],"sourcesContent":["// This file is a placeholder that gets overwritten in the build directory.\nexport const base64WorkerScript = '';\n"],"names":[],"mappings":"AAAA;AACO,MAAM,kBAAmB,GAAE;;;;"}
@@ -1,38 +0,0 @@
1
- import * as util from 'util';
2
- import { defineIntegration, getClient, addBreadcrumb } from '@sentry/core';
3
- import { addConsoleInstrumentationHandler, severityLevelFromString } from '@sentry/utils';
4
-
5
- const INTEGRATION_NAME = 'Console';
6
-
7
- const _consoleIntegration = (() => {
8
- return {
9
- name: INTEGRATION_NAME,
10
- setup(client) {
11
- addConsoleInstrumentationHandler(({ args, level }) => {
12
- if (getClient() !== client) {
13
- return;
14
- }
15
-
16
- addBreadcrumb(
17
- {
18
- category: 'console',
19
- level: severityLevelFromString(level),
20
- message: util.format.apply(undefined, args),
21
- },
22
- {
23
- input: [...args],
24
- level,
25
- },
26
- );
27
- });
28
- },
29
- };
30
- }) ;
31
-
32
- /**
33
- * Capture console logs as breadcrumbs.
34
- */
35
- const consoleIntegration = defineIntegration(_consoleIntegration);
36
-
37
- export { consoleIntegration };
38
- //# sourceMappingURL=console.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"console.js","sources":["../../../src/integrations/console.ts"],"sourcesContent":["import * as util from 'util';\nimport { addBreadcrumb, defineIntegration, getClient } from '@sentry/core';\nimport type { IntegrationFn } from '@sentry/types';\nimport { addConsoleInstrumentationHandler, severityLevelFromString } from '@sentry/utils';\n\nconst INTEGRATION_NAME = 'Console';\n\nconst _consoleIntegration = (() => {\n return {\n name: INTEGRATION_NAME,\n setup(client) {\n addConsoleInstrumentationHandler(({ args, level }) => {\n if (getClient() !== client) {\n return;\n }\n\n addBreadcrumb(\n {\n category: 'console',\n level: severityLevelFromString(level),\n message: util.format.apply(undefined, args),\n },\n {\n input: [...args],\n level,\n },\n );\n });\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Capture console logs as breadcrumbs.\n */\nexport const consoleIntegration = defineIntegration(_consoleIntegration);\n"],"names":[],"mappings":";;;;AAKA,MAAM,gBAAA,GAAmB,SAAS,CAAA;AAClC;AACA,MAAM,mBAAoB,IAAG,MAAM;AACnC,EAAE,OAAO;AACT,IAAI,IAAI,EAAE,gBAAgB;AAC1B,IAAI,KAAK,CAAC,MAAM,EAAE;AAClB,MAAM,gCAAgC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAA,EAAO,KAAK;AAC5D,QAAQ,IAAI,SAAS,EAAG,KAAI,MAAM,EAAE;AACpC,UAAU,OAAM;AAChB,SAAQ;AACR;AACA,QAAQ,aAAa;AACrB,UAAU;AACV,YAAY,QAAQ,EAAE,SAAS;AAC/B,YAAY,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC;AACjD,YAAY,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;AACvD,WAAW;AACX,UAAU;AACV,YAAY,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;AAC5B,YAAY,KAAK;AACjB,WAAW;AACX,SAAS,CAAA;AACT,OAAO,CAAC,CAAA;AACR,KAAK;AACL,GAAG,CAAA;AACH,CAAC,CAAE,EAAA;AACH;AACA;AACA;AACA;MACa,kBAAmB,GAAE,iBAAiB,CAAC,mBAAmB;;;;"}
@@ -1,427 +0,0 @@
1
- import { _optionalChain } from '@sentry/utils';
2
- import { execFile } from 'child_process';
3
- import { readFile, readdir } from 'fs';
4
- import * as os from 'os';
5
- import { join } from 'path';
6
- import { promisify } from 'util';
7
- import { defineIntegration } from '@sentry/core';
8
-
9
- const readFileAsync = promisify(readFile);
10
- const readDirAsync = promisify(readdir);
11
-
12
- const INTEGRATION_NAME = 'Context';
13
-
14
- const _nodeContextIntegration = ((options = {}) => {
15
- let cachedContext;
16
-
17
- const _options = {
18
- app: true,
19
- os: true,
20
- device: true,
21
- culture: true,
22
- cloudResource: true,
23
- ...options,
24
- };
25
-
26
- /** Add contexts to the event. Caches the context so we only look it up once. */
27
- async function addContext(event) {
28
- if (cachedContext === undefined) {
29
- cachedContext = _getContexts();
30
- }
31
-
32
- const updatedContext = _updateContext(await cachedContext);
33
-
34
- event.contexts = {
35
- ...event.contexts,
36
- app: { ...updatedContext.app, ..._optionalChain([event, 'access', _ => _.contexts, 'optionalAccess', _2 => _2.app]) },
37
- os: { ...updatedContext.os, ..._optionalChain([event, 'access', _3 => _3.contexts, 'optionalAccess', _4 => _4.os]) },
38
- device: { ...updatedContext.device, ..._optionalChain([event, 'access', _5 => _5.contexts, 'optionalAccess', _6 => _6.device]) },
39
- culture: { ...updatedContext.culture, ..._optionalChain([event, 'access', _7 => _7.contexts, 'optionalAccess', _8 => _8.culture]) },
40
- cloud_resource: { ...updatedContext.cloud_resource, ..._optionalChain([event, 'access', _9 => _9.contexts, 'optionalAccess', _10 => _10.cloud_resource]) },
41
- };
42
-
43
- return event;
44
- }
45
-
46
- /** Get the contexts from node. */
47
- async function _getContexts() {
48
- const contexts = {};
49
-
50
- if (_options.os) {
51
- contexts.os = await getOsContext();
52
- }
53
-
54
- if (_options.app) {
55
- contexts.app = getAppContext();
56
- }
57
-
58
- if (_options.device) {
59
- contexts.device = getDeviceContext(_options.device);
60
- }
61
-
62
- if (_options.culture) {
63
- const culture = getCultureContext();
64
-
65
- if (culture) {
66
- contexts.culture = culture;
67
- }
68
- }
69
-
70
- if (_options.cloudResource) {
71
- contexts.cloud_resource = getCloudResourceContext();
72
- }
73
-
74
- return contexts;
75
- }
76
-
77
- return {
78
- name: INTEGRATION_NAME,
79
- processEvent(event) {
80
- return addContext(event);
81
- },
82
- };
83
- }) ;
84
-
85
- /**
86
- * Capture context about the environment and the device that the client is running on, to events.
87
- */
88
- const nodeContextIntegration = defineIntegration(_nodeContextIntegration);
89
-
90
- /**
91
- * Updates the context with dynamic values that can change
92
- */
93
- function _updateContext(contexts) {
94
- // Only update properties if they exist
95
- if (_optionalChain([contexts, 'optionalAccess', _11 => _11.app, 'optionalAccess', _12 => _12.app_memory])) {
96
- contexts.app.app_memory = process.memoryUsage().rss;
97
- }
98
-
99
- if (_optionalChain([contexts, 'optionalAccess', _13 => _13.device, 'optionalAccess', _14 => _14.free_memory])) {
100
- contexts.device.free_memory = os.freemem();
101
- }
102
-
103
- return contexts;
104
- }
105
-
106
- /**
107
- * Returns the operating system context.
108
- *
109
- * Based on the current platform, this uses a different strategy to provide the
110
- * most accurate OS information. Since this might involve spawning subprocesses
111
- * or accessing the file system, this should only be executed lazily and cached.
112
- *
113
- * - On macOS (Darwin), this will execute the `sw_vers` utility. The context
114
- * has a `name`, `version`, `build` and `kernel_version` set.
115
- * - On Linux, this will try to load a distribution release from `/etc` and set
116
- * the `name`, `version` and `kernel_version` fields.
117
- * - On all other platforms, only a `name` and `version` will be returned. Note
118
- * that `version` might actually be the kernel version.
119
- */
120
- async function getOsContext() {
121
- const platformId = os.platform();
122
- switch (platformId) {
123
- case 'darwin':
124
- return getDarwinInfo();
125
- case 'linux':
126
- return getLinuxInfo();
127
- default:
128
- return {
129
- name: PLATFORM_NAMES[platformId] || platformId,
130
- version: os.release(),
131
- };
132
- }
133
- }
134
-
135
- function getCultureContext() {
136
- try {
137
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
138
- if (typeof (process.versions ).icu !== 'string') {
139
- // Node was built without ICU support
140
- return;
141
- }
142
-
143
- // Check that node was built with full Intl support. Its possible it was built without support for non-English
144
- // locales which will make resolvedOptions inaccurate
145
- //
146
- // https://nodejs.org/api/intl.html#detecting-internationalization-support
147
- const january = new Date(9e8);
148
- const spanish = new Intl.DateTimeFormat('es', { month: 'long' });
149
- if (spanish.format(january) === 'enero') {
150
- const options = Intl.DateTimeFormat().resolvedOptions();
151
-
152
- return {
153
- locale: options.locale,
154
- timezone: options.timeZone,
155
- };
156
- }
157
- } catch (err) {
158
- //
159
- }
160
-
161
- return;
162
- }
163
-
164
- function getAppContext() {
165
- const app_memory = process.memoryUsage().rss;
166
- const app_start_time = new Date(Date.now() - process.uptime() * 1000).toISOString();
167
-
168
- return { app_start_time, app_memory };
169
- }
170
-
171
- /**
172
- * Gets device information from os
173
- */
174
- function getDeviceContext(deviceOpt) {
175
- const device = {};
176
-
177
- // Sometimes os.uptime() throws due to lacking permissions: https://github.com/getsentry/sentry-javascript/issues/8202
178
- let uptime;
179
- try {
180
- uptime = os.uptime && os.uptime();
181
- } catch (e) {
182
- // noop
183
- }
184
-
185
- // os.uptime or its return value seem to be undefined in certain environments (e.g. Azure functions).
186
- // Hence, we only set boot time, if we get a valid uptime value.
187
- // @see https://github.com/getsentry/sentry-javascript/issues/5856
188
- if (typeof uptime === 'number') {
189
- device.boot_time = new Date(Date.now() - uptime * 1000).toISOString();
190
- }
191
-
192
- device.arch = os.arch();
193
-
194
- if (deviceOpt === true || deviceOpt.memory) {
195
- device.memory_size = os.totalmem();
196
- device.free_memory = os.freemem();
197
- }
198
-
199
- if (deviceOpt === true || deviceOpt.cpu) {
200
- const cpuInfo = os.cpus();
201
- if (cpuInfo && cpuInfo.length) {
202
- const firstCpu = cpuInfo[0];
203
-
204
- device.processor_count = cpuInfo.length;
205
- device.cpu_description = firstCpu.model;
206
- device.processor_frequency = firstCpu.speed;
207
- }
208
- }
209
-
210
- return device;
211
- }
212
-
213
- /** Mapping of Node's platform names to actual OS names. */
214
- const PLATFORM_NAMES = {
215
- aix: 'IBM AIX',
216
- freebsd: 'FreeBSD',
217
- openbsd: 'OpenBSD',
218
- sunos: 'SunOS',
219
- win32: 'Windows',
220
- };
221
-
222
- /** Linux version file to check for a distribution. */
223
-
224
- /** Mapping of linux release files located in /etc to distributions. */
225
- const LINUX_DISTROS = [
226
- { name: 'fedora-release', distros: ['Fedora'] },
227
- { name: 'redhat-release', distros: ['Red Hat Linux', 'Centos'] },
228
- { name: 'redhat_version', distros: ['Red Hat Linux'] },
229
- { name: 'SuSE-release', distros: ['SUSE Linux'] },
230
- { name: 'lsb-release', distros: ['Ubuntu Linux', 'Arch Linux'] },
231
- { name: 'debian_version', distros: ['Debian'] },
232
- { name: 'debian_release', distros: ['Debian'] },
233
- { name: 'arch-release', distros: ['Arch Linux'] },
234
- { name: 'gentoo-release', distros: ['Gentoo Linux'] },
235
- { name: 'novell-release', distros: ['SUSE Linux'] },
236
- { name: 'alpine-release', distros: ['Alpine Linux'] },
237
- ];
238
-
239
- /** Functions to extract the OS version from Linux release files. */
240
- const LINUX_VERSIONS
241
-
242
- = {
243
- alpine: content => content,
244
- arch: content => matchFirst(/distrib_release=(.*)/, content),
245
- centos: content => matchFirst(/release ([^ ]+)/, content),
246
- debian: content => content,
247
- fedora: content => matchFirst(/release (..)/, content),
248
- mint: content => matchFirst(/distrib_release=(.*)/, content),
249
- red: content => matchFirst(/release ([^ ]+)/, content),
250
- suse: content => matchFirst(/VERSION = (.*)\n/, content),
251
- ubuntu: content => matchFirst(/distrib_release=(.*)/, content),
252
- };
253
-
254
- /**
255
- * Executes a regular expression with one capture group.
256
- *
257
- * @param regex A regular expression to execute.
258
- * @param text Content to execute the RegEx on.
259
- * @returns The captured string if matched; otherwise undefined.
260
- */
261
- function matchFirst(regex, text) {
262
- const match = regex.exec(text);
263
- return match ? match[1] : undefined;
264
- }
265
-
266
- /** Loads the macOS operating system context. */
267
- async function getDarwinInfo() {
268
- // Default values that will be used in case no operating system information
269
- // can be loaded. The default version is computed via heuristics from the
270
- // kernel version, but the build ID is missing.
271
- const darwinInfo = {
272
- kernel_version: os.release(),
273
- name: 'Mac OS X',
274
- version: `10.${Number(os.release().split('.')[0]) - 4}`,
275
- };
276
-
277
- try {
278
- // We try to load the actual macOS version by executing the `sw_vers` tool.
279
- // This tool should be available on every standard macOS installation. In
280
- // case this fails, we stick with the values computed above.
281
-
282
- const output = await new Promise((resolve, reject) => {
283
- execFile('/usr/bin/sw_vers', (error, stdout) => {
284
- if (error) {
285
- reject(error);
286
- return;
287
- }
288
- resolve(stdout);
289
- });
290
- });
291
-
292
- darwinInfo.name = matchFirst(/^ProductName:\s+(.*)$/m, output);
293
- darwinInfo.version = matchFirst(/^ProductVersion:\s+(.*)$/m, output);
294
- darwinInfo.build = matchFirst(/^BuildVersion:\s+(.*)$/m, output);
295
- } catch (e) {
296
- // ignore
297
- }
298
-
299
- return darwinInfo;
300
- }
301
-
302
- /** Returns a distribution identifier to look up version callbacks. */
303
- function getLinuxDistroId(name) {
304
- return name.split(' ')[0].toLowerCase();
305
- }
306
-
307
- /** Loads the Linux operating system context. */
308
- async function getLinuxInfo() {
309
- // By default, we cannot assume anything about the distribution or Linux
310
- // version. `os.release()` returns the kernel version and we assume a generic
311
- // "Linux" name, which will be replaced down below.
312
- const linuxInfo = {
313
- kernel_version: os.release(),
314
- name: 'Linux',
315
- };
316
-
317
- try {
318
- // We start guessing the distribution by listing files in the /etc
319
- // directory. This is were most Linux distributions (except Knoppix) store
320
- // release files with certain distribution-dependent meta data. We search
321
- // for exactly one known file defined in `LINUX_DISTROS` and exit if none
322
- // are found. In case there are more than one file, we just stick with the
323
- // first one.
324
- const etcFiles = await readDirAsync('/etc');
325
- const distroFile = LINUX_DISTROS.find(file => etcFiles.includes(file.name));
326
- if (!distroFile) {
327
- return linuxInfo;
328
- }
329
-
330
- // Once that file is known, load its contents. To make searching in those
331
- // files easier, we lowercase the file contents. Since these files are
332
- // usually quite small, this should not allocate too much memory and we only
333
- // hold on to it for a very short amount of time.
334
- const distroPath = join('/etc', distroFile.name);
335
- const contents = ((await readFileAsync(distroPath, { encoding: 'utf-8' })) ).toLowerCase();
336
-
337
- // Some Linux distributions store their release information in the same file
338
- // (e.g. RHEL and Centos). In those cases, we scan the file for an
339
- // identifier, that basically consists of the first word of the linux
340
- // distribution name (e.g. "red" for Red Hat). In case there is no match, we
341
- // just assume the first distribution in our list.
342
- const { distros } = distroFile;
343
- linuxInfo.name = distros.find(d => contents.indexOf(getLinuxDistroId(d)) >= 0) || distros[0];
344
-
345
- // Based on the found distribution, we can now compute the actual version
346
- // number. This is different for every distribution, so several strategies
347
- // are computed in `LINUX_VERSIONS`.
348
- const id = getLinuxDistroId(linuxInfo.name);
349
- linuxInfo.version = LINUX_VERSIONS[id](contents);
350
- } catch (e) {
351
- // ignore
352
- }
353
-
354
- return linuxInfo;
355
- }
356
-
357
- /**
358
- * Grabs some information about hosting provider based on best effort.
359
- */
360
- function getCloudResourceContext() {
361
- if (process.env.VERCEL) {
362
- // https://vercel.com/docs/concepts/projects/environment-variables/system-environment-variables#system-environment-variables
363
- return {
364
- 'cloud.provider': 'vercel',
365
- 'cloud.region': process.env.VERCEL_REGION,
366
- };
367
- } else if (process.env.AWS_REGION) {
368
- // https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html
369
- return {
370
- 'cloud.provider': 'aws',
371
- 'cloud.region': process.env.AWS_REGION,
372
- 'cloud.platform': process.env.AWS_EXECUTION_ENV,
373
- };
374
- } else if (process.env.GCP_PROJECT) {
375
- // https://cloud.google.com/composer/docs/how-to/managing/environment-variables#reserved_variables
376
- return {
377
- 'cloud.provider': 'gcp',
378
- };
379
- } else if (process.env.ALIYUN_REGION_ID) {
380
- // TODO: find where I found these environment variables - at least gc.github.com returns something
381
- return {
382
- 'cloud.provider': 'alibaba_cloud',
383
- 'cloud.region': process.env.ALIYUN_REGION_ID,
384
- };
385
- } else if (process.env.WEBSITE_SITE_NAME && process.env.REGION_NAME) {
386
- // https://learn.microsoft.com/en-us/azure/app-service/reference-app-settings?tabs=kudu%2Cdotnet#app-environment
387
- return {
388
- 'cloud.provider': 'azure',
389
- 'cloud.region': process.env.REGION_NAME,
390
- };
391
- } else if (process.env.IBM_CLOUD_REGION) {
392
- // TODO: find where I found these environment variables - at least gc.github.com returns something
393
- return {
394
- 'cloud.provider': 'ibm_cloud',
395
- 'cloud.region': process.env.IBM_CLOUD_REGION,
396
- };
397
- } else if (process.env.TENCENTCLOUD_REGION) {
398
- // https://www.tencentcloud.com/document/product/583/32748
399
- return {
400
- 'cloud.provider': 'tencent_cloud',
401
- 'cloud.region': process.env.TENCENTCLOUD_REGION,
402
- 'cloud.account.id': process.env.TENCENTCLOUD_APPID,
403
- 'cloud.availability_zone': process.env.TENCENTCLOUD_ZONE,
404
- };
405
- } else if (process.env.NETLIFY) {
406
- // https://docs.netlify.com/configure-builds/environment-variables/#read-only-variables
407
- return {
408
- 'cloud.provider': 'netlify',
409
- };
410
- } else if (process.env.FLY_REGION) {
411
- // https://fly.io/docs/reference/runtime-environment/
412
- return {
413
- 'cloud.provider': 'fly.io',
414
- 'cloud.region': process.env.FLY_REGION,
415
- };
416
- } else if (process.env.DYNO) {
417
- // https://devcenter.heroku.com/articles/dynos#local-environment-variables
418
- return {
419
- 'cloud.provider': 'heroku',
420
- };
421
- } else {
422
- return undefined;
423
- }
424
- }
425
-
426
- export { getDeviceContext, nodeContextIntegration, readDirAsync, readFileAsync };
427
- //# sourceMappingURL=context.js.map