B2B-88: add starter kit structure and elements

This commit is contained in:
devmc-ee
2025-06-08 16:18:30 +03:00
parent 657a36a298
commit e7b25600cb
1280 changed files with 77893 additions and 5688 deletions

View File

@@ -0,0 +1,3 @@
# Sentry Monitoring / @kit/sentry
Please refer to the [documentation](https://makerkit.dev/docs/next-supabase-turbo/sentry).

View 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
View 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
View 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
View 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
View 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
View 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

View File

@@ -0,0 +1 @@
../../../../../tooling/eslint

View File

@@ -0,0 +1 @@
../../../core

View File

@@ -0,0 +1 @@
../../../../../tooling/prettier

1
packages/monitoring/sentry/node_modules/@kit/tsconfig generated vendored Symbolic link
View File

@@ -0,0 +1 @@
../../../../../tooling/typescript

1
packages/monitoring/sentry/node_modules/@sentry/nextjs generated vendored Symbolic link
View File

@@ -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
View File

@@ -0,0 +1 @@
../../../../../node_modules/.pnpm/@types+react@19.1.4/node_modules/@types/react

View File

@@ -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
View File

@@ -0,0 +1 @@
../../../../node_modules/.pnpm/react@19.1.0/node_modules/react

View 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/*"
]
}
}
}

View 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>
);
}

View File

@@ -0,0 +1 @@
export * from './services/sentry-monitoring.service';

View 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,
});
}

View 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,
});
}

View File

@@ -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?.();
}
}

View File

@@ -0,0 +1,8 @@
{
"extends": "@kit/tsconfig/base.json",
"compilerOptions": {
"tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
},
"include": ["*.ts", "src"],
"exclude": ["node_modules"]
}