posthog-node 5.8.8 → 5.9.0

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.
Files changed (129) hide show
  1. package/dist/{index.d.ts → client.d.ts} +7 -378
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +481 -0
  4. package/dist/client.mjs +437 -0
  5. package/dist/entrypoints/index.edge.d.ts +6 -0
  6. package/dist/entrypoints/index.edge.d.ts.map +1 -0
  7. package/dist/entrypoints/index.edge.js +89 -0
  8. package/dist/entrypoints/index.edge.mjs +12 -0
  9. package/dist/entrypoints/index.node.d.ts +6 -0
  10. package/dist/entrypoints/index.node.d.ts.map +1 -0
  11. package/dist/entrypoints/index.node.js +99 -0
  12. package/dist/entrypoints/index.node.mjs +16 -0
  13. package/dist/exports.d.ts +4 -0
  14. package/dist/exports.d.ts.map +1 -0
  15. package/dist/exports.js +78 -0
  16. package/dist/exports.mjs +3 -0
  17. package/dist/extensions/error-tracking/autocapture.d.ts +4 -0
  18. package/dist/extensions/error-tracking/autocapture.d.ts.map +1 -0
  19. package/dist/extensions/error-tracking/autocapture.js +68 -0
  20. package/dist/extensions/error-tracking/autocapture.mjs +31 -0
  21. package/dist/extensions/error-tracking/chunk-ids.d.ts +5 -0
  22. package/dist/extensions/error-tracking/chunk-ids.d.ts.map +1 -0
  23. package/dist/extensions/error-tracking/chunk-ids.js +68 -0
  24. package/dist/extensions/error-tracking/chunk-ids.mjs +34 -0
  25. package/dist/extensions/error-tracking/context-lines.node.d.ts +5 -0
  26. package/dist/extensions/error-tracking/context-lines.node.d.ts.map +1 -0
  27. package/dist/extensions/error-tracking/context-lines.node.js +227 -0
  28. package/dist/extensions/error-tracking/context-lines.node.mjs +187 -0
  29. package/dist/extensions/error-tracking/error-conversion.d.ts +4 -0
  30. package/dist/extensions/error-tracking/error-conversion.d.ts.map +1 -0
  31. package/dist/extensions/error-tracking/error-conversion.js +183 -0
  32. package/dist/extensions/error-tracking/error-conversion.mjs +146 -0
  33. package/dist/extensions/error-tracking/get-module.node.d.ts +3 -0
  34. package/dist/extensions/error-tracking/get-module.node.d.ts.map +1 -0
  35. package/dist/extensions/error-tracking/get-module.node.js +57 -0
  36. package/dist/extensions/error-tracking/get-module.node.mjs +23 -0
  37. package/dist/extensions/error-tracking/index.d.ts +20 -0
  38. package/dist/extensions/error-tracking/index.d.ts.map +1 -0
  39. package/dist/extensions/error-tracking/index.js +97 -0
  40. package/dist/extensions/error-tracking/index.mjs +63 -0
  41. package/dist/extensions/error-tracking/reduceable-cache.d.ts +13 -0
  42. package/dist/extensions/error-tracking/reduceable-cache.d.ts.map +1 -0
  43. package/dist/extensions/error-tracking/reduceable-cache.js +57 -0
  44. package/dist/extensions/error-tracking/reduceable-cache.mjs +23 -0
  45. package/dist/extensions/error-tracking/stack-parser.d.ts +3 -0
  46. package/dist/extensions/error-tracking/stack-parser.d.ts.map +1 -0
  47. package/dist/extensions/error-tracking/stack-parser.js +148 -0
  48. package/dist/extensions/error-tracking/stack-parser.mjs +114 -0
  49. package/dist/extensions/error-tracking/type-checking.d.ts +8 -0
  50. package/dist/extensions/error-tracking/type-checking.d.ts.map +1 -0
  51. package/dist/extensions/error-tracking/type-checking.js +80 -0
  52. package/dist/extensions/error-tracking/type-checking.mjs +31 -0
  53. package/dist/extensions/error-tracking/types.d.ts +61 -0
  54. package/dist/extensions/error-tracking/types.d.ts.map +1 -0
  55. package/dist/extensions/error-tracking/types.js +43 -0
  56. package/dist/extensions/error-tracking/types.mjs +9 -0
  57. package/dist/extensions/express.d.ts +17 -0
  58. package/dist/extensions/express.d.ts.map +1 -0
  59. package/dist/extensions/express.js +61 -0
  60. package/dist/extensions/express.mjs +17 -0
  61. package/dist/extensions/feature-flags/crypto-helpers.d.ts +3 -0
  62. package/dist/extensions/feature-flags/crypto-helpers.d.ts.map +1 -0
  63. package/dist/extensions/feature-flags/crypto-helpers.js +77 -0
  64. package/dist/extensions/feature-flags/crypto-helpers.mjs +22 -0
  65. package/dist/extensions/feature-flags/crypto.d.ts +2 -0
  66. package/dist/extensions/feature-flags/crypto.d.ts.map +1 -0
  67. package/dist/extensions/feature-flags/crypto.js +47 -0
  68. package/dist/extensions/feature-flags/crypto.mjs +13 -0
  69. package/dist/extensions/feature-flags/feature-flags.d.ts +89 -0
  70. package/dist/extensions/feature-flags/feature-flags.d.ts.map +1 -0
  71. package/dist/extensions/feature-flags/feature-flags.js +529 -0
  72. package/dist/extensions/feature-flags/feature-flags.mjs +483 -0
  73. package/dist/extensions/feature-flags/lazy.d.ts +24 -0
  74. package/dist/extensions/feature-flags/lazy.d.ts.map +1 -0
  75. package/dist/extensions/feature-flags/lazy.js +60 -0
  76. package/dist/extensions/feature-flags/lazy.mjs +26 -0
  77. package/dist/extensions/sentry-integration.d.ts +54 -0
  78. package/dist/extensions/sentry-integration.d.ts.map +1 -0
  79. package/dist/extensions/sentry-integration.js +113 -0
  80. package/dist/extensions/sentry-integration.mjs +73 -0
  81. package/dist/storage-memory.d.ts +7 -0
  82. package/dist/storage-memory.d.ts.map +1 -0
  83. package/dist/storage-memory.js +46 -0
  84. package/dist/storage-memory.mjs +12 -0
  85. package/dist/types.d.ts +253 -0
  86. package/dist/types.d.ts.map +1 -0
  87. package/dist/types.js +18 -0
  88. package/dist/types.mjs +0 -0
  89. package/dist/utils/logger.d.ts +3 -0
  90. package/dist/utils/logger.d.ts.map +1 -0
  91. package/dist/utils/logger.js +63 -0
  92. package/dist/utils/logger.mjs +29 -0
  93. package/dist/version.d.ts +2 -0
  94. package/dist/version.d.ts.map +1 -0
  95. package/dist/version.js +36 -0
  96. package/dist/version.mjs +2 -0
  97. package/package.json +32 -31
  98. package/src/client.ts +1532 -0
  99. package/src/entrypoints/index.edge.ts +15 -0
  100. package/src/entrypoints/index.node.ts +17 -0
  101. package/src/exports.ts +3 -0
  102. package/src/extensions/error-tracking/autocapture.ts +65 -0
  103. package/src/extensions/error-tracking/chunk-ids.ts +58 -0
  104. package/src/extensions/error-tracking/context-lines.node.ts +392 -0
  105. package/src/extensions/error-tracking/error-conversion.ts +291 -0
  106. package/src/extensions/error-tracking/get-module.node.ts +57 -0
  107. package/src/extensions/error-tracking/index.ts +103 -0
  108. package/src/extensions/error-tracking/reduceable-cache.ts +39 -0
  109. package/src/extensions/error-tracking/stack-parser.ts +212 -0
  110. package/src/extensions/error-tracking/type-checking.ts +40 -0
  111. package/src/extensions/error-tracking/types.ts +71 -0
  112. package/src/extensions/express.ts +39 -0
  113. package/src/extensions/feature-flags/crypto-helpers.ts +36 -0
  114. package/src/extensions/feature-flags/crypto.ts +22 -0
  115. package/src/extensions/feature-flags/feature-flags.ts +1003 -0
  116. package/src/extensions/feature-flags/lazy.ts +55 -0
  117. package/src/extensions/sentry-integration.ts +216 -0
  118. package/src/storage-memory.ts +13 -0
  119. package/src/types.ts +294 -0
  120. package/src/utils/logger.ts +39 -0
  121. package/src/version.ts +1 -0
  122. package/dist/edge/index.cjs +0 -3150
  123. package/dist/edge/index.cjs.map +0 -1
  124. package/dist/edge/index.mjs +0 -3144
  125. package/dist/edge/index.mjs.map +0 -1
  126. package/dist/node/index.cjs +0 -3556
  127. package/dist/node/index.cjs.map +0 -1
  128. package/dist/node/index.mjs +0 -3550
  129. package/dist/node/index.mjs.map +0 -1
@@ -0,0 +1,40 @@
1
+ // Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry
2
+ // Licensed under the MIT License
3
+
4
+ import { PolymorphicEvent } from './types'
5
+
6
+ export function isEvent(candidate: unknown): candidate is PolymorphicEvent {
7
+ return typeof Event !== 'undefined' && isInstanceOf(candidate, Event)
8
+ }
9
+
10
+ export function isPlainObject(candidate: unknown): candidate is Record<string, unknown> {
11
+ return isBuiltin(candidate, 'Object')
12
+ }
13
+
14
+ export function isError(candidate: unknown): candidate is Error {
15
+ switch (Object.prototype.toString.call(candidate)) {
16
+ case '[object Error]':
17
+ case '[object Exception]':
18
+ case '[object DOMException]':
19
+ case '[object WebAssembly.Exception]':
20
+ return true
21
+ default:
22
+ return isInstanceOf(candidate, Error)
23
+ }
24
+ }
25
+
26
+ export function isInstanceOf(candidate: unknown, base: any): boolean {
27
+ try {
28
+ return candidate instanceof base
29
+ } catch {
30
+ return false
31
+ }
32
+ }
33
+
34
+ export function isErrorEvent(event: unknown): boolean {
35
+ return isBuiltin(event, 'ErrorEvent')
36
+ }
37
+
38
+ export function isBuiltin(candidate: unknown, className: string): boolean {
39
+ return Object.prototype.toString.call(candidate) === `[object ${className}]`
40
+ }
@@ -0,0 +1,71 @@
1
+ // Portions of this file are derived from getsentry/sentry-javascript by Software, Inc. dba Sentry
2
+ // Licensed under the MIT License
3
+
4
+ import { JsonType } from '@posthog/core'
5
+
6
+ // levels originally copied from Sentry to work with the sentry integration
7
+ // and to avoid relying on a frequently changing @sentry/types dependency
8
+ // but provided as an array of literal types, so we can constrain the level below
9
+ export const severityLevels = ['fatal', 'error', 'warning', 'log', 'info', 'debug'] as const
10
+ export declare type SeverityLevel = (typeof severityLevels)[number]
11
+
12
+ export interface PolymorphicEvent {
13
+ [key: string]: unknown
14
+ readonly type: string
15
+ readonly target?: unknown
16
+ readonly currentTarget?: unknown
17
+ }
18
+
19
+ export interface EventHint {
20
+ mechanism?: Partial<Mechanism>
21
+ syntheticException?: Error | null
22
+ }
23
+
24
+ export interface ErrorProperties {
25
+ $exception_list: Exception[]
26
+ $exception_level?: SeverityLevel
27
+ $exception_DOMException_code?: string
28
+ $exception_personURL?: string
29
+ }
30
+
31
+ export interface Exception {
32
+ type?: string
33
+ value?: string
34
+ mechanism?: Mechanism
35
+ module?: string
36
+ thread_id?: number
37
+ stacktrace?: { frames?: StackFrame[]; type: 'raw' }
38
+ }
39
+
40
+ export interface Mechanism {
41
+ handled?: boolean
42
+ type?: string
43
+ source?: string
44
+ synthetic?: boolean
45
+ }
46
+
47
+ export type GetModuleFn = (filename: string | undefined) => string | undefined
48
+
49
+ export type StackParser = (stack: string, skipFirstLines?: number) => StackFrame[]
50
+ export type StackLineParserFn = (line: string) => StackFrame | undefined
51
+ export type StackLineParser = [number, StackLineParserFn]
52
+
53
+ export type StackFrameModifierFn = (frames: StackFrame[]) => Promise<StackFrame[]>
54
+
55
+ export interface StackFrame {
56
+ platform: string
57
+ filename?: string
58
+ function?: string
59
+ module?: string
60
+ lineno?: number
61
+ colno?: number
62
+ abs_path?: string
63
+ context_line?: string
64
+ pre_context?: string[]
65
+ post_context?: string[]
66
+ in_app?: boolean
67
+ instruction_addr?: string
68
+ addr_mode?: string
69
+ vars?: { [key: string]: JsonType }
70
+ chunk_id?: string
71
+ }
@@ -0,0 +1,39 @@
1
+ import type * as http from 'node:http'
2
+ import { uuidv7 } from '@posthog/core'
3
+ import ErrorTracking from './error-tracking'
4
+ import { PostHogBackendClient } from '../client'
5
+
6
+ type ExpressMiddleware = (req: http.IncomingMessage, res: http.ServerResponse, next: () => void) => void
7
+
8
+ type ExpressErrorMiddleware = (
9
+ error: MiddlewareError,
10
+ req: http.IncomingMessage,
11
+ res: http.ServerResponse,
12
+ next: (error: MiddlewareError) => void
13
+ ) => void
14
+
15
+ interface MiddlewareError extends Error {
16
+ status?: number | string
17
+ statusCode?: number | string
18
+ status_code?: number | string
19
+ output?: {
20
+ statusCode?: number | string
21
+ }
22
+ }
23
+
24
+ export function setupExpressErrorHandler(
25
+ _posthog: PostHogBackendClient,
26
+ app: {
27
+ use: (middleware: ExpressMiddleware | ExpressErrorMiddleware) => unknown
28
+ }
29
+ ): void {
30
+ app.use((error: MiddlewareError, _, __, next: (error: MiddlewareError) => void): void => {
31
+ const hint = { mechanism: { type: 'middleware', handled: false } }
32
+ // Given stateless nature of Node SDK we capture exceptions using personless processing
33
+ // when no user can be determined e.g. in the case of exception autocapture
34
+ ErrorTracking.buildEventMessage(error, hint, uuidv7(), { $process_person_profile: false }).then((msg) =>
35
+ _posthog.capture(msg)
36
+ )
37
+ next(error)
38
+ })
39
+ }
@@ -0,0 +1,36 @@
1
+ /// <reference lib="dom" />
2
+ import { Lazy } from './lazy'
3
+
4
+ const nodeCrypto = new Lazy(async () => {
5
+ try {
6
+ return await import('crypto')
7
+ } catch {
8
+ return undefined
9
+ }
10
+ })
11
+
12
+ export async function getNodeCrypto(): Promise<typeof import('crypto') | undefined> {
13
+ return await nodeCrypto.getValue()
14
+ }
15
+
16
+ const webCrypto = new Lazy(async (): Promise<SubtleCrypto | undefined> => {
17
+ if (typeof globalThis.crypto?.subtle !== 'undefined') {
18
+ return globalThis.crypto.subtle
19
+ }
20
+
21
+ try {
22
+ // Node.js: use built-in webcrypto and assign it if needed
23
+ const crypto = await nodeCrypto.getValue()
24
+ if (crypto?.webcrypto?.subtle) {
25
+ return crypto.webcrypto.subtle as SubtleCrypto
26
+ }
27
+ } catch {
28
+ // Ignore if not available
29
+ }
30
+
31
+ return undefined
32
+ })
33
+
34
+ export async function getWebCrypto(): Promise<SubtleCrypto | undefined> {
35
+ return await webCrypto.getValue()
36
+ }
@@ -0,0 +1,22 @@
1
+ /// <reference lib="dom" />
2
+
3
+ import { getNodeCrypto, getWebCrypto } from './crypto-helpers'
4
+
5
+ export async function hashSHA1(text: string): Promise<string> {
6
+ // Try Node.js crypto first
7
+ const nodeCrypto = await getNodeCrypto()
8
+ if (nodeCrypto) {
9
+ return nodeCrypto.createHash('sha1').update(text).digest('hex')
10
+ }
11
+
12
+ const webCrypto = await getWebCrypto()
13
+
14
+ // Fall back to Web Crypto API
15
+ if (webCrypto) {
16
+ const hashBuffer = await webCrypto.digest('SHA-1', new TextEncoder().encode(text))
17
+ const hashArray = Array.from(new Uint8Array(hashBuffer))
18
+ return hashArray.map((byte) => byte.toString(16).padStart(2, '0')).join('')
19
+ }
20
+
21
+ throw new Error('No crypto implementation available. Tried Node Crypto API and Web SubtleCrypto API')
22
+ }