Skip to content

Avoid mutating defaultIntegrations on options object #9155

@pomSense

Description

@pomSense

Is there an existing issue for this?

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/serverless

SDK Version

7.73.0

Framework Version

7.73.0

Link to Sentry event

No response

SDK Setup

import * as Sentry from '@sentry/serverless'

Sentry.AWSLambda.init({
  dsn: 'https://xxxxxx@xxxxx.ingest.sentry.io/xxxxxx'
})

export const handler = Sentry.AWSLambda.wrapHandler(async (event: KinesisStreamEvent, context?: Context) => {
  return initialize(PIPELINES, OPTIONS).assemble(fromKinesisEventbridge(event)).tap(debug).through(toPromise)
})

Steps to Reproduce

  1. Use sentry with with following setup:
    • "@sentry/serverless": "^7.73.0"
    • "serverless": "3.19.0"
    • "serverless-offline": "8.8.0"
    • "serverless-webpack": "5.8.0"
    • "typescript": "4.4.4"
    • "webpack": "5.72.1"
  2. See setup below for webpack.config.js and serverless.yml
  3. Run functionyarn sls offline
  4. Call API

You will get the error below. I am able to run this perfectly fine with @sentry/node.

✖ Cannot set property defaultIntegrations of #<Object> which has only a getter
✖ TypeError: Cannot set property defaultIntegrations of #<Object> which has only a getter
      at eval (webpack-internal:///../../../.yarn/cache/@sentry-serverless-npm-7.73.0-40c75798c0-37a31236e7.zip/node_modules/@sentry/serverless/esm/awslambda.js:267:29)
      at Object.../../../.yarn/cache/@sentry-serverless-npm-7.73.0-40c75798c0-37a31236e7.zip/node_modules/@sentry/serverless/esm/awslambda.js (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:18530:1)
      at __webpack_require__ (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44652:41)
      at Object.../../../.yarn/cache/@sentry-serverless-npm-7.73.0-40c75798c0-37a31236e7.zip/node_modules/@sentry/serverless/esm/index.js (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:18902:18)
      at __webpack_require__ (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44652:41)
      at eval (webpack-internal:///./src/listener/index.ts:9:19)
      at Object../src/listener/index.ts (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:42002:1)
      at __webpack_require__ (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44652:41)
      at eval (webpack-internal:///./src/listener/test-listener.ts:9:9)
      at Object../src/listener/test-listener.ts (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:42200:1)
      at __webpack_require__ (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44652:41)
      at /Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44695:37
      at Object.<anonymous> (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44698:12)
      at Module._compile (node:internal/modules/cjs/loader:1105:14)
      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
      at Object.require$$0.Module._extensions..js (/Users/pom/Code/chaine/.pnp.cjs:102578:33)
      at Module.load (node:internal/modules/cjs/loader:981:32)
      at Function.require$$0.Module._load (/Users/pom/Code/chaine/.pnp.cjs:102415:14)
      at Module.require (node:internal/modules/cjs/loader:1005:19)
      at require (node:internal/modules/cjs/helpers:102:18)
      at /Users/pom/Code/chaine/.yarn/__virtual__/serverless-offline-virtual-f101cf6249/0/cache/serverless-offline-npm-8.8.0-0905a4015f-cc9ebc2016.zip/node_modules/serverless-offline/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js:166:133
      at runMicrotasks (<anonymous>)
      at processTicksAndRejections (node:internal/process/task_queues:96:5)
      at async InProcessRunner.run (/Users/pom/Code/chaine/.yarn/__virtual__/serverless-offline-virtual-f101cf6249/0/cache/serverless-offline-npm-8.8.0-0905a4015f-cc9ebc2016.zip/node_modules/serverless-offline/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js:166:9)

webpack.config.js:

// webpack.config.js
/* eslint-disable @typescript-eslint/no-var-requires */
const path = require('path')
const slsw = require('serverless-webpack')
const nodeExternals = require('webpack-node-externals')
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin')
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')
const isLocal = slsw.lib.webpack.isLocal

module.exports = {
  mode: isLocal ? 'development' : 'production',
  entry: slsw.lib.entries,
  externals: [
    // nodeExternals({
    //   allowlist: ['@chaine/core']
    // }),
    { 'aws-sdk': 'commonjs aws-sdk' }
  ],
  /** More on devtool source map options: https://webpack.js.org/configuration/devtool/ */
  devtool: isLocal ? 'eval-cheap-module-source-map' : false,
  resolve: {
    extensions: ['.ts', '.js'],
    alias: {
      graphql$: require.resolve('graphql')
    },
    plugins: [new TsconfigPathsPlugin()]
  },

  output: {
    libraryTarget: 'commonjs2',
    path: path.join(__dirname, '.webpack'),
    filename: '[name].js'
  },
  target: 'node',
  stats: 'errors-only', // This surpresses warnings, such as, i.e. WARNING The requested module ... contains conflicting star exports for the name '__esModule' with the previous requested module ..
  // cache: {
  module: {
    rules: [
      {
        test: /\.(ts|js)x?$/,

        use: {
          // IMPORTANT: if you only put babel-loader here with NO options, then babel-loader will use .babelrc.
          // If you add options here, babel-loader will use configuration here and ignore .babelrc or babel.config.json
          loader: require.resolve('babel-loader'),
          options: {
            cacheCompression: false,
            cacheDirectory: path.resolve(__dirname, '.webpackCache')
          }
        }
      }
    ]
  },
  plugins: [new ForkTsCheckerWebpackPlugin()],
  optimization: isLocal // Don't need minify for local which is very slow when running local server and making changes
    ? {}
    : {
        minimize: true,
        minimizer: [
          new TerserPlugin({
            terserOptions: {
              ecma: undefined,
              parse: {},
              compress: {},
              mangle: true, // Note `mangle.properties` is `false` by default.
              module: false,
              // Deprecated
              output: null,
              format: null,
              toplevel: false,
              nameCache: null,
              ie8: false,
              keep_classnames: true,
              keep_fnames: false,
              safari10: false
            }
          })
        ]
      }
}

serverless.yml

app: my-app
service: ${self:app}-service

custom:
  webpack:
    excludeFiles: ['src/**/*.d.ts.map', 'src/**/*.d.ts', 'src/**/*.test.ts']
    webpackConfig: 'webpack.config.js'
    concurrency: 1 # set to 1 due to GitHub's 2-core runners to prevent OOM
    serializedCompile: true # backward compatible, this translates to concurrency: 1
    packager: 'yarn'
    noInstall: true
    includeModules:
      forceExclude:
        - 'aws-sdk'

provider:
  name: aws
  runtime: nodejs16.x
  region: us-east-1

functions:
  my-test-handler:
    handler: src/test-handler.handler
    events:
      - HTTP:
          path: test-handler
          method: POST
          cors: true

plugins:
  - serverless-webpack
  - serverless-offline
  - 
package:
  individually: true

Expected Result

Should not result in an error when initializing sentry.

Actual Result

✖ Cannot set property defaultIntegrations of #<Object> which has only a getter
✖ TypeError: Cannot set property defaultIntegrations of #<Object> which has only a getter
      at eval (webpack-internal:///../../../.yarn/cache/@sentry-serverless-npm-7.73.0-40c75798c0-37a31236e7.zip/node_modules/@sentry/serverless/esm/awslambda.js:267:29)
      at Object.../../../.yarn/cache/@sentry-serverless-npm-7.73.0-40c75798c0-37a31236e7.zip/node_modules/@sentry/serverless/esm/awslambda.js (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:18530:1)
      at __webpack_require__ (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44652:41)
      at Object.../../../.yarn/cache/@sentry-serverless-npm-7.73.0-40c75798c0-37a31236e7.zip/node_modules/@sentry/serverless/esm/index.js (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:18902:18)
      at __webpack_require__ (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44652:41)
      at eval (webpack-internal:///./src/listener/index.ts:9:19)
      at Object../src/listener/index.ts (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:42002:1)
      at __webpack_require__ (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44652:41)
      at eval (webpack-internal:///./src/listener/test-listener.ts:9:9)
      at Object../src/listener/test-listener.ts (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:42200:1)
      at __webpack_require__ (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44652:41)
      at /Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44695:37
      at Object.<anonymous> (/Users/pom/Code/chaine/packages/silkroad/bff-booking/.webpack/service/src/listener/test-listener.js:44698:12)
      at Module._compile (node:internal/modules/cjs/loader:1105:14)
      at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
      at Object.require$$0.Module._extensions..js (/Users/pom/Code/chaine/.pnp.cjs:102578:33)
      at Module.load (node:internal/modules/cjs/loader:981:32)
      at Function.require$$0.Module._load (/Users/pom/Code/chaine/.pnp.cjs:102415:14)
      at Module.require (node:internal/modules/cjs/loader:1005:19)
      at require (node:internal/modules/cjs/helpers:102:18)
      at /Users/pom/Code/chaine/.yarn/__virtual__/serverless-offline-virtual-f101cf6249/0/cache/serverless-offline-npm-8.8.0-0905a4015f-cc9ebc2016.zip/node_modules/serverless-offline/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js:166:133
      at runMicrotasks (<anonymous>)
      at processTicksAndRejections (node:internal/process/task_queues:96:5)
      at async InProcessRunner.run (/Users/pom/Code/chaine/.yarn/__virtual__/serverless-offline-virtual-f101cf6249/0/cache/serverless-offline-npm-8.8.0-0905a4015f-cc9ebc2016.zip/node_modules/serverless-offline/dist/lambda/handler-runner/in-process-runner/InProcessRunner.js:166:9)

Metadata

Metadata

Assignees

Labels

Package: serverlessIssues related to the Sentry Serverless SDK

Projects

Status

No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions