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 {ProductSolution} from 'sentry/components/onboarding/productSelection';
import {t, tct} from 'sentry/locale';
import type {ProductSelectionMap} from 'sentry/utils/gettingStartedDocs/node';
import {
getDefaulServerlessImports,
getInstallConfig,
} from 'sentry/utils/gettingStartedDocs/node';
type Params = DocsParams;
const productSelection = (params: Params): ProductSelectionMap => {
return {
[ProductSolution.ERROR_MONITORING]: true,
[ProductSolution.PROFILING]: params.isProfilingSelected,
[ProductSolution.PERFORMANCE_MONITORING]: params.isPerformanceSelected,
[ProductSolution.SESSION_REPLAY]: params.isReplaySelected,
};
};
const getSdkSetupSnippet = (params: Params) => `
${getDefaulServerlessImports({productSelection: productSelection(params)}).join('\n')}
Sentry.AWSLambda.init({
dsn: "${params.dsn}",
integrations: [${
params.isProfilingSelected
? `
nodeProfilingIntegration(),`
: ''
}
],${
params.isPerformanceSelected
? `
// Performance Monitoring
tracesSampleRate: 1.0, // Capture 100% of the transactions`
: ''
}${
params.isProfilingSelected
? `
// Set sampling rate for profiling - this is relative to tracesSampleRate
profilesSampleRate: 1.0,`
: ''
}
});
exports.handler = Sentry.AWSLambda.wrapHandler(async (event, context) => {
// Your handler code
});`;
const getVerifySnippet = () => `
exports.handler = Sentry.AWSLambda.wrapHandler(async (event, context) => {
throw new Error("This should show up in Sentry!")
});`;
const getMetricsConfigureSnippet = (params: DocsParams) => `
Sentry.AWSLambda.init({
dsn: "${params.dsn}",
_experiments: {
metricsAggregator: true,
},
});`;
const onboarding: OnboardingConfig = {
install: params => [
{
type: StepType.INSTALL,
description: t('Add the Sentry Serverless SDK as a dependency:'),
configurations: getInstallConfig(params, {
basePackage: '@sentry/serverless',
}),
},
],
configure: params => [
{
type: StepType.CONFIGURE,
description: tct(
"Wrap your lambda handler with Sentry's [code:wraphandler] function:",
{
code:
,
}
),
configurations: [
{
language: 'javascript',
code: getSdkSetupSnippet(params),
},
],
},
getUploadSourceMapsStep({
guideLink: 'https://docs.sentry.io/platforms/node/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(),
},
],
},
],
};
const customMetricsOnboarding: OnboardingConfig = {
install: params => [
{
type: StepType.INSTALL,
description: tct(
'You need a minimum version [codeVersion:7.91.0] of [codePackage:@sentry/serverless]:',
{
codeVersion:
,
codePackage:
,
}
),
configurations: getInstallConfig(params, {
basePackage: '@sentry/serverless',
}),
},
],
configure: params => [
{
type: StepType.CONFIGURE,
description: tct(
'To enable capturing metrics, you first need to add the [codeIntegration:metricsAggregator] experiment to your [codeNamespace:Sentry.init] call in your main process.',
{
codeIntegration:
,
codeNamespace:
,
}
),
configurations: [
{
code: [
{
label: 'JavaScript',
value: 'javascript',
language: 'javascript',
code: getMetricsConfigureSnippet(params),
},
],
},
],
},
],
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/node/guides/aws-lambda/user-feedback/configuration/#crash-report-modal',
}),
},
],
verify: () => [],
nextSteps: () => [],
};
const docs: Docs = {
onboarding,
customMetricsOnboarding,
crashReportOnboarding,
};
export default docs;