@cfworker/sentry 5.0.2 → 5.0.4

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.
@@ -10,3 +10,4 @@ export declare function captureError({ sentryDsn, environment, release, err, req
10
10
  event_id: string;
11
11
  posted: Promise<Response>;
12
12
  };
13
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/capture.ts"],"names":[],"mappings":"AAmFA,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,WAAW,EACX,OAAO,EACP,GAAG,EACH,OAAO,EACP,IAAI,EACJ,KAAe,EAChB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;CAC1D,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAsDlD"}
@@ -134,3 +134,4 @@ function serializeRequest(request) {
134
134
  headers: serializeHeaders(request.headers)
135
135
  };
136
136
  }
137
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/capture.ts"],"names":[],"mappings":"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","sourcesContent":["const sentryClient = 'cfworker-sentry';\n\nconst UNKNOWN_FUNCTION = '?';\nconst FILENAME_MATCH = /^\\s*[-]{4,}$/;\nconst FULL_MATCH =\n /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n\nfunction parseLine(line: string) {\n const lineMatch = line.match(FULL_MATCH);\n\n if (lineMatch) {\n let object: string | undefined;\n let method: string | undefined;\n let functionName: string | undefined;\n let typeName: string | undefined;\n let methodName: string | undefined;\n\n if (lineMatch[1]) {\n functionName = lineMatch[1];\n\n let methodStart = functionName.lastIndexOf('.');\n if (functionName[methodStart - 1] === '.') {\n methodStart--;\n }\n\n if (methodStart > 0) {\n object = functionName.slice(0, methodStart);\n method = functionName.slice(methodStart + 1);\n const objectEnd = object.indexOf('.Module');\n if (objectEnd > 0) {\n functionName = functionName.slice(objectEnd + 1);\n object = object.slice(0, objectEnd);\n }\n }\n typeName = undefined;\n }\n\n if (method) {\n typeName = object;\n methodName = method;\n }\n\n if (method === '<anonymous>') {\n methodName = undefined;\n functionName = undefined;\n }\n\n if (functionName === undefined) {\n methodName = methodName || UNKNOWN_FUNCTION;\n functionName = typeName ? `${typeName}.${methodName}` : methodName;\n }\n\n let filename = './' + lineMatch[2]?.split('/').pop();\n const isNative = lineMatch[5] === 'native';\n if (!filename && lineMatch[5] && !isNative) {\n filename = './' + lineMatch[5]?.split('/').pop();\n }\n\n return {\n filename,\n function: functionName,\n lineno: _parseIntOrUndefined(lineMatch[3]),\n colno: _parseIntOrUndefined(lineMatch[4]),\n in_app: true\n };\n }\n\n if (line.match(FILENAME_MATCH)) {\n return {\n filename: line\n };\n }\n\n return undefined;\n}\n\nfunction _parseIntOrUndefined(input: string | undefined): number | undefined {\n return parseInt(input || '', 10) || undefined;\n}\n\n/**\n * Report an error to Sentry\n */\nexport function captureError({\n sentryDsn,\n environment,\n release,\n err,\n request,\n user,\n level = 'error'\n}: {\n sentryDsn: string;\n environment: string;\n release: string;\n err: unknown;\n request: Request;\n user: any;\n level?: 'fatal' | 'error' | 'warning' | 'info' | 'debug';\n}): { event_id: string; posted: Promise<Response> } {\n const event_id = crypto.randomUUID();\n const timestamp = new Date().toISOString().substr(0, 19);\n let error: Error;\n if (err instanceof Error) {\n error = err;\n } else {\n error = new Error(err as string);\n error.message = String(err);\n }\n const body = {\n event_id,\n timestamp,\n sdk: {\n name: sentryClient,\n version: '1.0.0'\n },\n level,\n transaction: request.url,\n server_name: 'cloudflare',\n release,\n // tags: {},\n environment,\n // modules: {},\n extra: {},\n exception: {\n values: [\n {\n type: error.name,\n value: error.message,\n // Ref: https://develop.sentry.dev/sdk/event-payloads/stacktrace\n stacktrace: {\n frames:\n error.stack\n ?.split('\\n')\n .map(parseLine)\n .filter(Boolean)\n .reverse() ?? []\n }\n }\n ]\n },\n request: serializeRequest(request),\n user: Object.assign(user || {}, {\n ip_address: request.headers.get('CF-Connecting-IP')\n })\n };\n const { origin, pathname: project, username: key } = new URL(sentryDsn);\n const api = `${origin}/api${project}/store/?sentry_key=${key}&sentry_version=7&sentry_client=${sentryClient}`;\n const posted = fetch(api, {\n method: 'POST',\n body: JSON.stringify(body)\n });\n return { event_id, posted };\n}\n\nfunction serializeHeaders(headers: Headers) {\n const map: Record<string, string> = {};\n for (const [key, value] of headers) {\n if (key === 'cookie') {\n continue;\n }\n map[key] = value;\n }\n return map;\n}\n\nfunction serializeRequest(request: Request) {\n return {\n url: request.url,\n method: request.method,\n headers: serializeHeaders(request.headers)\n };\n}\n"]}
@@ -1 +1,2 @@
1
1
  export { captureError } from './capture.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -3,3 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.captureError = void 0;
4
4
  var capture_js_1 = require("./capture.js");
5
5
  Object.defineProperty(exports, "captureError", { enumerable: true, get: function () { return capture_js_1.captureError; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAAnC,0GAAA,YAAY,OAAA","sourcesContent":["export { captureError } from './capture.js';\n"]}
@@ -1,3 +1,4 @@
1
1
  {
2
- "type": "commonjs"
2
+ "type": "commonjs",
3
+ "sideEffects": false
3
4
  }
@@ -10,3 +10,4 @@ export declare function captureError({ sentryDsn, environment, release, err, req
10
10
  event_id: string;
11
11
  posted: Promise<Response>;
12
12
  };
13
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/capture.ts"],"names":[],"mappings":"AAmFA,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,WAAW,EACX,OAAO,EACP,GAAG,EACH,OAAO,EACP,IAAI,EACJ,KAAe,EAChB,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;CAC1D,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;CAAE,CAsDlD"}
@@ -131,3 +131,4 @@ function serializeRequest(request) {
131
131
  headers: serializeHeaders(request.headers)
132
132
  };
133
133
  }
134
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/capture.ts"],"names":[],"mappings":"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","sourcesContent":["const sentryClient = 'cfworker-sentry';\n\nconst UNKNOWN_FUNCTION = '?';\nconst FILENAME_MATCH = /^\\s*[-]{4,}$/;\nconst FULL_MATCH =\n /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n\nfunction parseLine(line: string) {\n const lineMatch = line.match(FULL_MATCH);\n\n if (lineMatch) {\n let object: string | undefined;\n let method: string | undefined;\n let functionName: string | undefined;\n let typeName: string | undefined;\n let methodName: string | undefined;\n\n if (lineMatch[1]) {\n functionName = lineMatch[1];\n\n let methodStart = functionName.lastIndexOf('.');\n if (functionName[methodStart - 1] === '.') {\n methodStart--;\n }\n\n if (methodStart > 0) {\n object = functionName.slice(0, methodStart);\n method = functionName.slice(methodStart + 1);\n const objectEnd = object.indexOf('.Module');\n if (objectEnd > 0) {\n functionName = functionName.slice(objectEnd + 1);\n object = object.slice(0, objectEnd);\n }\n }\n typeName = undefined;\n }\n\n if (method) {\n typeName = object;\n methodName = method;\n }\n\n if (method === '<anonymous>') {\n methodName = undefined;\n functionName = undefined;\n }\n\n if (functionName === undefined) {\n methodName = methodName || UNKNOWN_FUNCTION;\n functionName = typeName ? `${typeName}.${methodName}` : methodName;\n }\n\n let filename = './' + lineMatch[2]?.split('/').pop();\n const isNative = lineMatch[5] === 'native';\n if (!filename && lineMatch[5] && !isNative) {\n filename = './' + lineMatch[5]?.split('/').pop();\n }\n\n return {\n filename,\n function: functionName,\n lineno: _parseIntOrUndefined(lineMatch[3]),\n colno: _parseIntOrUndefined(lineMatch[4]),\n in_app: true\n };\n }\n\n if (line.match(FILENAME_MATCH)) {\n return {\n filename: line\n };\n }\n\n return undefined;\n}\n\nfunction _parseIntOrUndefined(input: string | undefined): number | undefined {\n return parseInt(input || '', 10) || undefined;\n}\n\n/**\n * Report an error to Sentry\n */\nexport function captureError({\n sentryDsn,\n environment,\n release,\n err,\n request,\n user,\n level = 'error'\n}: {\n sentryDsn: string;\n environment: string;\n release: string;\n err: unknown;\n request: Request;\n user: any;\n level?: 'fatal' | 'error' | 'warning' | 'info' | 'debug';\n}): { event_id: string; posted: Promise<Response> } {\n const event_id = crypto.randomUUID();\n const timestamp = new Date().toISOString().substr(0, 19);\n let error: Error;\n if (err instanceof Error) {\n error = err;\n } else {\n error = new Error(err as string);\n error.message = String(err);\n }\n const body = {\n event_id,\n timestamp,\n sdk: {\n name: sentryClient,\n version: '1.0.0'\n },\n level,\n transaction: request.url,\n server_name: 'cloudflare',\n release,\n // tags: {},\n environment,\n // modules: {},\n extra: {},\n exception: {\n values: [\n {\n type: error.name,\n value: error.message,\n // Ref: https://develop.sentry.dev/sdk/event-payloads/stacktrace\n stacktrace: {\n frames:\n error.stack\n ?.split('\\n')\n .map(parseLine)\n .filter(Boolean)\n .reverse() ?? []\n }\n }\n ]\n },\n request: serializeRequest(request),\n user: Object.assign(user || {}, {\n ip_address: request.headers.get('CF-Connecting-IP')\n })\n };\n const { origin, pathname: project, username: key } = new URL(sentryDsn);\n const api = `${origin}/api${project}/store/?sentry_key=${key}&sentry_version=7&sentry_client=${sentryClient}`;\n const posted = fetch(api, {\n method: 'POST',\n body: JSON.stringify(body)\n });\n return { event_id, posted };\n}\n\nfunction serializeHeaders(headers: Headers) {\n const map: Record<string, string> = {};\n for (const [key, value] of headers) {\n if (key === 'cookie') {\n continue;\n }\n map[key] = value;\n }\n return map;\n}\n\nfunction serializeRequest(request: Request) {\n return {\n url: request.url,\n method: request.method,\n headers: serializeHeaders(request.headers)\n };\n}\n"]}
@@ -1 +1,2 @@
1
1
  export { captureError } from './capture.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
package/dist/esm/index.js CHANGED
@@ -1 +1,2 @@
1
1
  export { captureError } from './capture.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC","sourcesContent":["export { captureError } from './capture.js';\n"]}
@@ -1,3 +1,4 @@
1
1
  {
2
- "type": "module"
2
+ "type": "module",
3
+ "sideEffects": false
3
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cfworker/sentry",
3
- "version": "5.0.2",
3
+ "version": "5.0.4",
4
4
  "description": "Minimalist Sentry client for Cloudflare workers and service workers",
5
5
  "keywords": [
6
6
  "sentry",
@@ -40,14 +40,16 @@
40
40
  ],
41
41
  "scripts": {
42
42
  "prepare": "tshy",
43
- "build": "tsc --build",
44
- "clean": "tsc --build --clean",
43
+ "build": "tshy",
44
+ "typecheck": "tsc --project tsconfig.json",
45
+ "clean": "tsc --build tsconfig.build.json --clean",
45
46
  "test": "echo \"no tests 🥺\""
46
47
  },
47
48
  "devDependencies": {
48
- "typescript": "^5.7.2"
49
+ "typescript": "^7.0.2"
49
50
  },
50
51
  "tshy": {
52
+ "project": "./tsconfig.build.json",
51
53
  "exports": {
52
54
  "./package.json": "./package.json",
53
55
  ".": "./src/index.ts"