diff --git a/apps/error-tracking-upload-source-maps/node-raw/package-lock.json b/apps/error-tracking-upload-source-maps/node-raw/package-lock.json index 071821929..d6906bf25 100644 --- a/apps/error-tracking-upload-source-maps/node-raw/package-lock.json +++ b/apps/error-tracking-upload-source-maps/node-raw/package-lock.json @@ -11,10 +11,56 @@ "posthog-node": "^5.35.4" }, "devDependencies": { + "@posthog/cli": "^0.16.0", "@types/node": "^26.0.0", "typescript": "^5.7.2" } }, + "node_modules/@posthog/cli": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@posthog/cli/-/cli-0.16.0.tgz", + "integrity": "sha512-W3di3Oy8jRZ0gUHEP6CG8OFLcKFvR4NNeZ3wqNeiY13pDHFZyXTPxsGTCwYUr5CmrToNvisEnR7KPYIGUzxbLg==", + "dev": true, + "hasInstallScript": true, + "hasShrinkwrap": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.1.2" + }, + "bin": { + "posthog-cli": "run-posthog-cli.js" + }, + "engines": { + "node": ">=14.14", + "npm": ">=6" + } + }, + "node_modules/@posthog/cli/node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/@posthog/cli/node_modules/prettier": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", + "extraneous": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@posthog/core": { "version": "1.29.13", "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.29.13.tgz", diff --git a/apps/error-tracking-upload-source-maps/node-raw/package.json b/apps/error-tracking-upload-source-maps/node-raw/package.json index d9035abce..0541387cf 100644 --- a/apps/error-tracking-upload-source-maps/node-raw/package.json +++ b/apps/error-tracking-upload-source-maps/node-raw/package.json @@ -4,13 +4,14 @@ "private": true, "type": "module", "scripts": { - "build": "tsc", + "build": "tsc && posthog-cli --dotenv-file .env sourcemap process --directory ./dist --release-name node-raw", "start": "node --env-file=.env dist/index.js" }, "dependencies": { "posthog-node": "^5.35.4" }, "devDependencies": { + "@posthog/cli": "^0.16.0", "@types/node": "^26.0.0", "typescript": "^5.7.2" } diff --git a/apps/error-tracking-upload-source-maps/node-raw/posthog-source-maps-report.md b/apps/error-tracking-upload-source-maps/node-raw/posthog-source-maps-report.md new file mode 100644 index 000000000..83d712548 --- /dev/null +++ b/apps/error-tracking-upload-source-maps/node-raw/posthog-source-maps-report.md @@ -0,0 +1,58 @@ +# PostHog source map upload setup + +## Changes made + +- `package.json` +- `package-lock.json` +- `tsconfig.json` +- `.env` + +The TypeScript build now emits external source maps with embedded source content. The production build then runs PostHog CLI processing against `dist`, injecting chunk IDs and uploading the matching source maps. + +## Commands + +Production build and upload: + +```sh +npm run build +``` + +Expanded build/upload command: + +```sh +tsc && posthog-cli --dotenv-file .env sourcemap process --directory ./dist --release-name node-raw +``` + +Run the built application: + +```sh +npm run start +``` + +## Environment keys + +The following keys are configured in the gitignored `.env` file: + +- `POSTHOG_CLI_API_KEY` +- `POSTHOG_CLI_PROJECT_ID` +- `POSTHOG_CLI_HOST` + +No secret values are included in this report. + +## CI/CD follow-up + +No Dockerfile or CI/CD configuration exists in this project, so no deployment pipeline could be traced or edited. Wherever `npm run build` runs in production, provide these environment variables through that platform's secret store: + +- `POSTHOG_CLI_API_KEY` +- `POSTHOG_CLI_PROJECT_ID` +- `POSTHOG_CLI_HOST` + +Do not create a `.env` file in CI or commit the personal API key. The build command keeps `--dotenv-file .env`; real CI environment variables take precedence, and a missing dotenv file is skipped with a warning. + +## Verification + +A temporary direct `captureException` test was added, exercised through the production build/run flow, and reverted. The permanent source-map configuration remains. + +1. Run `npm run build` for every production release. +2. Confirm a new upload appears on the [PostHog Symbol sets page](https://us.posthog.com/project/228144/error_tracking/configuration). +3. Trigger a captured production exception and confirm its stack trace resolves to original TypeScript source rather than generated JavaScript paths. diff --git a/apps/error-tracking-upload-source-maps/node-raw/tsconfig.json b/apps/error-tracking-upload-source-maps/node-raw/tsconfig.json index 2659d22cd..0750fd3e2 100644 --- a/apps/error-tracking-upload-source-maps/node-raw/tsconfig.json +++ b/apps/error-tracking-upload-source-maps/node-raw/tsconfig.json @@ -5,6 +5,8 @@ "moduleResolution": "NodeNext", "outDir": "dist", "rootDir": "src", + "sourceMap": true, + "inlineSources": true, "strict": true, "skipLibCheck": true },