diff --git a/server/.env.example b/server/.env.example index 62dcff0a5..30f282292 100644 --- a/server/.env.example +++ b/server/.env.example @@ -6,3 +6,5 @@ DB_DOMAIN=example.com:1234/example_name AUTH0_DOMAIN=auth0-domain AUTH0_AUDIENCE=auth0-audience AUTH0_ISSUER=auth0-issuer + +SENTRY_DNS=https://some-val@sentry.io/some-id diff --git a/server/package-lock.json b/server/package-lock.json index b0b7a417c..b28917c2f 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -4,6 +4,63 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@sentry/core": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-4.1.1.tgz", + "integrity": "sha512-QJExTxZ1ZA5P/To5gOwd3sowukXW0N/Q9nfu8biRDNa+YURn6ElLjO0fD6eIBqX1f3npo/kTiWZwFBc7LXEzSg==", + "requires": { + "@sentry/hub": "4.1.1", + "@sentry/minimal": "4.1.1", + "@sentry/types": "4.1.0", + "@sentry/utils": "4.1.1" + } + }, + "@sentry/hub": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-4.1.1.tgz", + "integrity": "sha512-VmcZOgcbFjJzK1oQNwcFP/wgfoWQr24dFv1C0uwdXldNXx3mwyUVkomvklBHz90HwiahsI/gCc+ZmbC3ECQk2Q==", + "requires": { + "@sentry/types": "4.1.0", + "@sentry/utils": "4.1.1" + } + }, + "@sentry/minimal": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-4.1.1.tgz", + "integrity": "sha512-xRKWA46OGnZinJyTljDUel53emPP9mb/XNi/kF6SBaVDOUXl7HAB8kP7Bn7eLBwOanxN8PbYoAzh/lIQXWTmDg==", + "requires": { + "@sentry/hub": "4.1.1", + "@sentry/types": "4.1.0" + } + }, + "@sentry/node": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-4.1.1.tgz", + "integrity": "sha512-wbo8F2IqZW+exlOyQzQ7+bPNPXIYmG2g73ZgHFh0x3MHVOTSKgfiO3BzCqmFyUDhxqkEL23PQqLhM07GEtH3Bw==", + "requires": { + "@sentry/core": "4.1.1", + "@sentry/hub": "4.1.1", + "@sentry/types": "4.1.0", + "@sentry/utils": "4.1.1", + "cookie": "0.3.1", + "lsmod": "1.0.0", + "md5": "2.2.1", + "stack-trace": "0.0.10" + } + }, + "@sentry/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-4.1.0.tgz", + "integrity": "sha512-KY7B9wYs1NACHlYzG4OuP6k4uQJkyDPJppftjj3NJYShfwdDTO1I2Swkhhb5dJMEMMMpBJGxXmiqZ2mX5ErISQ==" + }, + "@sentry/utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-4.1.1.tgz", + "integrity": "sha512-XMvGqAWATBrRkOF0lkt0Ij8of2mRmp4WeFTUAgiKzCekxfUBLBaTb4wTaFXz1cnnnjVTwcAq72qBRMhHwQ0IIg==", + "requires": { + "@sentry/types": "4.1.0" + } + }, "@types/body-parser": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", @@ -1278,6 +1335,11 @@ "supports-color": "^2.0.0" } }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -1490,6 +1552,11 @@ "which": "^1.2.9" } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -2003,14 +2070,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2025,20 +2090,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2155,8 +2217,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2168,7 +2229,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2183,7 +2243,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2191,14 +2250,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2217,7 +2274,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -2298,8 +2354,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2311,7 +2366,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -2433,7 +2487,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2861,8 +2914,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-ci": { "version": "1.2.1", @@ -3324,6 +3376,11 @@ "very-fast-args": "^1.1.0" } }, + "lsmod": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz", + "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks=" + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -3361,6 +3418,16 @@ "dev": true, "optional": true }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -5201,6 +5268,11 @@ "tweetnacl": "~0.14.0" } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", diff --git a/server/package.json b/server/package.json index 0693cd562..b704fb069 100644 --- a/server/package.json +++ b/server/package.json @@ -16,6 +16,7 @@ "nodemon": "^1.18.4" }, "dependencies": { + "@sentry/node": "^4.1.1", "cors": "^2.8.4", "dotenv": "^6.0.0", "express": "^4.16.3", diff --git a/server/src/index.js b/server/src/index.js index 9901deb8d..799223ade 100644 --- a/server/src/index.js +++ b/server/src/index.js @@ -8,10 +8,15 @@ import jwt from 'express-jwt' import jwksRsa from 'jwks-rsa' import schema from './schema' +const Sentry = require('@sentry/node') // Initialise express const app = express() +// Initialising sentry +Sentry.init({ dsn: process.env.SENTRY_DNS }) +app.use(Sentry.Handlers.requestHandler()) + // Allow cross origing request app.use(cors()) /* ------------------------------------------------- @@ -63,6 +68,9 @@ app.use('/graphql', graphqlHTTP(req => { })) app.get('/playground', expressPlayground({ endpoint: '/graphql' })) +// Sentry error handling middleware +app.use(Sentry.Handlers.errorHandler()) + app.listen(process.env.PORT, () => { console.log(`Listening on port ${process.env.PORT}`) })