@sentry/cloudflare 10.33.0 → 10.35.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/opentelemetry/tracer.js +2 -2
- package/build/cjs/opentelemetry/tracer.js.map +1 -1
- package/build/cjs/options.js +24 -1
- package/build/cjs/options.js.map +1 -1
- package/build/esm/opentelemetry/tracer.js +2 -2
- package/build/esm/opentelemetry/tracer.js.map +1 -1
- package/build/esm/options.js +24 -1
- package/build/esm/options.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/types/options.d.ts +5 -0
- package/build/types/options.d.ts.map +1 -1
- package/build/types-ts3.8/options.d.ts +5 -0
- package/package.json +2 -2
|
@@ -28,8 +28,8 @@ class SentryCloudflareTraceProvider {constructor() { SentryCloudflareTraceProvi
|
|
|
28
28
|
class SentryCloudflareTracer {
|
|
29
29
|
startSpan(name, options) {
|
|
30
30
|
return core.startInactiveSpan({
|
|
31
|
-
name,
|
|
32
31
|
...options,
|
|
32
|
+
name,
|
|
33
33
|
attributes: {
|
|
34
34
|
...options?.attributes,
|
|
35
35
|
'sentry.cloudflare_tracer': true,
|
|
@@ -50,8 +50,8 @@ class SentryCloudflareTracer {
|
|
|
50
50
|
const opts = (typeof options === 'object' && options !== null ? options : {}) ;
|
|
51
51
|
|
|
52
52
|
const spanOpts = {
|
|
53
|
-
name,
|
|
54
53
|
...opts,
|
|
54
|
+
name,
|
|
55
55
|
attributes: {
|
|
56
56
|
...opts.attributes,
|
|
57
57
|
'sentry.cloudflare_tracer': true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.js","sources":["../../../src/opentelemetry/tracer.ts"],"sourcesContent":["import type { Context, Span, SpanOptions, Tracer, TracerProvider } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport { startInactiveSpan, startSpanManual } from '@sentry/core';\n\n/**\n * Set up a mock OTEL tracer to allow inter-op with OpenTelemetry emitted spans.\n * This is not perfect but handles easy/common use cases.\n */\nexport function setupOpenTelemetryTracer(): void {\n trace.setGlobalTracerProvider(new SentryCloudflareTraceProvider());\n}\n\nclass SentryCloudflareTraceProvider implements TracerProvider {\n private readonly _tracers: Map<string, Tracer> = new Map();\n\n public getTracer(name: string, version?: string, options?: { schemaUrl?: string }): Tracer {\n const key = `${name}@${version || ''}:${options?.schemaUrl || ''}`;\n if (!this._tracers.has(key)) {\n this._tracers.set(key, new SentryCloudflareTracer());\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this._tracers.get(key)!;\n }\n}\n\nclass SentryCloudflareTracer implements Tracer {\n public startSpan(name: string, options?: SpanOptions): Span {\n return startInactiveSpan({\n
|
|
1
|
+
{"version":3,"file":"tracer.js","sources":["../../../src/opentelemetry/tracer.ts"],"sourcesContent":["import type { Context, Span, SpanOptions, Tracer, TracerProvider } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport { startInactiveSpan, startSpanManual } from '@sentry/core';\n\n/**\n * Set up a mock OTEL tracer to allow inter-op with OpenTelemetry emitted spans.\n * This is not perfect but handles easy/common use cases.\n */\nexport function setupOpenTelemetryTracer(): void {\n trace.setGlobalTracerProvider(new SentryCloudflareTraceProvider());\n}\n\nclass SentryCloudflareTraceProvider implements TracerProvider {\n private readonly _tracers: Map<string, Tracer> = new Map();\n\n public getTracer(name: string, version?: string, options?: { schemaUrl?: string }): Tracer {\n const key = `${name}@${version || ''}:${options?.schemaUrl || ''}`;\n if (!this._tracers.has(key)) {\n this._tracers.set(key, new SentryCloudflareTracer());\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this._tracers.get(key)!;\n }\n}\n\nclass SentryCloudflareTracer implements Tracer {\n public startSpan(name: string, options?: SpanOptions): Span {\n return startInactiveSpan({\n ...options,\n name,\n attributes: {\n ...options?.attributes,\n 'sentry.cloudflare_tracer': true,\n },\n });\n }\n\n /**\n * NOTE: This does not handle `context` being passed in. It will always put spans on the current scope.\n */\n public startActiveSpan<F extends (span: Span) => unknown>(name: string, fn: F): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(name: string, options: SpanOptions, fn: F): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: unknown,\n context?: unknown,\n fn?: F,\n ): ReturnType<F> {\n const opts = (typeof options === 'object' && options !== null ? options : {}) as SpanOptions;\n\n const spanOpts = {\n ...opts,\n name,\n attributes: {\n ...opts.attributes,\n 'sentry.cloudflare_tracer': true,\n },\n };\n\n const callback = (\n typeof options === 'function'\n ? options\n : typeof context === 'function'\n ? context\n : typeof fn === 'function'\n ? fn\n : () => {}\n ) as F;\n\n // In OTEL the semantic matches `startSpanManual` because spans are not auto-ended\n return startSpanManual(spanOpts, callback) as ReturnType<F>;\n }\n}\n"],"names":["trace","startInactiveSpan","startSpanManual"],"mappings":";;;;;AAIA;AACA;AACA;AACA;AACO,SAAS,wBAAwB,GAAS;AACjD,EAAEA,SAAK,CAAC,uBAAuB,CAAC,IAAI,6BAA6B,EAAE,CAAC;AACpE;;AAEA,MAAM,+BAAwD,CAAA,WAAA,GAAA,EAAA,6BAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA;AAC9D,mBAAmB,QAAQ,GAAwB,IAAI,GAAG,GAAC;;AAE3D,GAAS,SAAS,CAAC,IAAI,EAAU,OAAO,EAAW,OAAO,EAAmC;AAC7F,IAAI,MAAM,GAAA,GAAM,CAAC,EAAA,IAAA,CAAA,CAAA,EAAA,OAAA,IAAA,EAAA,CAAA,CAAA,EAAA,OAAA,EAAA,SAAA,IAAA,EAAA,CAAA,CAAA;AACA,IAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA;AACA,MAAA,IAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,EAAA,IAAA,sBAAA,EAAA,CAAA;AACA,IAAA;;AAEA;AACA,IAAA,OAAA,IAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,CAAA;AACA,EAAA;AACA;;AAEA,MAAA,sBAAA,EAAA;AACA,GAAA,SAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AACA,IAAA,OAAAC,sBAAA,CAAA;AACA,MAAA,GAAA,OAAA;AACA,MAAA,IAAA;AACA,MAAA,UAAA,EAAA;AACA,QAAA,GAAA,OAAA,EAAA,UAAA;AACA,QAAA,0BAAA,EAAA,IAAA;AACA,OAAA;AACA,KAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;;AASA,GAAA,eAAA;AACA,IAAA,IAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,EAAA;AACA,IAAA;AACA,IAAA,MAAA,IAAA,IAAA,OAAA,OAAA,KAAA,QAAA,IAAA,OAAA,KAAA,IAAA,GAAA,OAAA,GAAA,EAAA,CAAA;;AAEA,IAAA,MAAA,QAAA,GAAA;AACA,MAAA,GAAA,IAAA;AACA,MAAA,IAAA;AACA,MAAA,UAAA,EAAA;AACA,QAAA,GAAA,IAAA,CAAA,UAAA;AACA,QAAA,0BAAA,EAAA,IAAA;AACA,OAAA;AACA,KAAA;;AAEA,IAAA,MAAA,QAAA;AACA,MAAA,OAAA,OAAA,KAAA;AACA,UAAA;AACA,UAAA,OAAA,OAAA,KAAA;AACA,YAAA;AACA,YAAA,OAAA,EAAA,KAAA;AACA,cAAA;AACA,cAAA,MAAA,CAAA;AACA,KAAA;;AAEA;AACA,IAAA,OAAAC,oBAAA,CAAA,QAAA,EAAA,QAAA,CAAA;AACA,EAAA;AACA;;;;"}
|
package/build/cjs/options.js
CHANGED
|
@@ -1,9 +1,26 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Cloudflare's version metadata binding structure.
|
|
5
|
+
* @see https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Checks if the value is a valid CF_VERSION_METADATA binding.
|
|
10
|
+
*/
|
|
11
|
+
function isVersionMetadata(value) {
|
|
12
|
+
return typeof value === 'object' && value !== null && 'id' in value && typeof value.id === 'string';
|
|
13
|
+
}
|
|
14
|
+
|
|
3
15
|
/**
|
|
4
16
|
* Merges the options passed in from the user with the options we read from
|
|
5
17
|
* the Cloudflare `env` environment variable object.
|
|
6
18
|
*
|
|
19
|
+
* Release is determined with the following priority (highest to lowest):
|
|
20
|
+
* 1. User-provided release option
|
|
21
|
+
* 2. SENTRY_RELEASE environment variable
|
|
22
|
+
* 3. CF_VERSION_METADATA.id binding (if configured in the wrangler config)
|
|
23
|
+
*
|
|
7
24
|
* @param userOptions - The options passed in from the user.
|
|
8
25
|
* @param env - The environment variables.
|
|
9
26
|
*
|
|
@@ -14,7 +31,13 @@ function getFinalOptions(userOptions, env) {
|
|
|
14
31
|
return userOptions;
|
|
15
32
|
}
|
|
16
33
|
|
|
17
|
-
|
|
34
|
+
// Priority: userOptions.release > SENTRY_RELEASE > CF_VERSION_METADATA.id
|
|
35
|
+
const release =
|
|
36
|
+
'SENTRY_RELEASE' in env && typeof env.SENTRY_RELEASE === 'string'
|
|
37
|
+
? env.SENTRY_RELEASE
|
|
38
|
+
: 'CF_VERSION_METADATA' in env && isVersionMetadata(env.CF_VERSION_METADATA)
|
|
39
|
+
? env.CF_VERSION_METADATA.id
|
|
40
|
+
: undefined;
|
|
18
41
|
|
|
19
42
|
return { release, ...userOptions };
|
|
20
43
|
}
|
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 * Merges the options passed in from the user with the options we read from\n * the Cloudflare `env` environment variable object.\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 const release
|
|
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 { release, ...userOptions };\n}\n"],"names":[],"mappings":";;AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,WAAW,EAAqB,GAAG,EAA8B;AACjG,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,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa;AACpC;;;;"}
|
|
@@ -26,8 +26,8 @@ class SentryCloudflareTraceProvider {constructor() { SentryCloudflareTraceProvi
|
|
|
26
26
|
class SentryCloudflareTracer {
|
|
27
27
|
startSpan(name, options) {
|
|
28
28
|
return startInactiveSpan({
|
|
29
|
-
name,
|
|
30
29
|
...options,
|
|
30
|
+
name,
|
|
31
31
|
attributes: {
|
|
32
32
|
...options?.attributes,
|
|
33
33
|
'sentry.cloudflare_tracer': true,
|
|
@@ -48,8 +48,8 @@ class SentryCloudflareTracer {
|
|
|
48
48
|
const opts = (typeof options === 'object' && options !== null ? options : {}) ;
|
|
49
49
|
|
|
50
50
|
const spanOpts = {
|
|
51
|
-
name,
|
|
52
51
|
...opts,
|
|
52
|
+
name,
|
|
53
53
|
attributes: {
|
|
54
54
|
...opts.attributes,
|
|
55
55
|
'sentry.cloudflare_tracer': true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.js","sources":["../../../src/opentelemetry/tracer.ts"],"sourcesContent":["import type { Context, Span, SpanOptions, Tracer, TracerProvider } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport { startInactiveSpan, startSpanManual } from '@sentry/core';\n\n/**\n * Set up a mock OTEL tracer to allow inter-op with OpenTelemetry emitted spans.\n * This is not perfect but handles easy/common use cases.\n */\nexport function setupOpenTelemetryTracer(): void {\n trace.setGlobalTracerProvider(new SentryCloudflareTraceProvider());\n}\n\nclass SentryCloudflareTraceProvider implements TracerProvider {\n private readonly _tracers: Map<string, Tracer> = new Map();\n\n public getTracer(name: string, version?: string, options?: { schemaUrl?: string }): Tracer {\n const key = `${name}@${version || ''}:${options?.schemaUrl || ''}`;\n if (!this._tracers.has(key)) {\n this._tracers.set(key, new SentryCloudflareTracer());\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this._tracers.get(key)!;\n }\n}\n\nclass SentryCloudflareTracer implements Tracer {\n public startSpan(name: string, options?: SpanOptions): Span {\n return startInactiveSpan({\n
|
|
1
|
+
{"version":3,"file":"tracer.js","sources":["../../../src/opentelemetry/tracer.ts"],"sourcesContent":["import type { Context, Span, SpanOptions, Tracer, TracerProvider } from '@opentelemetry/api';\nimport { trace } from '@opentelemetry/api';\nimport { startInactiveSpan, startSpanManual } from '@sentry/core';\n\n/**\n * Set up a mock OTEL tracer to allow inter-op with OpenTelemetry emitted spans.\n * This is not perfect but handles easy/common use cases.\n */\nexport function setupOpenTelemetryTracer(): void {\n trace.setGlobalTracerProvider(new SentryCloudflareTraceProvider());\n}\n\nclass SentryCloudflareTraceProvider implements TracerProvider {\n private readonly _tracers: Map<string, Tracer> = new Map();\n\n public getTracer(name: string, version?: string, options?: { schemaUrl?: string }): Tracer {\n const key = `${name}@${version || ''}:${options?.schemaUrl || ''}`;\n if (!this._tracers.has(key)) {\n this._tracers.set(key, new SentryCloudflareTracer());\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this._tracers.get(key)!;\n }\n}\n\nclass SentryCloudflareTracer implements Tracer {\n public startSpan(name: string, options?: SpanOptions): Span {\n return startInactiveSpan({\n ...options,\n name,\n attributes: {\n ...options?.attributes,\n 'sentry.cloudflare_tracer': true,\n },\n });\n }\n\n /**\n * NOTE: This does not handle `context` being passed in. It will always put spans on the current scope.\n */\n public startActiveSpan<F extends (span: Span) => unknown>(name: string, fn: F): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(name: string, options: SpanOptions, fn: F): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n context: Context,\n fn: F,\n ): ReturnType<F>;\n public startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: unknown,\n context?: unknown,\n fn?: F,\n ): ReturnType<F> {\n const opts = (typeof options === 'object' && options !== null ? options : {}) as SpanOptions;\n\n const spanOpts = {\n ...opts,\n name,\n attributes: {\n ...opts.attributes,\n 'sentry.cloudflare_tracer': true,\n },\n };\n\n const callback = (\n typeof options === 'function'\n ? options\n : typeof context === 'function'\n ? context\n : typeof fn === 'function'\n ? fn\n : () => {}\n ) as F;\n\n // In OTEL the semantic matches `startSpanManual` because spans are not auto-ended\n return startSpanManual(spanOpts, callback) as ReturnType<F>;\n }\n}\n"],"names":[],"mappings":";;;AAIA;AACA;AACA;AACA;AACO,SAAS,wBAAwB,GAAS;AACjD,EAAE,KAAK,CAAC,uBAAuB,CAAC,IAAI,6BAA6B,EAAE,CAAC;AACpE;;AAEA,MAAM,+BAAwD,CAAA,WAAA,GAAA,EAAA,6BAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA;AAC9D,mBAAmB,QAAQ,GAAwB,IAAI,GAAG,GAAC;;AAE3D,GAAS,SAAS,CAAC,IAAI,EAAU,OAAO,EAAW,OAAO,EAAmC;AAC7F,IAAI,MAAM,GAAA,GAAM,CAAC,EAAA,IAAA,CAAA,CAAA,EAAA,OAAA,IAAA,EAAA,CAAA,CAAA,EAAA,OAAA,EAAA,SAAA,IAAA,EAAA,CAAA,CAAA;AACA,IAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA;AACA,MAAA,IAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,EAAA,IAAA,sBAAA,EAAA,CAAA;AACA,IAAA;;AAEA;AACA,IAAA,OAAA,IAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,CAAA;AACA,EAAA;AACA;;AAEA,MAAA,sBAAA,EAAA;AACA,GAAA,SAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AACA,IAAA,OAAA,iBAAA,CAAA;AACA,MAAA,GAAA,OAAA;AACA,MAAA,IAAA;AACA,MAAA,UAAA,EAAA;AACA,QAAA,GAAA,OAAA,EAAA,UAAA;AACA,QAAA,0BAAA,EAAA,IAAA;AACA,OAAA;AACA,KAAA,CAAA;AACA,EAAA;;AAEA;AACA;AACA;;AASA,GAAA,eAAA;AACA,IAAA,IAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,EAAA;AACA,IAAA;AACA,IAAA,MAAA,IAAA,IAAA,OAAA,OAAA,KAAA,QAAA,IAAA,OAAA,KAAA,IAAA,GAAA,OAAA,GAAA,EAAA,CAAA;;AAEA,IAAA,MAAA,QAAA,GAAA;AACA,MAAA,GAAA,IAAA;AACA,MAAA,IAAA;AACA,MAAA,UAAA,EAAA;AACA,QAAA,GAAA,IAAA,CAAA,UAAA;AACA,QAAA,0BAAA,EAAA,IAAA;AACA,OAAA;AACA,KAAA;;AAEA,IAAA,MAAA,QAAA;AACA,MAAA,OAAA,OAAA,KAAA;AACA,UAAA;AACA,UAAA,OAAA,OAAA,KAAA;AACA,YAAA;AACA,YAAA,OAAA,EAAA,KAAA;AACA,cAAA;AACA,cAAA,MAAA,CAAA;AACA,KAAA;;AAEA;AACA,IAAA,OAAA,eAAA,CAAA,QAAA,EAAA,QAAA,CAAA;AACA,EAAA;AACA;;;;"}
|
package/build/esm/options.js
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare's version metadata binding structure.
|
|
3
|
+
* @see https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Checks if the value is a valid CF_VERSION_METADATA binding.
|
|
8
|
+
*/
|
|
9
|
+
function isVersionMetadata(value) {
|
|
10
|
+
return typeof value === 'object' && value !== null && 'id' in value && typeof value.id === 'string';
|
|
11
|
+
}
|
|
12
|
+
|
|
1
13
|
/**
|
|
2
14
|
* Merges the options passed in from the user with the options we read from
|
|
3
15
|
* the Cloudflare `env` environment variable object.
|
|
4
16
|
*
|
|
17
|
+
* Release is determined with the following priority (highest to lowest):
|
|
18
|
+
* 1. User-provided release option
|
|
19
|
+
* 2. SENTRY_RELEASE environment variable
|
|
20
|
+
* 3. CF_VERSION_METADATA.id binding (if configured in the wrangler config)
|
|
21
|
+
*
|
|
5
22
|
* @param userOptions - The options passed in from the user.
|
|
6
23
|
* @param env - The environment variables.
|
|
7
24
|
*
|
|
@@ -12,7 +29,13 @@ function getFinalOptions(userOptions, env) {
|
|
|
12
29
|
return userOptions;
|
|
13
30
|
}
|
|
14
31
|
|
|
15
|
-
|
|
32
|
+
// Priority: userOptions.release > SENTRY_RELEASE > CF_VERSION_METADATA.id
|
|
33
|
+
const release =
|
|
34
|
+
'SENTRY_RELEASE' in env && typeof env.SENTRY_RELEASE === 'string'
|
|
35
|
+
? env.SENTRY_RELEASE
|
|
36
|
+
: 'CF_VERSION_METADATA' in env && isVersionMetadata(env.CF_VERSION_METADATA)
|
|
37
|
+
? env.CF_VERSION_METADATA.id
|
|
38
|
+
: undefined;
|
|
16
39
|
|
|
17
40
|
return { release, ...userOptions };
|
|
18
41
|
}
|
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 * Merges the options passed in from the user with the options we read from\n * the Cloudflare `env` environment variable object.\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 const release
|
|
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 { release, ...userOptions };\n}\n"],"names":[],"mappings":"AAEA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,WAAW,EAAqB,GAAG,EAA8B;AACjG,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,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa;AACpC;;;;"}
|
package/build/esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"type":"module","version":"10.
|
|
1
|
+
{"type":"module","version":"10.35.0","sideEffects":false}
|
package/build/types/options.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ import type { CloudflareOptions } from './client';
|
|
|
3
3
|
* Merges the options passed in from the user with the options we read from
|
|
4
4
|
* the Cloudflare `env` environment variable object.
|
|
5
5
|
*
|
|
6
|
+
* Release is determined with the following priority (highest to lowest):
|
|
7
|
+
* 1. User-provided release option
|
|
8
|
+
* 2. SENTRY_RELEASE environment variable
|
|
9
|
+
* 3. CF_VERSION_METADATA.id binding (if configured in the wrangler config)
|
|
10
|
+
*
|
|
6
11
|
* @param userOptions - The options passed in from the user.
|
|
7
12
|
* @param env - The environment variables.
|
|
8
13
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAmBlD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAc/F"}
|
|
@@ -3,6 +3,11 @@ import { CloudflareOptions } from './client';
|
|
|
3
3
|
* Merges the options passed in from the user with the options we read from
|
|
4
4
|
* the Cloudflare `env` environment variable object.
|
|
5
5
|
*
|
|
6
|
+
* Release is determined with the following priority (highest to lowest):
|
|
7
|
+
* 1. User-provided release option
|
|
8
|
+
* 2. SENTRY_RELEASE environment variable
|
|
9
|
+
* 3. CF_VERSION_METADATA.id binding (if configured in the wrangler config)
|
|
10
|
+
*
|
|
6
11
|
* @param userOptions - The options passed in from the user.
|
|
7
12
|
* @param env - The environment variables.
|
|
8
13
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentry/cloudflare",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.35.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.35.0"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@cloudflare/workers-types": "^4.x"
|