@ttt-productions/monitoring-core 0.13.0 → 0.13.2
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/dist/adapter.js.map +1 -1
- package/dist/adapters/noop.js.map +1 -1
- package/dist/adapters/sentry-node.js.map +1 -1
- package/dist/adapters/sentry.js.map +1 -1
- package/dist/api.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/init.js.map +1 -1
- package/dist/react/error-boundary.js.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/safe-event.js.map +1 -1
- package/dist/scrubber.d.ts +4 -4
- package/dist/scrubber.js +4 -4
- package/dist/scrubber.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"","sourcesContent":["import type { MonitoringInitOptions, MonitoringUser, ScopeLike } from \"./types.js\";\n\nexport interface MonitoringAdapter {\n init(options: MonitoringInitOptions): void | Promise<void>;\n\n captureException(error: unknown, context?: Record<string, unknown>): void;\n captureMessage(\n message: string,\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\"\n ): void;\n\n setUser(user: MonitoringUser | null): void;\n setTag(key: string, value: string): void;\n\n withScope?<T>(fn: (scope: ScopeLike) => T): T;\n \n addBreadcrumb?(breadcrumb: {\n category?: string;\n message?: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n data?: Record<string, unknown>;\n }): void;\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noop.js","sourceRoot":"","sources":["../../src/adapters/noop.ts"],"names":[],"mappings":"AAGA,MAAM,SAAS,GAAc;IAC3B,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;IAChB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;IACjB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,IAAI,EAAE,CAAC,QAA+B,EAAE,EAAE,GAAE,CAAC;IAE7C,gBAAgB,EAAE,CAAC,MAAe,EAAE,QAAkC,EAAE,EAAE,GAAE,CAAC;IAC7E,cAAc,EAAE,CAAC,QAAgB,EAAE,MAAY,EAAE,EAAE,GAAE,CAAC;IAEtD,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE,GAAE,CAAC;IAC7C,MAAM,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,GAAE,CAAC;IAE5C,SAAS,EAAE,CAAI,EAA2B,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;IAE5D,aAAa,EAAE,CAAC,WAKf,EAAE,EAAE,GAAE,CAAC;CACT,CAAC"}
|
|
1
|
+
{"version":3,"file":"noop.js","sourceRoot":"","sources":["../../src/adapters/noop.ts"],"names":[],"mappings":"AAGA,MAAM,SAAS,GAAc;IAC3B,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;IAChB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;IACjB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,IAAI,EAAE,CAAC,QAA+B,EAAE,EAAE,GAAE,CAAC;IAE7C,gBAAgB,EAAE,CAAC,MAAe,EAAE,QAAkC,EAAE,EAAE,GAAE,CAAC;IAC7E,cAAc,EAAE,CAAC,QAAgB,EAAE,MAAY,EAAE,EAAE,GAAE,CAAC;IAEtD,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE,GAAE,CAAC;IAC7C,MAAM,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,GAAE,CAAC;IAE5C,SAAS,EAAE,CAAI,EAA2B,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;IAE5D,aAAa,EAAE,CAAC,WAKf,EAAE,EAAE,GAAE,CAAC;CACT,CAAC","sourcesContent":["import type { MonitoringAdapter } from \"../adapter.js\";\nimport type { MonitoringInitOptions, MonitoringUser, ScopeLike } from \"../types.js\";\n\nconst noopScope: ScopeLike = {\n setTag: () => {},\n setUser: () => {},\n setExtra: () => {},\n setContext: () => {},\n};\n\nexport const NoopAdapter: MonitoringAdapter = {\n init: (_options: MonitoringInitOptions) => {},\n\n captureException: (_error: unknown, _context?: Record<string, unknown>) => {},\n captureMessage: (_message: string, _level?: any) => {},\n\n setUser: (_user: MonitoringUser | null) => {},\n setTag: (_key: string, _value: string) => {},\n\n withScope: <T>(fn: (scope: ScopeLike) => T) => fn(noopScope),\n \n addBreadcrumb: (_breadcrumb: {\n category?: string;\n message?: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n data?: Record<string, unknown>;\n }) => {},\n};"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentry-node.js","sourceRoot":"","sources":["../../src/adapters/sentry-node.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sentry-node.js","sourceRoot":"","sources":["../../src/adapters/sentry-node.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MonitoringAdapter } from \"../adapter.js\";\nimport type { MonitoringInitOptions, MonitoringUser, ScopeLike } from \"../types.js\";\n\ntype SentryNodeLike = {\n init: (opts: any) => void;\n captureException: (e: unknown, hint?: any) => void;\n captureMessage: (m: string, level?: any) => void;\n setUser: (u: any) => void;\n setTag: (k: string, v: string) => void;\n withScope: (fn: (scope: any) => void) => void;\n addBreadcrumb: (breadcrumb: any) => void;\n};\n\nlet sentryNodePromise: Promise<SentryNodeLike> | null = null;\nlet sentryNodeInstance: SentryNodeLike | null = null;\n\nfunction getSentryNode(): Promise<SentryNodeLike> {\n if (!sentryNodePromise) {\n sentryNodePromise = import(\"@sentry/node\").then((m) => {\n sentryNodeInstance = m as any;\n return sentryNodeInstance!;\n });\n }\n return sentryNodePromise;\n}\n\nexport const SentryNodeAdapter: MonitoringAdapter = {\n async init(options: MonitoringInitOptions) {\n const enabled = options.enabled ?? true;\n if (!enabled || !options.dsn) return;\n\n const S = await getSentryNode();\n S.init({\n dsn: options.dsn,\n environment: options.environment,\n enabled: true,\n release: options.release,\n ...(options.tracesSampleRate !== undefined ? { tracesSampleRate: options.tracesSampleRate } : {}),\n ...(options.integrations !== undefined ? { integrations: options.integrations } : {}),\n });\n },\n\n captureException(error: unknown, context?: Record<string, unknown>) {\n if (sentryNodeInstance) {\n if (context) {\n sentryNodeInstance.withScope((scope) => {\n for (const [k, v] of Object.entries(context)) {\n if (typeof scope?.setExtra === \"function\") scope.setExtra(k, v);\n }\n sentryNodeInstance!.captureException(error);\n });\n return;\n }\n sentryNodeInstance.captureException(error);\n return;\n }\n\n void (async () => {\n const S = await getSentryNode();\n\n if (context) {\n S.withScope((scope) => {\n for (const [k, v] of Object.entries(context)) {\n if (typeof scope?.setExtra === \"function\") scope.setExtra(k, v);\n }\n S.captureException(error);\n });\n return;\n }\n\n S.captureException(error);\n })();\n },\n\n captureMessage(message: string, level?: any) {\n if (sentryNodeInstance) {\n sentryNodeInstance.captureMessage(message, level);\n return;\n }\n void (async () => {\n const S = await getSentryNode();\n S.captureMessage(message, level);\n })();\n },\n\n setUser(user: MonitoringUser | null) {\n if (sentryNodeInstance) {\n sentryNodeInstance.setUser(user as any);\n return;\n }\n void (async () => {\n const S = await getSentryNode();\n S.setUser(user as any);\n })();\n },\n\n setTag(key: string, value: string) {\n if (sentryNodeInstance) {\n sentryNodeInstance.setTag(key, value);\n return;\n }\n void (async () => {\n const S = await getSentryNode();\n S.setTag(key, value);\n })();\n },\n\n // NOTE: withScope calls `fn` exactly once. When Sentry is already loaded\n // (the expected steady state — `init()` awaits the dynamic import, and\n // callers must await `initMonitoring()` before serving traffic), it runs\n // synchronously through the real Sentry scope. Only during the narrow\n // pre-load race window (a call that races the very first `getSentryNode()`\n // resolution) does it fall back to a synchronous no-op-scope call plus an\n // async replay against the real scope — mirroring the browser adapter's\n // same accepted tradeoff for that same race window.\n withScope<T>(fn: (scope: ScopeLike) => T): T {\n if (sentryNodeInstance) {\n let result: T;\n sentryNodeInstance.withScope((scope) => {\n result = fn(scope as any);\n });\n return result!;\n }\n\n const minimalScope: ScopeLike = {\n setTag: () => {},\n setUser: () => {},\n setExtra: () => {},\n setContext: () => {},\n };\n\n void (async () => {\n const S = await getSentryNode();\n S.withScope((scope) => fn(scope as any));\n })();\n\n return fn(minimalScope);\n },\n\n addBreadcrumb(breadcrumb: {\n category?: string;\n message?: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n data?: Record<string, unknown>;\n }) {\n if (sentryNodeInstance) {\n sentryNodeInstance.addBreadcrumb(breadcrumb);\n return;\n }\n void (async () => {\n const S = await getSentryNode();\n S.addBreadcrumb(breadcrumb);\n })();\n },\n};"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../src/adapters/sentry.ts"],"names":[],"mappings":"AAaA,IAAI,aAAa,GAA+B,IAAI,CAAC;AACrD,IAAI,cAAc,GAAsB,IAAI,CAAC;AAE7C,SAAS,SAAS;IAChB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAClD,cAAc,GAAG,CAAQ,CAAC;YAC1B,OAAO,cAAe,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,KAAK,CAAC,IAAI,CAAC,OAA8B;QACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;QACxC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG;YAAE,OAAO;QAErC,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;QAC5B,CAAC,CAAC,IAAI,CAAC;YACL,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjG,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,KAAc,EAAE,OAAiC;QAChE,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,OAAO,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;gBACxC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;oBACjC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC7C,IAAI,OAAO,KAAK,EAAE,QAAQ,KAAK,UAAU;4BAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClE,CAAC;oBACD,cAAe,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;YAE5B,IAAI,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC3B,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;oBACpB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC7C,IAAI,OAAO,KAAK,EAAE,QAAQ,KAAK,UAAU;4BAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClE,CAAC;oBACD,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,cAAc,CAAC,OAAe,EAAE,KAAW;QACzC,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;YAC5B,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,OAAO,CAAC,IAA2B;QACjC,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,OAAO,CAAC,IAAW,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;QACD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;YAC5B,CAAC,CAAC,OAAO,CAAC,IAAW,CAAC,CAAC;QACzB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,MAAM,CAAC,GAAW,EAAE,KAAa;QAC/B,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;YAC5B,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,SAAS,CAAI,EAA2B;QACtC,IAAI,cAAc,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,MAAS,CAAC;YACd,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjC,MAAM,GAAG,EAAE,CAAC,KAAY,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,OAAO,MAAO,CAAC;QACjB,CAAC;QAED,kEAAkE;QAClE,MAAM,YAAY,GAAc;YAC9B,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;YAChB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;YACjB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;YAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;SACrB,CAAC;QAEF,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,SAAS;gBAAE,OAAO;YACzB,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,KAAY,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,aAAa,CAAC,UAKb;QACC,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC;gBACjC,cAAc,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,CAAC,GAAG,MAAM,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;gBACpB,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../src/adapters/sentry.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MonitoringAdapter } from \"../adapter.js\";\nimport type { MonitoringInitOptions, MonitoringUser, ScopeLike } from \"../types.js\";\n\ntype SentryLike = {\n init: (opts: any) => void;\n captureException: (e: unknown) => void;\n captureMessage: (m: string, level?: any) => void;\n setUser: (u: any) => void;\n setTag: (k: string, v: string) => void;\n withScope?: (fn: (scope: any) => void) => void;\n addBreadcrumb?: (breadcrumb: any) => void;\n};\n\nlet sentryPromise: Promise<SentryLike> | null = null;\nlet sentryInstance: SentryLike | null = null;\n\nfunction getSentry(): Promise<SentryLike> {\n if (!sentryPromise) {\n sentryPromise = import(\"@sentry/nextjs\").then((m) => {\n sentryInstance = m as any;\n return sentryInstance!;\n });\n }\n return sentryPromise;\n}\n\nexport const SentryAdapter: MonitoringAdapter = {\n async init(options: MonitoringInitOptions) {\n const enabled = options.enabled ?? true;\n if (!enabled || !options.dsn) return;\n\n const S = await getSentry();\n S.init({\n dsn: options.dsn,\n environment: options.environment,\n enabled: true,\n release: options.release,\n ...(options.tracesSampleRate !== undefined ? { tracesSampleRate: options.tracesSampleRate } : {}),\n ...(options.integrations !== undefined ? { integrations: options.integrations } : {}),\n });\n },\n\n captureException(error: unknown, context?: Record<string, unknown>) {\n if (sentryInstance) {\n if (context && sentryInstance.withScope) {\n sentryInstance.withScope((scope) => {\n for (const [k, v] of Object.entries(context)) {\n if (typeof scope?.setExtra === \"function\") scope.setExtra(k, v);\n }\n sentryInstance!.captureException(error);\n });\n return;\n }\n sentryInstance.captureException(error);\n return;\n }\n\n void (async () => {\n const S = await getSentry();\n\n if (context && S.withScope) {\n S.withScope((scope) => {\n for (const [k, v] of Object.entries(context)) {\n if (typeof scope?.setExtra === \"function\") scope.setExtra(k, v);\n }\n S.captureException(error);\n });\n return;\n }\n\n S.captureException(error);\n })();\n },\n\n captureMessage(message: string, level?: any) {\n if (sentryInstance) {\n sentryInstance.captureMessage(message, level);\n return;\n }\n void (async () => {\n const S = await getSentry();\n S.captureMessage(message, level);\n })();\n },\n\n setUser(user: MonitoringUser | null) {\n if (sentryInstance) {\n sentryInstance.setUser(user as any);\n return;\n }\n void (async () => {\n const S = await getSentry();\n S.setUser(user as any);\n })();\n },\n\n setTag(key: string, value: string) {\n if (sentryInstance) {\n sentryInstance.setTag(key, value);\n return;\n }\n void (async () => {\n const S = await getSentry();\n S.setTag(key, value);\n })();\n },\n\n withScope<T>(fn: (scope: ScopeLike) => T): T {\n if (sentryInstance && sentryInstance.withScope) {\n let result: T;\n sentryInstance.withScope((scope) => {\n result = fn(scope as any);\n });\n return result!;\n }\n\n // Sentry not loaded yet — run with no-op scope, then replay async\n const minimalScope: ScopeLike = {\n setTag: () => {},\n setUser: () => {},\n setExtra: () => {},\n setContext: () => {},\n };\n\n void (async () => {\n const S = await getSentry();\n if (!S.withScope) return;\n S.withScope((scope) => fn(scope as any));\n })();\n\n return fn(minimalScope);\n },\n\n addBreadcrumb(breadcrumb: {\n category?: string;\n message?: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n data?: Record<string, unknown>;\n }) {\n if (sentryInstance) {\n if (sentryInstance.addBreadcrumb) {\n sentryInstance.addBreadcrumb(breadcrumb);\n }\n return;\n }\n void (async () => {\n const S = await getSentry();\n if (S.addBreadcrumb) {\n S.addBreadcrumb(breadcrumb);\n }\n })();\n },\n};"]}
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,OAAiC;IAChF,OAAO,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,KAAwD;IAExD,OAAO,oBAAoB,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAA2B;IACjD,OAAO,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,KAAa;IAC/C,OAAO,oBAAoB,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAuB;IAC/C,MAAM,CAAC,GAAG,oBAAoB,EAAE,CAAC;IACjC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;QAChB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;KACrB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAK7B;IACC,MAAM,CAAC,GAAG,oBAAoB,EAAE,CAAC;IACjC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QACpB,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,UAAU,gBAAgB,CAAC,KAAc,EAAE,OAAiC;IAChF,OAAO,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,KAAwD;IAExD,OAAO,oBAAoB,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAA2B;IACjD,OAAO,oBAAoB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,KAAa;IAC/C,OAAO,oBAAoB,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAuB;IAC/C,MAAM,CAAC,GAAG,oBAAoB,EAAE,CAAC;IACjC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;QAChB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;KACrB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAK7B;IACC,MAAM,CAAC,GAAG,oBAAoB,EAAE,CAAC;IACjC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QACpB,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC","sourcesContent":["import type { MonitoringUser } from \"./types.js\";\nimport { getMonitoringAdapter } from \"./init.js\";\n\nexport function captureException(error: unknown, context?: Record<string, unknown>) {\n return getMonitoringAdapter().captureException(error, context);\n}\n\nexport function captureMessage(\n message: string,\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\"\n) {\n return getMonitoringAdapter().captureMessage(message, level);\n}\n\nexport function setUser(user: MonitoringUser | null) {\n return getMonitoringAdapter().setUser(user);\n}\n\nexport function setTag(key: string, value: string) {\n return getMonitoringAdapter().setTag(key, value);\n}\n\nexport function withScope(fn: (scope: any) => any) {\n const a = getMonitoringAdapter();\n return a.withScope ? a.withScope(fn as any) : fn({\n setTag: () => {},\n setUser: () => {},\n setExtra: () => {},\n setContext: () => {},\n });\n}\n\nexport function addBreadcrumb(breadcrumb: {\n category?: string;\n message?: string;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n data?: Record<string, unknown>;\n}) {\n const a = getMonitoringAdapter();\n if (a.addBreadcrumb) {\n a.addBreadcrumb(breadcrumb);\n }\n}"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC/G,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AASvG,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,YAAY,EACZ,WAAW,EACX,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAOvB,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC/G,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AASvG,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,YAAY,EACZ,WAAW,EACX,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAOvB,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export type { MonitoringInitOptions, MonitoringUser, MonitoringProvider, ScopeLike } from \"./types.js\";\nexport type { MonitoringAdapter } from \"./adapter.js\";\n\nexport { initMonitoring, getMonitoringAdapter, setMonitoringAdapter, resetMonitoringAdapter } from \"./init.js\";\nexport { captureException, captureMessage, setUser, setTag, withScope, addBreadcrumb } from \"./api.js\";\n\nexport type {\n ForbiddenPattern,\n RedactStringOptions,\n ScrubbableEvent,\n TelemetryScrubberOptions,\n BeforeSendHook,\n} from \"./scrubber.js\";\nexport {\n REDACTION_PLACEHOLDER,\n DEFAULT_FORBIDDEN_PATTERNS,\n redactString,\n redactEvent,\n createTelemetryScrubber,\n} from \"./scrubber.js\";\n\nexport type {\n DefaultSafeEventKey,\n SafeEvent,\n BuildSafeEventOptions,\n} from \"./safe-event.js\";\nexport { DEFAULT_SAFE_EVENT_KEYS, buildSafeEvent } from \"./safe-event.js\";"]}
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MonitoringAdapter } from \"./adapter.js\";\nimport type { MonitoringInitOptions } from \"./types.js\";\nimport { NoopAdapter } from \"./adapters/noop.js\";\n\nlet adapter: MonitoringAdapter = NoopAdapter;\nlet initialized = false;\nlet currentOptions: MonitoringInitOptions | null = null;\n\nconst isBrowser = typeof window !== \"undefined\";\n\nexport function getMonitoringAdapter(): MonitoringAdapter {\n return adapter;\n}\n\nexport async function initMonitoring(\n options: MonitoringInitOptions,\n force = false\n): Promise<void> {\n // Prevent unnecessary re-init\n if (\n initialized &&\n !force &&\n JSON.stringify(currentOptions) === JSON.stringify(options)\n ) {\n return;\n }\n\n if (initialized) {\n console.warn(\"[monitoring-core] Re-initializing monitoring with new config\");\n }\n\n currentOptions = options;\n\n const enabled = options.enabled ?? true;\n\n // Local-dev gate: force noop adapter when any Firebase emulator signal is\n // present, or when the explicit kill switch is set. This keeps Sentry\n // completely inert during local dev (npm run dev:local + emulators),\n // including not importing the SDK. Hosted dev and hosted prod are\n // unaffected — they never have these env vars set.\n const isLocalDev =\n (typeof process !== \"undefined\" &&\n (process.env?.NEXT_PUBLIC_USE_EMULATORS === \"true\" ||\n process.env?.FUNCTIONS_EMULATOR === \"true\" ||\n !!process.env?.FIREBASE_EMULATOR_HUB ||\n process.env?.NEXT_PUBLIC_SENTRY_ENABLED === \"false\"));\n\n if (!enabled || options.provider === \"noop\" || isLocalDev) {\n adapter = NoopAdapter;\n initialized = true;\n return;\n }\n\n // ---------- BROWSER (Next.js / React) ----------\n if (options.provider === \"sentry\") {\n const { SentryAdapter } = await import(\"./adapters/sentry.js\");\n adapter = SentryAdapter;\n await adapter.init(options);\n initialized = true;\n return;\n }\n\n // ---------- NODE (Firebase Functions, servers) ----------\n if (options.provider === \"sentry-node\") {\n if (isBrowser) {\n console.warn(\n \"[monitoring-core] Ignoring sentry-node init in browser environment\"\n );\n adapter = NoopAdapter;\n initialized = true;\n return;\n }\n\n const { SentryNodeAdapter } = await import(\"./adapters/sentry-node.js\");\n adapter = SentryNodeAdapter;\n await adapter.init(options);\n initialized = true;\n return;\n }\n\n // Fallback\n adapter = NoopAdapter;\n initialized = true;\n}\n\n/**\n * Test seam — install a specific adapter without going through `initMonitoring`.\n *\n * Intended for unit tests in `monitoring-core` and in any consuming package\n * that wants to install a recording fake. Not for production code.\n *\n * Marking the module as initialized prevents a subsequent `initMonitoring`\n * call with the same options from being short-circuited by the dedup check.\n */\nexport function setMonitoringAdapter(next: MonitoringAdapter): void {\n adapter = next;\n initialized = true;\n currentOptions = null;\n}\n\n/**\n * Test seam — restore the default `NoopAdapter` and clear init state.\n *\n * After calling this, `getMonitoringAdapter()` returns the `NoopAdapter`\n * singleton and the next `initMonitoring` call runs end-to-end without\n * being deduped against any previous options.\n */\nexport function resetMonitoringAdapter(): void {\n adapter = NoopAdapter;\n initialized = false;\n currentOptions = null;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-boundary.js","sourceRoot":"","sources":["../../src/react/error-boundary.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAgB7C;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAiD;IAClF,KAAK,GAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAEhD,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,SAAoB;QAClD,gBAAgB,CAAC,KAAK,EAAE;YACtB,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"error-boundary.js","sourceRoot":"","sources":["../../src/react/error-boundary.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAgB7C;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAiD;IAClF,KAAK,GAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAEhD,MAAM,CAAC,wBAAwB;QAC7B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,SAAoB;QAClD,gBAAgB,CAAC,KAAK,EAAE;YACtB,cAAc,EAAE,SAAS,CAAC,cAAc;YACxC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF","sourcesContent":["\"use client\";\n\nimport { Component, type ErrorInfo, type ReactNode } from \"react\";\nimport { captureException } from \"../api.js\";\n\nexport interface ErrorBoundaryProps {\n children: ReactNode;\n /** Rendered when an error has been caught. */\n fallback: ReactNode;\n /** Identifier sent to monitoring (e.g. \"checkout-page\"). */\n context: string;\n /** Optional callback invoked alongside captureException. */\n onError?: (error: Error, info: ErrorInfo) => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n}\n\n/**\n * Generic React Error Boundary that reports to the configured monitoring\n * provider via `captureException`. The fallback UI is fully consumer-owned.\n */\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n state: ErrorBoundaryState = { hasError: false };\n\n static getDerivedStateFromError(): ErrorBoundaryState {\n return { hasError: true };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n captureException(error, {\n componentStack: errorInfo.componentStack,\n context: this.props.context,\n });\n this.props.onError?.(error, errorInfo);\n }\n\n render() {\n if (this.state.hasError) return this.props.fallback;\n return this.props.children;\n }\n}\n"]}
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["\"use client\";\n\nexport { ErrorBoundary } from \"./error-boundary.js\";\nexport type { ErrorBoundaryProps } from \"./error-boundary.js\";\n"]}
|
package/dist/safe-event.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-event.js","sourceRoot":"","sources":["../src/safe-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;AA2B3F;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAc,EACd,UAAiC,EAAE;IAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,uBAAuB,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC;IACrD,MAAM,GAAG,GAAc,EAAE,CAAC;IAE1B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,SAAS;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,aAAa;YAAE,SAAS;QACpD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"safe-event.js","sourceRoot":"","sources":["../src/safe-event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAU,CAAC;AA2B3F;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAc,EACd,UAAiC,EAAE;IAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,uBAAuB,CAAC;IAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC;IACrD,MAAM,GAAG,GAAc,EAAE,CAAC;IAE1B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,SAAS;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,aAAa;YAAE,SAAS;QACpD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["/**\n * Safe-event allowlist helper — the safety-scoped telemetry layer.\n *\n * Safety-domain code (the app's `functions/src/safety/` + `functions/src/ncii/`)\n * must emit telemetry that carries ONLY a fixed allowlist of structurally-safe\n * fields — never content, evidence URLs, IPs, detector hashes, or credentials.\n * This helper takes an arbitrary object and returns a NEW object containing only\n * the allowlisted keys; every other key is dropped. `undefined`-valued\n * allowlisted keys are also dropped so the emitted payload stays minimal.\n *\n * This is the complement to the global {@link ./scrubber} redactor: the scrubber\n * is defense-in-depth against leaks from anywhere; the safe-event allowlist is\n * the positive contract for code that deliberately touches safety data — nothing\n * escapes unless it is on the list.\n *\n * GENERIC: the default allowlist (`caseId`, `phase`, `safeCode`, `traceId`) is\n * the safe field set named in the CSAM design doc, but the key set is\n * configurable so the app can extend/replace it without a package change.\n */\n\n/** The safe field set every safety telemetry event may carry. */\nexport const DEFAULT_SAFE_EVENT_KEYS = [\"caseId\", \"phase\", \"safeCode\", \"traceId\"] as const;\n\nexport type DefaultSafeEventKey = (typeof DEFAULT_SAFE_EVENT_KEYS)[number];\n\n/** The allowlisted-only shape produced from an arbitrary input. */\nexport type SafeEvent = {\n caseId?: string;\n phase?: string;\n safeCode?: string;\n traceId?: string;\n [key: string]: unknown;\n};\n\nexport type BuildSafeEventOptions = {\n /**\n * Allowed keys. Defaults to {@link DEFAULT_SAFE_EVENT_KEYS}. Supply a custom\n * list (a superset or a different set) to extend the contract app-side without\n * changing this package.\n */\n allowedKeys?: readonly string[];\n /**\n * Keep allowlisted keys whose value is `undefined`. Defaults to false (drop\n * them) so the payload never carries empty slots.\n */\n keepUndefined?: boolean;\n};\n\n/**\n * Project an arbitrary object down to its allowlisted keys. Any key not on the\n * allowlist is dropped entirely — the returned object is a fresh copy, never the\n * input. Non-object input yields an empty object.\n *\n * @example\n * const evt = buildSafeEvent({\n * caseId: 'case_123',\n * phase: 'quarantine',\n * safeCode: 'CS-DENY',\n * traceId: 't-abc',\n * // everything below is DROPPED:\n * evidenceUrl: 'https://…/ncii-evidence/x',\n * reporterIp: '203.0.113.7',\n * detectorHash: 'ab12…',\n * });\n * // → { caseId, phase, safeCode, traceId }\n * captureMessage(JSON.stringify(evt)); // or attach as safe context\n */\nexport function buildSafeEvent(\n input: unknown,\n options: BuildSafeEventOptions = {}\n): SafeEvent {\n const allowed = options.allowedKeys ?? DEFAULT_SAFE_EVENT_KEYS;\n const keepUndefined = options.keepUndefined ?? false;\n const out: SafeEvent = {};\n\n if (input === null || typeof input !== \"object\") {\n return out;\n }\n const record = input as Record<string, unknown>;\n\n for (const key of allowed) {\n if (!Object.prototype.hasOwnProperty.call(record, key)) continue;\n const value = record[key];\n if (value === undefined && !keepUndefined) continue;\n out[key] = value;\n }\n\n return out;\n}\n"]}
|
package/dist/scrubber.d.ts
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
*
|
|
9
9
|
* This package is GENERIC — it ships only obvious, domain-neutral defaults
|
|
10
10
|
* (full IPv4/IPv6 addresses, bearer/authorization tokens, generic credential
|
|
11
|
-
* assignments).
|
|
11
|
+
* assignments). Product-specific patterns (evidence-bucket URL prefixes,
|
|
12
12
|
* detector-hash shapes, NCMEC credential markers) are INJECTED by the consuming
|
|
13
|
-
* app via {@link createTelemetryScrubber}'s `patterns` option. No
|
|
13
|
+
* app via {@link createTelemetryScrubber}'s `patterns` option. No app-data-package
|
|
14
14
|
* import, no app-specific literals.
|
|
15
15
|
*/
|
|
16
16
|
/** The fixed replacement written over any matched forbidden substring. */
|
|
@@ -82,14 +82,14 @@ export declare function redactEvent<T extends ScrubbableEvent>(event: T, options
|
|
|
82
82
|
export type BeforeSendHook = (event: ScrubbableEvent, hint?: unknown) => ScrubbableEvent | null;
|
|
83
83
|
/**
|
|
84
84
|
* Build a `beforeSend` hook that scrubs every outgoing event. The app supplies
|
|
85
|
-
* its
|
|
85
|
+
* its product-specific `patterns`; generic defaults are included unless disabled.
|
|
86
86
|
*
|
|
87
87
|
* @example
|
|
88
88
|
* Sentry.init({
|
|
89
89
|
* dsn,
|
|
90
90
|
* beforeSend: createTelemetryScrubber({
|
|
91
91
|
* patterns: [
|
|
92
|
-
* 'https://storage.googleapis.com/
|
|
92
|
+
* 'https://storage.googleapis.com/example-ncii-evidence/',
|
|
93
93
|
* /\bncmec-[a-z0-9]{16,}\b/gi,
|
|
94
94
|
* /\b[a-f0-9]{64}\b/g, // detector hash shape
|
|
95
95
|
* ],
|
package/dist/scrubber.js
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
*
|
|
9
9
|
* This package is GENERIC — it ships only obvious, domain-neutral defaults
|
|
10
10
|
* (full IPv4/IPv6 addresses, bearer/authorization tokens, generic credential
|
|
11
|
-
* assignments).
|
|
11
|
+
* assignments). Product-specific patterns (evidence-bucket URL prefixes,
|
|
12
12
|
* detector-hash shapes, NCMEC credential markers) are INJECTED by the consuming
|
|
13
|
-
* app via {@link createTelemetryScrubber}'s `patterns` option. No
|
|
13
|
+
* app via {@link createTelemetryScrubber}'s `patterns` option. No app-data-package
|
|
14
14
|
* import, no app-specific literals.
|
|
15
15
|
*/
|
|
16
16
|
/** The fixed replacement written over any matched forbidden substring. */
|
|
@@ -134,14 +134,14 @@ export function redactEvent(event, options = {}) {
|
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
136
136
|
* Build a `beforeSend` hook that scrubs every outgoing event. The app supplies
|
|
137
|
-
* its
|
|
137
|
+
* its product-specific `patterns`; generic defaults are included unless disabled.
|
|
138
138
|
*
|
|
139
139
|
* @example
|
|
140
140
|
* Sentry.init({
|
|
141
141
|
* dsn,
|
|
142
142
|
* beforeSend: createTelemetryScrubber({
|
|
143
143
|
* patterns: [
|
|
144
|
-
* 'https://storage.googleapis.com/
|
|
144
|
+
* 'https://storage.googleapis.com/example-ncii-evidence/',
|
|
145
145
|
* /\bncmec-[a-z0-9]{16,}\b/gi,
|
|
146
146
|
* /\b[a-f0-9]{64}\b/g, // detector hash shape
|
|
147
147
|
* ],
|
package/dist/scrubber.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrubber.js","sourceRoot":"","sources":["../src/scrubber.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scrubber.js","sourceRoot":"","sources":["../src/scrubber.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Telemetry scrubber — generic Sentry-event redaction.\n *\n * A defense-in-depth `beforeSend`-style hook that walks an ENTIRE Sentry event\n * (message, exception values + stacktrace frame vars, breadcrumbs, extra,\n * contexts, tags, request data, user) and replaces any substring matching a\n * forbidden pattern with a fixed placeholder.\n *\n * This package is GENERIC — it ships only obvious, domain-neutral defaults\n * (full IPv4/IPv6 addresses, bearer/authorization tokens, generic credential\n * assignments). Product-specific patterns (evidence-bucket URL prefixes,\n * detector-hash shapes, NCMEC credential markers) are INJECTED by the consuming\n * app via {@link createTelemetryScrubber}'s `patterns` option. No app-data-package\n * import, no app-specific literals.\n */\n\n/** The fixed replacement written over any matched forbidden substring. */\nexport const REDACTION_PLACEHOLDER = \"[REDACTED]\";\n\n/**\n * A forbidden pattern. Either a `RegExp` (matched globally against every string\n * in the event) or a literal `string` (every occurrence replaced). Strings are\n * treated as literals, not regex source, so callers do not have to escape them.\n */\nexport type ForbiddenPattern = RegExp | string;\n\nexport type RedactStringOptions = {\n /** Patterns to strip. Defaults to {@link DEFAULT_FORBIDDEN_PATTERNS}. */\n patterns?: ForbiddenPattern[];\n /** Replacement text. Defaults to {@link REDACTION_PLACEHOLDER}. */\n placeholder?: string;\n};\n\n/**\n * Generic, domain-neutral built-in patterns. These are intentionally\n * conservative (specific → low collateral on ordinary errors) but catch the\n * obvious secrets that must never reach telemetry regardless of app.\n */\nexport const DEFAULT_FORBIDDEN_PATTERNS: RegExp[] = [\n // Full IPv4 address (four dotted octets, each 0–255).\n /\\b(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\b/g,\n // Full (uncompressed) IPv6 address — eight hextet groups.\n /\\b(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\\b/g,\n // Compressed IPv6 with a \"::\" run (e.g. 2001:db8::1, ::1, fe80::abcd).\n /\\b(?:[0-9a-fA-F]{1,4}:){1,7}:(?:[0-9a-fA-F]{1,4}:?){0,6}(?:[0-9a-fA-F]{1,4})?\\b|::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}\\b/g,\n // Authorization / bearer token: \"Bearer xyz\", \"Authorization: Basic xyz\".\n /\\b(?:Bearer|Basic)\\s+[A-Za-z0-9._~+/-]{8,}={0,2}/gi,\n // Generic credential assignment: password=..., api_key: \"...\", secret=...,\n // token=..., apiKey=..., access_token=... (value up to whitespace/quote).\n /\\b(?:password|passwd|pwd|secret|api[_-]?key|apikey|access[_-]?token|refresh[_-]?token|token|client[_-]?secret|authorization)\\b\\s*[:=]\\s*[\"']?[^\\s\"',}{]{4,}/gi,\n];\n\ntype CompiledPattern = { regex: RegExp; isLiteral: boolean; literal?: string };\n\nfunction escapeRegExp(input: string): string {\n return input.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction compilePatterns(patterns: ForbiddenPattern[]): CompiledPattern[] {\n return patterns.map((p) => {\n if (typeof p === \"string\") {\n return {\n regex: new RegExp(escapeRegExp(p), \"g\"),\n isLiteral: true,\n literal: p,\n };\n }\n // Ensure the flag set is global so `String.replace` strips every hit; clone\n // so we never mutate a caller-owned RegExp's lastIndex across calls.\n const flags = p.flags.includes(\"g\") ? p.flags : p.flags + \"g\";\n return { regex: new RegExp(p.source, flags), isLiteral: false };\n });\n}\n\n/**\n * Redact every forbidden-pattern hit inside a single string. Pure and safe on\n * any input. Empty when nothing matches → returns the original reference.\n */\nexport function redactString(value: string, options: RedactStringOptions = {}): string {\n const placeholder = options.placeholder ?? REDACTION_PLACEHOLDER;\n const compiled = compilePatterns(options.patterns ?? DEFAULT_FORBIDDEN_PATTERNS);\n let out = value;\n for (const { regex } of compiled) {\n regex.lastIndex = 0;\n out = out.replace(regex, placeholder);\n }\n return out;\n}\n\ntype DeepRedactOptions = {\n patterns: ForbiddenPattern[];\n placeholder: string;\n};\n\n/**\n * Recursively redact every string reachable inside an arbitrary value (objects,\n * arrays, nested combinations). Non-string primitives pass through untouched.\n * Object keys are NOT rewritten (a forbidden value hiding in a key is\n * pathological and rewriting keys would corrupt the event shape); only values\n * are scrubbed. Guards against cycles.\n */\nfunction deepRedact(value: unknown, options: DeepRedactOptions, seen: WeakSet<object>): unknown {\n if (typeof value === \"string\") {\n return redactString(value, options);\n }\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n if (seen.has(value as object)) {\n return value;\n }\n seen.add(value as object);\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n value[i] = deepRedact(value[i], options, seen);\n }\n return value;\n }\n\n const record = value as Record<string, unknown>;\n for (const key of Object.keys(record)) {\n record[key] = deepRedact(record[key], options, seen);\n }\n return record;\n}\n\n/**\n * Minimal structural shape of a Sentry event we walk. Deliberately loose — we\n * do not depend on `@sentry/*` types (this package's Sentry deps are optional\n * peers, and the scrubber is provider-agnostic). Unknown fields are left alone\n * except that we deep-redact the free-form containers below.\n */\nexport type ScrubbableEvent = {\n message?: unknown;\n exception?: { values?: Array<Record<string, unknown>> } | unknown;\n breadcrumbs?: unknown;\n extra?: unknown;\n contexts?: unknown;\n tags?: unknown;\n request?: unknown;\n user?: unknown;\n [key: string]: unknown;\n};\n\nexport type TelemetryScrubberOptions = {\n /**\n * App-injected forbidden patterns (evidence-bucket URL prefixes, detector-hash\n * shapes, NCMEC credential markers, …). Merged AFTER the generic defaults\n * unless {@link includeDefaults} is false.\n */\n patterns?: ForbiddenPattern[];\n /** Include {@link DEFAULT_FORBIDDEN_PATTERNS}. Defaults to true. */\n includeDefaults?: boolean;\n /** Replacement text. Defaults to {@link REDACTION_PLACEHOLDER}. */\n placeholder?: string;\n};\n\n/**\n * Redact a whole Sentry event in place and return it. Exported so the backend\n * `withScope` / manual-capture path can benefit even where a `beforeSend`\n * pipeline is not wired.\n */\nexport function redactEvent<T extends ScrubbableEvent>(\n event: T,\n options: TelemetryScrubberOptions = {}\n): T {\n if (event === null || typeof event !== \"object\") return event;\n\n const includeDefaults = options.includeDefaults ?? true;\n const patterns: ForbiddenPattern[] = [\n ...(includeDefaults ? DEFAULT_FORBIDDEN_PATTERNS : []),\n ...(options.patterns ?? []),\n ];\n const deepOptions: DeepRedactOptions = {\n patterns,\n placeholder: options.placeholder ?? REDACTION_PLACEHOLDER,\n };\n const seen = new WeakSet<object>();\n\n // Top-level message (string or {message,params} structured form).\n if (event.message !== undefined) {\n event.message = deepRedact(event.message, deepOptions, seen);\n }\n\n // Exception values: type/value strings plus stacktrace frame vars/filenames.\n const exception = event.exception as { values?: Array<Record<string, unknown>> } | undefined;\n if (exception && Array.isArray(exception.values)) {\n for (const val of exception.values) {\n deepRedact(val, deepOptions, seen);\n }\n }\n\n // Free-form containers — walked wholesale.\n for (const container of [\"breadcrumbs\", \"extra\", \"contexts\", \"tags\", \"request\", \"user\"] as const) {\n if (event[container] !== undefined) {\n event[container] = deepRedact(event[container], deepOptions, seen);\n }\n }\n\n return event;\n}\n\n/**\n * A Sentry `beforeSend`-style hook: `(event, hint?) => event | null`. Drop-in\n * for `Sentry.init({ beforeSend })` in both the browser and Node SDKs.\n */\nexport type BeforeSendHook = (event: ScrubbableEvent, hint?: unknown) => ScrubbableEvent | null;\n\n/**\n * Build a `beforeSend` hook that scrubs every outgoing event. The app supplies\n * its product-specific `patterns`; generic defaults are included unless disabled.\n *\n * @example\n * Sentry.init({\n * dsn,\n * beforeSend: createTelemetryScrubber({\n * patterns: [\n * 'https://storage.googleapis.com/example-ncii-evidence/',\n * /\\bncmec-[a-z0-9]{16,}\\b/gi,\n * /\\b[a-f0-9]{64}\\b/g, // detector hash shape\n * ],\n * }),\n * });\n */\nexport function createTelemetryScrubber(options: TelemetryScrubberOptions = {}): BeforeSendHook {\n return (event, _hint) => {\n if (event === null || typeof event !== \"object\") return event;\n return redactEvent(event, options);\n };\n}\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ export type MonitoringInitOptions = {
|
|
|
9
9
|
* Omit to use the provider default. */
|
|
10
10
|
tracesSampleRate?: number;
|
|
11
11
|
/** Provider integrations passed through to the SDK init — e.g. `[]` to disable the
|
|
12
|
-
* default auto-integrations and keep init lightweight (the
|
|
13
|
-
* bootstrap does this). Typed loosely: it is a provider-specific pass-through. */
|
|
12
|
+
* default auto-integrations and keep init lightweight (the consuming app's Cloud
|
|
13
|
+
* Functions bootstrap does this). Typed loosely: it is a provider-specific pass-through. */
|
|
14
14
|
integrations?: unknown[];
|
|
15
15
|
};
|
|
16
16
|
export type MonitoringUser = {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;4CACwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;AAEnE,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;4CACwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;iGAE6F;IAC7F,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACrE,CAAC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type MonitoringProvider = \"sentry\" | \"sentry-node\" | \"noop\";\n\nexport type MonitoringInitOptions = {\n provider: MonitoringProvider;\n dsn?: string;\n environment?: string;\n enabled?: boolean; // default true\n release?: string;\n /** Performance-trace sample rate (0–1), passed through to the provider's init.\n * Omit to use the provider default. */\n tracesSampleRate?: number;\n /** Provider integrations passed through to the SDK init — e.g. `[]` to disable the\n * default auto-integrations and keep init lightweight (the consuming app's Cloud\n * Functions bootstrap does this). Typed loosely: it is a provider-specific pass-through. */\n integrations?: unknown[];\n};\n\nexport type MonitoringUser = {\n id?: string;\n email?: string;\n username?: string;\n ip_address?: string;\n};\n\nexport type ScopeLike = {\n setTag: (key: string, value: string) => void;\n setUser: (user: MonitoringUser | null) => void;\n setExtra: (key: string, value: unknown) => void;\n setContext: (key: string, context: Record<string, unknown>) => void;\n};"]}
|