B2B-88: add starter kit structure and elements
This commit is contained in:
3
packages/monitoring/sentry/README.md
Normal file
3
packages/monitoring/sentry/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Sentry Monitoring / @kit/sentry
|
||||
|
||||
Please refer to the [documentation](https://makerkit.dev/docs/next-supabase-turbo/sentry).
|
||||
3
packages/monitoring/sentry/eslint.config.mjs
Normal file
3
packages/monitoring/sentry/eslint.config.mjs
Normal file
@@ -0,0 +1,3 @@
|
||||
import eslintConfigBase from '@kit/eslint-config/base.js';
|
||||
|
||||
export default eslintConfigBase;
|
||||
17
packages/monitoring/sentry/node_modules/.bin/acorn
generated
vendored
Executable file
17
packages/monitoring/sentry/node_modules/.bin/acorn
generated
vendored
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -z "$NODE_PATH" ]; then
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/bin/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/acorn@8.14.1/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules"
|
||||
else
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/bin/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/acorn@8.14.1/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||
fi
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/bin/acorn" "$@"
|
||||
else
|
||||
exec node "$basedir/../../../../../node_modules/.pnpm/acorn@8.14.1/node_modules/acorn/bin/acorn" "$@"
|
||||
fi
|
||||
17
packages/monitoring/sentry/node_modules/.bin/browserslist
generated
vendored
Executable file
17
packages/monitoring/sentry/node_modules/.bin/browserslist
generated
vendored
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -z "$NODE_PATH" ]; then
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/browserslist@4.25.0/node_modules/browserslist/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/browserslist@4.25.0/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules"
|
||||
else
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/browserslist@4.25.0/node_modules/browserslist/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/browserslist@4.25.0/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||
fi
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/browserslist@4.25.0/node_modules/browserslist/cli.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../../../../../node_modules/.pnpm/browserslist@4.25.0/node_modules/browserslist/cli.js" "$@"
|
||||
fi
|
||||
17
packages/monitoring/sentry/node_modules/.bin/next
generated
vendored
Executable file
17
packages/monitoring/sentry/node_modules/.bin/next
generated
vendored
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -z "$NODE_PATH" ]; then
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules/next/dist/bin/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules/next/dist/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules/next/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules"
|
||||
else
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules/next/dist/bin/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules/next/dist/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules/next/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||
fi
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules/next/dist/bin/next" "$@"
|
||||
else
|
||||
exec node "$basedir/../../../../../node_modules/.pnpm/next@15.3.2_@babel+core@7.27.4_@opentelemetry+api@1.9.0_babel-plugin-react-compiler@19.1.0-rc_krzs4il3c2axvegn27goximifi/node_modules/next/dist/bin/next" "$@"
|
||||
fi
|
||||
17
packages/monitoring/sentry/node_modules/.bin/rollup
generated
vendored
Executable file
17
packages/monitoring/sentry/node_modules/.bin/rollup
generated
vendored
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -z "$NODE_PATH" ]; then
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/rollup@4.35.0/node_modules/rollup/dist/bin/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/rollup@4.35.0/node_modules/rollup/dist/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/rollup@4.35.0/node_modules/rollup/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/rollup@4.35.0/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules"
|
||||
else
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/rollup@4.35.0/node_modules/rollup/dist/bin/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/rollup@4.35.0/node_modules/rollup/dist/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/rollup@4.35.0/node_modules/rollup/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/rollup@4.35.0/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||
fi
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/rollup@4.35.0/node_modules/rollup/dist/bin/rollup" "$@"
|
||||
else
|
||||
exec node "$basedir/../../../../../node_modules/.pnpm/rollup@4.35.0/node_modules/rollup/dist/bin/rollup" "$@"
|
||||
fi
|
||||
17
packages/monitoring/sentry/node_modules/.bin/webpack
generated
vendored
Executable file
17
packages/monitoring/sentry/node_modules/.bin/webpack
generated
vendored
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh
|
||||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||
|
||||
case `uname` in
|
||||
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
|
||||
esac
|
||||
|
||||
if [ -z "$NODE_PATH" ]; then
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/webpack@5.99.9/node_modules/webpack/bin/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/webpack@5.99.9/node_modules/webpack/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/webpack@5.99.9/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules"
|
||||
else
|
||||
export NODE_PATH="/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/webpack@5.99.9/node_modules/webpack/bin/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/webpack@5.99.9/node_modules/webpack/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/webpack@5.99.9/node_modules:/Users/devmcee/dev/mountbirch/MRB2B/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||
fi
|
||||
if [ -x "$basedir/node" ]; then
|
||||
exec "$basedir/node" "$basedir/../../../../../node_modules/.pnpm/webpack@5.99.9/node_modules/webpack/bin/webpack.js" "$@"
|
||||
else
|
||||
exec node "$basedir/../../../../../node_modules/.pnpm/webpack@5.99.9/node_modules/webpack/bin/webpack.js" "$@"
|
||||
fi
|
||||
1
packages/monitoring/sentry/node_modules/@kit/eslint-config
generated
vendored
Symbolic link
1
packages/monitoring/sentry/node_modules/@kit/eslint-config
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../tooling/eslint
|
||||
1
packages/monitoring/sentry/node_modules/@kit/monitoring-core
generated
vendored
Symbolic link
1
packages/monitoring/sentry/node_modules/@kit/monitoring-core
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../core
|
||||
1
packages/monitoring/sentry/node_modules/@kit/prettier-config
generated
vendored
Symbolic link
1
packages/monitoring/sentry/node_modules/@kit/prettier-config
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../tooling/prettier
|
||||
1
packages/monitoring/sentry/node_modules/@kit/tsconfig
generated
vendored
Symbolic link
1
packages/monitoring/sentry/node_modules/@kit/tsconfig
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../tooling/typescript
|
||||
1
packages/monitoring/sentry/node_modules/@sentry/nextjs
generated
vendored
Symbolic link
1
packages/monitoring/sentry/node_modules/@sentry/nextjs
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../node_modules/.pnpm/@sentry+nextjs@9.27.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9.0__@op_t5jxdwm6lg44gx7av6vdt276cy/node_modules/@sentry/nextjs
|
||||
1
packages/monitoring/sentry/node_modules/@types/react
generated
vendored
Symbolic link
1
packages/monitoring/sentry/node_modules/@types/react
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../../node_modules/.pnpm/@types+react@19.1.4/node_modules/@types/react
|
||||
1
packages/monitoring/sentry/node_modules/import-in-the-middle
generated
vendored
Symbolic link
1
packages/monitoring/sentry/node_modules/import-in-the-middle
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../node_modules/.pnpm/import-in-the-middle@1.13.2/node_modules/import-in-the-middle
|
||||
1
packages/monitoring/sentry/node_modules/react
generated
vendored
Symbolic link
1
packages/monitoring/sentry/node_modules/react
generated
vendored
Symbolic link
@@ -0,0 +1 @@
|
||||
../../../../node_modules/.pnpm/react@19.1.0/node_modules/react
|
||||
37
packages/monitoring/sentry/package.json
Normal file
37
packages/monitoring/sentry/package.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "@kit/sentry",
|
||||
"private": true,
|
||||
"version": "0.1.0",
|
||||
"scripts": {
|
||||
"clean": "git clean -xdf .turbo node_modules",
|
||||
"format": "prettier --check \"**/*.{ts,tsx}\"",
|
||||
"lint": "eslint .",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"prettier": "@kit/prettier-config",
|
||||
"exports": {
|
||||
".": "./src/index.ts",
|
||||
"./provider": "./src/components/provider.tsx",
|
||||
"./config/client": "./src/sentry.client.config.ts",
|
||||
"./config/server": "./src/sentry.client.server.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@sentry/nextjs": "^9.19.0",
|
||||
"import-in-the-middle": "1.13.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kit/eslint-config": "workspace:*",
|
||||
"@kit/monitoring-core": "workspace:*",
|
||||
"@kit/prettier-config": "workspace:*",
|
||||
"@kit/tsconfig": "workspace:*",
|
||||
"@types/react": "19.1.4",
|
||||
"react": "19.1.0"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
"*": [
|
||||
"src/*"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
17
packages/monitoring/sentry/src/components/provider.tsx
Normal file
17
packages/monitoring/sentry/src/components/provider.tsx
Normal file
@@ -0,0 +1,17 @@
|
||||
import { MonitoringContext } from '@kit/monitoring-core';
|
||||
|
||||
import { SentryMonitoringService } from '../services/sentry-monitoring.service';
|
||||
|
||||
const sentry = new SentryMonitoringService();
|
||||
|
||||
export function SentryProvider({ children }: React.PropsWithChildren) {
|
||||
return <MonitoringProvider>{children}</MonitoringProvider>;
|
||||
}
|
||||
|
||||
function MonitoringProvider(props: React.PropsWithChildren) {
|
||||
return (
|
||||
<MonitoringContext.Provider value={sentry}>
|
||||
{props.children}
|
||||
</MonitoringContext.Provider>
|
||||
);
|
||||
}
|
||||
1
packages/monitoring/sentry/src/index.ts
Normal file
1
packages/monitoring/sentry/src/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from './services/sentry-monitoring.service';
|
||||
42
packages/monitoring/sentry/src/sentry.client.config.ts
Normal file
42
packages/monitoring/sentry/src/sentry.client.config.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { init } from '@sentry/nextjs';
|
||||
|
||||
type Parameters<T extends (args: never) => unknown> = T extends (
|
||||
...args: infer P
|
||||
) => unknown
|
||||
? P
|
||||
: never;
|
||||
|
||||
/**
|
||||
* @name initializeSentryBrowserClient
|
||||
* @description Initialize the Sentry client
|
||||
* @param props
|
||||
*/
|
||||
export function initializeSentryBrowserClient(
|
||||
props: Parameters<typeof init>[0] = {},
|
||||
) {
|
||||
return init({
|
||||
dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
|
||||
// Replay may only be enabled for the client-side
|
||||
integrations: [
|
||||
// add your desired integrations here
|
||||
// https://docs.sentry.io/platforms/javascript/configuration/integrations/
|
||||
],
|
||||
|
||||
// Set tracesSampleRate to 1.0 to capture 100%
|
||||
// of transactions for performance monitoring.
|
||||
// We recommend adjusting this value in production
|
||||
tracesSampleRate: props?.tracesSampleRate ?? 1.0,
|
||||
|
||||
// Capture Replay for 10% of all sessions,
|
||||
// plus for 100% of sessions with an error
|
||||
replaysSessionSampleRate: 0.1,
|
||||
replaysOnErrorSampleRate: 1.0,
|
||||
|
||||
// ...
|
||||
|
||||
// Note: if you want to override the automatic release value, do not set a
|
||||
// `release` value here - use the environment variable `SENTRY_RELEASE`, so
|
||||
// that it will also get attached to your source maps,
|
||||
...props,
|
||||
});
|
||||
}
|
||||
27
packages/monitoring/sentry/src/sentry.server.config.ts
Normal file
27
packages/monitoring/sentry/src/sentry.server.config.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { init } from '@sentry/nextjs';
|
||||
|
||||
type Parameters<T extends (args: never) => unknown> = T extends (
|
||||
...args: infer P
|
||||
) => unknown
|
||||
? P
|
||||
: never;
|
||||
|
||||
/**
|
||||
* @name initializeSentryServerClient
|
||||
* @description Initialize the Sentry client in the server
|
||||
* @param props
|
||||
*/
|
||||
export function initializeSentryServerClient(
|
||||
props: Parameters<typeof init>[0] = {},
|
||||
) {
|
||||
return init({
|
||||
dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
|
||||
|
||||
// ...
|
||||
|
||||
// Note: if you want to override the automatic release value, do not set a
|
||||
// `release` value here - use the environment variable `SENTRY_RELEASE`, so
|
||||
// that it will also get attached to your source maps,
|
||||
...props,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
import {
|
||||
Event as SentryEvent,
|
||||
User as SentryUser,
|
||||
captureEvent,
|
||||
captureException,
|
||||
setUser,
|
||||
} from '@sentry/nextjs';
|
||||
|
||||
import { MonitoringService } from '@kit/monitoring-core';
|
||||
|
||||
/**
|
||||
* @class
|
||||
* @implements {MonitoringService}
|
||||
* ServerSentryMonitoringService is responsible for capturing exceptions and identifying users using the Sentry monitoring service.
|
||||
*/
|
||||
export class SentryMonitoringService implements MonitoringService {
|
||||
private readonly readyPromise: Promise<unknown>;
|
||||
private readyResolver?: (value?: unknown) => void;
|
||||
|
||||
constructor() {
|
||||
this.readyPromise = new Promise(
|
||||
(resolve) => (this.readyResolver = resolve),
|
||||
);
|
||||
|
||||
void this.initialize();
|
||||
}
|
||||
|
||||
async ready() {
|
||||
return this.readyPromise;
|
||||
}
|
||||
|
||||
captureException(error: Error | null) {
|
||||
return captureException(error);
|
||||
}
|
||||
|
||||
captureEvent<Extra extends SentryEvent>(event: string, extra?: Extra) {
|
||||
return captureEvent({
|
||||
message: event,
|
||||
...(extra ?? {}),
|
||||
});
|
||||
}
|
||||
|
||||
identifyUser(user: SentryUser) {
|
||||
setUser(user);
|
||||
}
|
||||
|
||||
private async initialize() {
|
||||
const environment =
|
||||
process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT ?? process.env.VERCEL_ENV;
|
||||
|
||||
if (typeof document !== 'undefined') {
|
||||
const { initializeSentryBrowserClient } = await import(
|
||||
'../sentry.client.config'
|
||||
);
|
||||
|
||||
initializeSentryBrowserClient({
|
||||
environment,
|
||||
});
|
||||
} else {
|
||||
const { initializeSentryServerClient } = await import(
|
||||
'../sentry.server.config'
|
||||
);
|
||||
|
||||
initializeSentryServerClient({
|
||||
environment,
|
||||
});
|
||||
}
|
||||
|
||||
this.readyResolver?.();
|
||||
}
|
||||
}
|
||||
8
packages/monitoring/sentry/tsconfig.json
Normal file
8
packages/monitoring/sentry/tsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "@kit/tsconfig/base.json",
|
||||
"compilerOptions": {
|
||||
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
|
||||
},
|
||||
"include": ["*.ts", "src"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
Reference in New Issue
Block a user