@honeybadger-io/cloudflare 0.2.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/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # Honeybadger Cloudflare Workers Integration
2
+
3
+ ![Node CI](https://github.com/honeybadger-io/honeybadger-js/workflows/Node%20CI/badge.svg)
4
+ [![npm version](https://badge.fury.io/js/%40honeybadger-io%2Fcloudflare.svg)](https://badge.fury.io/js/%40honeybadger-io%2Fcloudflare)
5
+ [![npm dm](https://img.shields.io/npm/dm/@honeybadger-io/cloudflare)](https://www.npmjs.com/package/@honeybadger-io/cloudflare)
6
+ [![npm dt](https://img.shields.io/npm/dt/@honeybadger-io/cloudflare)](https://www.npmjs.com/package/@honeybadger-io/cloudflare)
7
+
8
+ Error monitoring for [Cloudflare Workers](https://developers.cloudflare.com/workers/) via Honeybadger.
9
+
10
+ ## Documentation and Support
11
+
12
+ For full documentation and support, see [Honeybadger's JavaScript docs](https://docs.honeybadger.io/lib/javascript).
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install @honeybadger-io/cloudflare
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ Wrap your Worker's exported handler with `withHoneybadger`. Pass a `getConfig` function that receives your `env` and returns Honeybadger config overrides (e.g. `apiKey`, `environment`).
23
+
24
+ Set the API key via [Wrangler secrets](https://developers.cloudflare.com/workers/configuration/secrets/):
25
+
26
+ ```bash
27
+ wrangler secret put HONEYBADGER_API_KEY
28
+ ```
29
+
30
+ Pass any `(env) => Partial<Config>` to control Honeybadger config from your env:
31
+
32
+ ```typescript
33
+ import { withHoneybadger } from '@honeybadger-io/cloudflare'
34
+ import type { Types } from '@honeybadger-io/core'
35
+
36
+ const getConfig = (env: Env): Partial<Types.Config> => ({
37
+ apiKey: env.HONEYBADGER_API_KEY,
38
+ environment: env.ENVIRONMENT ?? 'production',
39
+ revision: env.GIT_SHA,
40
+ })
41
+
42
+ export default withHoneybadger(getConfig, {
43
+ async fetch(request, env, ctx) {
44
+ // ...
45
+ },
46
+ async scheduled(controller, env, ctx) {
47
+ // ...
48
+ },
49
+ })
50
+ ```
51
+
52
+ ## Supported handlers
53
+
54
+ `withHoneybadger` wraps all handlers present on your export: **fetch**, **scheduled**, **queue**, **email**, and **tail**. Errors in any handler are reported to Honeybadger and rethrown; reporting runs via `ctx.waitUntil()` so it does not block the response.
55
+
56
+ ## License
57
+
58
+ This package is MIT licensed. See the [MIT-LICENSE](./MIT-LICENSE) file in this folder for details.
@@ -0,0 +1,4 @@
1
+ import type { Types } from '@honeybadger-io/core';
2
+ import type { ExportedHandler } from '@cloudflare/workers-types';
3
+ export declare function withHoneybadger<Env>(getConfig: (env: Env) => Partial<Types.Config>, handler: ExportedHandler<Env>): ExportedHandler<Env>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,2BAA2B,CAAA;AAYlC,wBAAgB,eAAe,CAAC,GAAG,EACjC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAC9C,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,GAC5B,eAAe,CAAC,GAAG,CAAC,CAqHtB"}
package/dist/index.js ADDED
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.withHoneybadger = withHoneybadger;
43
+ var js_1 = __importDefault(require("@honeybadger-io/js"));
44
+ var HANDLER_NAMES = ['fetch', 'scheduled', 'queue', 'email', 'tail'];
45
+ function reportError(error) {
46
+ if (js_1.default.config.apiKey === undefined || js_1.default.config.apiKey.length === 0) {
47
+ return Promise.resolve();
48
+ }
49
+ var noticeable = error instanceof Error ? error : new Error(String(error));
50
+ return js_1.default.notifyAsync(noticeable);
51
+ }
52
+ function withHoneybadger(getConfig, handler) {
53
+ var _this = this;
54
+ var _loop_1 = function (name_1) {
55
+ var fn = handler[name_1];
56
+ if (typeof fn !== 'function') {
57
+ return "continue";
58
+ }
59
+ if (name_1 === 'fetch') {
60
+ var fetchHandler_1 = fn;
61
+ handler.fetch = function (request, env, ctx) { return __awaiter(_this, void 0, void 0, function () {
62
+ var config, error_1;
63
+ return __generator(this, function (_a) {
64
+ switch (_a.label) {
65
+ case 0:
66
+ config = getConfig(env);
67
+ if (config.apiKey && (js_1.default.config.apiKey === undefined || js_1.default.config.apiKey.length === 0)) {
68
+ js_1.default.configure(config);
69
+ js_1.default.setContext({ url: request.url, method: request.method });
70
+ }
71
+ _a.label = 1;
72
+ case 1:
73
+ _a.trys.push([1, 3, , 4]);
74
+ return [4 /*yield*/, fetchHandler_1(request, env, ctx)];
75
+ case 2: return [2 /*return*/, _a.sent()];
76
+ case 3:
77
+ error_1 = _a.sent();
78
+ ctx.waitUntil(reportError(error_1));
79
+ throw error_1;
80
+ case 4: return [2 /*return*/];
81
+ }
82
+ });
83
+ }); };
84
+ return "continue";
85
+ }
86
+ if (name_1 === 'scheduled') {
87
+ var scheduledHandler_1 = fn;
88
+ handler.scheduled = (function (controller, env, ctx) { return __awaiter(_this, void 0, void 0, function () {
89
+ var config, error_2;
90
+ return __generator(this, function (_a) {
91
+ switch (_a.label) {
92
+ case 0:
93
+ config = getConfig(env);
94
+ if (config.apiKey && (js_1.default.config.apiKey === undefined || js_1.default.config.apiKey.length === 0)) {
95
+ js_1.default.configure(config);
96
+ js_1.default.setContext({
97
+ cron: controller.cron,
98
+ scheduledTime: controller.scheduledTime,
99
+ });
100
+ }
101
+ _a.label = 1;
102
+ case 1:
103
+ _a.trys.push([1, 3, , 4]);
104
+ return [4 /*yield*/, scheduledHandler_1(controller, env, ctx)];
105
+ case 2:
106
+ _a.sent();
107
+ return [3 /*break*/, 4];
108
+ case 3:
109
+ error_2 = _a.sent();
110
+ ctx.waitUntil(reportError(error_2));
111
+ throw error_2;
112
+ case 4: return [2 /*return*/];
113
+ }
114
+ });
115
+ }); });
116
+ return "continue";
117
+ }
118
+ if (name_1 === 'queue') {
119
+ var queueHandler_1 = fn;
120
+ handler.queue = (function (batch, env, ctx) { return __awaiter(_this, void 0, void 0, function () {
121
+ var config, error_3;
122
+ return __generator(this, function (_a) {
123
+ switch (_a.label) {
124
+ case 0:
125
+ config = getConfig(env);
126
+ if (config.apiKey && (js_1.default.config.apiKey === undefined || js_1.default.config.apiKey.length === 0)) {
127
+ js_1.default.configure(config);
128
+ js_1.default.setContext({
129
+ queue: batch.queue,
130
+ messageCount: batch.messages.length,
131
+ });
132
+ }
133
+ _a.label = 1;
134
+ case 1:
135
+ _a.trys.push([1, 3, , 4]);
136
+ return [4 /*yield*/, queueHandler_1(batch, env, ctx)];
137
+ case 2:
138
+ _a.sent();
139
+ return [3 /*break*/, 4];
140
+ case 3:
141
+ error_3 = _a.sent();
142
+ ctx.waitUntil(reportError(error_3));
143
+ throw error_3;
144
+ case 4: return [2 /*return*/];
145
+ }
146
+ });
147
+ }); });
148
+ return "continue";
149
+ }
150
+ if (name_1 === 'email') {
151
+ var emailHandler_1 = fn;
152
+ handler.email = (function (message, env, ctx) { return __awaiter(_this, void 0, void 0, function () {
153
+ var config, error_4;
154
+ return __generator(this, function (_a) {
155
+ switch (_a.label) {
156
+ case 0:
157
+ config = getConfig(env);
158
+ if (config.apiKey && (js_1.default.config.apiKey === undefined || js_1.default.config.apiKey.length === 0)) {
159
+ js_1.default.configure(config);
160
+ }
161
+ _a.label = 1;
162
+ case 1:
163
+ _a.trys.push([1, 3, , 4]);
164
+ return [4 /*yield*/, emailHandler_1(message, env, ctx)];
165
+ case 2:
166
+ _a.sent();
167
+ return [3 /*break*/, 4];
168
+ case 3:
169
+ error_4 = _a.sent();
170
+ ctx.waitUntil(reportError(error_4));
171
+ throw error_4;
172
+ case 4: return [2 /*return*/];
173
+ }
174
+ });
175
+ }); });
176
+ return "continue";
177
+ }
178
+ if (name_1 === 'tail') {
179
+ var tailHandler_1 = fn;
180
+ handler.tail = (function (events, env, ctx) { return __awaiter(_this, void 0, void 0, function () {
181
+ var config, error_5;
182
+ return __generator(this, function (_a) {
183
+ switch (_a.label) {
184
+ case 0:
185
+ config = getConfig(env);
186
+ if (config.apiKey && (js_1.default.config.apiKey === undefined || js_1.default.config.apiKey.length === 0)) {
187
+ js_1.default.configure(config);
188
+ }
189
+ _a.label = 1;
190
+ case 1:
191
+ _a.trys.push([1, 3, , 4]);
192
+ return [4 /*yield*/, tailHandler_1(events, env, ctx)];
193
+ case 2:
194
+ _a.sent();
195
+ return [3 /*break*/, 4];
196
+ case 3:
197
+ error_5 = _a.sent();
198
+ ctx.waitUntil(reportError(error_5));
199
+ throw error_5;
200
+ case 4: return [2 /*return*/];
201
+ }
202
+ });
203
+ }); });
204
+ }
205
+ };
206
+ for (var _i = 0, HANDLER_NAMES_1 = HANDLER_NAMES; _i < HANDLER_NAMES_1.length; _i++) {
207
+ var name_1 = HANDLER_NAMES_1[_i];
208
+ _loop_1(name_1);
209
+ }
210
+ return handler;
211
+ }
212
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@honeybadger-io/cloudflare",
3
+ "version": "0.2.0",
4
+ "description": "Cloudflare Workers integration for Honeybadger",
5
+ "keywords": [
6
+ "cloudflare",
7
+ "honeybadger"
8
+ ],
9
+ "files": [
10
+ "./dist"
11
+ ],
12
+ "author": "Pangratios Cosma <pangratios.cosma@honeybadger.io>",
13
+ "homepage": "https://github.com/honeybadger-io/honeybadger-js#readme",
14
+ "license": "MIT",
15
+ "main": "dist/index.js",
16
+ "module": "dist/index.js",
17
+ "types": "dist/index.d.ts",
18
+ "type": "module",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/honeybadger-io/honeybadger-js.git"
22
+ },
23
+ "scripts": {
24
+ "test": "jest --config jest.config.cjs",
25
+ "build": "tsc",
26
+ "clean": "rm -rf dist",
27
+ "build:clean": "npm run clean && npm run build"
28
+ },
29
+ "bugs": {
30
+ "url": "https://github.com/honeybadger-io/honeybadger-js/issues"
31
+ },
32
+ "dependencies": {
33
+ "@cloudflare/workers-types": "^4.20240208.0",
34
+ "@honeybadger-io/core": "^6.7.2",
35
+ "@honeybadger-io/js": "^6.12.3"
36
+ },
37
+ "devDependencies": {
38
+ "@types/jest": "^29.5.12",
39
+ "jest": "^29.7.0",
40
+ "ts-jest": "^29.1.2",
41
+ "typescript": "^5.3.3"
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "gitHead": "85f0fb17a3083737182ad3b00a51e47c3dc5d82f"
47
+ }