import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step'; import type { Docs, DocsParams, OnboardingConfig, } from 'sentry/components/onboarding/gettingStartedDoc/types'; import {getUploadSourceMapsStep} from 'sentry/components/onboarding/gettingStartedDoc/utils'; import { getCrashReportJavaScriptInstallStep, getCrashReportModalConfigDescription, getCrashReportModalIntroduction, } from 'sentry/components/onboarding/gettingStartedDoc/utils/feedbackOnboarding'; import {getJSServerMetricsOnboarding} from 'sentry/components/onboarding/gettingStartedDoc/utils/metricsOnboarding'; import {t, tct} from 'sentry/locale'; import {trackAnalytics} from 'sentry/utils/analytics'; import {getInstallConfig, getSdkInitSnippet} from 'sentry/utils/gettingStartedDocs/node'; import { InstallationMode, platformOptions, } from 'sentry/views/onboarding/integrationSetup'; type PlatformOptions = typeof platformOptions; type Params = DocsParams; const getSdkSetupSnippet = (params: Params) => ` // IMPORTANT: Make sure to import and initialize Sentry at the top of your file. ${getSdkInitSnippet(params, 'aws')} // Place any other require/import statements here exports.handler = Sentry.wrapHandler(async (event, context) => { // Your handler code });`; const getVerifySnippet = () => ` exports.handler = Sentry.wrapHandler(async (event, context) => { throw new Error("This should show up in Sentry!") });`; const getMetricsConfigureSnippet = (params: DocsParams) => ` Sentry.init({ dsn: "${params.dsn.public}", // Only needed for SDK versions < 8.0.0 // _experiments: { // metricsAggregator: true, // }, });`; const onboarding: OnboardingConfig = { introduction: () => tct('In this quick guide you’ll use [strong:npm] or [strong:yarn] to set up:', { strong: , }), install: params => [ { type: StepType.INSTALL, description: t('Add the Sentry AWS Serverless SDK as a dependency:'), configurations: getInstallConfig(params, { basePackage: '@sentry/aws-serverless', }), }, ], configure: params => [ { type: StepType.CONFIGURE, description: tct( "Ensure that Sentry is imported and initialized at the beginning of your file, prior to any other [code:require] or [code:import] statements. Then, wrap your lambda handler with Sentry's [code:wraphandler] function:", { code: , } ), configurations: [ { language: 'javascript', code: getSdkSetupSnippet(params), }, ], }, getUploadSourceMapsStep({ guideLink: 'https://docs.sentry.io/platforms/javascript/guides/aws-lambda/sourcemaps/', ...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(), }, ], }, ], onPlatformOptionsChange(params) { return option => { if (option.installationMode === InstallationMode.MANUAL) { trackAnalytics('integrations.switch_manual_sdk_setup', { integration_type: 'first_party', integration: 'aws_lambda', view: 'onboarding', organization: params.organization, }); } }; }, }; const customMetricsOnboarding: OnboardingConfig = { install: params => [ { type: StepType.INSTALL, description: tct( 'You need a minimum version [code:8.0.0] of [code:@sentry/aws-serverless]:', { code: , } ), configurations: getInstallConfig(params, { basePackage: '@sentry/aws-serverless', }), }, ], configure: params => [ { type: StepType.CONFIGURE, description: t( 'With the default snippet in place, there is no need for any further configuration.' ), configurations: [ { code: getMetricsConfigureSnippet(params), language: 'javascript', }, ], }, ], verify: getJSServerMetricsOnboarding().verify, }; const crashReportOnboarding: OnboardingConfig = { introduction: () => getCrashReportModalIntroduction(), install: (params: Params) => getCrashReportJavaScriptInstallStep(params), configure: () => [ { type: StepType.CONFIGURE, description: getCrashReportModalConfigDescription({ link: 'https://docs.sentry.io/platforms/javascript/guides/aws-lambda/user-feedback/configuration/#crash-report-modal', }), }, ], verify: () => [], nextSteps: () => [], }; const docs: Docs = { onboarding, customMetricsOnboarding, crashReportOnboarding, platformOptions, }; export default docs;