@sentry/cloudflare 10.38.0 → 10.39.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/build/cjs/handler.js.map +1 -1
- package/build/cjs/options.js +21 -2
- package/build/cjs/options.js.map +1 -1
- package/build/esm/handler.js.map +1 -1
- package/build/esm/options.js +21 -2
- package/build/esm/options.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/types/handler.d.ts +1 -1
- package/build/types/handler.d.ts.map +1 -1
- package/build/types/options.d.ts +1 -1
- package/build/types/options.d.ts.map +1 -1
- package/build/types-ts3.8/handler.d.ts +1 -1
- package/build/types-ts3.8/options.d.ts +1 -1
- package/package.json +2 -2
package/build/cjs/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sources":["../../src/handler.ts"],"sourcesContent":["import {\n captureException,\n flush,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n startSpan,\n withIsolationScope,\n} from '@sentry/core';\nimport { setAsyncLocalStorageAsyncContextStrategy } from './async';\nimport type { CloudflareOptions } from './client';\nimport { isInstrumented, markAsInstrumented } from './instrument';\nimport { getHonoIntegration } from './integrations/hono';\nimport { getFinalOptions } from './options';\nimport { wrapRequestHandler } from './request';\nimport { addCloudResourceContext } from './scope-utils';\nimport { init } from './sdk';\nimport { copyExecutionContext } from './utils/copyExecutionContext';\n\n/**\n * Wrapper for Cloudflare handlers.\n *\n * Initializes the SDK and wraps the handler with Sentry instrumentation.\n *\n * Automatically instruments the `fetch` method of the handler.\n *\n * @param optionsCallback Function that returns the options for the SDK initialization.\n * @param handler {ExportedHandler} The handler to wrap.\n * @returns The wrapped handler.\n */\n// eslint-disable-next-line complexity\nexport function withSentry<\n Env = unknown,\n QueueHandlerMessage = unknown,\n CfHostMetadata = unknown,\n T extends ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata> = ExportedHandler<\n Env,\n QueueHandlerMessage,\n CfHostMetadata\n >,\n>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {\n setAsyncLocalStorageAsyncContextStrategy();\n\n try {\n if ('fetch' in handler && typeof handler.fetch === 'function' && !isInstrumented(handler.fetch)) {\n handler.fetch = new Proxy(handler.fetch, {\n apply(target, thisArg, args: Parameters<ExportedHandlerFetchHandler<Env, CfHostMetadata>>) {\n const [request, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n const options = getFinalOptions(optionsCallback(env), env);\n\n return wrapRequestHandler({ options, request, context }, () => target.apply(thisArg, args));\n },\n });\n\n markAsInstrumented(handler.fetch);\n }\n\n /* Hono does not reach the catch block of the fetch handler and captureException needs to be called in the hono errorHandler */\n if (\n 'onError' in handler &&\n 'errorHandler' in handler &&\n typeof handler.errorHandler === 'function' &&\n !isInstrumented(handler.errorHandler)\n ) {\n handler.errorHandler = new Proxy(handler.errorHandler, {\n apply(target, thisArg, args) {\n const [err, context] = args;\n\n getHonoIntegration()?.handleHonoException(err, context);\n\n return Reflect.apply(target, thisArg, args);\n },\n });\n\n markAsInstrumented(handler.errorHandler);\n }\n\n if ('scheduled' in handler && typeof handler.scheduled === 'function' && !isInstrumented(handler.scheduled)) {\n handler.scheduled = new Proxy(handler.scheduled, {\n apply(target, thisArg, args: Parameters<ExportedHandlerScheduledHandler<Env>>) {\n const [event, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.cron',\n name: `Scheduled Cron ${event.cron}`,\n attributes: {\n 'faas.cron': event.cron,\n 'faas.time': new Date(event.scheduledTime).toISOString(),\n 'faas.trigger': 'timer',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.scheduled',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.scheduled' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.scheduled);\n }\n\n if ('email' in handler && typeof handler.email === 'function' && !isInstrumented(handler.email)) {\n handler.email = new Proxy(handler.email, {\n apply(target, thisArg, args: Parameters<EmailExportedHandler<Env>>) {\n const [emailMessage, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.email',\n name: `Handle Email ${emailMessage.to}`,\n attributes: {\n 'faas.trigger': 'email',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.email',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.email' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.email);\n }\n\n if ('queue' in handler && typeof handler.queue === 'function' && !isInstrumented(handler.queue)) {\n handler.queue = new Proxy(handler.queue, {\n apply(target, thisArg, args: Parameters<ExportedHandlerQueueHandler<Env, QueueHandlerMessage>>) {\n const [batch, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.queue',\n name: `process ${batch.queue}`,\n attributes: {\n 'faas.trigger': 'pubsub',\n 'messaging.destination.name': batch.queue,\n 'messaging.system': 'cloudflare',\n 'messaging.batch.message_count': batch.messages.length,\n 'messaging.message.retry.count': batch.messages.reduce(\n (acc, message) => acc + message.attempts - 1,\n 0,\n ),\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.process',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.queue',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.queue' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.queue);\n }\n\n if ('tail' in handler && typeof handler.tail === 'function' && !isInstrumented(handler.tail)) {\n handler.tail = new Proxy(handler.tail, {\n apply(target, thisArg, args: Parameters<ExportedHandlerTailHandler<Env>>) {\n const [, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(async isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.tail' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n });\n },\n });\n\n markAsInstrumented(handler.tail);\n }\n\n // This is here because Miniflare sometimes cannot get instrumented\n } catch {\n // Do not console anything here, we don't want to spam the console with errors\n }\n\n return handler;\n}\n"],"names":["setAsyncLocalStorageAsyncContextStrategy","isInstrumented","request","copyExecutionContext","options","getFinalOptions","wrapRequestHandler","markAsInstrumented","getHonoIntegration","withIsolationScope","init","addCloudResourceContext","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","captureException","flush","SEMANTIC_ATTRIBUTE_SENTRY_OP"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handler.js","sources":["../../src/handler.ts"],"sourcesContent":["import {\n captureException,\n flush,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n startSpan,\n withIsolationScope,\n} from '@sentry/core';\nimport { setAsyncLocalStorageAsyncContextStrategy } from './async';\nimport type { CloudflareOptions } from './client';\nimport { isInstrumented, markAsInstrumented } from './instrument';\nimport { getHonoIntegration } from './integrations/hono';\nimport { getFinalOptions } from './options';\nimport { wrapRequestHandler } from './request';\nimport { addCloudResourceContext } from './scope-utils';\nimport { init } from './sdk';\nimport { copyExecutionContext } from './utils/copyExecutionContext';\n\n/**\n * Wrapper for Cloudflare handlers.\n *\n * Initializes the SDK and wraps the handler with Sentry instrumentation.\n *\n * Automatically instruments the `fetch` method of the handler.\n *\n * @param optionsCallback Function that returns the options for the SDK initialization.\n * @param handler {ExportedHandler} The handler to wrap.\n * @returns The wrapped handler.\n */\n// eslint-disable-next-line complexity\nexport function withSentry<\n Env = unknown,\n QueueHandlerMessage = unknown,\n CfHostMetadata = unknown,\n T extends ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata> = ExportedHandler<\n Env,\n QueueHandlerMessage,\n CfHostMetadata\n >,\n>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {\n setAsyncLocalStorageAsyncContextStrategy();\n\n try {\n if ('fetch' in handler && typeof handler.fetch === 'function' && !isInstrumented(handler.fetch)) {\n handler.fetch = new Proxy(handler.fetch, {\n apply(target, thisArg, args: Parameters<ExportedHandlerFetchHandler<Env, CfHostMetadata>>) {\n const [request, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n const options = getFinalOptions(optionsCallback(env), env);\n\n return wrapRequestHandler({ options, request, context }, () => target.apply(thisArg, args));\n },\n });\n\n markAsInstrumented(handler.fetch);\n }\n\n /* Hono does not reach the catch block of the fetch handler and captureException needs to be called in the hono errorHandler */\n if (\n 'onError' in handler &&\n 'errorHandler' in handler &&\n typeof handler.errorHandler === 'function' &&\n !isInstrumented(handler.errorHandler)\n ) {\n handler.errorHandler = new Proxy(handler.errorHandler, {\n apply(target, thisArg, args) {\n const [err, context] = args;\n\n getHonoIntegration()?.handleHonoException(err, context);\n\n return Reflect.apply(target, thisArg, args);\n },\n });\n\n markAsInstrumented(handler.errorHandler);\n }\n\n if ('scheduled' in handler && typeof handler.scheduled === 'function' && !isInstrumented(handler.scheduled)) {\n handler.scheduled = new Proxy(handler.scheduled, {\n apply(target, thisArg, args: Parameters<ExportedHandlerScheduledHandler<Env>>) {\n const [event, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.cron',\n name: `Scheduled Cron ${event.cron}`,\n attributes: {\n 'faas.cron': event.cron,\n 'faas.time': new Date(event.scheduledTime).toISOString(),\n 'faas.trigger': 'timer',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.scheduled',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.scheduled' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.scheduled);\n }\n\n if ('email' in handler && typeof handler.email === 'function' && !isInstrumented(handler.email)) {\n handler.email = new Proxy(handler.email, {\n apply(target, thisArg, args: Parameters<EmailExportedHandler<Env>>) {\n const [emailMessage, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.email',\n name: `Handle Email ${emailMessage.to}`,\n attributes: {\n 'faas.trigger': 'email',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.email',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.email' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.email);\n }\n\n if ('queue' in handler && typeof handler.queue === 'function' && !isInstrumented(handler.queue)) {\n handler.queue = new Proxy(handler.queue, {\n apply(target, thisArg, args: Parameters<ExportedHandlerQueueHandler<Env, QueueHandlerMessage>>) {\n const [batch, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.queue',\n name: `process ${batch.queue}`,\n attributes: {\n 'faas.trigger': 'pubsub',\n 'messaging.destination.name': batch.queue,\n 'messaging.system': 'cloudflare',\n 'messaging.batch.message_count': batch.messages.length,\n 'messaging.message.retry.count': batch.messages.reduce(\n (acc, message) => acc + message.attempts - 1,\n 0,\n ),\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.process',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.queue',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.queue' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.queue);\n }\n\n if ('tail' in handler && typeof handler.tail === 'function' && !isInstrumented(handler.tail)) {\n handler.tail = new Proxy(handler.tail, {\n apply(target, thisArg, args: Parameters<ExportedHandlerTailHandler<Env>>) {\n const [, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(async isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.tail' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n });\n },\n });\n\n markAsInstrumented(handler.tail);\n }\n\n // This is here because Miniflare sometimes cannot get instrumented\n } catch {\n // Do not console anything here, we don't want to spam the console with errors\n }\n\n return handler;\n}\n"],"names":["setAsyncLocalStorageAsyncContextStrategy","isInstrumented","request","copyExecutionContext","options","getFinalOptions","wrapRequestHandler","markAsInstrumented","getHonoIntegration","withIsolationScope","init","addCloudResourceContext","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","captureException","flush","SEMANTIC_ATTRIBUTE_SENTRY_OP"],"mappings":"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"}
|
package/build/cjs/options.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
+
const core = require('@sentry/core');
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* Cloudflare's version metadata binding structure.
|
|
5
7
|
* @see https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/
|
|
@@ -12,6 +14,12 @@ function isVersionMetadata(value) {
|
|
|
12
14
|
return typeof value === 'object' && value !== null && 'id' in value && typeof value.id === 'string';
|
|
13
15
|
}
|
|
14
16
|
|
|
17
|
+
function getEnvVar(env, varName) {
|
|
18
|
+
return typeof env === 'object' && env !== null && varName in env && typeof (env )[varName] === 'string'
|
|
19
|
+
? ((env )[varName] )
|
|
20
|
+
: undefined;
|
|
21
|
+
}
|
|
22
|
+
|
|
15
23
|
/**
|
|
16
24
|
* Merges the options passed in from the user with the options we read from
|
|
17
25
|
* the Cloudflare `env` environment variable object.
|
|
@@ -26,7 +34,7 @@ function isVersionMetadata(value) {
|
|
|
26
34
|
*
|
|
27
35
|
* @returns The final options.
|
|
28
36
|
*/
|
|
29
|
-
function getFinalOptions(userOptions, env) {
|
|
37
|
+
function getFinalOptions(userOptions = {}, env) {
|
|
30
38
|
if (typeof env !== 'object' || env === null) {
|
|
31
39
|
return userOptions;
|
|
32
40
|
}
|
|
@@ -39,7 +47,18 @@ function getFinalOptions(userOptions, env) {
|
|
|
39
47
|
? env.CF_VERSION_METADATA.id
|
|
40
48
|
: undefined;
|
|
41
49
|
|
|
42
|
-
|
|
50
|
+
const tracesSampleRate =
|
|
51
|
+
userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACES_SAMPLE_RATE') ?? '');
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
release,
|
|
55
|
+
...userOptions,
|
|
56
|
+
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
|
|
57
|
+
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
|
|
58
|
+
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
|
|
59
|
+
debug: userOptions.debug ?? core.envToBool(getEnvVar(env, 'SENTRY_DEBUG')),
|
|
60
|
+
tunnel: userOptions.tunnel ?? getEnvVar(env, 'SENTRY_TUNNEL'),
|
|
61
|
+
};
|
|
43
62
|
}
|
|
44
63
|
|
|
45
64
|
exports.getFinalOptions = getFinalOptions;
|
package/build/cjs/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sources":["../../src/options.ts"],"sourcesContent":["import type { CloudflareOptions } from './client';\n\n/**\n * Cloudflare's version metadata binding structure.\n * @see https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/\n */\ninterface CfVersionMetadata {\n id: string;\n tag?: string;\n timestamp?: string;\n}\n\n/**\n * Checks if the value is a valid CF_VERSION_METADATA binding.\n */\nfunction isVersionMetadata(value: unknown): value is CfVersionMetadata {\n return typeof value === 'object' && value !== null && 'id' in value && typeof value.id === 'string';\n}\n\n/**\n * Merges the options passed in from the user with the options we read from\n * the Cloudflare `env` environment variable object.\n *\n * Release is determined with the following priority (highest to lowest):\n * 1. User-provided release option\n * 2. SENTRY_RELEASE environment variable\n * 3. CF_VERSION_METADATA.id binding (if configured in the wrangler config)\n *\n * @param userOptions - The options passed in from the user.\n * @param env - The environment variables.\n *\n * @returns The final options.\n */\nexport function getFinalOptions(userOptions: CloudflareOptions, env: unknown): CloudflareOptions {\n if (typeof env !== 'object' || env === null) {\n return userOptions;\n }\n\n // Priority: userOptions.release > SENTRY_RELEASE > CF_VERSION_METADATA.id\n const release =\n 'SENTRY_RELEASE' in env && typeof env.SENTRY_RELEASE === 'string'\n ? env.SENTRY_RELEASE\n : 'CF_VERSION_METADATA' in env && isVersionMetadata(env.CF_VERSION_METADATA)\n ? env.CF_VERSION_METADATA.id\n : undefined;\n\n return {
|
|
1
|
+
{"version":3,"file":"options.js","sources":["../../src/options.ts"],"sourcesContent":["import { envToBool } from '@sentry/core';\nimport type { CloudflareOptions } from './client';\n\n/**\n * Cloudflare's version metadata binding structure.\n * @see https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/\n */\ninterface CfVersionMetadata {\n id: string;\n tag?: string;\n timestamp?: string;\n}\n\n/**\n * Checks if the value is a valid CF_VERSION_METADATA binding.\n */\nfunction isVersionMetadata(value: unknown): value is CfVersionMetadata {\n return typeof value === 'object' && value !== null && 'id' in value && typeof value.id === 'string';\n}\n\nfunction getEnvVar<T extends Record<string, unknown>>(env: unknown, varName: keyof T): string | undefined {\n return typeof env === 'object' && env !== null && varName in env && typeof (env as T)[varName] === 'string'\n ? ((env as T)[varName] as string)\n : undefined;\n}\n\n/**\n * Merges the options passed in from the user with the options we read from\n * the Cloudflare `env` environment variable object.\n *\n * Release is determined with the following priority (highest to lowest):\n * 1. User-provided release option\n * 2. SENTRY_RELEASE environment variable\n * 3. CF_VERSION_METADATA.id binding (if configured in the wrangler config)\n *\n * @param userOptions - The options passed in from the user.\n * @param env - The environment variables.\n *\n * @returns The final options.\n */\nexport function getFinalOptions(userOptions: CloudflareOptions = {}, env: unknown): CloudflareOptions {\n if (typeof env !== 'object' || env === null) {\n return userOptions;\n }\n\n // Priority: userOptions.release > SENTRY_RELEASE > CF_VERSION_METADATA.id\n const release =\n 'SENTRY_RELEASE' in env && typeof env.SENTRY_RELEASE === 'string'\n ? env.SENTRY_RELEASE\n : 'CF_VERSION_METADATA' in env && isVersionMetadata(env.CF_VERSION_METADATA)\n ? env.CF_VERSION_METADATA.id\n : undefined;\n\n const tracesSampleRate =\n userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACES_SAMPLE_RATE') ?? '');\n\n return {\n release,\n ...userOptions,\n dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),\n environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),\n tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,\n debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),\n tunnel: userOptions.tunnel ?? getEnvVar(env, 'SENTRY_TUNNEL'),\n };\n}\n"],"names":["envToBool"],"mappings":";;;;AAGA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAuC;AACvE,EAAE,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,IAAA,IAAQ,SAAS,OAAO,KAAK,CAAC,EAAA,KAAO,QAAQ;AACrG;;AAEA,SAAS,SAAS,CAAoC,GAAG,EAAW,OAAO,EAA+B;AAC1G,EAAE,OAAO,OAAO,GAAA,KAAQ,YAAY,GAAA,KAAQ,IAAA,IAAQ,WAAW,GAAA,IAAO,OAAO,CAAC,MAAU,OAAO,CAAA,KAAM;AACrG,OAAO,CAAC,MAAU,OAAO,CAAA;AACzB,MAAM,SAAS;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,WAAW,GAAsB,EAAE,EAAE,GAAG,EAA8B;AACtG,EAAE,IAAI,OAAO,GAAA,KAAQ,YAAY,GAAA,KAAQ,IAAI,EAAE;AAC/C,IAAI,OAAO,WAAW;AACtB,EAAE;;AAEF;AACA,EAAE,MAAM,OAAA;AACR,IAAI,gBAAA,IAAoB,GAAA,IAAO,OAAO,GAAG,CAAC,mBAAmB;AAC7D,QAAQ,GAAG,CAAC;AACZ,QAAQ,yBAAyB,GAAA,IAAO,iBAAiB,CAAC,GAAG,CAAC,mBAAmB;AACjF,UAAU,GAAG,CAAC,mBAAmB,CAAC;AAClC,UAAU,SAAS;;AAEnB,EAAE,MAAM,gBAAA;AACR,IAAI,WAAW,CAAC,gBAAA,IAAoB,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,2BAA2B,CAAA,IAAK,EAAE,CAAC;;AAEjG,EAAE,OAAO;AACT,IAAI,OAAO;AACX,IAAI,GAAG,WAAW;AAClB,IAAI,GAAG,EAAE,WAAW,CAAC,GAAA,IAAO,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC;AACxD,IAAI,WAAW,EAAE,WAAW,CAAC,WAAA,IAAe,SAAS,CAAC,GAAG,EAAE,oBAAoB,CAAC;AAChF,IAAI,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAA,GAAI,gBAAA,GAAmB,SAAS;AAC/E,IAAI,KAAK,EAAE,WAAW,CAAC,SAASA,cAAS,CAAC,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACzE,IAAI,MAAM,EAAE,WAAW,CAAC,MAAA,IAAU,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC;AACjE,GAAG;AACH;;;;"}
|
package/build/esm/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sources":["../../src/handler.ts"],"sourcesContent":["import {\n captureException,\n flush,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n startSpan,\n withIsolationScope,\n} from '@sentry/core';\nimport { setAsyncLocalStorageAsyncContextStrategy } from './async';\nimport type { CloudflareOptions } from './client';\nimport { isInstrumented, markAsInstrumented } from './instrument';\nimport { getHonoIntegration } from './integrations/hono';\nimport { getFinalOptions } from './options';\nimport { wrapRequestHandler } from './request';\nimport { addCloudResourceContext } from './scope-utils';\nimport { init } from './sdk';\nimport { copyExecutionContext } from './utils/copyExecutionContext';\n\n/**\n * Wrapper for Cloudflare handlers.\n *\n * Initializes the SDK and wraps the handler with Sentry instrumentation.\n *\n * Automatically instruments the `fetch` method of the handler.\n *\n * @param optionsCallback Function that returns the options for the SDK initialization.\n * @param handler {ExportedHandler} The handler to wrap.\n * @returns The wrapped handler.\n */\n// eslint-disable-next-line complexity\nexport function withSentry<\n Env = unknown,\n QueueHandlerMessage = unknown,\n CfHostMetadata = unknown,\n T extends ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata> = ExportedHandler<\n Env,\n QueueHandlerMessage,\n CfHostMetadata\n >,\n>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T {\n setAsyncLocalStorageAsyncContextStrategy();\n\n try {\n if ('fetch' in handler && typeof handler.fetch === 'function' && !isInstrumented(handler.fetch)) {\n handler.fetch = new Proxy(handler.fetch, {\n apply(target, thisArg, args: Parameters<ExportedHandlerFetchHandler<Env, CfHostMetadata>>) {\n const [request, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n const options = getFinalOptions(optionsCallback(env), env);\n\n return wrapRequestHandler({ options, request, context }, () => target.apply(thisArg, args));\n },\n });\n\n markAsInstrumented(handler.fetch);\n }\n\n /* Hono does not reach the catch block of the fetch handler and captureException needs to be called in the hono errorHandler */\n if (\n 'onError' in handler &&\n 'errorHandler' in handler &&\n typeof handler.errorHandler === 'function' &&\n !isInstrumented(handler.errorHandler)\n ) {\n handler.errorHandler = new Proxy(handler.errorHandler, {\n apply(target, thisArg, args) {\n const [err, context] = args;\n\n getHonoIntegration()?.handleHonoException(err, context);\n\n return Reflect.apply(target, thisArg, args);\n },\n });\n\n markAsInstrumented(handler.errorHandler);\n }\n\n if ('scheduled' in handler && typeof handler.scheduled === 'function' && !isInstrumented(handler.scheduled)) {\n handler.scheduled = new Proxy(handler.scheduled, {\n apply(target, thisArg, args: Parameters<ExportedHandlerScheduledHandler<Env>>) {\n const [event, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.cron',\n name: `Scheduled Cron ${event.cron}`,\n attributes: {\n 'faas.cron': event.cron,\n 'faas.time': new Date(event.scheduledTime).toISOString(),\n 'faas.trigger': 'timer',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.scheduled',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.scheduled' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.scheduled);\n }\n\n if ('email' in handler && typeof handler.email === 'function' && !isInstrumented(handler.email)) {\n handler.email = new Proxy(handler.email, {\n apply(target, thisArg, args: Parameters<EmailExportedHandler<Env>>) {\n const [emailMessage, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.email',\n name: `Handle Email ${emailMessage.to}`,\n attributes: {\n 'faas.trigger': 'email',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.email',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.email' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.email);\n }\n\n if ('queue' in handler && typeof handler.queue === 'function' && !isInstrumented(handler.queue)) {\n handler.queue = new Proxy(handler.queue, {\n apply(target, thisArg, args: Parameters<ExportedHandlerQueueHandler<Env, QueueHandlerMessage>>) {\n const [batch, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.queue',\n name: `process ${batch.queue}`,\n attributes: {\n 'faas.trigger': 'pubsub',\n 'messaging.destination.name': batch.queue,\n 'messaging.system': 'cloudflare',\n 'messaging.batch.message_count': batch.messages.length,\n 'messaging.message.retry.count': batch.messages.reduce(\n (acc, message) => acc + message.attempts - 1,\n 0,\n ),\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.process',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.queue',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.queue' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.queue);\n }\n\n if ('tail' in handler && typeof handler.tail === 'function' && !isInstrumented(handler.tail)) {\n handler.tail = new Proxy(handler.tail, {\n apply(target, thisArg, args: Parameters<ExportedHandlerTailHandler<Env>>) {\n const [, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(async isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.tail' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n });\n },\n });\n\n markAsInstrumented(handler.tail);\n }\n\n // This is here because Miniflare sometimes cannot get instrumented\n } catch {\n // Do not console anything here, we don't want to spam the console with errors\n }\n\n return handler;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handler.js","sources":["../../src/handler.ts"],"sourcesContent":["import {\n captureException,\n flush,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n startSpan,\n withIsolationScope,\n} from '@sentry/core';\nimport { setAsyncLocalStorageAsyncContextStrategy } from './async';\nimport type { CloudflareOptions } from './client';\nimport { isInstrumented, markAsInstrumented } from './instrument';\nimport { getHonoIntegration } from './integrations/hono';\nimport { getFinalOptions } from './options';\nimport { wrapRequestHandler } from './request';\nimport { addCloudResourceContext } from './scope-utils';\nimport { init } from './sdk';\nimport { copyExecutionContext } from './utils/copyExecutionContext';\n\n/**\n * Wrapper for Cloudflare handlers.\n *\n * Initializes the SDK and wraps the handler with Sentry instrumentation.\n *\n * Automatically instruments the `fetch` method of the handler.\n *\n * @param optionsCallback Function that returns the options for the SDK initialization.\n * @param handler {ExportedHandler} The handler to wrap.\n * @returns The wrapped handler.\n */\n// eslint-disable-next-line complexity\nexport function withSentry<\n Env = unknown,\n QueueHandlerMessage = unknown,\n CfHostMetadata = unknown,\n T extends ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata> = ExportedHandler<\n Env,\n QueueHandlerMessage,\n CfHostMetadata\n >,\n>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T {\n setAsyncLocalStorageAsyncContextStrategy();\n\n try {\n if ('fetch' in handler && typeof handler.fetch === 'function' && !isInstrumented(handler.fetch)) {\n handler.fetch = new Proxy(handler.fetch, {\n apply(target, thisArg, args: Parameters<ExportedHandlerFetchHandler<Env, CfHostMetadata>>) {\n const [request, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n const options = getFinalOptions(optionsCallback(env), env);\n\n return wrapRequestHandler({ options, request, context }, () => target.apply(thisArg, args));\n },\n });\n\n markAsInstrumented(handler.fetch);\n }\n\n /* Hono does not reach the catch block of the fetch handler and captureException needs to be called in the hono errorHandler */\n if (\n 'onError' in handler &&\n 'errorHandler' in handler &&\n typeof handler.errorHandler === 'function' &&\n !isInstrumented(handler.errorHandler)\n ) {\n handler.errorHandler = new Proxy(handler.errorHandler, {\n apply(target, thisArg, args) {\n const [err, context] = args;\n\n getHonoIntegration()?.handleHonoException(err, context);\n\n return Reflect.apply(target, thisArg, args);\n },\n });\n\n markAsInstrumented(handler.errorHandler);\n }\n\n if ('scheduled' in handler && typeof handler.scheduled === 'function' && !isInstrumented(handler.scheduled)) {\n handler.scheduled = new Proxy(handler.scheduled, {\n apply(target, thisArg, args: Parameters<ExportedHandlerScheduledHandler<Env>>) {\n const [event, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.cron',\n name: `Scheduled Cron ${event.cron}`,\n attributes: {\n 'faas.cron': event.cron,\n 'faas.time': new Date(event.scheduledTime).toISOString(),\n 'faas.trigger': 'timer',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.scheduled',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.scheduled' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.scheduled);\n }\n\n if ('email' in handler && typeof handler.email === 'function' && !isInstrumented(handler.email)) {\n handler.email = new Proxy(handler.email, {\n apply(target, thisArg, args: Parameters<EmailExportedHandler<Env>>) {\n const [emailMessage, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.email',\n name: `Handle Email ${emailMessage.to}`,\n attributes: {\n 'faas.trigger': 'email',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.email',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.email' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.email);\n }\n\n if ('queue' in handler && typeof handler.queue === 'function' && !isInstrumented(handler.queue)) {\n handler.queue = new Proxy(handler.queue, {\n apply(target, thisArg, args: Parameters<ExportedHandlerQueueHandler<Env, QueueHandlerMessage>>) {\n const [batch, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.queue',\n name: `process ${batch.queue}`,\n attributes: {\n 'faas.trigger': 'pubsub',\n 'messaging.destination.name': batch.queue,\n 'messaging.system': 'cloudflare',\n 'messaging.batch.message_count': batch.messages.length,\n 'messaging.message.retry.count': batch.messages.reduce(\n (acc, message) => acc + message.attempts - 1,\n 0,\n ),\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.process',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.queue',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.queue' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n },\n );\n });\n },\n });\n\n markAsInstrumented(handler.queue);\n }\n\n if ('tail' in handler && typeof handler.tail === 'function' && !isInstrumented(handler.tail)) {\n handler.tail = new Proxy(handler.tail, {\n apply(target, thisArg, args: Parameters<ExportedHandlerTailHandler<Env>>) {\n const [, env, ctx] = args;\n const context = copyExecutionContext(ctx);\n args[2] = context;\n\n return withIsolationScope(async isolationScope => {\n const options = getFinalOptions(optionsCallback(env), env);\n\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n try {\n return await (target.apply(thisArg, args) as ReturnType<typeof target>);\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.tail' } });\n throw e;\n } finally {\n waitUntil(flush(2000));\n }\n });\n },\n });\n\n markAsInstrumented(handler.tail);\n }\n\n // This is here because Miniflare sometimes cannot get instrumented\n } catch {\n // Do not console anything here, we don't want to spam the console with errors\n }\n\n return handler;\n}\n"],"names":[],"mappings":"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"}
|
package/build/esm/options.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { envToBool } from '@sentry/core';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Cloudflare's version metadata binding structure.
|
|
3
5
|
* @see https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/
|
|
@@ -10,6 +12,12 @@ function isVersionMetadata(value) {
|
|
|
10
12
|
return typeof value === 'object' && value !== null && 'id' in value && typeof value.id === 'string';
|
|
11
13
|
}
|
|
12
14
|
|
|
15
|
+
function getEnvVar(env, varName) {
|
|
16
|
+
return typeof env === 'object' && env !== null && varName in env && typeof (env )[varName] === 'string'
|
|
17
|
+
? ((env )[varName] )
|
|
18
|
+
: undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
13
21
|
/**
|
|
14
22
|
* Merges the options passed in from the user with the options we read from
|
|
15
23
|
* the Cloudflare `env` environment variable object.
|
|
@@ -24,7 +32,7 @@ function isVersionMetadata(value) {
|
|
|
24
32
|
*
|
|
25
33
|
* @returns The final options.
|
|
26
34
|
*/
|
|
27
|
-
function getFinalOptions(userOptions, env) {
|
|
35
|
+
function getFinalOptions(userOptions = {}, env) {
|
|
28
36
|
if (typeof env !== 'object' || env === null) {
|
|
29
37
|
return userOptions;
|
|
30
38
|
}
|
|
@@ -37,7 +45,18 @@ function getFinalOptions(userOptions, env) {
|
|
|
37
45
|
? env.CF_VERSION_METADATA.id
|
|
38
46
|
: undefined;
|
|
39
47
|
|
|
40
|
-
|
|
48
|
+
const tracesSampleRate =
|
|
49
|
+
userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACES_SAMPLE_RATE') ?? '');
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
release,
|
|
53
|
+
...userOptions,
|
|
54
|
+
dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),
|
|
55
|
+
environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),
|
|
56
|
+
tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,
|
|
57
|
+
debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),
|
|
58
|
+
tunnel: userOptions.tunnel ?? getEnvVar(env, 'SENTRY_TUNNEL'),
|
|
59
|
+
};
|
|
41
60
|
}
|
|
42
61
|
|
|
43
62
|
export { getFinalOptions };
|
package/build/esm/options.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sources":["../../src/options.ts"],"sourcesContent":["import type { CloudflareOptions } from './client';\n\n/**\n * Cloudflare's version metadata binding structure.\n * @see https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/\n */\ninterface CfVersionMetadata {\n id: string;\n tag?: string;\n timestamp?: string;\n}\n\n/**\n * Checks if the value is a valid CF_VERSION_METADATA binding.\n */\nfunction isVersionMetadata(value: unknown): value is CfVersionMetadata {\n return typeof value === 'object' && value !== null && 'id' in value && typeof value.id === 'string';\n}\n\n/**\n * Merges the options passed in from the user with the options we read from\n * the Cloudflare `env` environment variable object.\n *\n * Release is determined with the following priority (highest to lowest):\n * 1. User-provided release option\n * 2. SENTRY_RELEASE environment variable\n * 3. CF_VERSION_METADATA.id binding (if configured in the wrangler config)\n *\n * @param userOptions - The options passed in from the user.\n * @param env - The environment variables.\n *\n * @returns The final options.\n */\nexport function getFinalOptions(userOptions: CloudflareOptions, env: unknown): CloudflareOptions {\n if (typeof env !== 'object' || env === null) {\n return userOptions;\n }\n\n // Priority: userOptions.release > SENTRY_RELEASE > CF_VERSION_METADATA.id\n const release =\n 'SENTRY_RELEASE' in env && typeof env.SENTRY_RELEASE === 'string'\n ? env.SENTRY_RELEASE\n : 'CF_VERSION_METADATA' in env && isVersionMetadata(env.CF_VERSION_METADATA)\n ? env.CF_VERSION_METADATA.id\n : undefined;\n\n return {
|
|
1
|
+
{"version":3,"file":"options.js","sources":["../../src/options.ts"],"sourcesContent":["import { envToBool } from '@sentry/core';\nimport type { CloudflareOptions } from './client';\n\n/**\n * Cloudflare's version metadata binding structure.\n * @see https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/\n */\ninterface CfVersionMetadata {\n id: string;\n tag?: string;\n timestamp?: string;\n}\n\n/**\n * Checks if the value is a valid CF_VERSION_METADATA binding.\n */\nfunction isVersionMetadata(value: unknown): value is CfVersionMetadata {\n return typeof value === 'object' && value !== null && 'id' in value && typeof value.id === 'string';\n}\n\nfunction getEnvVar<T extends Record<string, unknown>>(env: unknown, varName: keyof T): string | undefined {\n return typeof env === 'object' && env !== null && varName in env && typeof (env as T)[varName] === 'string'\n ? ((env as T)[varName] as string)\n : undefined;\n}\n\n/**\n * Merges the options passed in from the user with the options we read from\n * the Cloudflare `env` environment variable object.\n *\n * Release is determined with the following priority (highest to lowest):\n * 1. User-provided release option\n * 2. SENTRY_RELEASE environment variable\n * 3. CF_VERSION_METADATA.id binding (if configured in the wrangler config)\n *\n * @param userOptions - The options passed in from the user.\n * @param env - The environment variables.\n *\n * @returns The final options.\n */\nexport function getFinalOptions(userOptions: CloudflareOptions = {}, env: unknown): CloudflareOptions {\n if (typeof env !== 'object' || env === null) {\n return userOptions;\n }\n\n // Priority: userOptions.release > SENTRY_RELEASE > CF_VERSION_METADATA.id\n const release =\n 'SENTRY_RELEASE' in env && typeof env.SENTRY_RELEASE === 'string'\n ? env.SENTRY_RELEASE\n : 'CF_VERSION_METADATA' in env && isVersionMetadata(env.CF_VERSION_METADATA)\n ? env.CF_VERSION_METADATA.id\n : undefined;\n\n const tracesSampleRate =\n userOptions.tracesSampleRate ?? parseFloat(getEnvVar(env, 'SENTRY_TRACES_SAMPLE_RATE') ?? '');\n\n return {\n release,\n ...userOptions,\n dsn: userOptions.dsn ?? getEnvVar(env, 'SENTRY_DSN'),\n environment: userOptions.environment ?? getEnvVar(env, 'SENTRY_ENVIRONMENT'),\n tracesSampleRate: isFinite(tracesSampleRate) ? tracesSampleRate : undefined,\n debug: userOptions.debug ?? envToBool(getEnvVar(env, 'SENTRY_DEBUG')),\n tunnel: userOptions.tunnel ?? getEnvVar(env, 'SENTRY_TUNNEL'),\n };\n}\n"],"names":[],"mappings":";;AAGA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAuC;AACvE,EAAE,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,UAAU,IAAA,IAAQ,IAAA,IAAQ,SAAS,OAAO,KAAK,CAAC,EAAA,KAAO,QAAQ;AACrG;;AAEA,SAAS,SAAS,CAAoC,GAAG,EAAW,OAAO,EAA+B;AAC1G,EAAE,OAAO,OAAO,GAAA,KAAQ,YAAY,GAAA,KAAQ,IAAA,IAAQ,WAAW,GAAA,IAAO,OAAO,CAAC,MAAU,OAAO,CAAA,KAAM;AACrG,OAAO,CAAC,MAAU,OAAO,CAAA;AACzB,MAAM,SAAS;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,WAAW,GAAsB,EAAE,EAAE,GAAG,EAA8B;AACtG,EAAE,IAAI,OAAO,GAAA,KAAQ,YAAY,GAAA,KAAQ,IAAI,EAAE;AAC/C,IAAI,OAAO,WAAW;AACtB,EAAE;;AAEF;AACA,EAAE,MAAM,OAAA;AACR,IAAI,gBAAA,IAAoB,GAAA,IAAO,OAAO,GAAG,CAAC,mBAAmB;AAC7D,QAAQ,GAAG,CAAC;AACZ,QAAQ,yBAAyB,GAAA,IAAO,iBAAiB,CAAC,GAAG,CAAC,mBAAmB;AACjF,UAAU,GAAG,CAAC,mBAAmB,CAAC;AAClC,UAAU,SAAS;;AAEnB,EAAE,MAAM,gBAAA;AACR,IAAI,WAAW,CAAC,gBAAA,IAAoB,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,2BAA2B,CAAA,IAAK,EAAE,CAAC;;AAEjG,EAAE,OAAO;AACT,IAAI,OAAO;AACX,IAAI,GAAG,WAAW;AAClB,IAAI,GAAG,EAAE,WAAW,CAAC,GAAA,IAAO,SAAS,CAAC,GAAG,EAAE,YAAY,CAAC;AACxD,IAAI,WAAW,EAAE,WAAW,CAAC,WAAA,IAAe,SAAS,CAAC,GAAG,EAAE,oBAAoB,CAAC;AAChF,IAAI,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAA,GAAI,gBAAA,GAAmB,SAAS;AAC/E,IAAI,KAAK,EAAE,WAAW,CAAC,SAAS,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACzE,IAAI,MAAM,EAAE,WAAW,CAAC,MAAA,IAAU,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC;AACjE,GAAG;AACH;;;;"}
|
package/build/esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"type":"module","version":"10.
|
|
1
|
+
{"type":"module","version":"10.39.0","sideEffects":false}
|
package/build/types/handler.d.ts
CHANGED
|
@@ -10,5 +10,5 @@ import type { CloudflareOptions } from './client';
|
|
|
10
10
|
* @param handler {ExportedHandler} The handler to wrap.
|
|
11
11
|
* @returns The wrapped handler.
|
|
12
12
|
*/
|
|
13
|
-
export declare function withSentry<Env = unknown, QueueHandlerMessage = unknown, CfHostMetadata = unknown, T extends ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata> = ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata>>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T;
|
|
13
|
+
export declare function withSentry<Env = unknown, QueueHandlerMessage = unknown, CfHostMetadata = unknown, T extends ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata> = ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata>>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T;
|
|
14
14
|
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AASlD;;;;;;;;;;GAUG;AAEH,wBAAgB,UAAU,CACxB,GAAG,GAAG,OAAO,EACb,mBAAmB,GAAG,OAAO,EAC7B,cAAc,GAAG,OAAO,EACxB,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,mBAAmB,EAAE,cAAc,CAAC,GAAG,eAAe,CACnF,GAAG,EACH,mBAAmB,EACnB,cAAc,CACf,EACD,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,iBAAiB,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AASlD;;;;;;;;;;GAUG;AAEH,wBAAgB,UAAU,CACxB,GAAG,GAAG,OAAO,EACb,mBAAmB,GAAG,OAAO,EAC7B,cAAc,GAAG,OAAO,EACxB,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,mBAAmB,EAAE,cAAc,CAAC,GAAG,eAAe,CACnF,GAAG,EACH,mBAAmB,EACnB,cAAc,CACf,EACD,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,iBAAiB,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CA4N7E"}
|
package/build/types/options.d.ts
CHANGED
|
@@ -13,5 +13,5 @@ import type { CloudflareOptions } from './client';
|
|
|
13
13
|
*
|
|
14
14
|
* @returns The final options.
|
|
15
15
|
*/
|
|
16
|
-
export declare function getFinalOptions(userOptions: CloudflareOptions, env: unknown): CloudflareOptions;
|
|
16
|
+
export declare function getFinalOptions(userOptions: CloudflareOptions | undefined, env: unknown): CloudflareOptions;
|
|
17
17
|
//# sourceMappingURL=options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAyBlD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,YAAK,EAAE,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAyBpG"}
|
|
@@ -10,5 +10,5 @@ import { CloudflareOptions } from './client';
|
|
|
10
10
|
* @param handler {ExportedHandler} The handler to wrap.
|
|
11
11
|
* @returns The wrapped handler.
|
|
12
12
|
*/
|
|
13
|
-
export declare function withSentry<Env = unknown, QueueHandlerMessage = unknown, CfHostMetadata = unknown, T extends ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata> = ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata>>(optionsCallback: (env: Env) => CloudflareOptions, handler: T): T;
|
|
13
|
+
export declare function withSentry<Env = unknown, QueueHandlerMessage = unknown, CfHostMetadata = unknown, T extends ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata> = ExportedHandler<Env, QueueHandlerMessage, CfHostMetadata>>(optionsCallback: (env: Env) => CloudflareOptions | undefined, handler: T): T;
|
|
14
14
|
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -13,5 +13,5 @@ import { CloudflareOptions } from './client';
|
|
|
13
13
|
*
|
|
14
14
|
* @returns The final options.
|
|
15
15
|
*/
|
|
16
|
-
export declare function getFinalOptions(userOptions: CloudflareOptions, env: unknown): CloudflareOptions;
|
|
16
|
+
export declare function getFinalOptions(userOptions: CloudflareOptions | undefined, env: unknown): CloudflareOptions;
|
|
17
17
|
//# sourceMappingURL=options.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/cloudflare",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.39.0",
|
|
4
4
|
"description": "Official Sentry SDK for Cloudflare Workers and Pages",
|
|
5
5
|
"repository": "git://github.com/getsentry/sentry-javascript.git",
|
|
6
6
|
"homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/cloudflare",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@opentelemetry/api": "^1.9.0",
|
|
53
|
-
"@sentry/core": "10.
|
|
53
|
+
"@sentry/core": "10.39.0"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@cloudflare/workers-types": "^4.x"
|