@vreko/cli 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +45 -0
- package/dist/CeremonyView-LQS7FTMK.js +134 -0
- package/dist/CeremonyView-LQS7FTMK.js.map +1 -0
- package/dist/InitApp-7K5DTYSW.js +1479 -0
- package/dist/InitApp-7K5DTYSW.js.map +1 -0
- package/dist/SkippedTestDetector-PJSKSOZR.js +7 -0
- package/dist/SkippedTestDetector-PJSKSOZR.js.map +1 -0
- package/dist/TuiApp-FX23XQBK.js +8 -0
- package/dist/TuiApp-FX23XQBK.js.map +1 -0
- package/dist/analysis-ABEO6RTN.js +8 -0
- package/dist/analysis-ABEO6RTN.js.map +1 -0
- package/dist/auth-XNBEBNPY.js +7669 -0
- package/dist/auth-XNBEBNPY.js.map +1 -0
- package/dist/ceremony-M7CXVBVA.js +45 -0
- package/dist/ceremony-M7CXVBVA.js.map +1 -0
- package/dist/chunk-A3QSZJPD.js +3147 -0
- package/dist/chunk-A3QSZJPD.js.map +1 -0
- package/dist/chunk-ASGZ5B6C.js +3969 -0
- package/dist/chunk-ASGZ5B6C.js.map +1 -0
- package/dist/chunk-DMXC2JTC.js +58 -0
- package/dist/chunk-DMXC2JTC.js.map +1 -0
- package/dist/chunk-EEBSK2IH.js +161 -0
- package/dist/chunk-EEBSK2IH.js.map +1 -0
- package/dist/chunk-EWOJGXRX.js +22 -0
- package/dist/chunk-EWOJGXRX.js.map +1 -0
- package/dist/chunk-F7GEJLP7.js +2389 -0
- package/dist/chunk-F7GEJLP7.js.map +1 -0
- package/dist/chunk-GOYL3F4T.js +605 -0
- package/dist/chunk-GOYL3F4T.js.map +1 -0
- package/dist/chunk-GRMRYWYS.js +17 -0
- package/dist/chunk-GRMRYWYS.js.map +1 -0
- package/dist/chunk-GSUGROXB.js +1951 -0
- package/dist/chunk-GSUGROXB.js.map +1 -0
- package/dist/chunk-H7773ONB.js +50 -0
- package/dist/chunk-H7773ONB.js.map +1 -0
- package/dist/chunk-HFQHU5LC.js +445 -0
- package/dist/chunk-HFQHU5LC.js.map +1 -0
- package/dist/chunk-IVHUBLJD.js +318 -0
- package/dist/chunk-IVHUBLJD.js.map +1 -0
- package/dist/chunk-KJWKY4L4.js +14 -0
- package/dist/chunk-KJWKY4L4.js.map +1 -0
- package/dist/chunk-MJVY2XUN.js +1793 -0
- package/dist/chunk-MJVY2XUN.js.map +1 -0
- package/dist/chunk-QWZVCJII.js +1797 -0
- package/dist/chunk-QWZVCJII.js.map +1 -0
- package/dist/chunk-VTSNRV3V.js +3237 -0
- package/dist/chunk-VTSNRV3V.js.map +1 -0
- package/dist/chunk-W5B4GTXR.js +1466 -0
- package/dist/chunk-W5B4GTXR.js.map +1 -0
- package/dist/chunk-WZEZLVOW.js +4995 -0
- package/dist/chunk-WZEZLVOW.js.map +1 -0
- package/dist/chunk-YPTTIXKC.js +199 -0
- package/dist/chunk-YPTTIXKC.js.map +1 -0
- package/dist/chunk-Z55UGM6X.js +6360 -0
- package/dist/chunk-Z55UGM6X.js.map +1 -0
- package/dist/chunk-ZIIRQODJ.js +110 -0
- package/dist/chunk-ZIIRQODJ.js.map +1 -0
- package/dist/chunk-ZSUQ4FMB.js +77 -0
- package/dist/chunk-ZSUQ4FMB.js.map +1 -0
- package/dist/client-JMTSZS3V.js +10 -0
- package/dist/client-JMTSZS3V.js.map +1 -0
- package/dist/deprecated-snap.js +19 -0
- package/dist/deprecated-snap.js.map +1 -0
- package/dist/dist-2KWBZFLA.js +14 -0
- package/dist/dist-2KWBZFLA.js.map +1 -0
- package/dist/dist-5ZYKNNU3.js +7 -0
- package/dist/dist-5ZYKNNU3.js.map +1 -0
- package/dist/dist-CP3RFHPI.js +11 -0
- package/dist/dist-CP3RFHPI.js.map +1 -0
- package/dist/gecko-53ITAGG6.js +56 -0
- package/dist/gecko-53ITAGG6.js.map +1 -0
- package/dist/guards-QAFC64NO.js +7 -0
- package/dist/guards-QAFC64NO.js.map +1 -0
- package/dist/index.js +57785 -0
- package/dist/index.js.map +1 -0
- package/dist/init-command-246JIVXM.js +7 -0
- package/dist/init-command-246JIVXM.js.map +1 -0
- package/dist/init-core-KAI7LCXZ.js +12 -0
- package/dist/init-core-KAI7LCXZ.js.map +1 -0
- package/dist/init-scan-RZNYDTUV.js +1919 -0
- package/dist/init-scan-RZNYDTUV.js.map +1 -0
- package/dist/local-service-adapter-6KNN6WQL.js +8 -0
- package/dist/local-service-adapter-6KNN6WQL.js.map +1 -0
- package/dist/secure-credentials-JXWAQLS2.js +306 -0
- package/dist/secure-credentials-JXWAQLS2.js.map +1 -0
- package/dist/tui-TPJPUS2R.js +111 -0
- package/dist/tui-TPJPUS2R.js.map +1 -0
- package/dist/vreko-dir-O3RLG7PI.js +8 -0
- package/dist/vreko-dir-O3RLG7PI.js.map +1 -0
- package/package.json +132 -0
- package/scripts/check-banned-words.ts +152 -0
- package/scripts/hooks/posttooluse-file-notify.sh +108 -0
- package/scripts/hooks/pretooluse-fragile-guard.sh +82 -0
- package/scripts/post-install-notice.js +24 -0
- package/scripts/postinstall.mjs +84 -0
- package/scripts/preuninstall.mjs +34 -0
- package/scripts/verify-jsx-transform.mjs +55 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { __name } from './chunk-EWOJGXRX.js';
|
|
3
|
+
import * as node from '@sentry/node';
|
|
4
|
+
export { node as Sentry };
|
|
5
|
+
|
|
6
|
+
process.env.VREKO_CLI='true';process.env.NODE_NO_WARNINGS='1';
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __name2 = /* @__PURE__ */ __name((target, value) => __defProp(target, "name", {
|
|
9
|
+
value,
|
|
10
|
+
configurable: true
|
|
11
|
+
}), "__name");
|
|
12
|
+
var EXTRA_ALLOWLIST = /* @__PURE__ */ new Set([
|
|
13
|
+
"requestId",
|
|
14
|
+
"workspaceHash",
|
|
15
|
+
"sessionId",
|
|
16
|
+
"tier",
|
|
17
|
+
"cliVersion",
|
|
18
|
+
"daemonVersion",
|
|
19
|
+
"extensionVersion",
|
|
20
|
+
"platform",
|
|
21
|
+
"nodeVersion"
|
|
22
|
+
]);
|
|
23
|
+
var BLOCKED_BREADCRUMB_CATEGORIES = /* @__PURE__ */ new Set([
|
|
24
|
+
"fetch",
|
|
25
|
+
"xhr",
|
|
26
|
+
"console"
|
|
27
|
+
]);
|
|
28
|
+
var HOME_PATH_RE = /\/(Users|home)\/[^/]+\//g;
|
|
29
|
+
var GH_TOKEN_RE = /(ghp|gho|ghu|ghs)_[A-Za-z0-9]{36}/g;
|
|
30
|
+
var API_KEY_RE = /sk-[A-Za-z0-9]{32,}/g;
|
|
31
|
+
var MAX_STRING_LEN = 2048;
|
|
32
|
+
function scrubString(value) {
|
|
33
|
+
if (value.length > MAX_STRING_LEN) {
|
|
34
|
+
return `[TRUNCATED:${value.length}]`;
|
|
35
|
+
}
|
|
36
|
+
return value.replace(HOME_PATH_RE, "/~/").replace(GH_TOKEN_RE, "[REDACTED_GH_TOKEN]").replace(API_KEY_RE, "[REDACTED_API_KEY]");
|
|
37
|
+
}
|
|
38
|
+
__name(scrubString, "scrubString");
|
|
39
|
+
__name2(scrubString, "scrubString");
|
|
40
|
+
function createNextjsSentryConfig(options) {
|
|
41
|
+
const { dsn, release, environment, tracesSampleRate, ignoreErrors } = options;
|
|
42
|
+
const resolvedEnv = resolveDeploymentEnv(environment);
|
|
43
|
+
return {
|
|
44
|
+
dsn,
|
|
45
|
+
environment: resolvedEnv,
|
|
46
|
+
release: release ?? process.env.VERCEL_GIT_COMMIT_SHA ?? process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA ?? process.env.npm_package_version,
|
|
47
|
+
sendDefaultPii: false,
|
|
48
|
+
tracesSampleRate: tracesSampleRate ?? (resolvedEnv === "development" ? 1 : 0.1),
|
|
49
|
+
ignoreErrors: ignoreErrors ?? [
|
|
50
|
+
"NetworkError",
|
|
51
|
+
"Failed to fetch",
|
|
52
|
+
"Load failed",
|
|
53
|
+
"AbortError"
|
|
54
|
+
],
|
|
55
|
+
beforeSend(event) {
|
|
56
|
+
const req = event.request;
|
|
57
|
+
if (req?.headers) {
|
|
58
|
+
const headers = req.headers;
|
|
59
|
+
delete headers.authorization;
|
|
60
|
+
delete headers.cookie;
|
|
61
|
+
delete headers["x-api-key"];
|
|
62
|
+
}
|
|
63
|
+
const user = event.user;
|
|
64
|
+
if (user?.email) {
|
|
65
|
+
user.email = "[REDACTED]";
|
|
66
|
+
}
|
|
67
|
+
const exception = event.exception;
|
|
68
|
+
if (exception?.values) {
|
|
69
|
+
for (const exc of exception.values) {
|
|
70
|
+
if (exc.value && typeof exc.value === "string") {
|
|
71
|
+
exc.value = scrubString(exc.value);
|
|
72
|
+
}
|
|
73
|
+
const st = exc.stacktrace;
|
|
74
|
+
if (st?.frames) {
|
|
75
|
+
for (const frame of st.frames) {
|
|
76
|
+
if (typeof frame.filename === "string") {
|
|
77
|
+
frame.filename = scrubString(frame.filename);
|
|
78
|
+
}
|
|
79
|
+
if (typeof frame.abs_path === "string") {
|
|
80
|
+
frame.abs_path = scrubString(frame.abs_path);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return event;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
__name(createNextjsSentryConfig, "createNextjsSentryConfig");
|
|
91
|
+
__name2(createNextjsSentryConfig, "createNextjsSentryConfig");
|
|
92
|
+
function resolveDeploymentEnv(override) {
|
|
93
|
+
if (override) return override;
|
|
94
|
+
const explicit = process.env.DEPLOYMENT_ENV;
|
|
95
|
+
if (explicit === "development" || explicit === "staging" || explicit === "production") {
|
|
96
|
+
return explicit;
|
|
97
|
+
}
|
|
98
|
+
if (process.env.VERCEL_ENV === "preview") return "staging";
|
|
99
|
+
return process.env.NODE_ENV ?? "production";
|
|
100
|
+
}
|
|
101
|
+
__name(resolveDeploymentEnv, "resolveDeploymentEnv");
|
|
102
|
+
__name2(resolveDeploymentEnv, "resolveDeploymentEnv");
|
|
103
|
+
function createSentryConfig(options) {
|
|
104
|
+
const { dsn, surface, workspaceHash, tier, release, environment } = options;
|
|
105
|
+
const resolvedEnv = resolveDeploymentEnv(environment);
|
|
106
|
+
return {
|
|
107
|
+
dsn,
|
|
108
|
+
environment: resolvedEnv,
|
|
109
|
+
release: release ?? process.env.GIT_SHA ?? process.env.npm_package_version,
|
|
110
|
+
sendDefaultPii: false,
|
|
111
|
+
attachStacktrace: true,
|
|
112
|
+
// Full sampling in development; reduced in staging/production to limit overhead.
|
|
113
|
+
tracesSampleRate: resolvedEnv === "development" ? 1 : 0.1,
|
|
114
|
+
initialScope: {
|
|
115
|
+
tags: {
|
|
116
|
+
surface,
|
|
117
|
+
...tier ? {
|
|
118
|
+
tier
|
|
119
|
+
} : {}
|
|
120
|
+
},
|
|
121
|
+
...workspaceHash ? {
|
|
122
|
+
user: {
|
|
123
|
+
id: workspaceHash
|
|
124
|
+
}
|
|
125
|
+
} : {}
|
|
126
|
+
},
|
|
127
|
+
// Drop auto-capture integrations that can produce breadcrumbs with sensitive data
|
|
128
|
+
integrations(defaultIntegrations) {
|
|
129
|
+
return defaultIntegrations.filter((i) => ![
|
|
130
|
+
"Breadcrumbs",
|
|
131
|
+
"Console",
|
|
132
|
+
"Http"
|
|
133
|
+
].includes(i.name));
|
|
134
|
+
},
|
|
135
|
+
beforeSend(event) {
|
|
136
|
+
if (event.extra) {
|
|
137
|
+
const filtered = {};
|
|
138
|
+
for (const key of EXTRA_ALLOWLIST) {
|
|
139
|
+
if (key in event.extra) {
|
|
140
|
+
filtered[key] = event.extra[key];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
event.extra = filtered;
|
|
144
|
+
}
|
|
145
|
+
if (event.contexts?.runtime) {
|
|
146
|
+
event.contexts.runtime.args = void 0;
|
|
147
|
+
}
|
|
148
|
+
if (event.request) {
|
|
149
|
+
event.request.data = void 0;
|
|
150
|
+
}
|
|
151
|
+
if (event.breadcrumbs?.values) {
|
|
152
|
+
const breadcrumbs = event.breadcrumbs.values();
|
|
153
|
+
for (const crumb of breadcrumbs) {
|
|
154
|
+
crumb.data = void 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (event.exception?.values) {
|
|
158
|
+
for (const exc of event.exception.values) {
|
|
159
|
+
if (exc.value) {
|
|
160
|
+
exc.value = scrubString(exc.value);
|
|
161
|
+
}
|
|
162
|
+
if (exc.stacktrace?.frames) {
|
|
163
|
+
for (const frame of exc.stacktrace.frames) {
|
|
164
|
+
if (frame.filename) {
|
|
165
|
+
frame.filename = scrubString(frame.filename);
|
|
166
|
+
}
|
|
167
|
+
if (frame.abs_path) {
|
|
168
|
+
frame.abs_path = scrubString(frame.abs_path);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (event.message) {
|
|
175
|
+
event.message = scrubString(event.message);
|
|
176
|
+
}
|
|
177
|
+
return event;
|
|
178
|
+
},
|
|
179
|
+
beforeBreadcrumb(breadcrumb) {
|
|
180
|
+
const cat = breadcrumb.category ?? "";
|
|
181
|
+
if (BLOCKED_BREADCRUMB_CATEGORIES.has(cat)) {
|
|
182
|
+
const data = breadcrumb.data;
|
|
183
|
+
if (data?._allow === true) {
|
|
184
|
+
const { _allow: _, ...rest } = data;
|
|
185
|
+
breadcrumb.data = rest;
|
|
186
|
+
return breadcrumb;
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
return breadcrumb;
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
__name(createSentryConfig, "createSentryConfig");
|
|
195
|
+
__name2(createSentryConfig, "createSentryConfig");
|
|
196
|
+
|
|
197
|
+
export { createSentryConfig };
|
|
198
|
+
//# sourceMappingURL=chunk-YPTTIXKC.js.map
|
|
199
|
+
//# sourceMappingURL=chunk-YPTTIXKC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/sentry-privacy/src/index.ts"],"names":["EXTRA_ALLOWLIST","Set","BLOCKED_BREADCRUMB_CATEGORIES","HOME_PATH_RE","GH_TOKEN_RE","API_KEY_RE","MAX_STRING_LEN","scrubString","value","length","replace","createNextjsSentryConfig","options","dsn","release","environment","tracesSampleRate","ignoreErrors","resolvedEnv","resolveDeploymentEnv","process","env","VERCEL_GIT_COMMIT_SHA","NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA","npm_package_version","sendDefaultPii","beforeSend","event","req","request","headers","authorization","cookie","user","email","exception","values","exc","st","stacktrace","frames","frame","filename","abs_path","override","explicit","DEPLOYMENT_ENV","VERCEL_ENV","NODE_ENV","createSentryConfig","surface","workspaceHash","tier","GIT_SHA","attachStacktrace","initialScope","tags","id","integrations","defaultIntegrations","filter","i","includes","name","extra","filtered","key","contexts","runtime","args","undefined","data","breadcrumbs","crumb","message","beforeBreadcrumb","breadcrumb","cat","category","has","_allow","_","rest"],"mappings":"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","file":"chunk-YPTTIXKC.js","sourcesContent":["import type { NodeOptions } from \"@sentry/node\";\nimport * as Sentry from \"@sentry/node\";\n\ntype AnyIntegration = { name: string };\n\nexport { Sentry };\n\nexport type Surface = \"daemon\" | \"extension\" | \"cli\" | \"api\" | \"mcp-proxy\";\nexport type Tier = \"free\" | \"pro\" | \"team\" | \"pioneer\";\n\nexport interface SentryPrivacyOptions {\n\tdsn: string;\n\tsurface: Surface;\n\tworkspaceHash?: string;\n\ttier?: Tier;\n\trelease?: string;\n\tenvironment?: string;\n}\n\nconst EXTRA_ALLOWLIST = new Set([\n\t\"requestId\",\n\t\"workspaceHash\",\n\t\"sessionId\",\n\t\"tier\",\n\t\"cliVersion\",\n\t\"daemonVersion\",\n\t\"extensionVersion\",\n\t\"platform\",\n\t\"nodeVersion\",\n]);\n\nconst BLOCKED_BREADCRUMB_CATEGORIES = new Set([\"fetch\", \"xhr\", \"console\"]);\n\n// Matches /Users/<name>/ and /home/<name>/\nconst HOME_PATH_RE = /\\/(Users|home)\\/[^/]+\\//g;\n// GitHub personal/oauth/user/server tokens\nconst GH_TOKEN_RE = /(ghp|gho|ghu|ghs)_[A-Za-z0-9]{36}/g;\n// OpenAI-style secret keys\nconst API_KEY_RE = /sk-[A-Za-z0-9]{32,}/g;\n\nconst MAX_STRING_LEN = 2048;\n\nfunction scrubString(value: string): string {\n\tif (value.length > MAX_STRING_LEN) {\n\t\treturn `[TRUNCATED:${value.length}]`;\n\t}\n\treturn value\n\t\t.replace(HOME_PATH_RE, \"/~/\")\n\t\t.replace(GH_TOKEN_RE, \"[REDACTED_GH_TOKEN]\")\n\t\t.replace(API_KEY_RE, \"[REDACTED_API_KEY]\");\n}\n\nfunction scrubValue(value: unknown): unknown {\n\tif (typeof value === \"string\") {\n\t\treturn scrubString(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map(scrubValue);\n\t}\n\tif (value !== null && typeof value === \"object\") {\n\t\treturn scrubRecord(value as Record<string, unknown>);\n\t}\n\treturn value;\n}\n\nfunction scrubRecord(obj: Record<string, unknown>): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(obj)) {\n\t\tresult[k] = scrubValue(v);\n\t}\n\treturn result;\n}\n\nexport interface NextjsSentryOptions {\n\tdsn: string;\n\trelease?: string;\n\tenvironment?: string;\n\ttracesSampleRate?: number;\n\tignoreErrors?: (string | RegExp)[];\n}\n\nexport function createNextjsSentryConfig(options: NextjsSentryOptions): Record<string, unknown> {\n\tconst { dsn, release, environment, tracesSampleRate, ignoreErrors } = options;\n\tconst resolvedEnv = resolveDeploymentEnv(environment);\n\treturn {\n\t\tdsn,\n\t\tenvironment: resolvedEnv,\n\t\trelease:\n\t\t\trelease ??\n\t\t\tprocess.env.VERCEL_GIT_COMMIT_SHA ??\n\t\t\tprocess.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA ??\n\t\t\tprocess.env.npm_package_version,\n\t\tsendDefaultPii: false,\n\t\ttracesSampleRate: tracesSampleRate ?? (resolvedEnv === \"development\" ? 1.0 : 0.1),\n\t\tignoreErrors: ignoreErrors ?? [\"NetworkError\", \"Failed to fetch\", \"Load failed\", \"AbortError\"],\n\t\tbeforeSend(event: Record<string, unknown>) {\n\t\t\tconst req = event.request as Record<string, unknown> | undefined;\n\t\t\tif (req?.headers) {\n\t\t\t\tconst headers = req.headers as Record<string, unknown>;\n\t\t\t\tdelete headers.authorization;\n\t\t\t\tdelete headers.cookie;\n\t\t\t\tdelete headers[\"x-api-key\"];\n\t\t\t}\n\t\t\tconst user = event.user as Record<string, unknown> | undefined;\n\t\t\tif (user?.email) {\n\t\t\t\tuser.email = \"[REDACTED]\";\n\t\t\t}\n\t\t\tconst exception = event.exception as Record<string, unknown> | undefined;\n\t\t\tif (exception?.values) {\n\t\t\t\tfor (const exc of exception.values as Array<Record<string, unknown>>) {\n\t\t\t\t\tif (exc.value && typeof exc.value === \"string\") {\n\t\t\t\t\t\texc.value = scrubString(exc.value);\n\t\t\t\t\t}\n\t\t\t\t\tconst st = exc.stacktrace as Record<string, unknown> | undefined;\n\t\t\t\t\tif (st?.frames) {\n\t\t\t\t\t\tfor (const frame of st.frames as Array<Record<string, unknown>>) {\n\t\t\t\t\t\t\tif (typeof frame.filename === \"string\") {\n\t\t\t\t\t\t\t\tframe.filename = scrubString(frame.filename);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof frame.abs_path === \"string\") {\n\t\t\t\t\t\t\t\tframe.abs_path = scrubString(frame.abs_path);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn event;\n\t\t},\n\t};\n}\n\n/**\n * Resolve the deployment environment from explicit override, Doppler-aware\n * detection, or platform signals.\n *\n * NODE_ENV is unreliable: Doppler sets it to \"production\" even for local dev\n * configs. DEPLOYMENT_ENV is the authoritative discriminator - it is set\n * explicitly per Doppler config (dev → \"development\", stg → \"staging\",\n * prd → \"production\"). Falls back to platform signals and then NODE_ENV.\n */\nfunction resolveDeploymentEnv(override?: string): string {\n\tif (override) return override;\n\tconst explicit = process.env.DEPLOYMENT_ENV;\n\tif (explicit === \"development\" || explicit === \"staging\" || explicit === \"production\") {\n\t\treturn explicit;\n\t}\n\t// Staging Fly.io deploy: FLY_ALLOC_ID is set but DEPLOYMENT_ENV=staging\n\t// must be present in doppler stg config to reach this branch correctly.\n\t// Vercel preview deployments are staging, not production.\n\tif (process.env.VERCEL_ENV === \"preview\") return \"staging\";\n\t// NODE_ENV fallback - only reliable when Doppler is not in the picture\n\t// (e.g. unit tests, or non-Doppler local dev with a hand-crafted .env).\n\treturn process.env.NODE_ENV ?? \"production\";\n}\n\nexport function createSentryConfig(options: SentryPrivacyOptions): NodeOptions {\n\tconst { dsn, surface, workspaceHash, tier, release, environment } = options;\n\n\tconst resolvedEnv = resolveDeploymentEnv(environment);\n\n\treturn {\n\t\tdsn,\n\t\tenvironment: resolvedEnv,\n\t\trelease: release ?? process.env.GIT_SHA ?? process.env.npm_package_version,\n\t\tsendDefaultPii: false,\n\t\tattachStacktrace: true,\n\t\t// Full sampling in development; reduced in staging/production to limit overhead.\n\t\ttracesSampleRate: resolvedEnv === \"development\" ? 1.0 : 0.1,\n\n\t\tinitialScope: {\n\t\t\ttags: {\n\t\t\t\tsurface,\n\t\t\t\t...(tier ? { tier } : {}),\n\t\t\t},\n\t\t\t...(workspaceHash ? { user: { id: workspaceHash } } : {}),\n\t\t},\n\n\t\t// Drop auto-capture integrations that can produce breadcrumbs with sensitive data\n\t\tintegrations(defaultIntegrations: AnyIntegration[]) {\n\t\t\treturn defaultIntegrations.filter((i) => ![\"Breadcrumbs\", \"Console\", \"Http\"].includes(i.name));\n\t\t},\n\n\t\tbeforeSend(event) {\n\t\t\t// Strip extra keys outside allowlist\n\t\t\tif (event.extra) {\n\t\t\t\tconst filtered: Record<string, unknown> = {};\n\t\t\t\tfor (const key of EXTRA_ALLOWLIST) {\n\t\t\t\t\tif (key in event.extra) {\n\t\t\t\t\t\tfiltered[key] = event.extra[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tevent.extra = filtered;\n\t\t\t}\n\n\t\t\t// Clear runtime args (may contain file paths)\n\t\t\tif (event.contexts?.runtime) {\n\t\t\t\t(event.contexts.runtime as Record<string, unknown>).args = undefined;\n\t\t\t}\n\n\t\t\t// Clear request body (may contain RPC payloads)\n\t\t\tif (event.request) {\n\t\t\t\tevent.request.data = undefined;\n\t\t\t}\n\n\t\t\t// Clear all breadcrumb data payloads\n\t\t\tif (event.breadcrumbs?.values) {\n\t\t\t\tconst breadcrumbs = event.breadcrumbs.values();\n\t\t\t\tfor (const crumb of breadcrumbs) {\n\t\t\t\t\tcrumb.data = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Scrub strings in exception messages and stack frame filenames\n\t\t\tif (event.exception?.values) {\n\t\t\t\tfor (const exc of event.exception.values) {\n\t\t\t\t\tif (exc.value) {\n\t\t\t\t\t\texc.value = scrubString(exc.value);\n\t\t\t\t\t}\n\t\t\t\t\tif (exc.stacktrace?.frames) {\n\t\t\t\t\t\tfor (const frame of exc.stacktrace.frames) {\n\t\t\t\t\t\t\tif (frame.filename) {\n\t\t\t\t\t\t\t\tframe.filename = scrubString(frame.filename);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (frame.abs_path) {\n\t\t\t\t\t\t\t\tframe.abs_path = scrubString(frame.abs_path);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Scrub event message\n\t\t\tif (event.message) {\n\t\t\t\tevent.message = scrubString(event.message);\n\t\t\t}\n\n\t\t\treturn event;\n\t\t},\n\n\t\tbeforeBreadcrumb(breadcrumb) {\n\t\t\tconst cat = breadcrumb.category ?? \"\";\n\t\t\tif (BLOCKED_BREADCRUMB_CATEGORIES.has(cat)) {\n\t\t\t\t// Explicit opt-in via _allow sentinel bypasses the filter\n\t\t\t\tconst data = breadcrumb.data as Record<string, unknown> | undefined;\n\t\t\t\tif (data?._allow === true) {\n\t\t\t\t\tconst { _allow: _, ...rest } = data;\n\t\t\t\t\tbreadcrumb.data = rest as Record<string, unknown>;\n\t\t\t\t\treturn breadcrumb;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn breadcrumb;\n\t\t},\n\t};\n}\n"]}
|