sentry-javascript icon indicating copy to clipboard operation
sentry-javascript copied to clipboard

Sourcemaps not showing correct file names in stack trace

Open jacklovett opened this issue 3 years ago • 30 comments

Version

22.3.0

Steps to Reproduce

I have a typescript (4.1.2), react (17.0.2) web application using webpack (5.24.3). I have been following provided instructions to get source maps to work but have had no luck.

Our application uses a basename in our urls which i suspect is the complication here. We use the version (v1.0.4 for example) of the application like this: http://localhost:8080/v1.0.4/index.html

Source maps work when running in the browser, I can open up dev tools and see the lines and the correct file names that everything happens. However, once i upload the source maps to Sentry the stack trace just says /v1.0.4/main.js.

I am using the webpack plug (SentryWebpackPlugin). I am using the urlPrefix to try and solve the /v1.0.4 difference. I see the source maps stored in the releases archive. They are stored as ~/v1.0.4/main.js ~/v1.0.4/main.js.map etc. as i expected. Here is my webpack.config.js

/* eslint-disable @typescript-eslint/no-var-requires */
const HtmlWebpackPlugin = require("html-webpack-plugin");
const {
    ServiceWorkerBuilderPlugin,
} = require("./node_modules/@integrations/web-core/lib/ServiceWorkerBuilderPlugin.js");
const SentryWebpackPlugin = require("@sentry/webpack-plugin");

const path = require("path");
const webpack = require("webpack");

require("dotenv").config();

const defaultConfig = {
    entry: "./src/index.tsx",
    module: {
        rules: [
            {
                test: /\.(ts|tsx|js|jsx)?$/,
                exclude: [path.resolve(__dirname, "test")],
                loader: require.resolve("babel-loader"),
            },
            {
                test: /\.(scss|css)$/,
                use: ["style-loader", "css-loader", "sass-loader"],
            },
            {
                test: /\.(png|svg|jpg|gif|jpeg)$/,
                use: [
                    {
                        options: {
                            name: "[name].[ext]",
                            outputPath: "assets/img",
                        },
                        loader: "file-loader",
                    },
                ],
            },
            {
                test: /\.(ttf)$/,
                use: [
                    {
                        options: {
                            name: "[name].[ext]",
                            outputPath: "assets/fonts",
                        },
                        loader: "file-loader",
                    },
                ],
            },
            {
                test: /\.(mp3)$/,
                use: [
                    {
                        options: {
                            name: "[name].[ext]",
                            outputPath: "assets/tracks",
                        },
                        loader: "file-loader",
                    },
                ],
            },
        ],
    },

    output: {
        filename: "main.js",
        path: path.resolve(__dirname, "dist"),
        clean: true,
    },

    plugins: [
        new HtmlWebpackPlugin({
            template: "./src/index.html",
        }),
        new ServiceWorkerBuilderPlugin({
            inputFile: "./src/service-worker.js",
            outputFile: "service-worker.js",
        }),
        new webpack.EnvironmentPlugin({
            SENTRY_DSN: process.env.SENTRY_DSN ?? "",
            SENTRY_AUTH_TOKEN: process.env.SENTRY_AUTH_TOKEN ?? "",
            SENTRY_DISABLED: process.env.SENTRY_DISABLED ?? "",
            ANALYTICS_DISABLED: process.env.ANALYTICS_DISABLED ?? "",
        }),
    ],
    resolve: {
        modules: [__dirname, "src", "node_modules"],
        extensions: ["*", ".js", ".jsx", ".tsx", ".ts"],
        alias: {
            react: path.resolve("./node_modules/react"),
        },
    },
    devtool: "source-map",
};

const getSentryPlugin = (buildDir) => {
    const isSentryDisabled =
        !process.env.SENTRY_AUTH_TOKEN ||
        !process.env.SENTRY_DSN ||
        !process.env.SENTRY_DISABLED ||
        process.env.SENTRY_DISABLED?.toLowerCase() === "true";

    const release = process.env.RELEASE ?? "v1.0.4";

    // check release commit is tagged version, only then create release in Sentry
    const canCreateSentryRelease = validatedRelease(release);

    return !isSentryDisabled && canCreateSentryRelease
        ? [
              new SentryWebpackPlugin({
                  org: "org-name",
                  url: "https://sentry.org-name.com",
                  release,
                  authToken: process.env.SENTRY_AUTH_TOKEN,
                  project: "project-name",
                  include: [buildDir, "src"],
                  ext: [".js", ".jsx", ".tsx", ".ts", ".map"],
                  ignore: [
                      "node_modules",
                      "webpack.config.js",
                      "plopfile.js",
                      "output",
                      "test",
                  ],
                  dist: release,
                  urlPrefix: `~/${release}`,
              }),
          ]
        : [];
};

const generateConfig = (mode) => {
    return mode === "production"
        ? {
              ...defaultConfig,
              mode,
              plugins: defaultConfig.plugins.concat(
                  getSentryPlugin("dist_dev")
              ),
          }
        : {
              ...defaultConfig,
              mode,
              output: {
                  ...defaultConfig.output,
                  path: path.resolve(__dirname, "dist_dev"),
              },
              plugins: defaultConfig.plugins.concat(
                  getSentryPlugin("dist_dev")
              ),
              devServer: {
                  historyApiFallback: true,
                  publicPath: "/v1.0.4/",
                  openPage: "v1.0.4/index.html",
                  contentBase: path.resolve(__dirname, "dist_dev"),
                  hot: true,
                  open: true,
              },
          };
};

const createRegex = (regex) => new RegExp(regex);

const validatedRelease = (release) => {
    if (!release) {
        return false;
    }

    const commitTagRegex = createRegex("^v\\d+\\.\\d+\\.\\d+$");
    const abVersionRegex = createRegex("^@[a-z0-9_]+$");

    const isValidTaggedVersion = commitTagRegex.test(release);
    const isValidABVersion = abVersionRegex.test(release);

    return isValidTaggedVersion || isValidABVersion;
};

module.exports = (env, options) => generateConfig(options.mode);

Here is my simplified Sentry.init call:

Sentry.init({
                dsn: sentryDsn,
                integrations: [
                    new Integrations.BrowserTracing({
                        routingInstrumentation:
                            Sentry.reactRouterV5Instrumentation(this._history),
                    }),
                    new Offline(),
                ],
                release: version,
                environment,
                debug: environment === "development"
            });

Expected Result

To see in the "EXCEPTION" section of the issues, the correct file names and exact lines where the calls were made.

Actual Result

What I see in the issues Exception section: image What i see in Archive for the release version: image

jacklovett avatar May 25 '22 10:05 jacklovett

Bumping this over to sentry-javascript repo as this seems to have more to do with sourcemaps than with self-hosted (could be wrong).

chadwhitacre avatar May 31 '22 14:05 chadwhitacre

Hi @jacklovett, can you try using sentry-cli sourcemaps explain --help with the newest version of the Sentry CLI to troubleshoot your issue?

lforst avatar May 31 '22 15:05 lforst

Hi @jacklovett, can you try using sentry-cli sourcemaps explain --help with the newest version of the Sentry CLI to troubleshoot your issue?

Hi @lforst, I am using the SentryWebpackPlugin instead of the sentry-cli. I don't see an option for explain -- help. Maybe you can explain more how i can achieve this? Thanks!

jacklovett avatar Jun 01 '22 05:06 jacklovett

If you dont want to install it globally, run npx @sentry/cli sourcemaps explain <EVENT_ID>

kamilogorek avatar Jun 01 '22 09:06 kamilogorek

Sorry, i need more information than this. I am not using sentry-cli and i do not know what sentry-cli sourcemaps explain is or how to use it for my use case.

jacklovett avatar Jun 01 '22 11:06 jacklovett

Oh ok, let me be more explicit then. sentry-cli is our automated tool to work with source maps, debug symbols, and the Sentry itself. You can find installation and configuration guides here https://docs.sentry.io/product/cli/

Once you have it installed (or as mentioned above, you can use npx to not install it permanently, but rather use it ad-hoc), and configured with your authentication token, you can use the command mentioned above sourcemaps explain and provide it with the even ID that is not resolved correctly.

You can find this ID on the event page at the top, it looks like that: image

So in this case you'd call it with sentry-cli sourcemaps explain 7bd9e01ca79e4922a560adfd7862d77e.

This command should walk through all verification steps for you and tell you where the mistake is. Alternatively you can do all the checks yourself, base on this guide: https://docs.sentry.io/platforms/javascript/sourcemaps/troubleshooting_js/

kamilogorek avatar Jun 01 '22 11:06 kamilogorek

hmm...every event i try cannot be retrieved giving 404 error. I am using the following command: npx @sentry/cli sourcemaps explain d9205b144eb54e1783a3ce954cf4d1e6 The event id is taken from the place that you showed in your screenshot. Error:

  DEBUG   2022-06-01 15:17:54.783919 +03:00 > Connection: TE
  DEBUG   2022-06-01 15:17:54.783939 +03:00 > TE: gzip
  DEBUG   2022-06-01 15:17:54.783958 +03:00 > User-Agent: sentry-cli/2.1.0
  DEBUG   2022-06-01 15:17:54.785034 +03:00 > Authorization: Bearer bc56ff16***
  DEBUG   2022-06-01 15:17:55.091700 +03:00 < HTTP/1.1 404 Not Found
  DEBUG   2022-06-01 15:17:55.091806 +03:00 < Server: nginx/1.17.10
  DEBUG   2022-06-01 15:17:55.091837 +03:00 < Date: Wed, 01 Jun 2022 12:17:55 GMT
  DEBUG   2022-06-01 15:17:55.091865 +03:00 < Content-Type: application/json
  DEBUG   2022-06-01 15:17:55.091894 +03:00 < Content-Length: 50
  DEBUG   2022-06-01 15:17:55.091921 +03:00 < Connection: keep-alive
  DEBUG   2022-06-01 15:17:55.091944 +03:00 < Allow: GET, HEAD, OPTIONS
  DEBUG   2022-06-01 15:17:55.091969 +03:00 < Access-Control-Allow-Methods: GET, HEAD, OPTIONS
  DEBUG   2022-06-01 15:17:55.092018 +03:00 < Access-Control-Allow-Headers: X-Sentry-Auth, X-Requested-With, Origin, Accept, Content-Type, Authentication, Authorization, Content-Encoding
  DEBUG   2022-06-01 15:17:55.092053 +03:00 < Access-Control-Expose-Headers: X-Sentry-Error, Retry-After
  DEBUG   2022-06-01 15:17:55.092080 +03:00 < Access-Control-Allow-Origin: *
  DEBUG   2022-06-01 15:17:55.092105 +03:00 < X-Sentry-Rate-Limit-Remaining: 569
  DEBUG   2022-06-01 15:17:55.092131 +03:00 < X-Sentry-Rate-Limit-Limit: 570
  DEBUG   2022-06-01 15:17:55.092394 +03:00 < X-Sentry-Rate-Limit-Reset: 1654085876
  DEBUG   2022-06-01 15:17:55.092444 +03:00 < Vary: Accept-Language, Cookie
  DEBUG   2022-06-01 15:17:55.092469 +03:00 < Content-Language: en
  DEBUG   2022-06-01 15:17:55.092491 +03:00 < X-Frame-Options: deny
  DEBUG   2022-06-01 15:17:55.092516 +03:00 < X-Content-Type-Options: nosniff
  DEBUG   2022-06-01 15:17:55.092538 +03:00 < X-XSS-Protection: 1; mode=block
  DEBUG   2022-06-01 15:17:55.092564 +03:00 < Strict-Transport-Security: max-age=15724800; includeSubDomains
  DEBUG   2022-06-01 15:17:55.092697 +03:00 response status: 404
✖ Could not retrieve event d9205b144eb54e1783a3ce954cf4d1e6
ℹ Make sure that event ID you used is valid.```

jacklovett avatar Jun 01 '22 12:06 jacklovett

It looks like you are using on-premise instance? (base on https://sentry.org-name.com listed above). In case you do, you need to update SENTRY_URL as well - https://docs.sentry.io/product/cli/configuration/#configuration-file Otherwise it's querying sentry.io

kamilogorek avatar Jun 01 '22 12:06 kamilogorek

I had updated the url in my .sentryclirc file to use the correct on-premise instance.

jacklovett avatar Jun 01 '22 12:06 jacklovett

This issue has gone three weeks without activity. In another week, I will close it.

But! If you comment or otherwise update it, I will reset the clock, and if you label it Status: Backlog or Status: In Progress, I will leave it alone ... forever!


"A weed is but an unloved flower." ― Ella Wheeler Wilcox 🥀

github-actions[bot] avatar Jun 23 '22 00:06 github-actions[bot]

As stated this was the outcome when using the correct on-premise Sentry url. Any other ideas why i would get this error when trying to check the events? :/

jacklovett avatar Jun 23 '22 21:06 jacklovett

@jacklovett Can you share the comment at the bottom of your minified file? Also, what version of self hosted sentry are you on?

lforst avatar Jun 24 '22 07:06 lforst

The comment is: //# sourceMappingURL=main.js.map We are using self hosted version: 22.3.0

jacklovett avatar Jul 11 '22 06:07 jacklovett

I am still waiting some help on this. Does my comment and self hosted version help in investigation?

jacklovett avatar Aug 09 '22 09:08 jacklovett

Can you paste what the raw stacktrace looks like in your event? Thanks!

You might need to use the RewriteFrames integration to match up with the source maps.

lforst avatar Aug 12 '22 07:08 lforst

Where can i get the raw stacktrace?

I suspect RewriteFrames might lead to a solution however i am still confused about how it works. Are there more examples of use cases?

jacklovett avatar Aug 22 '22 06:08 jacklovett

Where can i get the raw stacktrace?

There's a button above the stack trace in the sentry interface:

170231508-958c75b9-1ff6-4bcf-ad44-fddf61dee0fd

lforst avatar Aug 29 '22 08:08 lforst

Here is an example of our raw stack traces:

Error: RuntimeException
  at new e(/v1.13.79/main.js:2:198930)
  at e.createAsyncOperation(/v1.13.79/main.js:2:200058)
  at ? (/v1.13.79/main.js:2:199430)
  at new Promise(<anonymous>)
  at e.create(/v1.13.79/main.js:2:199395)
  at e.<anonymous>(/v1.13.79/main.js:2:123096)
  at ? (/v1.13.79/main.js:2:120862)
  at Object.next(/v1.13.79/main.js:2:120967)
  at ? (/v1.13.79/main.js:2:119879)
  at new Promise(<anonymous>)
  at r(/v1.13.79/main.js:2:119624)
  at e.uploadProfile(/v1.13.79/main.js:2:122994)
  at t.<anonymous>(/v1.13.79/main.js:2:41927)
  at ? (/v1.13.79/main.js:2:39233)
  at Object.next(/v1.13.79/main.js:2:39338)
  at ? (/v1.13.79/main.js:2:38250)
  at new Promise(<anonymous>)
  at o(/v1.13.79/main.js:2:37995)
  at t.uploadProfile(/v1.13.79/main.js:2:41815)
  at t.<anonymous>(/v1.13.79/main.js:2:110805)
  at ? (/v1.13.79/main.js:2:102922)
  at Object.next(/v1.13.79/main.js:2:103027)
  at i(/v1.13.79/main.js:2:101741)

jacklovett avatar Aug 29 '22 10:08 jacklovett

We finally spotted what might be causing the issue. You seem to be setting the dist flag in the webpack plugin. If you're setting a dist for release artifacts, you must also set the same dist in the Sentry.init() options for the created events to be associated with those artifacts.

If you don't have an actual use for the dist value (maybe you just happened to set it to try it out), I recommend removing that flag from the plugin options altogether.

If that still doesn't fix the problem, two more things:

  • Would you mind sharing the event payload JSON? It helps massively while debugging sourcemap issues.
  • Have you set up the rewrite frames integration in the meanwhile? The file paths in the stacktrace you shared look a bit short (not entirely sure about this though).

You can find the event payload JSON here:

Screen Shot 2022-08-29 at 20 35 48

lforst avatar Aug 29 '22 18:08 lforst

Isn't the dist flag how we upload release artifacts? And it is these release artifacts which are used for handling the sourcemaps?

I have not used rewrite frames as i don't understand how it is meant to be used. The examples in the documentation didn't make it clear how to use this integration for our use case.

jacklovett avatar Aug 30 '22 09:08 jacklovett

Isn't the dist flag how we upload release artifacts?

The dist flag isn't required at all. You can use the dist flag to segment your release files on a more granular level. This is in the most cases not relevant for JS projects but mobile apps and stuff like that. For example if you have the same app for android and for ios, and the source files of the two apps are all called the same but have different content depending on the platform, you can use the dist flag to discern between ios files and android files.

And it is these release artifacts which are used for handling the sourcemaps?

I don't quite understand the question you're asking here.

lforst avatar Aug 30 '22 09:08 lforst

If i do not use the dist flag, then I do not see uploaded artifacts present for my release. I am under the impression that these artifacts are needed to revert the sourcemaps in the desired way. Maybe I am wrong?

jacklovett avatar Aug 30 '22 10:08 jacklovett

If i do not use the dist flag, then I do not see uploaded artifacts present for my release.

That doesn't sound right. Is there anything in the logs?

I am under the impression that these artifacts are needed to revert the sourcemaps in the desired way. Maybe I am wrong?

Yeah, we need the artifacts so the minified code can be deminified. The dist option, however, should not have an effect on what files are uploaded.

Can you paste here what your webpack config + Sentry.init looks like after you did the change I suggested?

lforst avatar Aug 30 '22 13:08 lforst

Its basically the same, just without dist. There was a mistake in my previous test, artifacts do still appear when not using dist. But it did not solve the problem.

Here is the webpack config:

/* eslint-disable @typescript-eslint/no-var-requires */
const HtmlWebpackPlugin = require("html-webpack-plugin");
const {
    ServiceWorkerBuilderPlugin,
} = require("./node_modules/@integrations/web-core/lib/ServiceWorkerBuilderPlugin.js");
const SentryWebpackPlugin = require("@sentry/webpack-plugin");

const path = require("path");
const webpack = require("webpack");

require("dotenv").config();

const defaultConfig = {
    entry: "./src/index.tsx",
    module: {
        rules: [
            {
                test: /\.(ts|tsx|js|jsx)?$/,
                exclude: [path.resolve(__dirname, "test")],
                loader: require.resolve("babel-loader"),
            },
            {
                test: /\.(scss|css)$/,
                use: ["style-loader", "css-loader", "sass-loader"],
            },
            {
                test: /\.(png|svg|jpg|gif|jpeg)$/,
                use: [
                    {
                        options: {
                            name: "[name].[ext]",
                            outputPath: "assets/img",
                        },
                        loader: "file-loader",
                    },
                ],
            },
            {
                test: /\.(ttf)$/,
                use: [
                    {
                        options: {
                            name: "[name].[ext]",
                            outputPath: "assets/fonts",
                        },
                        loader: "file-loader",
                    },
                ],
            },
            {
                test: /\.(mp3)$/,
                use: [
                    {
                        options: {
                            name: "[name].[ext]",
                            outputPath: "assets/tracks",
                        },
                        loader: "file-loader",
                    },
                ],
            },
        ],
    },

    output: {
        filename: "main.js",
        path: path.resolve(__dirname, "dist"),
        clean: true,
    },

    plugins: [
        new HtmlWebpackPlugin({
            template: "./src/index.html",
        }),
        new ServiceWorkerBuilderPlugin({
            inputFile: "./src/service-worker.js",
            outputFile: "service-worker.js",
        }),
        new webpack.EnvironmentPlugin({
            SENTRY_DSN: process.env.SENTRY_DSN ?? "",
            SENTRY_AUTH_TOKEN: process.env.SENTRY_AUTH_TOKEN ?? "",
            SENTRY_DISABLED: process.env.SENTRY_DISABLED ?? "",
            ANALYTICS_DISABLED: process.env.ANALYTICS_DISABLED ?? "",
        }),
    ],
    resolve: {
        modules: [__dirname, "src", "node_modules"],
        extensions: ["*", ".js", ".jsx", ".tsx", ".ts"],
        alias: {
            react: path.resolve("./node_modules/react"),
        },
    },
    devtool: "source-map",
};

const getSentryPlugin = (buildDir) => {
    const isSentryDisabled =
        !process.env.SENTRY_AUTH_TOKEN ||
        !process.env.SENTRY_DSN ||
        !process.env.SENTRY_DISABLED ||
        process.env.SENTRY_DISABLED?.toLowerCase() === "true";

    const release = process.env.RELEASE ?? "v1.0.0";

    // check release commit is tagged version, only then create release in Sentry
    const canCreateSentryRelease = validatedRelease(release);

    return !isSentryDisabled && canCreateSentryRelease
        ? [
              new SentryWebpackPlugin({
                  org: "org-name",
                  url: "https://sentry.org-name.com",
                  release,
                  authToken: process.env.SENTRY_AUTH_TOKEN,
                  project: "sdk-web",
                  include: buildDir,
                  ignore: ["node_modules", "webpack.config.js"],
              }),
          ]
        : [];
};

const generateConfig = (mode) => {
    return mode === "production"
        ? {
              ...defaultConfig,
              mode,
              plugins: defaultConfig.plugins.concat(getSentryPlugin("./dist")),
          }
        : {
              ...defaultConfig,
              mode,
              output: {
                  ...defaultConfig.output,
                  path: path.resolve(__dirname, "dist_dev"),
              },
              plugins: defaultConfig.plugins.concat(
                  getSentryPlugin("./dist_dev")
              ),
              devServer: {
                  historyApiFallback: true,
                  publicPath: "/v1.0.0/",
                  openPage: "v1.0.0/index.html",
                  contentBase: path.resolve(__dirname, "dist_dev"),
                  hot: true,
                  open: true,
              },
          };
};

const createRegex = (regex) => new RegExp(regex);

const validatedRelease = (release) => {
    if (!release) {
        return false;
    }

    const commitTagRegex = createRegex("^v\\d+\\.\\d+\\.\\d+$");
    const abVersionRegex = createRegex("^@[a-z0-9_]+$");

    const isValidTaggedVersion = commitTagRegex.test(release);
    const isValidABVersion = abVersionRegex.test(release);

    return isValidTaggedVersion || isValidABVersion;
};

module.exports = (env, options) => generateConfig(options.mode);

and init:

{
                dsn: sentryDsn,
                integrations: [
                    new Integrations.BrowserTracing({
                        tracingOrigins: [
                            "localhost",
                            appPath,
                            /^\//,
                        ],
                        routingInstrumentation:
                            Sentry.reactRouterV5Instrumentation(this._history),
                    }),
                    new Offline(),
                ],
                release: version,
                environment,
                debug: environment === "development",
                tracesSampleRate: 1.0,
                initialScope: {
                    tags: {
                        ...this._contextInfo,
                        ...this._webContextInfo,
                    },
                },
            }

jacklovett avatar Sep 05 '22 06:09 jacklovett

Can you share the event payload as described here? Specifically, the exception field in the JSON containing the stack trace would be of interest. Thanks!

lforst avatar Sep 05 '22 08:09 lforst

Due to it being pretty long i have added just the exceptions field of the JSON:

"exception":{
       "values":[
          {
             "type":"Error",
             "value":"test sentry error",
             "stacktrace":{
                "frames":[
                   {
                      "function":"fulfilled",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46108,
                      "colno":24,
                      "in_app":true
                   },
                   {
                      "function":"Object.next",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46154,
                      "colno":14,
                      "in_app":true
                   },
                   {
                      "function":"step",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46223,
                      "colno":17,
                      "in_app":true
                   },
                   {
                      "function":"NavigationController.<anonymous>",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46905,
                      "colno":20,
                      "in_app":true
                   },
                   {
                      "function":"NavigationController.handlePreferenceTestABStep",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46986,
                      "colno":12,
                      "in_app":true
                   },
                   {
                      "function":"__webpack_modules__.../product-web-core/lib/Controllers/NavigationController/NavigationController.js.__awaiter",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46105,
                      "colno":10,
                      "in_app":true
                   },
                   {
                      "function":"new Promise",
                      "filename":"<anonymous>",
                      "abs_path":"<anonymous>",
                      "in_app":true
                   },
                   {
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46126,
                      "colno":67,
                      "in_app":true
                   },
                   {
                      "function":"Object.next",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46154,
                      "colno":14,
                      "in_app":true
                   },
                   {
                      "function":"step",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46223,
                      "colno":17,
                      "in_app":true
                   },
                   {
                      "function":"NavigationController.<anonymous>",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46997,
                      "colno":46,
                      "in_app":true
                   },
                   {
                      "function":"PreferenceTestController.enterABStep",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":48883,
                      "colno":12,
                      "in_app":true
                   },
                   {
                      "function":"__webpack_modules__.../product-web-core/lib/Controllers/PreferenceTestController/PreferenceTestController.js.__awaiter",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47747,
                      "colno":10,
                      "in_app":true
                   },
                   {
                      "function":"new Promise",
                      "filename":"<anonymous>",
                      "abs_path":"<anonymous>",
                      "in_app":true
                   },
                   {
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47768,
                      "colno":67,
                      "in_app":true
                   },
                   {
                      "function":"Object.next",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47796,
                      "colno":14,
                      "in_app":true
                   },
                   {
                      "function":"step",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47865,
                      "colno":17,
                      "in_app":true
                   },
                   {
                      "function":"PreferenceTestController.<anonymous>",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":48903,
                      "colno":20,
                      "in_app":true
                   },
                   {
                      "function":"PreferenceTestController.startABTest",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47994,
                      "colno":12,
                      "in_app":true
                   },
                   {
                      "function":"__webpack_modules__.../product-web-core/lib/Controllers/PreferenceTestController/PreferenceTestController.js.__awaiter",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47747,
                      "colno":10,
                      "in_app":true
                   },
                   {
                      "function":"new Promise",
                      "filename":"<anonymous>",
                      "abs_path":"<anonymous>",
                      "in_app":true
                   },
                   {
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47768,
                      "colno":67,
                      "in_app":true
                   },
                   {
                      "function":"Object.next",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47796,
                      "colno":14,
                      "in_app":true
                   },
                   {
                      "function":"step",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47865,
                      "colno":17,
                      "in_app":true
                   },
                   {
                      "function":"PreferenceTestController.<anonymous>",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":48017,
                      "colno":19,
                      "in_app":true
                   }
                ]
             },
             "mechanism":{
                "type":"generic",
                "handled":true
             }
          }
       ]
    },

jacklovett avatar Sep 05 '22 13:09 jacklovett

Is this an event after or before you made the dist changes? If it's before, can you send a recent payload? Also, can you please send what's inside raw_stacktrace? Thank you!

Debugging this is very cumbersome when we don't have access to all the information and the interface. Would it be an option for you to send an event + artifacts to a free SaaS account of Sentry? That way we can take a look at it ourselves.

lforst avatar Sep 06 '22 08:09 lforst

This was after the dist change. raw stacktrace:

Error: test sentry error
  at PreferenceTestController.<anonymous>(/v1.0.7/main.js:48017:19)
  at step(/v1.0.7/main.js:47865:17)
  at Object.next(/v1.0.7/main.js:47796:14)
  at ? (/v1.0.7/main.js:47768:67)
  at new Promise(<anonymous>)
  at __webpack_modules__.../web-core/lib/Controllers/PreferenceTestController/PreferenceTestController.js.__awaiter(/v1.0.7/main.js:47747:10)
  at PreferenceTestController.startABTest(/v1.0.7/main.js:47994:12)
  at PreferenceTestController.<anonymous>(/v1.0.7/main.js:48903:20)
  at step(/v1.0.7/main.js:47865:17)
  at Object.next(/v1.0.7/main.js:47796:14)
  at ? (/v1.0.7/main.js:47768:67)
  at new Promise(<anonymous>)
  at __webpack_modules__.../web-core/lib/Controllers/PreferenceTestController/PreferenceTestController.js.__awaiter(/v1.0.7/main.js:47747:10)
  at PreferenceTestController.enterABStep(/v1.0.7/main.js:48883:12)
  at NavigationController.<anonymous>(/v1.0.7/main.js:46997:46)
  at step(/v1.0.7/main.js:46223:17)
  at Object.next(/v1.0.7/main.js:46154:14)
  at ? (/v1.0.7/main.js:46126:67)
  at new Promise(<anonymous>)
  at __webpack_modules__.../web-core/lib/Controllers/NavigationController/NavigationController.js.__awaiter(/v1.0.7/main.js:46105:10)
  at NavigationController.handlePreferenceTestABStep(/v1.0.7/main.js:46986:12)
  at NavigationController.<anonymous>(/v1.0.7/main.js:46905:20)
  at step(/v1.0.7/main.js:46223:17)
  at Object.next(/v1.0.7/main.js:46154:14)
  at fulfilled(/v1.0.7/main.js:46108:24)

That is not an option unfortunately. I will try to recreate the issue in a different test project though.

jacklovett avatar Sep 09 '22 06:09 jacklovett

I am sorry, I meant we need the values in raw_stacktrace inside the event JSON.

lforst avatar Sep 09 '22 06:09 lforst

but there is not raw_stacktrace in the JSON :/ Here is the full JSON:

{
    "event_id":"9d94d13c57b041758363c2c400232b5d",
    "project":10,
    "release":"v1.0.7",
    "dist":null,
    "platform":"javascript",
    "message":"",
    "datetime":"2022-09-05T13:36:54.089000Z",
    "tags":[
       [
          "_headphoneModel",
          "demo1"
       ],
       [
          "analyticsDisabled",
          "True"
       ],
       [
          "analyticsPath",
          "https://a3.org.com"
       ],
       [
          "apiKey",
          "apikey"
       ],
       [
          "apiPath",
          "https://sdk-backend.org.com"
       ],
       [
          "appPath",
          "http://localhost:8080"
       ],
       [
          "baseVersion",
          "v1.0"
       ],
       [
          "browser",
          "Chrome Mobile 87.0.4280"
       ],
       [
          "browser.name",
          "Chrome Mobile"
       ],
       [
          "device",
          "SM-G955U"
       ],
       [
          "device.family",
          "Samsung SM-G955U"
       ],
       [
          "disableVersionSwitch",
          "False"
       ],
       [
          "environment",
          "development"
       ],
       [
          "handled",
          "yes"
       ],
       [
          "hashedApiKey",
          "6c793695171e793d7d0080ad7700a2bc50256912cef2492c201e8ecc54b24ab5"
       ],
       [
          "installationId",
          "i03fb2aeab9a42c0bb2e7a2c736852"
       ],
       [
          "language",
          "en"
       ],
       [
          "level",
          "error"
       ],
       [
          "manufacturer",
          "test_manufacturer"
       ],
       [
          "mechanism",
          "generic"
       ],
       [
          "model",
          "test_model"
       ],
       [
          "offlineVersion",
          "v1.0.0"
       ],
       [
          "os",
          "Android 8.0.0"
       ],
       [
          "os.name",
          "Android"
       ],
       [
          "region",
          "USA"
       ],
       [
          "sdkApiVersion",
          "2"
       ],
       [
          "sdkIntegration",
          "client"
       ],
       [
          "sdkVersion",
          "v1.11.0"
       ],
       [
          "release",
          "v1.0.7"
       ],
       [
          "sentryAuthToken",
          "bc56ff16480d4608a59c4f80d387998144e57b4b761748d9a36b34f5b0e90546"
       ],
       [
          "sentryDisabled",
          "False"
       ],
       [
          "sentryDsn",
          "https://[email protected]/10"
       ],
       [
          "startHeadlessMode",
          "False"
       ],
       [
          "url",
          "http://localhost:8080/v1.0.7/song-select"
       ],
       [
          "userAgent",
          "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36"
       ],
       [
          "version",
          "v1.0.7"
       ],
       [
          "webCoreVersion",
          "v5.1.10"
       ]
    ],
    "_meta":{
       "breadcrumbs":{
          "values":{
             "40":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "41":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "42":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "43":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "44":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "45":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "46":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "47":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "48":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "49":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "50":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "54":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "57":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             },
             "58":{
                "data":{
                   "arguments":{
                      "0":{
                         "":{
                            "rem":[
                               [
                                  "@password:filter",
                                  "s",
                                  0,
                                  10
                               ]
                            ],
                            "len":67
                         }
                      }
                   }
                },
                "message":{
                   "":{
                      "rem":[
                         [
                            "@password:filter",
                            "s",
                            0,
                            10
                         ]
                      ],
                      "len":67
                   }
                }
             }
          }
       },
       "user":{
          "ip_address":{
             "":{
                "rem":[
                   [
                      "@anything:remove",
                      "x"
                   ]
                ]
             }
          }
       }
    },
    "_metrics":{
       "bytes.ingested.event":23003,
       "bytes.stored.event":34849,
       "flag.processing.error":true
    },
    "breadcrumbs":{
       "values":[
          {
             "timestamp":1662384939.554,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"Application::init",
             "data":{
                "arguments":[
                   "Application::init"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.571,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "__span":"82438b3068b65b43",
                "method":"GET",
                "status_code":404,
                "url":"http://localhost:8080/v1.0/version.txt"
             }
          },
          {
             "timestamp":1662384939.573,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"Application::init checkVersion error - ServerError: Not Found",
             "data":{
                "arguments":[
                   "Application::init checkVersion error - ServerError: Not Found"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.574,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SentryManager::reportError - ServerError: Not Found",
             "data":{
                "arguments":[
                   "SentryManager::reportError - ServerError: Not Found"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.586,
             "type":"default",
             "category":"sentry.event",
             "level":"error",
             "message":"ServerError: Not Found",
             "event_id":"eb272550d9094b009e5097eae549da75"
          },
          {
             "timestamp":1662384939.589,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"Application::init language - en",
             "data":{
                "arguments":[
                   "Application::init language - en"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.589,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"Translations::storeLanguage - language set to en",
             "data":{
                "arguments":[
                   "Translations::storeLanguage - language set to en"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.589,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SoundIdMock::getStyle()",
             "data":{
                "arguments":[
                   "SoundIdMock::getStyle()"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.79,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SoundIdStyle primaryColor = #1A1818, primaryHighlightColor = #D8D9DA, primaryBackgroundColor = #FFFFFF, primaryAccentColor = #FE3B1F, alternateTextColor = #636569",
             "data":{
                "arguments":[
                   "SoundIdStyle primaryColor = #1A1818, primaryHighlightColor = #D8D9DA, primaryBackgroundColor = #FFFFFF, primaryAccentColor = #FE3B1F, alternateTextColor = #636569"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.791,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManager::init",
             "data":{
                "arguments":[
                   "AudioManager::init"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.791,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManager::setDspMode(0)",
             "data":{
                "arguments":[
                   "AudioManager::setDspMode(0)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384939.791,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManagerMock::setDspMode(0)",
             "data":{
                "arguments":[
                   "AudioManagerMock::setDspMode(0)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384940.582,
             "type":"default",
             "category":"sentry.transaction",
             "level":"info",
             "message":"39f3e4df689c42b083a4f8d0de94262f",
             "event_id":"39f3e4df689c42b083a4f8d0de94262f"
          },
          {
             "timestamp":1662384942.177,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "method":"GET",
                "status_code":200,
                "url":"https://sdk-backend-org.com/network/test-connection"
             }
          },
          {
             "timestamp":1662384942.178,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SoundIdMock::started()",
             "data":{
                "arguments":[
                   "SoundIdMock::started()"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384942.384,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AnalyticsController::createSDKUIGeneralEvent - init - event(SDKUIOpen)",
             "data":{
                "arguments":[
                   "AnalyticsController::createSDKUIGeneralEvent - init - event(SDKUIOpen)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384942.384,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AnalyticsController - Analytics disabled: disableAnalytics(true) - userAllowsAnalytics(true)\"",
             "data":{
                "arguments":[
                   "AnalyticsController - Analytics disabled: disableAnalytics(true) - userAllowsAnalytics(true)\""
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384942.387,
             "type":"default",
             "category":"navigation",
             "level":"info",
             "data":{
                "from":"/v1.0.7/index.html",
                "to":"/v1.0.7/welcome"
             }
          },
          {
             "timestamp":1662384942.389,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"Application::start ui completed",
             "data":{
                "arguments":[
                   "Application::start ui completed"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384942.389,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SoundIdMock::started()",
             "data":{
                "arguments":[
                   "SoundIdMock::started()"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384942.592,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"Application::start completed",
             "data":{
                "arguments":[
                   "Application::start completed"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384942.593,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"Application::init completed",
             "data":{
                "arguments":[
                   "Application::init completed"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384943.393,
             "type":"default",
             "category":"sentry.transaction",
             "level":"info",
             "message":"551de77bedaa4de3b46b828ba1186ab4",
             "event_id":"551de77bedaa4de3b46b828ba1186ab4"
          },
          {
             "timestamp":1662384944.313,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"DeviceManagerMock stopping discovery",
             "data":{
                "arguments":[
                   "DeviceManagerMock stopping discovery"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384944.313,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"DeviceManager::isDiscoveryRunningChanged(false)",
             "data":{
                "arguments":[
                   "DeviceManager::isDiscoveryRunningChanged(false)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384945.313,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"DeviceManagerMock device connected",
             "data":{
                "arguments":[
                   "DeviceManagerMock device connected"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384945.313,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"DeviceManager::isDeviceConnectedChanged(true)",
             "data":{
                "arguments":[
                   "DeviceManager::isDeviceConnectedChanged(true)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384946.367,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"DeviceManagerMock device synchronized",
             "data":{
                "arguments":[
                   "DeviceManagerMock device synchronized"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384946.368,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"DeviceManager::isDeviceSynchronizedChanged(true)",
             "data":{
                "arguments":[
                   "DeviceManager::isDeviceSynchronizedChanged(true)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384953.738,
             "type":"default",
             "category":"ui.click",
             "level":"info",
             "message":"div.button-container > button.button > div.button-content > p.text.mod-medium."
          },
          {
             "timestamp":1662384953.744,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SoundIdMock::setNavigationDepth(0)",
             "data":{
                "arguments":[
                   "SoundIdMock::setNavigationDepth(0)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384953.949,
             "type":"default",
             "category":"navigation",
             "level":"info",
             "data":{
                "from":"/v1.0.7/welcome",
                "to":"/v1.0.7/"
             }
          },
          {
             "timestamp":1662384954.025,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AnalyticsController::createSDKUIGeneralEvent - init - event(WelcomeButtonClicked)",
             "data":{
                "arguments":[
                   "AnalyticsController::createSDKUIGeneralEvent - init - event(WelcomeButtonClicked)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384954.026,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AnalyticsController - Analytics disabled: disableAnalytics(true) - userAllowsAnalytics(true)\"",
             "data":{
                "arguments":[
                   "AnalyticsController - Analytics disabled: disableAnalytics(true) - userAllowsAnalytics(true)\""
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384954.961,
             "type":"default",
             "category":"sentry.transaction",
             "level":"info",
             "message":"91885c47419b4661b6bc9d7fa4d162c7",
             "event_id":"91885c47419b4661b6bc9d7fa4d162c7"
          },
          {
             "timestamp":1662384977.937,
             "type":"default",
             "category":"ui.click",
             "level":"info",
             "message":"div.button-container > button.button > div.button-content > p.text.mod-medium."
          },
          {
             "timestamp":1662384977.963,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SoundIdMock::setNavigationDepth(1000)",
             "data":{
                "arguments":[
                   "SoundIdMock::setNavigationDepth(1000)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.166,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SoundId::navigationDepthChanged(1000, false)",
             "data":{
                "arguments":[
                   "SoundId::navigationDepthChanged(1000, false)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.167,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"navigationDepthChanged:: depth - 1000 wasBackPressed = false",
             "data":{
                "arguments":[
                   "navigationDepthChanged:: depth - 1000 wasBackPressed = false"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.168,
             "type":"default",
             "category":"navigation",
             "level":"info",
             "data":{
                "from":"/v1.0.7/",
                "to":"/v1.0.7/preference-intro"
             }
          },
          {
             "timestamp":1662384978.185,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.187,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.193,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.194,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.203,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.205,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.212,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.215,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.303,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.305,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.306,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384978.455,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "method":"GET",
                "status_code":200,
                "url":"https://sdk-backend.org.com/network/test-connection"
             }
          },
          {
             "timestamp":1662384978.664,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "method":"GET",
                "status_code":200,
                "url":"https://sdk-backend.org.com/network/test-connection"
             }
          },
          {
             "timestamp":1662384979.181,
             "type":"default",
             "category":"sentry.transaction",
             "level":"info",
             "message":"5cc52dcc5e924721860b633f18429686",
             "event_id":"5cc52dcc5e924721860b633f18429686"
          },
          {
             "timestamp":1662384982.211,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384983.021,
             "type":"default",
             "category":"ui.click",
             "level":"info",
             "message":"div.button-container > button.button > div.button-content > p.text.mod-medium."
          },
          {
             "timestamp":1662384983.024,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"PreferenceTestController::enterPreferenceTest - init",
             "data":{
                "arguments":[
                   "PreferenceTestController::enterPreferenceTest - init"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384983.028,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384983.215,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[Filtered]",
             "data":{
                "arguments":[
                   "[Filtered]"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384983.483,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "method":"POST",
                "status_code":200,
                "url":"https://sdk-backend.org.com/preference-tests"
             }
          },
          {
             "timestamp":1662384983.82,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "method":"GET",
                "status_code":200,
                "url":"https://sdk-backend.org.com/preference-tests/stub_preference_test_attempt"
             }
          },
          {
             "timestamp":1662384983.821,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[object Object]",
             "data":{
                "arguments":[
                   {
                      "age":66,
                      "appVersion":"2.0.4",
                      "computerId":"g0b76c3799255a3b37b9c7a43ea836c62c92d9217",
                      "device":"iPhone12,1",
                      "deviceManufacturer":"Apple",
                      "gender":"male",
                      "headphoneProfileId":"714c8edcefa88589",
                      "os":"iOS",
                      "osVersion":"14.2",
                      "trackList":"[Array]"
                   }
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384984.254,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "method":"POST",
                "status_code":200,
                "url":"https://sdk-backend.org.com/preference-tests/stub_preference_test_attempt/step"
             }
          },
          {
             "timestamp":1662384984.457,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "method":"GET",
                "status_code":200,
                "url":"https://sdk-backend.org.com/preference-tests/stub_preference_test_attempt/step/stub_preference_test_step"
             }
          },
          {
             "timestamp":1662384984.458,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[object Object]",
             "data":{
                "arguments":[
                   {
                      "comparisonCount":9,
                      "comparisonInfo":null,
                      "prevStepId":"123124",
                      "state":"active",
                      "systemVolume":0.82,
                      "track":"Vivaldi",
                      "usersChoice":"no-difference"
                   }
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384984.67,
             "type":"http",
             "category":"fetch",
             "level":"info",
             "data":{
                "method":"GET",
                "status_code":200,
                "url":"https://sdk-backend.org.com/preference-tests/stub_preference_test_attempt/step/stub_preference_test_step/options"
             }
          },
          {
             "timestamp":1662384984.671,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"[object Object],[object Object]",
             "data":{
                "arguments":[
                   [
                      "[Object]",
                      "[Object]"
                   ]
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384984.873,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"No translation found for: sweep7_44100",
             "data":{
                "arguments":[
                   "No translation found for: sweep7_44100"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384986.875,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManager::setDspMode(2)",
             "data":{
                "arguments":[
                   "AudioManager::setDspMode(2)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384986.875,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManagerMock::setDspMode(2)",
             "data":{
                "arguments":[
                   "AudioManagerMock::setDspMode(2)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384987.079,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SoundIdMock::setNavigationDepth(1000)",
             "data":{
                "arguments":[
                   "SoundIdMock::setNavigationDepth(1000)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384987.283,
             "type":"default",
             "category":"navigation",
             "level":"info",
             "data":{
                "from":"/v1.0.7/preference-intro",
                "to":"/v1.0.7/song-select"
             }
          },
          {
             "timestamp":1662384987.316,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AnalyticsController::createPreferenceTestEvent - init - PreferenceTestLaunched",
             "data":{
                "arguments":[
                   "AnalyticsController::createPreferenceTestEvent - init - PreferenceTestLaunched"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384987.316,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AnalyticsController - Analytics disabled: disableAnalytics(true) - userAllowsAnalytics(true)\"",
             "data":{
                "arguments":[
                   "AnalyticsController - Analytics disabled: disableAnalytics(true) - userAllowsAnalytics(true)\""
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384988.292,
             "type":"default",
             "category":"sentry.transaction",
             "level":"info",
             "message":"fe3b7e2b544e4823b16b43f3798c1f1b",
             "event_id":"fe3b7e2b544e4823b16b43f3798c1f1b"
          },
          {
             "timestamp":1662384989.649,
             "type":"default",
             "category":"ui.click",
             "level":"info",
             "message":"div.row.track-container > p.text.mod-medium.track-name.mod-alternate"
          },
          {
             "timestamp":1662384989.651,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManagerMock::playTrack",
             "data":{
                "arguments":[
                   "AudioManagerMock::playTrack"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384989.853,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManager::isPlayingChanged(true)",
             "data":{
                "arguments":[
                   "AudioManager::isPlayingChanged(true)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384989.858,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AnalyticsController::createPreferenceTestEvent - init - TrackSelection",
             "data":{
                "arguments":[
                   "AnalyticsController::createPreferenceTestEvent - init - TrackSelection"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662384989.859,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AnalyticsController - Analytics disabled: disableAnalytics(true) - userAllowsAnalytics(true)\"",
             "data":{
                "arguments":[
                   "AnalyticsController - Analytics disabled: disableAnalytics(true) - userAllowsAnalytics(true)\""
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662385013.868,
             "type":"default",
             "category":"ui.click",
             "level":"info",
             "message":"div.button-container > button.button > div.button-content > p.text.mod-medium."
          },
          {
             "timestamp":1662385013.876,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"startABTest:: Error: test sentry error",
             "data":{
                "arguments":[
                   "startABTest:: Error: test sentry error"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662385013.878,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"PreferenceTestController::pause - init",
             "data":{
                "arguments":[
                   "PreferenceTestController::pause - init"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662385013.878,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManagerMock::pause",
             "data":{
                "arguments":[
                   "AudioManagerMock::pause"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662385014.083,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"AudioManager::isPlayingChanged(false)",
             "data":{
                "arguments":[
                   "AudioManager::isPlayingChanged(false)"
                ],
                "logger":"console"
             }
          },
          {
             "timestamp":1662385014.088,
             "type":"default",
             "category":"console",
             "level":"info",
             "message":"SentryManager::reportError - Error: test sentry error",
             "data":{
                "arguments":[
                   "SentryManager::reportError - Error: test sentry error"
                ],
                "logger":"console"
             }
          }
       ]
    },
    "contexts":{
       "browser":{
          "name":"Chrome Mobile",
          "version":"87.0.4280",
          "type":"browser"
       },
       "device":{
          "family":"Samsung SM-G955U",
          "model":"SM-G955U",
          "brand":"Samsung",
          "type":"device"
       },
       "os":{
          "name":"Android",
          "version":"8.0.0",
          "type":"os"
       }
    },
    "culprit":"PreferenceTestController.<anonymous>(main)",
    "environment":"development",
    "errors":[
       {
          "type":"fetch_generic_error",
          "value":"<class 'requests.exceptions.ConnectionError'>"
       }
    ],
    "exception":{
       "values":[
          {
             "type":"Error",
             "value":"test sentry error",
             "stacktrace":{
                "frames":[
                   {
                      "function":"fulfilled",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46108,
                      "colno":24,
                      "in_app":true
                   },
                   {
                      "function":"Object.next",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46154,
                      "colno":14,
                      "in_app":true
                   },
                   {
                      "function":"step",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46223,
                      "colno":17,
                      "in_app":true
                   },
                   {
                      "function":"NavigationController.<anonymous>",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46905,
                      "colno":20,
                      "in_app":true
                   },
                   {
                      "function":"NavigationController.handlePreferenceTestABStep",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46986,
                      "colno":12,
                      "in_app":true
                   },
                   {
                      "function":"__webpack_modules__.../soundid-web-core/lib/Controllers/NavigationController/NavigationController.js.__awaiter",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46105,
                      "colno":10,
                      "in_app":true
                   },
                   {
                      "function":"new Promise",
                      "filename":"<anonymous>",
                      "abs_path":"<anonymous>",
                      "in_app":true
                   },
                   {
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46126,
                      "colno":67,
                      "in_app":true
                   },
                   {
                      "function":"Object.next",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46154,
                      "colno":14,
                      "in_app":true
                   },
                   {
                      "function":"step",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46223,
                      "colno":17,
                      "in_app":true
                   },
                   {
                      "function":"NavigationController.<anonymous>",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":46997,
                      "colno":46,
                      "in_app":true
                   },
                   {
                      "function":"PreferenceTestController.enterABStep",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":48883,
                      "colno":12,
                      "in_app":true
                   },
                   {
                      "function":"__webpack_modules__.../soundid-web-core/lib/Controllers/PreferenceTestController/PreferenceTestController.js.__awaiter",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47747,
                      "colno":10,
                      "in_app":true
                   },
                   {
                      "function":"new Promise",
                      "filename":"<anonymous>",
                      "abs_path":"<anonymous>",
                      "in_app":true
                   },
                   {
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47768,
                      "colno":67,
                      "in_app":true
                   },
                   {
                      "function":"Object.next",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47796,
                      "colno":14,
                      "in_app":true
                   },
                   {
                      "function":"step",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47865,
                      "colno":17,
                      "in_app":true
                   },
                   {
                      "function":"PreferenceTestController.<anonymous>",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":48903,
                      "colno":20,
                      "in_app":true
                   },
                   {
                      "function":"PreferenceTestController.startABTest",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47994,
                      "colno":12,
                      "in_app":true
                   },
                   {
                      "function":"__webpack_modules__.../soundid-web-core/lib/Controllers/PreferenceTestController/PreferenceTestController.js.__awaiter",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47747,
                      "colno":10,
                      "in_app":true
                   },
                   {
                      "function":"new Promise",
                      "filename":"<anonymous>",
                      "abs_path":"<anonymous>",
                      "in_app":true
                   },
                   {
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47768,
                      "colno":67,
                      "in_app":true
                   },
                   {
                      "function":"Object.next",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47796,
                      "colno":14,
                      "in_app":true
                   },
                   {
                      "function":"step",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":47865,
                      "colno":17,
                      "in_app":true
                   },
                   {
                      "function":"PreferenceTestController.<anonymous>",
                      "module":"main",
                      "filename":"/v1.0.7/main.js",
                      "abs_path":"http://localhost:8080/v1.0.7/main.js",
                      "lineno":48017,
                      "colno":19,
                      "in_app":true
                   }
                ]
             },
             "mechanism":{
                "type":"generic",
                "handled":true
             }
          }
       ]
    },
    "fingerprint":[
       "{{ default }}"
    ],
    "grouping_config":{
       "enhancements":"eJybzDRxY3J-bm5-npWRgaGlroGxrpHxBABcYgcZ",
       "id":"newstyle:2019-10-29"
    },
    "hashes":[
       "53f230e1449a48655cec540a00dfc014"
    ],
    "key_id":"11",
    "level":"error",
    "location":"/v1.0.7/main.js",
    "logger":"",
    "metadata":{
       "display_title_with_tree_label":false,
       "filename":"/v1.0.7/main.js",
       "function":"PreferenceTestController.<anonymous>",
       "type":"Error",
       "value":"test sentry error"
    },
    "nodestore_insert":1662385016.321859,
    "received":1662385014.584112,
    "request":{
       "url":"http://localhost:8080/v1.0.7/song-select",
       "headers":[
          [
             "User-Agent",
             "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36"
          ]
       ]
    },
    "sdk":{
       "name":"sentry.javascript.react",
       "version":"6.19.7",
       "integrations":[
          "InboundFilters",
          "FunctionToString",
          "TryCatch",
          "Breadcrumbs",
          "GlobalHandlers",
          "LinkedErrors",
          "Dedupe",
          "UserAgent",
          "BrowserTracing",
          "Offline"
       ],
       "packages":[
          {
             "name":"npm:@sentry/react",
             "version":"6.19.7"
          }
       ]
    },
    "timestamp":1662385014.089,
    "title":"Error: test sentry error",
    "type":"error",
    "user":{
       "ip_address":null
    },
    "version":"7"
 }

jacklovett avatar Sep 13 '22 11:09 jacklovett