diff --git a/apps/web/next.config.js b/apps/web/next.config.js
index 5039d8c..692cd63 100644
--- a/apps/web/next.config.js
+++ b/apps/web/next.config.js
@@ -104,6 +104,5 @@ module.exports = withSentryConfig(
hideSourceMaps: true,
transpileClientSDK: false,
tunnelRoute: '/track-error',
- widenClientFileUpload: true,
}
);
diff --git a/apps/web/pages/500.jsx b/apps/web/pages/500.jsx
index 9fab1e8..e3dc4da 100644
--- a/apps/web/pages/500.jsx
+++ b/apps/web/pages/500.jsx
@@ -1,6 +1,6 @@
/* eslint-disable canonical/filename-match-regex */
import { Result } from 'ui/elements';
-export default function ServerError() {
- return ;
+export default function ServerError({ statusCode = '500' }) {
+ return ;
}
diff --git a/apps/web/pages/_error.jsx b/apps/web/pages/_error.jsx
index 22b583e..2eca54c 100644
--- a/apps/web/pages/_error.jsx
+++ b/apps/web/pages/_error.jsx
@@ -1,9 +1,10 @@
/* eslint-disable canonical/no-use-extend-native */
+import ServerError from './500';
import { captureUnderscoreErrorException } from '@sentry/nextjs';
import Error from 'next/error';
function CustomErrorComponent(props) {
- return ;
+ return ;
}
CustomErrorComponent.getInitialProps = async (contextData) => {
diff --git a/apps/web/pages/api/trpc/[trpc].ts b/apps/web/pages/api/trpc/[trpc].ts
index 3e78ce9..44effd2 100644
--- a/apps/web/pages/api/trpc/[trpc].ts
+++ b/apps/web/pages/api/trpc/[trpc].ts
@@ -1,7 +1,6 @@
/* eslint-disable canonical/filename-match-regex */
import { createContext } from '@/server/context';
import { appRouter } from '@/server/routers/_app';
-import { captureException, withScope } from '@sentry/nextjs';
import * as trpcNext from '@trpc/server/adapters/next';
export default trpcNext.createNextApiHandler({
@@ -23,17 +22,7 @@ export default trpcNext.createNextApiHandler({
onError(opts) {
const { error } = opts;
// send to bug reporting
- if (!['BAD_REQUEST', 'UNAUTHORIZED', 'FORBIDDEN'].includes(error.code))
- withScope((scope) => {
- (Object.keys(opts) as Array).forEach((key) => {
- if (key !== 'req') {
- let extra = opts[key];
- if (key === 'input') extra = JSON.stringify(extra);
- scope.setExtra(key, extra);
- }
- });
- captureException(error);
- });
+
// eslint-disable-next-line no-console
console.error('Something went wrong', error);
},
diff --git a/apps/web/sentry.edge.config.js b/apps/web/sentry.edge.config.js
index 686cfd6..164af84 100644
--- a/apps/web/sentry.edge.config.js
+++ b/apps/web/sentry.edge.config.js
@@ -3,12 +3,18 @@
// https://docs.sentry.io/platforms/javascript/guides/nextjs/
import getUrls from './config/urls';
+import { publicRuntimeConfigSchema } from '@/config/schema/runtime-config';
import { init } from '@sentry/nextjs';
+import getConfig from 'next/config';
const { SENTRY_DSN } = getUrls();
+const { publicRuntimeConfig } = getConfig();
+const { SENTRY_ENVIRONMENT } = publicRuntimeConfigSchema.parse(publicRuntimeConfig);
+
init({
debug: false,
dsn: SENTRY_DSN,
+ environment: SENTRY_ENVIRONMENT,
tracesSampleRate: 1,
});
diff --git a/apps/web/sentry.server.config.js b/apps/web/sentry.server.config.js
index b284cc6..5e27f6a 100644
--- a/apps/web/sentry.server.config.js
+++ b/apps/web/sentry.server.config.js
@@ -3,13 +3,18 @@
// https://docs.sentry.io/platforms/javascript/guides/nextjs/
import getUrls from './config/urls';
+import { publicRuntimeConfigSchema } from '@/config/schema/runtime-config';
import { init } from '@sentry/nextjs';
+import getConfig from 'next/config';
const { SENTRY_DSN } = getUrls();
+const { publicRuntimeConfig } = getConfig();
+const { SENTRY_ENVIRONMENT } = publicRuntimeConfigSchema.parse(publicRuntimeConfig);
+
init({
debug: false,
-
dsn: SENTRY_DSN,
+ environment: SENTRY_ENVIRONMENT,
tracesSampleRate: 1,
});
diff --git a/apps/web/server/context.ts b/apps/web/server/context.ts
index dd45e20..8b16df3 100644
--- a/apps/web/server/context.ts
+++ b/apps/web/server/context.ts
@@ -1,4 +1,5 @@
import { getUser } from '@/api/user/query';
+import { getCurrentScope } from '@sentry/node';
import type { inferAsyncReturnType } from '@trpc/server';
import type { CreateNextContextOptions } from '@trpc/server/adapters/next';
@@ -11,6 +12,9 @@ export async function createContext({ req }: CreateNextContextOptions) {
},
});
+ const scope = getCurrentScope();
+ scope.setUser(user);
+
return {
user,
};
diff --git a/apps/web/server/routers/quote/index.ts b/apps/web/server/routers/quote/index.ts
index c109c0d..07711e1 100644
--- a/apps/web/server/routers/quote/index.ts
+++ b/apps/web/server/routers/quote/index.ts
@@ -1,5 +1,5 @@
/* eslint-disable canonical/sort-keys */
-import { protectedProcedure, publicProcedure } from '../../procedure';
+import { protectedProcedure } from '../../procedure';
import { router } from '../../trpc';
import { createRequestData } from '../calculate/lib/request';
import { transformCalculateResults } from '../calculate/lib/transform';
@@ -54,7 +54,7 @@ const defaultPayments = { values: [], sums: [] };
const { URL_CRM_DOWNLOADKP } = getUrls();
export const quoteRouter = router({
- getQuote: publicProcedure
+ getQuote: protectedProcedure
.input(GetQuoteInputDataSchema)
.output(GetQuoteOutputDataSchema)
.query(async ({ input }) => {
diff --git a/apps/web/server/routers/tarif/index.ts b/apps/web/server/routers/tarif/index.ts
index 8eb4820..aef7080 100644
--- a/apps/web/server/routers/tarif/index.ts
+++ b/apps/web/server/routers/tarif/index.ts
@@ -1,14 +1,19 @@
-import { publicProcedure } from '../../procedure';
+import { protectedProcedure } from '../../procedure';
import { router } from '../../trpc';
import { GetTarifInputSchema } from './types';
import initializeApollo from '@/apollo/client';
import configuratorHelper from '@/process/configurator/lib/helper';
+import { createTRPCError } from '@/utils/trpc';
export const tarifRouter = router({
- getTarif: publicProcedure.input(GetTarifInputSchema).query(async ({ input }) => {
- const apolloClient = initializeApollo();
- const { getTarifs } = configuratorHelper({ apolloClient });
+ getTarif: protectedProcedure.input(GetTarifInputSchema).query(async ({ input }) => {
+ try {
+ const apolloClient = initializeApollo();
+ const { getTarifs } = configuratorHelper({ apolloClient });
- return getTarifs(input);
+ return getTarifs(input);
+ } catch (error) {
+ throw createTRPCError(error);
+ }
}),
});
diff --git a/apps/web/server/trpc.ts b/apps/web/server/trpc.ts
index ed449a8..8321ec7 100644
--- a/apps/web/server/trpc.ts
+++ b/apps/web/server/trpc.ts
@@ -11,7 +11,7 @@
import type { Context } from './context';
import { initTRPC } from '@trpc/server';
-import SuperJSON from 'superjson';
+import { SuperJSON } from 'superjson';
export const t = initTRPC.context().create({
/**
diff --git a/apps/web/trpc/client.ts b/apps/web/trpc/client.ts
index b54a096..59ad1f9 100644
--- a/apps/web/trpc/client.ts
+++ b/apps/web/trpc/client.ts
@@ -3,7 +3,7 @@ import type { AppRouter } from '@/server/routers/_app';
import { createTRPCProxyClient, httpBatchLink, loggerLink } from '@trpc/client';
import { createTRPCNext } from '@trpc/next';
import type { NextPageContext } from 'next';
-import SuperJSON from 'superjson';
+import { SuperJSON } from 'superjson';
import { isServer } from 'tools/common';
export type SSRContext = NextPageContext & {
@@ -60,6 +60,7 @@ export const trpcClient = createTRPCNext({
const {
// If you're using Node 18 before 18.15.0, omit the "connection" header
+ // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-unused-vars
connection: _connection,
...headers
} = ctx.req.headers;
diff --git a/apps/web/utils/axios.ts b/apps/web/utils/axios.ts
index ef5d05f..51d7272 100644
--- a/apps/web/utils/axios.ts
+++ b/apps/web/utils/axios.ts
@@ -1,8 +1,7 @@
import { HttpError } from './error';
-import { captureException, withScope } from '@sentry/nextjs';
+import { captureException } from '@sentry/nextjs';
import type { AxiosError } from 'axios';
import { isAxiosError } from 'axios';
-import { pick } from 'radash';
function getErrorMessage(
error: AxiosError
@@ -21,22 +20,9 @@ export async function withHandleError(fn: Promise) {
const message = getErrorMessage(error_);
if (error_.response?.status && error_.response?.status >= 500) {
- const err = pick(error_, ['code', 'message', 'status', 'cause']);
- const data = error_.config?.data;
- const params = error_.config?.params;
-
- const opts = { ...err, data, message, params };
-
error_.message += ` | ${message}`;
- withScope((scope) => {
- (Object.keys(opts) as Array).forEach((key) => {
- let extra = opts[key];
- if (key === 'data') extra = JSON.stringify(extra);
- scope.setExtra(key, extra);
- });
- captureException(error_);
- });
+ captureException(error_);
}
throw new HttpError(message, error_.status || error_.response?.status);