@syncular/observability-sentry 0.0.1-98 → 0.0.2-126

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/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # @syncular/observability-sentry
2
+
3
+ Sentry adapter for Syncular telemetry (`SyncTelemetry`): logs, traces, metrics, and exceptions.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @syncular/observability-sentry
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { createBrowserSentryTelemetry } from '@syncular/observability-sentry';
15
+
16
+ const telemetry = createBrowserSentryTelemetry();
17
+ ```
18
+
19
+ ## Documentation
20
+
21
+ - Observability guide: https://syncular.dev/docs/build/observability
22
+
23
+ ## Links
24
+
25
+ - GitHub: https://github.com/syncular/syncular
26
+ - Issues: https://github.com/syncular/syncular/issues
27
+
28
+ > Status: Alpha. APIs and storage layouts may change between releases.
@@ -14,6 +14,19 @@ interface CloudflareSentryLogOptions {
14
14
  * Re-export Cloudflare Sentry worker wrapper.
15
15
  */
16
16
  export declare const withCloudflareSentry: typeof Sentry.withSentry;
17
+ export declare const instrumentCloudflareDurableObjectWithSentry: typeof Sentry.instrumentDurableObjectWithSentry;
18
+ export interface CloudflareSentryTraceHeaders {
19
+ sentryTrace?: string;
20
+ baggage?: string;
21
+ }
22
+ /**
23
+ * Read current trace headers from the active Cloudflare Sentry scope.
24
+ */
25
+ export declare function getCloudflareSentryTraceHeaders(traceData?: ReturnType<typeof Sentry.getTraceData>): CloudflareSentryTraceHeaders;
26
+ /**
27
+ * Clone a request and attach active Cloudflare trace headers when available.
28
+ */
29
+ export declare function attachCloudflareSentryTraceHeaders(request: Request, traceHeaders?: CloudflareSentryTraceHeaders): Request;
17
30
  /**
18
31
  * Create a Syncular telemetry backend wired to `@sentry/cloudflare`.
19
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AAuBxB,MAAM,MAAM,mCAAmC,GAAG,UAAU,CAC1D,OAAO,MAAM,CAAC,cAAc,CAC7B,CAAC,CAAC,CAAC,CAAC;AAEL,UAAU,qCAAqC;IAC7C,KAAK,CAAC,EAAE,mCAAmC,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,KAAK,wBAAwB,GACzB,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,CAAC;AAEZ,UAAU,0BAA0B;IAClC,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;CAC1D;AAiCD;;GAEG;AACH,eAAO,MAAM,oBAAoB,0BAAoB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,aAAa,CAkD/D;AAED;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,aAAa,CAIlE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,qCAAqC,GAC9C,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,0BAA0B,GACnC,IAAI,CASN"}
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AAuBxB,MAAM,MAAM,mCAAmC,GAAG,UAAU,CAC1D,OAAO,MAAM,CAAC,cAAc,CAC7B,CAAC,CAAC,CAAC,CAAC;AAEL,UAAU,qCAAqC;IAC7C,KAAK,CAAC,EAAE,mCAAmC,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,KAAK,wBAAwB,GACzB,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,GACP,OAAO,CAAC;AAEZ,UAAU,0BAA0B;IAClC,KAAK,CAAC,EAAE,wBAAwB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;CAC1D;AAiCD;;GAEG;AACH,eAAO,MAAM,oBAAoB,0BAAoB,CAAC;AACtD,eAAO,MAAM,2CAA2C,iDACd,CAAC;AAE3C,MAAM,WAAW,4BAA4B;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,SAAS,GAAE,UAAU,CAAC,OAAO,MAAM,CAAC,YAAY,CAAyB,GACxE,4BAA4B,CAO9B;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,YAAY,GAAE,4BAAgE,GAC7E,OAAO,CAcT;AAED;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,aAAa,CAkD/D;AAED;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,aAAa,CAIlE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,qCAAqC,GAC9C,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,0BAA0B,GACnC,IAAI,CASN"}
@@ -43,6 +43,34 @@ function resolveCloudflareLogMethod(level) {
43
43
  * Re-export Cloudflare Sentry worker wrapper.
44
44
  */
45
45
  export const withCloudflareSentry = Sentry.withSentry;
46
+ export const instrumentCloudflareDurableObjectWithSentry = Sentry.instrumentDurableObjectWithSentry;
47
+ /**
48
+ * Read current trace headers from the active Cloudflare Sentry scope.
49
+ */
50
+ export function getCloudflareSentryTraceHeaders(traceData = Sentry.getTraceData()) {
51
+ const sentryTrace = traceData['sentry-trace']?.trim();
52
+ const baggage = traceData.baggage?.trim();
53
+ return {
54
+ ...(sentryTrace ? { sentryTrace } : {}),
55
+ ...(baggage ? { baggage } : {}),
56
+ };
57
+ }
58
+ /**
59
+ * Clone a request and attach active Cloudflare trace headers when available.
60
+ */
61
+ export function attachCloudflareSentryTraceHeaders(request, traceHeaders = getCloudflareSentryTraceHeaders()) {
62
+ if (!traceHeaders.sentryTrace && !traceHeaders.baggage) {
63
+ return request;
64
+ }
65
+ const headers = new Headers(request.headers);
66
+ if (traceHeaders.sentryTrace) {
67
+ headers.set('sentry-trace', traceHeaders.sentryTrace);
68
+ }
69
+ if (traceHeaders.baggage) {
70
+ headers.set('baggage', traceHeaders.baggage);
71
+ }
72
+ return new Request(request, { headers });
73
+ }
46
74
  /**
47
75
  * Create a Syncular telemetry backend wired to `@sentry/cloudflare`.
48
76
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EACL,sBAAsB,GAIvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,SAAS,oBAAoB,CAC3B,OAA2B,EAC6B;IACxD,IAAI,CAAC,OAAO,EAAE,UAAU;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;AAAA,CAC3C;AAED,SAAS,oBAAoB,CAC3B,OAA2B,EAC6B;IACxD,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC;AAAA,CACH;AAwBD,SAAS,0BAA0B,CACjC,KAA+B,EAMxB;IACP,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1E,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACnD,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAClD,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QACzE,KAAK,OAAO;YACV,OAAO,CACL,MAAM,CAAC,MAAM,CAAC,KAAK;gBACnB,MAAM,CAAC,MAAM,CAAC,KAAK;gBACnB,MAAM,CAAC,MAAM,CAAC,IAAI;gBAClB,MAAM,CAAC,MAAM,CAAC,IAAI,CACnB,CAAC;QACJ;YACE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;AAAA,CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC;AAEtD;;GAEG;AACH,MAAM,UAAU,+BAA+B,GAAkB;IAC/D,OAAO,yBAAyB,CAAC;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE;YAC3B,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CACxC,QAAQ,CAAC;gBACP,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;oBACxB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAA,CAChC;gBACD,aAAa,CAAC,UAAU,EAAE;oBACxB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAAA,CAChC;gBACD,SAAS,CAAC,MAAM,EAAE;oBAChB,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC9B,CAAC,CAAC;gBAAA,CACJ;aACF,CAAC,CACH,CAAC;QAAA,CACH;QACD,OAAO,EAAE;YACP,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;gBAC1B,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;oBACjD,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAA,CACnC;YACD,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;gBAC1B,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;oBACjD,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAA,CACnC;YACD,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;gBACjC,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;oBACxD,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAAA,CAC1C;SACF;QACD,gBAAgB,CAAC,KAAK,EAAE;YACtB,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAAA,CAChC;KACF,CAAC,CAAC;AAAA,CACJ;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC,GAAkB;IAClE,MAAM,SAAS,GAAG,+BAA+B,EAAE,CAAC;IACpD,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClC,OAAO,SAAS,CAAC;AAAA,CAClB;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAe,EACf,OAA+C,EACzC;IACN,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAAA,CAChD,CAAC,CAAC;AAAA,CACJ;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,OAAoC,EAC9B;IACN,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,MAAM,CAAC;IACvC,MAAM,SAAS,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO;IACvB,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,SAAS,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IACD,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AAAA,CACxC"}
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/observability-sentry",
3
- "version": "0.0.1-98",
3
+ "version": "0.0.2-126",
4
4
  "description": "Sentry adapters for Syncular telemetry",
5
5
  "license": "MIT",
6
6
  "author": "Benjamin Kniffler",
@@ -43,7 +43,7 @@
43
43
  "dependencies": {
44
44
  "@sentry/cloudflare": "^10.38.0",
45
45
  "@sentry/react": "^10.38.0",
46
- "@syncular/core": "0.0.1"
46
+ "@syncular/core": "0.0.2-126"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@syncular/config": "0.0.0"
@@ -0,0 +1,49 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+ import {
3
+ attachCloudflareSentryTraceHeaders,
4
+ getCloudflareSentryTraceHeaders,
5
+ } from './cloudflare';
6
+
7
+ describe('cloudflare tracing helpers', () => {
8
+ test('extracts trace headers from sentry trace data', () => {
9
+ expect(
10
+ getCloudflareSentryTraceHeaders({
11
+ 'sentry-trace': 'trace-id-span-id-1',
12
+ baggage: 'sample_rate=1',
13
+ })
14
+ ).toEqual({
15
+ sentryTrace: 'trace-id-span-id-1',
16
+ baggage: 'sample_rate=1',
17
+ });
18
+ });
19
+
20
+ test('returns original request when trace headers are missing', () => {
21
+ const request = new Request('https://example.com/api/sync', {
22
+ method: 'POST',
23
+ headers: { 'x-custom': '1' },
24
+ body: '{}',
25
+ });
26
+
27
+ const result = attachCloudflareSentryTraceHeaders(request, {});
28
+ expect(result).toBe(request);
29
+ });
30
+
31
+ test('adds sentry trace headers to cloned request', async () => {
32
+ const request = new Request('https://example.com/api/sync', {
33
+ method: 'POST',
34
+ headers: { 'x-custom': '1' },
35
+ body: '{"ok":true}',
36
+ });
37
+
38
+ const result = attachCloudflareSentryTraceHeaders(request, {
39
+ sentryTrace: 'trace-id-span-id-1',
40
+ baggage: 'sample_rate=1',
41
+ });
42
+
43
+ expect(result).not.toBe(request);
44
+ expect(result.headers.get('x-custom')).toBe('1');
45
+ expect(result.headers.get('sentry-trace')).toBe('trace-id-span-id-1');
46
+ expect(result.headers.get('baggage')).toBe('sample_rate=1');
47
+ expect(await result.text()).toBe('{"ok":true}');
48
+ });
49
+ });
package/src/cloudflare.ts CHANGED
@@ -84,6 +84,49 @@ function resolveCloudflareLogMethod(
84
84
  * Re-export Cloudflare Sentry worker wrapper.
85
85
  */
86
86
  export const withCloudflareSentry = Sentry.withSentry;
87
+ export const instrumentCloudflareDurableObjectWithSentry =
88
+ Sentry.instrumentDurableObjectWithSentry;
89
+
90
+ export interface CloudflareSentryTraceHeaders {
91
+ sentryTrace?: string;
92
+ baggage?: string;
93
+ }
94
+
95
+ /**
96
+ * Read current trace headers from the active Cloudflare Sentry scope.
97
+ */
98
+ export function getCloudflareSentryTraceHeaders(
99
+ traceData: ReturnType<typeof Sentry.getTraceData> = Sentry.getTraceData()
100
+ ): CloudflareSentryTraceHeaders {
101
+ const sentryTrace = traceData['sentry-trace']?.trim();
102
+ const baggage = traceData.baggage?.trim();
103
+ return {
104
+ ...(sentryTrace ? { sentryTrace } : {}),
105
+ ...(baggage ? { baggage } : {}),
106
+ };
107
+ }
108
+
109
+ /**
110
+ * Clone a request and attach active Cloudflare trace headers when available.
111
+ */
112
+ export function attachCloudflareSentryTraceHeaders(
113
+ request: Request,
114
+ traceHeaders: CloudflareSentryTraceHeaders = getCloudflareSentryTraceHeaders()
115
+ ): Request {
116
+ if (!traceHeaders.sentryTrace && !traceHeaders.baggage) {
117
+ return request;
118
+ }
119
+
120
+ const headers = new Headers(request.headers);
121
+ if (traceHeaders.sentryTrace) {
122
+ headers.set('sentry-trace', traceHeaders.sentryTrace);
123
+ }
124
+ if (traceHeaders.baggage) {
125
+ headers.set('baggage', traceHeaders.baggage);
126
+ }
127
+
128
+ return new Request(request, { headers });
129
+ }
87
130
 
88
131
  /**
89
132
  * Create a Syncular telemetry backend wired to `@sentry/cloudflare`.