import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step'; import type { Docs, DocsParams, OnboardingConfig, } from 'sentry/components/onboarding/gettingStartedDoc/types'; import {CrashReportWebApiOnboarding} from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding'; import {t, tct} from 'sentry/locale'; type Params = DocsParams; const getSdkSetupSnippet = (params: Params) => ` const api = require("@serverless/cloud"); const Sentry = require('@sentry/node'); // or using ESM // import api from "@serverless/cloud"; // import * as Sentry from "@sentry/node"; Sentry.init({ dsn: "${params.dsn}", integrations: [ // enable HTTP calls tracing new Sentry.Integrations.Http({ tracing: true }), // enable Express.js middleware tracing new Sentry.Integrations.Express({ app }), // Automatically instrument Node.js libraries and frameworks ...Sentry.autoDiscoverNodePerformanceMonitoringIntegrations(), ], environment: params.INSTANCE_NAME, // Performance Monitoring // Capture 100% of the transactions tracesSampleRate: 1.0, }); // RequestHandler creates a separate execution context, so that all // transactions/spans/breadcrumbs are isolated across requests api.use(Sentry.Handlers.requestHandler()); // TracingHandler creates a trace for every incoming request api.use(Sentry.Handlers.tracingHandler()); // All controllers should live here api.get("/", function rootHandler(req, res) { res.end("Hello world!"); }); // The error handler must be before any other error middleware and after all controllers api.use(Sentry.Handlers.errorHandler()); // Optional fallthrough error handler api.use(function onError(err, req, res, next) { // The error id is attached to \`res.sentry\` to be returned // and optionally displayed to the user for support. res.statusCode = 500; res.end(res.sentry + "\\n"); });`; const getVerifySnippet = () => ` api.get("/debug-sentry", function mainHandler(req, res) { throw new Error("My first Sentry error!"); }); `; const onboarding: OnboardingConfig = { install: () => [ { type: StepType.INSTALL, description: tct('Add [code:@sentry/node] as a dependency:', {code: }), configurations: [ { language: 'bash', code: `cloud install @sentry/node:`, }, ], }, ], configure: params => [ { type: StepType.CONFIGURE, description: t('Sentry should be initialized as early in your app as possible.'), configurations: [ { language: 'javascript', code: getSdkSetupSnippet(params), }, ], }, ], verify: () => [ { type: StepType.VERIFY, description: t( "This snippet contains an intentional error and can be used as a test to make sure that everything's working as expected." ), configurations: [ { language: 'javascript', code: getVerifySnippet(), }, ], }, ], }; const docs: Docs = { onboarding, crashReportOnboarding: CrashReportWebApiOnboarding, }; export default docs;