posthog-react-native 4.74.2 → 4.75.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 (55) hide show
  1. package/dist/PostHogErrorBoundary.js.map +1 -1
  2. package/dist/PostHogProvider.js.map +1 -1
  3. package/dist/autocapture.d.ts +1 -1
  4. package/dist/autocapture.js.map +1 -1
  5. package/dist/error-tracking/index.js.map +1 -1
  6. package/dist/error-tracking/utils.js.map +1 -1
  7. package/dist/frameworks/wix-navigation.js +1 -1
  8. package/dist/frameworks/wix-navigation.js.map +1 -1
  9. package/dist/hooks/useNavigationTracker.js.map +1 -1
  10. package/dist/logs-defaults.js +1 -1
  11. package/dist/logs-defaults.js.map +1 -1
  12. package/dist/optional/OptionalExpoUpdates.js.map +1 -1
  13. package/dist/optional/OptionalPlugin.js.map +1 -1
  14. package/dist/optional/OptionalReactNativeSafeArea.js.map +1 -1
  15. package/dist/optional/OptionalReactNativeSvg.js.map +1 -1
  16. package/dist/posthog-rn.js +1 -1
  17. package/dist/posthog-rn.js.map +1 -1
  18. package/dist/surveys/PostHogSurveyProvider.js +1 -1
  19. package/dist/surveys/PostHogSurveyProvider.js.map +1 -1
  20. package/dist/surveys/components/QuestionHeader.js.map +1 -1
  21. package/dist/surveys/components/QuestionTypes.js +1 -1
  22. package/dist/surveys/components/QuestionTypes.js.map +1 -1
  23. package/dist/surveys/components/SurveyModal.d.ts +5 -0
  24. package/dist/surveys/components/SurveyModal.js +1 -1
  25. package/dist/surveys/components/SurveyModal.js.map +1 -1
  26. package/dist/surveys/components/Surveys.d.ts +7 -4
  27. package/dist/surveys/components/Surveys.js +1 -1
  28. package/dist/surveys/components/Surveys.js.map +1 -1
  29. package/dist/surveys/getActiveMatchingSurveys.d.ts +1 -1
  30. package/dist/surveys/getActiveMatchingSurveys.js +1 -1
  31. package/dist/surveys/getActiveMatchingSurveys.js.map +1 -1
  32. package/dist/surveys/icons.js.map +1 -1
  33. package/dist/surveys/safeStyleSheet.js.map +1 -1
  34. package/dist/surveys/survey-progress.d.ts +23 -0
  35. package/dist/surveys/survey-progress.js +2 -0
  36. package/dist/surveys/survey-progress.js.map +1 -0
  37. package/dist/surveys/survey-shuffling.js.map +1 -1
  38. package/dist/surveys/surveys-utils.d.ts +1 -1
  39. package/dist/surveys/useActivatedSurveys.js +1 -1
  40. package/dist/surveys/useActivatedSurveys.js.map +1 -1
  41. package/dist/surveys/useSurveyStorage.d.ts +3 -1
  42. package/dist/surveys/useSurveyStorage.js +1 -1
  43. package/dist/surveys/useSurveyStorage.js.map +1 -1
  44. package/dist/tooling/expoconfig.js +1 -1
  45. package/dist/tooling/expoconfig.js.map +1 -1
  46. package/dist/tooling/metroconfig.js.map +1 -1
  47. package/dist/tooling/posthogMetroSerializer.js.map +1 -1
  48. package/dist/tooling/utils.js.map +1 -1
  49. package/dist/tooling/vendor/metro/countLines.d.ts +1 -1
  50. package/dist/tooling/vendor/metro/utils.js.map +1 -1
  51. package/dist/utils.js.map +1 -1
  52. package/dist/version.d.ts +1 -1
  53. package/dist/version.js +1 -1
  54. package/dist/version.js.map +1 -1
  55. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"PostHogErrorBoundary.js","names":["_react","_interopRequireDefault","require","_PostHogContext","_jsxRuntime","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","INITIAL_STATE","hasError","componentStack","error","isFunction","f","PostHogErrorBoundary","exports","_React$Component","props","_this","_classCallCheck2","resetError","setState","state","_inherits2","_createClass2","key","value","componentDidCatch","errorInfo","additionalProperties","currentProperties","_a","context","client","captureException","$exception_component_stack","_b","render","_this$props","children","fallback","element","React","createElement","isValidElement","jsx","Fragment","getDerivedStateFromError","Component","contextType","PostHogContext"],"sources":["../src/PostHogErrorBoundary.tsx"],"sourcesContent":["import React, { FunctionComponent } from 'react'\nimport { PostHogContext } from './PostHogContext'\n\nexport type Properties = Record<string, any>\n\nexport type PostHogErrorBoundaryFallbackProps = {\n error: unknown\n componentStack: string\n resetError: () => void\n}\n\nexport type PostHogErrorBoundaryProps = {\n children?: React.ReactNode | (() => React.ReactNode)\n fallback?: React.ReactNode | FunctionComponent<PostHogErrorBoundaryFallbackProps>\n additionalProperties?: Properties | ((error: unknown) => Properties)\n}\n\ntype PostHogErrorBoundaryState = {\n hasError: boolean\n componentStack: string | null\n error: unknown\n}\n\nconst INITIAL_STATE: PostHogErrorBoundaryState = {\n hasError: false,\n componentStack: null,\n error: null,\n}\n\nconst isFunction = (f: any): f is (...args: any[]) => any => typeof f === 'function'\n\nexport class PostHogErrorBoundary extends React.Component<PostHogErrorBoundaryProps, PostHogErrorBoundaryState> {\n static contextType = PostHogContext\n context!: React.ContextType<typeof PostHogContext>\n\n constructor(props: PostHogErrorBoundaryProps) {\n super(props)\n this.state = INITIAL_STATE\n }\n\n static getDerivedStateFromError(error: unknown): Partial<PostHogErrorBoundaryState> {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: unknown, errorInfo: React.ErrorInfo): void {\n const { componentStack } = errorInfo\n this.setState({ componentStack: componentStack ?? null })\n\n try {\n const { additionalProperties } = this.props\n const currentProperties = isFunction(additionalProperties) ? additionalProperties(error) : additionalProperties\n this.context.client?.captureException(error, {\n ...currentProperties,\n ...(componentStack ? { $exception_component_stack: componentStack } : {}),\n })\n } catch {\n // Reporting failures must not escape the boundary and crash its parent.\n }\n }\n\n private resetError = (): void => {\n this.setState(INITIAL_STATE)\n }\n\n public render(): React.ReactNode {\n const { children, fallback } = this.props\n const state = this.state\n\n if (!state.hasError) {\n return isFunction(children) ? children() : children\n }\n\n const element = isFunction(fallback)\n ? (React.createElement(fallback, {\n error: state.error,\n componentStack: state.componentStack ?? '',\n resetError: this.resetError,\n }) as React.ReactNode)\n : fallback\n\n if (React.isValidElement(element)) {\n return element as React.ReactElement\n }\n\n return <></>\n }\n}\n"],"mappings":"qvBAAA,IAAAA,MAAA,CAAAC,sBAAA,CAAAC,OAAA,WACA,IAAAC,eAAA,CAAAD,OAAA,qBAAiD,IAAAE,WAAA,CAAAF,OAAA,+BAAAG,QAAAC,CAAA,CAAAC,CAAA,MAAAC,CAAA,CAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,KAAAG,MAAA,CAAAE,qBAAA,MAAAC,CAAA,CAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,CAAAC,CAAA,IAAAK,CAAA,CAAAA,CAAA,CAAAC,MAAA,UAAAN,CAAA,SAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,CAAAC,CAAA,EAAAQ,UAAA,KAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,CAAAI,CAAA,UAAAJ,CAAA,WAAAU,cAAAZ,CAAA,UAAAC,CAAA,GAAAA,CAAA,CAAAY,SAAA,CAAAC,MAAA,CAAAb,CAAA,QAAAC,CAAA,OAAAW,SAAA,CAAAZ,CAAA,EAAAY,SAAA,CAAAZ,CAAA,IAAAA,CAAA,IAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,MAAAa,OAAA,UAAAd,CAAA,KAAAe,gBAAA,aAAAhB,CAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAD,CAAA,MAAAE,MAAA,CAAAc,yBAAA,CAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,CAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,GAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,UAAAd,CAAA,EAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,CAAAC,CAAA,CAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,CAAAD,CAAA,cAAAD,CAAA,WAAAoB,WAAAlB,CAAA,CAAAI,CAAA,CAAAN,CAAA,SAAAM,CAAA,IAAAe,gBAAA,aAAAf,CAAA,KAAAgB,2BAAA,aAAApB,CAAA,CAAAqB,yBAAA,GAAAC,OAAA,CAAAC,SAAA,CAAAnB,CAAA,CAAAN,CAAA,QAAAqB,gBAAA,aAAAnB,CAAA,EAAAwB,WAAA,EAAApB,CAAA,CAAAK,KAAA,CAAAT,CAAA,CAAAF,CAAA,aAAAuB,0BAAA,UAAArB,CAAA,EAAAyB,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAN,OAAA,CAAAC,SAAA,CAAAE,OAAA,0BAAAzB,CAAA,UAAAqB,yBAAA,UAAAA,0BAAA,UAAArB,CAAA,OAsBjD,GAAM,CAAA6B,aAAa,CAA8B,CAC/CC,QAAQ,CAAE,KAAK,CACfC,cAAc,CAAE,IAAI,CACpBC,KAAK,CAAE,I,CACR,CAED,GAAM,CAAAC,UAAU,CAAG,QAAb,CAAAA,UAAUA,CAAIC,CAAM,QAAmC,OAAO,CAAAA,CAAC,GAAK,UAAU,MAEvE,CAAAC,oBAAqB,CAAAC,OAAA,CAAAD,oBAAA,UAAAE,gBAAA,EAIhC,SAAAF,qBAAYG,KAAgC,MAAAC,KAAA,IAAAC,gBAAA,kBAAAL,oBAAA,EAC1CI,KAAA,CAAArB,UAAA,MAAAiB,oBAAA,EAAMG,KAAK,GAwBLC,KAAA,CAAAE,UAAU,CAAG,UAAW,CAC9BF,KAAA,CAAKG,QAAQ,CAACb,aAAa,CAAC,CAC9B,CAAC,CAzBCU,KAAA,CAAKI,KAAK,CAAGd,aAAa,QAAAU,KAAA,CAC5B,CAAC,GAAAK,UAAA,aAAAT,oBAAA,CAAAE,gBAAA,WAAAQ,aAAA,aAAAV,oBAAA,GAAAW,GAAA,qBAAAC,KAAA,CAMD,SAAAC,iBAAiBA,CAAChB,KAAc,CAAEiB,SAA0B,E,OAC1D,GAAQ,CAAAlB,cAAc,CAAKkB,SAAS,CAA5BlB,cAAc,CACtB,IAAI,CAACW,QAAQ,CAAC,CAAEX,cAAc,CAAEA,cAAc,SAAdA,cAAc,UAAdA,cAAc,CAAI,IAAI,CAAE,CAAC,CAEzD,GAAI,CACF,GAAQ,CAAAmB,oBAAoB,CAAK,IAAI,CAACZ,KAAK,CAAnCY,oBAAoB,CAC5B,GAAM,CAAAC,iBAAiB,CAAGlB,UAAU,CAACiB,oBAAoB,CAAC,CAAGA,oBAAoB,CAAClB,KAAK,CAAC,CAAGkB,oBAAoB,CAC/G,CAAAE,EAAA,KAAI,CAACC,OAAO,CAACC,MAAM,UAAAF,EAAA,iBAAAA,EAAA,CAAEG,gBAAgB,CAACvB,KAAK,CAAAtB,aAAA,CAAAA,aAAA,IACtCyC,iBAAiB,EAChBpB,cAAc,CAAG,CAAEyB,0BAA0B,CAAEzB,cAAc,CAAE,CAAG,EAAE,CACzE,CAAC,CACJ,CAAE,MAAA0B,EAAA,CAAM,CAER,CACF,CAAC,GAAAX,GAAA,UAAAC,KAAA,CAMM,SAAAW,MAAMA,CAAA,E,OACX,IAAAC,WAAA,CAA+B,IAAI,CAACrB,KAAK,CAAjCsB,QAAQ,CAAAD,WAAA,CAARC,QAAQ,CAAEC,QAAQ,CAAAF,WAAA,CAARE,QAAQ,CAC1B,GAAM,CAAAlB,KAAK,CAAG,IAAI,CAACA,KAAK,CAExB,GAAI,CAACA,KAAK,CAACb,QAAQ,CAAE,CACnB,MAAO,CAAAG,UAAU,CAAC2B,QAAQ,CAAC,CAAGA,QAAQ,EAAE,CAAGA,QAAQ,CACrD,CAEA,GAAM,CAAAE,OAAO,CAAG7B,UAAU,CAAC4B,QAAQ,CAAC,CAC/BE,iBAAK,CAACC,aAAa,CAACH,QAAQ,CAAE,CAC7B7B,KAAK,CAAEW,KAAK,CAACX,KAAK,CAClBD,cAAc,CAAE,CAAAqB,EAAA,CAAAT,KAAK,CAACZ,cAAc,UAAAqB,EAAA,UAAAA,EAAA,CAAI,EAAE,CAC1CX,UAAU,CAAE,IAAI,CAACA,U,CAClB,CAAqB,CACtBoB,QAAQ,CAEZ,GAAIE,iBAAK,CAACE,cAAc,CAACH,OAAO,CAAC,CAAE,CACjC,MAAO,CAAAA,OAA6B,CACtC,CAEA,MAAO,GAAAlE,WAAA,CAAAsE,GAAA,EAAAtE,WAAA,CAAAuE,QAAA,GAAE,CAAG,CACd,CAAC,KAAArB,GAAA,4BAAAC,KAAA,CA7CD,QAAO,CAAAqB,wBAAwBA,CAACpC,KAAc,EAC5C,MAAO,CAAEF,QAAQ,CAAE,IAAI,CAAEE,KAAK,CAALA,KAAK,CAAE,CAClC,CAAC,MAXuC+B,iBAAK,CAACM,SAA+D,EACtGlC,oBAAA,CAAAmC,WAAW,CAAGC,8BAAc","ignoreList":[]}
1
+ {"version":3,"file":"PostHogErrorBoundary.js","names":["_react","_interopRequireDefault","require","_PostHogContext","_jsxRuntime","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","Boolean","prototype","valueOf","call","INITIAL_STATE","hasError","componentStack","error","isFunction","f","PostHogErrorBoundary","exports","_React$Component","props","_this","_classCallCheck2","resetError","setState","state","_inherits2","_createClass2","key","value","componentDidCatch","errorInfo","additionalProperties","currentProperties","_a","context","client","captureException","$exception_component_stack","render","_this$props","children","fallback","element","React","createElement","isValidElement","jsx","Fragment","getDerivedStateFromError","Component","contextType","PostHogContext"],"sources":["../src/PostHogErrorBoundary.tsx"],"sourcesContent":["import React, { FunctionComponent } from 'react'\nimport { PostHogContext } from './PostHogContext'\n\nexport type Properties = Record<string, any>\n\nexport type PostHogErrorBoundaryFallbackProps = {\n error: unknown\n componentStack: string\n resetError: () => void\n}\n\nexport type PostHogErrorBoundaryProps = {\n children?: React.ReactNode | (() => React.ReactNode)\n fallback?: React.ReactNode | FunctionComponent<PostHogErrorBoundaryFallbackProps>\n additionalProperties?: Properties | ((error: unknown) => Properties)\n}\n\ntype PostHogErrorBoundaryState = {\n hasError: boolean\n componentStack: string | null\n error: unknown\n}\n\nconst INITIAL_STATE: PostHogErrorBoundaryState = {\n hasError: false,\n componentStack: null,\n error: null,\n}\n\nconst isFunction = (f: any): f is (...args: any[]) => any => typeof f === 'function'\n\nexport class PostHogErrorBoundary extends React.Component<PostHogErrorBoundaryProps, PostHogErrorBoundaryState> {\n static contextType = PostHogContext\n context!: React.ContextType<typeof PostHogContext>\n\n constructor(props: PostHogErrorBoundaryProps) {\n super(props)\n this.state = INITIAL_STATE\n }\n\n static getDerivedStateFromError(error: unknown): Partial<PostHogErrorBoundaryState> {\n return { hasError: true, error }\n }\n\n componentDidCatch(error: unknown, errorInfo: React.ErrorInfo): void {\n const { componentStack } = errorInfo\n this.setState({ componentStack: componentStack ?? null })\n\n try {\n const { additionalProperties } = this.props\n const currentProperties = isFunction(additionalProperties) ? additionalProperties(error) : additionalProperties\n this.context.client?.captureException(error, {\n ...currentProperties,\n ...(componentStack ? { $exception_component_stack: componentStack } : {}),\n })\n } catch {\n // Reporting failures must not escape the boundary and crash its parent.\n }\n }\n\n private resetError = (): void => {\n this.setState(INITIAL_STATE)\n }\n\n public render(): React.ReactNode {\n const { children, fallback } = this.props\n const state = this.state\n\n if (!state.hasError) {\n return isFunction(children) ? children() : children\n }\n\n const element = isFunction(fallback)\n ? (React.createElement(fallback, {\n error: state.error,\n componentStack: state.componentStack ?? '',\n resetError: this.resetError,\n }) as React.ReactNode)\n : fallback\n\n if (React.isValidElement(element)) {\n return element as React.ReactElement\n }\n\n return <></>\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"PostHogProvider.js","names":["_react","_interopRequireWildcard","require","_reactNative","_posthogRn","_autocapture","_useNavigationTracker","_PostHogContext","_utils","_jsxRuntime","_this","_jsxFileName","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t2","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","webClickListeners","PostHogNavigationHook","_ref","options","client","useNavigationTracker","navigation","navigationRef","PostHogProvider","exports","_ref2","children","apiKey","autocapture","style","_ref2$debug","debug","captureAll","captureNone","posthog","useMemo","console","warn","parsedOptions","captureAppLifecycleEvents","undefined","PostHog","autocaptureOptions","captureTouches","captureScreens","_a","phLabelProp","customLabelProp","defaultPostHogLabelProp","useEffect","onTouch","useCallback","type","autocaptureFromTouchEvent","hostRef","useRef","optionsRef","current","doc","globalThis","document","isWeb","addEventListener","ownerNode","existing","owners","Map","handler","owner","findOwningNode","target","nativeEvent","remove","removeEventListener","entry","size","captureProps","onTouchEndCapture","jsx","View","ref","flex","jsxs","PostHogContext","Provider","value"],"sources":["../src/PostHogProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { GestureResponderEvent, StyleProp, View, ViewStyle } from 'react-native'\nimport { PostHog, PostHogOptions } from './posthog-rn'\nimport { autocaptureFromTouchEvent, findOwningNode } from './autocapture'\nimport { useNavigationTracker } from './hooks/useNavigationTracker'\nimport { PostHogContext } from './PostHogContext'\nimport { PostHogAutocaptureOptions } from './types'\nimport { isWeb } from './utils'\nimport { defaultPostHogLabelProp } from './autocapture'\n\n/**\n * Props for the PostHogProvider component.\n *\n * @public\n */\nexport interface PostHogProviderProps {\n /** The child components to render within the PostHog context */\n children: React.ReactNode\n /** PostHog configuration options */\n options?: PostHogOptions\n /** Your PostHog API key */\n apiKey?: string\n /** An existing PostHog client instance */\n client?: PostHog\n /**\n * Autocapture configuration - can be a boolean or detailed options.\n *\n * When not set, the default behavior is:\n * - `captureScreens`: true\n * - `captureTouches`: false\n * - `captureAppLifecycleEvents`: true\n *\n * Set to `true` to enable all autocapture features (including touches).\n * Set to `false` to disable all autocapture features.\n */\n autocapture?: boolean | PostHogAutocaptureOptions\n /**\n * Enable debug mode for additional logging\n *\n * @default false\n */\n debug?: boolean\n /** Custom styles for the provider wrapper View */\n style?: StyleProp<ViewStyle>\n}\n\n// One document click listener per client, shared across sibling providers, so one interaction\n// enqueues exactly one $autocapture event (sdk-specs autocapture). `owners` maps each mounted\n// provider's host node to its own options, so a click is scoped to the owning subtree AND\n// captured with that provider's config; its size doubles as the refcount.\ntype WebClickOwners = Map<unknown, React.MutableRefObject<PostHogAutocaptureOptions>>\nconst webClickListeners = new WeakMap<PostHog, { owners: WebClickOwners; remove: () => void }>()\n\nfunction PostHogNavigationHook({\n options,\n client,\n}: {\n options?: PostHogAutocaptureOptions\n client?: PostHog\n}): JSX.Element | null {\n useNavigationTracker(options?.navigation, options?.navigationRef, client)\n return null\n}\n\n/**\n * PostHogProvider is a React component that provides PostHog functionality to your React Native app. You can find all configuration options in the [React Native SDK docs](https://posthog.com/docs/libraries/react-native#configuration-options).\n *\n * Autocapturing navigation requires further configuration. See the [React Native SDK navigation docs](https://posthog.com/docs/libraries/react-native#capturing-screen-views)\n * for more information about autocapturing navigation.\n *\n * This is the recommended way to set up PostHog for React Native. This utilizes the Context API to pass the PostHog client around, enable autocapture.\n *\n * {@label Initialization}\n *\n * @example\n * ```jsx\n * // Add to App.(js|ts)\n * import { usePostHog, PostHogProvider } from 'posthog-react-native'\n *\n * export function MyApp() {\n * return (\n * <PostHogProvider apiKey=\"<ph_project_api_key>\" options={{\n * host: '<ph_client_api_host>',\n * }}>\n * <MyComponent />\n * </PostHogProvider>\n * )\n * }\n *\n * // And access the PostHog client via the usePostHog hook\n * import { usePostHog } from 'posthog-react-native'\n *\n * const MyComponent = () => {\n * const posthog = usePostHog()\n *\n * useEffect(() => {\n * posthog.capture(\"event_name\")\n * }, [posthog])\n * }\n *\n * ```\n *\n * @example\n * ```jsx\n * // Using with existing client\n * import { PostHog } from 'posthog-react-native'\n *\n * const posthog = new PostHog('<ph_project_api_key>', {\n * host: '<ph_client_api_host>'\n * })\n *\n * export function MyApp() {\n * return (\n * <PostHogProvider client={posthog}>\n * <MyComponent />\n * </PostHogProvider>\n * )\n * }\n * ```\n *\n * @public\n *\n * @param props - The PostHogProvider props\n */\nexport const PostHogProvider = ({\n children,\n client,\n options,\n apiKey,\n autocapture,\n style,\n debug = false,\n}: PostHogProviderProps): JSX.Element | null => {\n const captureAll = autocapture === true\n const captureNone = autocapture === false\n\n const posthog = useMemo(() => {\n if (client && apiKey) {\n console.warn(\n 'You have provided both a client and an apiKey to PostHogProvider. The apiKey will be ignored in favour of the client.'\n )\n }\n\n if (client) {\n return client\n }\n\n const parsedOptions = {\n ...options,\n captureAppLifecycleEvents:\n options?.captureAppLifecycleEvents !== undefined ? options.captureAppLifecycleEvents : !captureNone,\n }\n\n return new PostHog(apiKey ?? '', parsedOptions)\n }, [client, apiKey]) // oxlint-disable-line react/exhaustive-deps\n\n const autocaptureOptions = useMemo(\n () => (autocapture && typeof autocapture !== 'boolean' ? autocapture : {}),\n [autocapture]\n )\n\n const captureTouches = !captureNone && posthog && (captureAll || autocaptureOptions?.captureTouches)\n const captureScreens = !captureNone && posthog && (captureAll || (autocaptureOptions?.captureScreens ?? true)) // Default to true if not set\n const phLabelProp = autocaptureOptions?.customLabelProp || defaultPostHogLabelProp\n\n useEffect(() => {\n posthog.debug(debug)\n }, [debug, posthog])\n\n const onTouch = useCallback(\n (type: 'start' | 'move' | 'end', e: GestureResponderEvent) => {\n // TODO: Improve this to ensure we only capture presses and not just ends of a drag for example\n if (!captureTouches) {\n return\n }\n\n if (type === 'end') {\n autocaptureFromTouchEvent(e, posthog, autocaptureOptions)\n }\n },\n [captureTouches, posthog, autocaptureOptions]\n )\n\n // Browsers fire touchend only for touch input, so a mouse never reaches onTouchEndCapture.\n // Listen on the document in the CAPTURE phase: RNW forwards `onClick` but not `onClickCapture`,\n // and its Pressable stops propagation before any bubble-phase handler runs. Document-wide so it\n // still sees Modal; subtree scoping happens in autocapture.tsx. Read options through a ref so an\n // inline `autocapture` prop doesn't re-attach every render.\n const hostRef = useRef<unknown>(null)\n const optionsRef = useRef(autocaptureOptions)\n useEffect(() => {\n optionsRef.current = autocaptureOptions\n }, [autocaptureOptions])\n\n useEffect(() => {\n // The package targets ESNext without the DOM lib, so reach the document off the global.\n const doc = (globalThis as any)?.document\n if (!isWeb() || !captureTouches || !doc?.addEventListener) {\n return\n }\n\n const ownerNode = hostRef.current\n if (!ownerNode) {\n // Without a host node nothing can be scoped to this provider, and a null key would collide\n // with any sibling in the same state.\n return\n }\n\n const existing = webClickListeners.get(posthog)\n if (existing) {\n existing.owners.set(ownerNode, optionsRef)\n } else {\n const owners: WebClickOwners = new Map([[ownerNode, optionsRef]])\n const handler = (e: any): void => {\n const owner = findOwningNode(e, owners)\n if (!owner) {\n return\n }\n const options = owners.get(owner)?.current\n if (!options) {\n return\n }\n autocaptureFromTouchEvent({ target: e.target, nativeEvent: e }, posthog, options, 'click')\n }\n doc.addEventListener('click', handler, true)\n webClickListeners.set(posthog, {\n owners,\n remove: () => doc.removeEventListener('click', handler, true),\n })\n }\n\n return () => {\n const entry = webClickListeners.get(posthog)\n if (!entry) {\n return\n }\n entry.owners.delete(ownerNode)\n if (entry.owners.size === 0) {\n entry.remove()\n webClickListeners.delete(posthog)\n }\n }\n }, [captureTouches, posthog])\n\n const captureProps = isWeb()\n ? {}\n : { onTouchEndCapture: captureTouches ? (e: GestureResponderEvent) => onTouch('end', e) : undefined }\n\n return (\n <View\n ref={hostRef as any}\n {...{ [phLabelProp]: 'PostHogProvider' }} // Dynamically setting customLabelProp (default: ph-label)\n style={style || { flex: 1 }}\n {...captureProps}\n >\n <PostHogContext.Provider value={{ client: posthog }}>\n {captureScreens && <PostHogNavigationHook options={autocaptureOptions} client={posthog} />}\n {children}\n </PostHogContext.Provider>\n </View>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PostHogProvider.js","names":["_react","_interopRequireWildcard","require","_reactNative","_posthogRn","_autocapture","_useNavigationTracker","_PostHogContext","_utils","_jsxRuntime","_this","_jsxFileName","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t2","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","webClickListeners","PostHogNavigationHook","_ref","options","client","useNavigationTracker","navigation","navigationRef","PostHogProvider","exports","_ref2","children","apiKey","autocapture","style","_ref2$debug","debug","captureAll","captureNone","posthog","useMemo","console","warn","parsedOptions","captureAppLifecycleEvents","undefined","PostHog","autocaptureOptions","captureTouches","captureScreens","_a","phLabelProp","customLabelProp","defaultPostHogLabelProp","useEffect","onTouch","useCallback","type","autocaptureFromTouchEvent","hostRef","useRef","optionsRef","current","doc","globalThis","document","isWeb","addEventListener","ownerNode","existing","owners","Map","handler","owner","findOwningNode","target","nativeEvent","remove","removeEventListener","entry","size","captureProps","onTouchEndCapture","jsx","View","ref","flex","jsxs","PostHogContext","Provider","value"],"sources":["../src/PostHogProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { GestureResponderEvent, StyleProp, View, ViewStyle } from 'react-native'\nimport { PostHog, PostHogOptions } from './posthog-rn'\nimport { autocaptureFromTouchEvent, findOwningNode } from './autocapture'\nimport { useNavigationTracker } from './hooks/useNavigationTracker'\nimport { PostHogContext } from './PostHogContext'\nimport { PostHogAutocaptureOptions } from './types'\nimport { isWeb } from './utils'\nimport { defaultPostHogLabelProp } from './autocapture'\n\n/**\n * Props for the PostHogProvider component.\n *\n * @public\n */\nexport interface PostHogProviderProps {\n /** The child components to render within the PostHog context */\n children: React.ReactNode\n /** PostHog configuration options */\n options?: PostHogOptions\n /** Your PostHog API key */\n apiKey?: string\n /** An existing PostHog client instance */\n client?: PostHog\n /**\n * Autocapture configuration - can be a boolean or detailed options.\n *\n * When not set, the default behavior is:\n * - `captureScreens`: true\n * - `captureTouches`: false\n * - `captureAppLifecycleEvents`: true\n *\n * Set to `true` to enable all autocapture features (including touches).\n * Set to `false` to disable all autocapture features.\n */\n autocapture?: boolean | PostHogAutocaptureOptions\n /**\n * Enable debug mode for additional logging\n *\n * @default false\n */\n debug?: boolean\n /** Custom styles for the provider wrapper View */\n style?: StyleProp<ViewStyle>\n}\n\n// One document click listener per client, shared across sibling providers, so one interaction\n// enqueues exactly one $autocapture event (sdk-specs autocapture). `owners` maps each mounted\n// provider's host node to its own options, so a click is scoped to the owning subtree AND\n// captured with that provider's config; its size doubles as the refcount.\ntype WebClickOwners = Map<unknown, React.MutableRefObject<PostHogAutocaptureOptions>>\nconst webClickListeners = new WeakMap<PostHog, { owners: WebClickOwners; remove: () => void }>()\n\nfunction PostHogNavigationHook({\n options,\n client,\n}: {\n options?: PostHogAutocaptureOptions\n client?: PostHog\n}): JSX.Element | null {\n useNavigationTracker(options?.navigation, options?.navigationRef, client)\n return null\n}\n\n/**\n * PostHogProvider is a React component that provides PostHog functionality to your React Native app. You can find all configuration options in the [React Native SDK docs](https://posthog.com/docs/libraries/react-native#configuration-options).\n *\n * Autocapturing navigation requires further configuration. See the [React Native SDK navigation docs](https://posthog.com/docs/libraries/react-native#capturing-screen-views)\n * for more information about autocapturing navigation.\n *\n * This is the recommended way to set up PostHog for React Native. This utilizes the Context API to pass the PostHog client around, enable autocapture.\n *\n * {@label Initialization}\n *\n * @example\n * ```jsx\n * // Add to App.(js|ts)\n * import { usePostHog, PostHogProvider } from 'posthog-react-native'\n *\n * export function MyApp() {\n * return (\n * <PostHogProvider apiKey=\"<ph_project_api_key>\" options={{\n * host: '<ph_client_api_host>',\n * }}>\n * <MyComponent />\n * </PostHogProvider>\n * )\n * }\n *\n * // And access the PostHog client via the usePostHog hook\n * import { usePostHog } from 'posthog-react-native'\n *\n * const MyComponent = () => {\n * const posthog = usePostHog()\n *\n * useEffect(() => {\n * posthog.capture(\"event_name\")\n * }, [posthog])\n * }\n *\n * ```\n *\n * @example\n * ```jsx\n * // Using with existing client\n * import { PostHog } from 'posthog-react-native'\n *\n * const posthog = new PostHog('<ph_project_api_key>', {\n * host: '<ph_client_api_host>'\n * })\n *\n * export function MyApp() {\n * return (\n * <PostHogProvider client={posthog}>\n * <MyComponent />\n * </PostHogProvider>\n * )\n * }\n * ```\n *\n * @public\n *\n * @param props - The PostHogProvider props\n */\nexport const PostHogProvider = ({\n children,\n client,\n options,\n apiKey,\n autocapture,\n style,\n debug = false,\n}: PostHogProviderProps): JSX.Element | null => {\n const captureAll = autocapture === true\n const captureNone = autocapture === false\n\n const posthog = useMemo(() => {\n if (client && apiKey) {\n console.warn(\n 'You have provided both a client and an apiKey to PostHogProvider. The apiKey will be ignored in favour of the client.'\n )\n }\n\n if (client) {\n return client\n }\n\n const parsedOptions = {\n ...options,\n captureAppLifecycleEvents:\n options?.captureAppLifecycleEvents !== undefined ? options.captureAppLifecycleEvents : !captureNone,\n }\n\n return new PostHog(apiKey ?? '', parsedOptions)\n }, [client, apiKey]) // oxlint-disable-line react/exhaustive-deps\n\n const autocaptureOptions = useMemo(\n () => (autocapture && typeof autocapture !== 'boolean' ? autocapture : {}),\n [autocapture]\n )\n\n const captureTouches = !captureNone && posthog && (captureAll || autocaptureOptions?.captureTouches)\n const captureScreens = !captureNone && posthog && (captureAll || (autocaptureOptions?.captureScreens ?? true)) // Default to true if not set\n const phLabelProp = autocaptureOptions?.customLabelProp || defaultPostHogLabelProp\n\n useEffect(() => {\n posthog.debug(debug)\n }, [debug, posthog])\n\n const onTouch = useCallback(\n (type: 'start' | 'move' | 'end', e: GestureResponderEvent) => {\n // TODO: Improve this to ensure we only capture presses and not just ends of a drag for example\n if (!captureTouches) {\n return\n }\n\n if (type === 'end') {\n autocaptureFromTouchEvent(e, posthog, autocaptureOptions)\n }\n },\n [captureTouches, posthog, autocaptureOptions]\n )\n\n // Browsers fire touchend only for touch input, so a mouse never reaches onTouchEndCapture.\n // Listen on the document in the CAPTURE phase: RNW forwards `onClick` but not `onClickCapture`,\n // and its Pressable stops propagation before any bubble-phase handler runs. Document-wide so it\n // still sees Modal; subtree scoping happens in autocapture.tsx. Read options through a ref so an\n // inline `autocapture` prop doesn't re-attach every render.\n const hostRef = useRef<unknown>(null)\n const optionsRef = useRef(autocaptureOptions)\n useEffect(() => {\n optionsRef.current = autocaptureOptions\n }, [autocaptureOptions])\n\n useEffect(() => {\n // The package targets ESNext without the DOM lib, so reach the document off the global.\n const doc = (globalThis as any)?.document\n if (!isWeb() || !captureTouches || !doc?.addEventListener) {\n return\n }\n\n const ownerNode = hostRef.current\n if (!ownerNode) {\n // Without a host node nothing can be scoped to this provider, and a null key would collide\n // with any sibling in the same state.\n return\n }\n\n const existing = webClickListeners.get(posthog)\n if (existing) {\n existing.owners.set(ownerNode, optionsRef)\n } else {\n const owners: WebClickOwners = new Map([[ownerNode, optionsRef]])\n const handler = (e: any): void => {\n const owner = findOwningNode(e, owners)\n if (!owner) {\n return\n }\n const options = owners.get(owner)?.current\n if (!options) {\n return\n }\n autocaptureFromTouchEvent({ target: e.target, nativeEvent: e }, posthog, options, 'click')\n }\n doc.addEventListener('click', handler, true)\n webClickListeners.set(posthog, {\n owners,\n remove: () => doc.removeEventListener('click', handler, true),\n })\n }\n\n return () => {\n const entry = webClickListeners.get(posthog)\n if (!entry) {\n return\n }\n entry.owners.delete(ownerNode)\n if (entry.owners.size === 0) {\n entry.remove()\n webClickListeners.delete(posthog)\n }\n }\n }, [captureTouches, posthog])\n\n const captureProps = isWeb()\n ? {}\n : { onTouchEndCapture: captureTouches ? (e: GestureResponderEvent) => onTouch('end', e) : undefined }\n\n return (\n <View\n ref={hostRef as any}\n {...{ [phLabelProp]: 'PostHogProvider' }} // Dynamically setting customLabelProp (default: ph-label)\n style={style || { flex: 1 }}\n {...captureProps}\n >\n <PostHogContext.Provider value={{ client: posthog }}>\n {captureScreens && <PostHogNavigationHook options={autocaptureOptions} client={posthog} />}\n {children}\n </PostHogContext.Provider>\n </View>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -5,4 +5,4 @@ export declare const findOwningNode: (e: any, owners: {
5
5
  has(node: unknown): boolean;
6
6
  }) => unknown;
7
7
  export declare const maxAncestorsTraversed = 1000;
8
- export declare const autocaptureFromTouchEvent: (e: any, posthog: PostHog, options?: PostHogAutocaptureOptions, eventType?: "touch" | "click") => void;
8
+ export declare const autocaptureFromTouchEvent: (e: any, posthog: PostHog, options?: PostHogAutocaptureOptions, eventType?: 'touch' | 'click') => void;
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture.js","names":["isAnimatedValue","value","_isReanimatedSharedValue","_typeof2","flattenStyles","styles","flattened","Array","isArray","_iterator","_createForOfIteratorHelper","_step","s","n","done","style","_extends2","err","e","f","key","stringifyStyle","str","Object","keys","map","x","concat","join","sanitiseLabel","label","replace","defaultPostHogLabelProp","exports","captureAttributePrefix","frameworkInternalLabels","reactFiberKeyPattern","maxFallbackAncestors","maxOwnerAncestors","warnedCaptureFailure","getFallbackTargetInstance","node","target","depth","getOwnPropertyNames","find","name","test","parentNode","undefined","findOwningNode","owners","current","_targetInst","stateNode","has","maxAncestorsTraversed","defaultMaxElementsCaptured","autocaptureFromTouchEvent","posthog","options","arguments","length","eventType","captureFromEvent","error","console","warn","_options$noCapturePro","noCaptureProp","_options$customLabelP","customLabelProp","_options$maxElementsC","maxElementsCaptured","maxElementsCapturedOption","_options$ignoreLabels","ignoreLabels","_options$propsToCaptu","propsToCapture","Number","isFinite","nativeInst","targetInst","elements","autocaptureProperties","currentInst","ancestorsTraversed","_loop","props","memoizedProps","v","el","tag_name","elAutocaptureProperties","forEach","indexOf","propertyKey","slice","includes","attr__style","$el_text","JSON","stringify","hasCustomLabel","_a","elementType","displayName","_b","isFrameworkWrapper","push","_ret","elAttrLabelKey","lastLabel","i","element","autocapture","_objectSpread","$touch_x","_c","nativeEvent","pageX","$touch_y","_d","pageY"],"sources":["../src/autocapture.tsx"],"sourcesContent":["import { PostHog } from './posthog-rn'\nimport { PostHogAutocaptureElement, JsonType } from '@posthog/core'\nimport { PostHogAutocaptureOptions } from './types'\n\ninterface Element {\n elementType?: {\n displayName?: string\n name?: string\n }\n memoizedProps?: Record<string, unknown>\n return?: Element\n // Host fibers carry their DOM node here; used to scope web capture to a provider's subtree.\n stateNode?: unknown\n}\n\nconst isAnimatedValue = (value: any): boolean => {\n // Check if it's a Reanimated shared value or animated style\n // _isReanimatedSharedValue is the official internal marker for SharedValues\n // Also check for _value property which is present in SharedValues\n return value?._isReanimatedSharedValue === true || (typeof value === 'object' && value !== null && '_value' in value)\n}\n\nconst flattenStyles = (styles: any): any => {\n const flattened: any = {}\n\n // Skip if the entire style object is an animated value\n if (isAnimatedValue(styles)) {\n return {}\n }\n\n if (Array.isArray(styles)) {\n for (const style of styles) {\n Object.assign(flattened, flattenStyles(style))\n }\n } else if (styles && typeof styles === 'object') {\n // Filter out individual animated properties within a regular style object\n // This handles cases like { opacity: animatedValue, backgroundColor: 'red' }\n for (const key in styles) {\n if (!isAnimatedValue(styles[key])) {\n flattened[key] = styles[key]\n }\n }\n }\n\n return flattened\n}\n\nconst stringifyStyle = (styles: any): string => {\n const flattened = flattenStyles(styles)\n\n const str = Object.keys(flattened)\n .map((x) => `${x}:${flattened[x]}`)\n .join(';')\n\n return str\n}\n\nconst sanitiseLabel = (label: string): string => {\n return label.replace(/[^a-z0-9]+/gi, '-')\n}\n\nexport const defaultPostHogLabelProp = 'ph-label'\n\nconst captureAttributePrefix = 'data-ph-capture-attribute-'\n\n// react-native-web internals; skipped only where RNW puts them, so a same-named app component is kept.\n// Verified against RNW 0.20.0 and 0.21.2: createElement wraps in LocaleProvider only when\n// `domProps.dir` is set, so a nested element inside a text ancestor never gets one. Recheck on bump.\nconst frameworkInternalLabels = ['LocaleProvider']\n\nconst reactFiberKeyPattern = /^__react(Fiber|InternalInstance)\\$/\n\n// Cycle guard, not a depth policy: real DOM chains null-terminate, a malformed parentNode may not.\nconst maxFallbackAncestors = 100\n\n// Separate bound for the fiber walk: unrelated to the DOM guard above, so tuning one never\n// silently retunes the other.\nconst maxOwnerAncestors = 100\n\n// Fires per interaction, so warn once: a persistent failure here silently disables autocapture.\nlet warnedCaptureFailure = false\n\n// react-dom (RN Web) events have no _targetInst; the fiber sits on e.target under a randomised\n// __reactFiber$ key. The clicked node may be a non-React node inside a React subtree, so walk up.\nconst getFallbackTargetInstance = (e: any): Element | undefined => {\n let node = e.target\n\n for (let depth = 0; node && typeof node === 'object' && depth < maxFallbackAncestors; depth++) {\n const key = Object.getOwnPropertyNames(node).find((name) => reactFiberKeyPattern.test(name))\n if (key) {\n return node[key]\n }\n node = node.parentNode\n }\n\n return undefined\n}\n\n// Returns the owner node this event happened under, or undefined if none owns it. Walks the fiber\n// tree, not the DOM: RNW's Modal portals to document.body, so the DOM parent chain leaves the\n// subtree but fiber `.return` does not. Kept separate from the element walk in captureFromEvent,\n// which stops at maxElementsCaptured and would falsely reject a deep target.\nexport const findOwningNode = (e: any, owners: { has(node: unknown): boolean }): unknown => {\n let current: Element | undefined = e._targetInst || getFallbackTargetInstance(e)\n for (let depth = 0; current && depth < maxOwnerAncestors; depth++) {\n if (current.stateNode && owners.has(current.stateNode)) {\n return current.stateNode\n }\n current = current.return\n }\n\n return undefined\n}\n\n// Fail-closed bound on the walk; unrelated to maxElementsCaptured, which caps the emitted payload.\nexport const maxAncestorsTraversed = 1000\n\nconst defaultMaxElementsCaptured = 20\n\n// Autocapture must never break the host app: a throw would escape into RN's touch dispatch on\n// native, or the DOM click handler on web. Matches the browser SDK, which guards its equivalent\n// document-level handler (packages/browser/src/autocapture.ts).\nexport const autocaptureFromTouchEvent = (\n e: any,\n posthog: PostHog,\n options: PostHogAutocaptureOptions = {},\n eventType: 'touch' | 'click' = 'touch'\n): void => {\n try {\n captureFromEvent(e, posthog, options, eventType)\n } catch (error) {\n if (!warnedCaptureFailure) {\n warnedCaptureFailure = true\n console.warn('PostHog autocapture: capturing the interaction threw:', error)\n }\n }\n}\n\nconst captureFromEvent = (\n e: any,\n posthog: PostHog,\n options: PostHogAutocaptureOptions,\n eventType: 'touch' | 'click'\n): void => {\n const {\n noCaptureProp = 'ph-no-capture',\n customLabelProp = defaultPostHogLabelProp,\n maxElementsCaptured: maxElementsCapturedOption = defaultMaxElementsCaptured,\n ignoreLabels = [],\n propsToCapture = ['style', 'testID', 'accessibilityLabel', customLabelProp, 'children'],\n } = options\n\n // The destructure default only covers `undefined`; a NaN would make every comparison against it\n // false, silently uncapping the payload instead of capping it.\n const maxElementsCaptured = Number.isFinite(maxElementsCapturedOption)\n ? maxElementsCapturedOption\n : defaultMaxElementsCaptured\n\n const nativeInst = e._targetInst\n const targetInst: Element | undefined = nativeInst || getFallbackTargetInstance(e)\n if (!targetInst) {\n return\n }\n const elements: PostHogAutocaptureElement[] = []\n const autocaptureProperties: Record<string, JsonType> = {}\n\n let currentInst: Element | undefined = targetInst\n let ancestorsTraversed = 0\n\n while (currentInst) {\n const props = currentInst.memoizedProps\n\n if (ancestorsTraversed++ >= maxAncestorsTraversed) {\n return\n }\n\n if (props?.[noCaptureProp]) {\n // Immediately ignore events if a no capture is in the chain\n return\n }\n\n if (elements.length >= maxElementsCaptured) {\n // keep walking so a no capture ancestor above the cap is still seen\n currentInst = currentInst.return\n continue\n }\n\n const el: PostHogAutocaptureElement = {\n tag_name: '',\n }\n const elAutocaptureProperties: Record<string, JsonType> = {}\n\n if (props) {\n // Capture data-ph-capture-attribute props as event properties.\n // Element props are only captured from propsToCapture.\n Object.keys(props).forEach((key) => {\n const value = props[key]\n\n if (key.indexOf(captureAttributePrefix) === 0) {\n const propertyKey = key.slice(captureAttributePrefix.length)\n if (propertyKey && ['string', 'number', 'boolean'].includes(typeof value) && value !== '') {\n elAutocaptureProperties[propertyKey] = value as JsonType\n }\n }\n\n if (!propsToCapture.includes(key)) {\n return\n }\n\n if (key === 'style') {\n // Safely handle style prop, especially for animated styles\n try {\n el.attr__style = stringifyStyle(value)\n } catch (error) {\n // Skip style capturing if it fails (e.g., animated styles)\n }\n } else if (['string', 'number', 'boolean'].includes(typeof value)) {\n if (key === 'children') {\n el.$el_text = typeof value === 'string' ? value : JSON.stringify(value)\n } else {\n el[`attr__${key}`] = value as JsonType\n }\n }\n })\n }\n\n // Try and find a sensible label\n const hasCustomLabel = typeof props?.[customLabelProp] !== 'undefined'\n const label = hasCustomLabel\n ? `${props?.[customLabelProp]}`\n : currentInst.elementType?.displayName || currentInst.elementType?.name\n\n Object.assign(autocaptureProperties, elAutocaptureProperties)\n\n // RNW wraps the touched host node directly, so its internals only ever head the chain; a match\n // further up is the app's own component. A user-set label is never a framework internal.\n const isFrameworkWrapper =\n !nativeInst && !hasCustomLabel && elements.length === 0 && frameworkInternalLabels.includes(label as string)\n\n if (label && !isFrameworkWrapper && !ignoreLabels.includes(label)) {\n el.tag_name = sanitiseLabel(label)\n elements.push(el)\n }\n\n currentInst = currentInst.return\n }\n\n if (elements.length) {\n // The element that was tapped, may be a child (or grandchild of an element with a customLabelProp (default: ph-label))\n // In this case, the current labels applied obscure the customLabelProp (default: ph-label)\n // To correct this, loop over the elements in reverse, and promote the customLabelProp (default: ph-label)\n const elAttrLabelKey = `attr__${customLabelProp}`\n let lastLabel: string | undefined = undefined\n\n for (let i = elements.length - 1; i >= 0; i--) {\n const element = elements[i]\n if (element[elAttrLabelKey]) {\n // this element had a customLabelProp (default: ph-label) set, promote it to the lastLabel\n lastLabel = element[elAttrLabelKey] as string\n }\n\n // if lastLabel is set, update this elements tag_name\n if (lastLabel) {\n element['tag_name'] = lastLabel\n }\n }\n posthog.autocapture(eventType, elements, {\n ...autocaptureProperties,\n $touch_x: e.nativeEvent?.pageX,\n $touch_y: e.nativeEvent?.pageY,\n })\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"autocapture.js","names":["isAnimatedValue","value","_isReanimatedSharedValue","_typeof2","flattenStyles","styles","flattened","Array","isArray","_iterator","_createForOfIteratorHelper","_step","s","n","done","style","_extends2","err","e","f","key","stringifyStyle","str","Object","keys","map","x","concat","join","sanitiseLabel","label","replace","defaultPostHogLabelProp","exports","captureAttributePrefix","frameworkInternalLabels","reactFiberKeyPattern","maxFallbackAncestors","maxOwnerAncestors","warnedCaptureFailure","getFallbackTargetInstance","node","target","depth","getOwnPropertyNames","find","name","test","parentNode","undefined","findOwningNode","owners","current","_targetInst","stateNode","has","maxAncestorsTraversed","defaultMaxElementsCaptured","autocaptureFromTouchEvent","posthog","options","arguments","length","eventType","captureFromEvent","error","console","warn","_options$noCapturePro","noCaptureProp","_options$customLabelP","customLabelProp","_options$maxElementsC","maxElementsCaptured","maxElementsCapturedOption","_options$ignoreLabels","ignoreLabels","_options$propsToCaptu","propsToCapture","Number","isFinite","nativeInst","targetInst","elements","autocaptureProperties","currentInst","ancestorsTraversed","_loop","props","memoizedProps","v","el","tag_name","elAutocaptureProperties","forEach","indexOf","propertyKey","slice","includes","attr__style","$el_text","JSON","stringify","hasCustomLabel","_a","elementType","displayName","_b","isFrameworkWrapper","push","_ret","elAttrLabelKey","lastLabel","i","element","autocapture","_objectSpread","$touch_x","_c","nativeEvent","pageX","$touch_y","_d","pageY"],"sources":["../src/autocapture.tsx"],"sourcesContent":["import { PostHog } from './posthog-rn'\nimport { PostHogAutocaptureElement, JsonType } from '@posthog/core'\nimport { PostHogAutocaptureOptions } from './types'\n\ninterface Element {\n elementType?: {\n displayName?: string\n name?: string\n }\n memoizedProps?: Record<string, unknown>\n return?: Element\n // Host fibers carry their DOM node here; used to scope web capture to a provider's subtree.\n stateNode?: unknown\n}\n\nconst isAnimatedValue = (value: any): boolean => {\n // Check if it's a Reanimated shared value or animated style\n // _isReanimatedSharedValue is the official internal marker for SharedValues\n // Also check for _value property which is present in SharedValues\n return value?._isReanimatedSharedValue === true || (typeof value === 'object' && value !== null && '_value' in value)\n}\n\nconst flattenStyles = (styles: any): any => {\n const flattened: any = {}\n\n // Skip if the entire style object is an animated value\n if (isAnimatedValue(styles)) {\n return {}\n }\n\n if (Array.isArray(styles)) {\n for (const style of styles) {\n Object.assign(flattened, flattenStyles(style))\n }\n } else if (styles && typeof styles === 'object') {\n // Filter out individual animated properties within a regular style object\n // This handles cases like { opacity: animatedValue, backgroundColor: 'red' }\n for (const key in styles) {\n if (!isAnimatedValue(styles[key])) {\n flattened[key] = styles[key]\n }\n }\n }\n\n return flattened\n}\n\nconst stringifyStyle = (styles: any): string => {\n const flattened = flattenStyles(styles)\n\n const str = Object.keys(flattened)\n .map((x) => `${x}:${flattened[x]}`)\n .join(';')\n\n return str\n}\n\nconst sanitiseLabel = (label: string): string => {\n return label.replace(/[^a-z0-9]+/gi, '-')\n}\n\nexport const defaultPostHogLabelProp = 'ph-label'\n\nconst captureAttributePrefix = 'data-ph-capture-attribute-'\n\n// react-native-web internals; skipped only where RNW puts them, so a same-named app component is kept.\n// Verified against RNW 0.20.0 and 0.21.2: createElement wraps in LocaleProvider only when\n// `domProps.dir` is set, so a nested element inside a text ancestor never gets one. Recheck on bump.\nconst frameworkInternalLabels = ['LocaleProvider']\n\nconst reactFiberKeyPattern = /^__react(Fiber|InternalInstance)\\$/\n\n// Cycle guard, not a depth policy: real DOM chains null-terminate, a malformed parentNode may not.\nconst maxFallbackAncestors = 100\n\n// Separate bound for the fiber walk: unrelated to the DOM guard above, so tuning one never\n// silently retunes the other.\nconst maxOwnerAncestors = 100\n\n// Fires per interaction, so warn once: a persistent failure here silently disables autocapture.\nlet warnedCaptureFailure = false\n\n// react-dom (RN Web) events have no _targetInst; the fiber sits on e.target under a randomised\n// __reactFiber$ key. The clicked node may be a non-React node inside a React subtree, so walk up.\nconst getFallbackTargetInstance = (e: any): Element | undefined => {\n let node = e.target\n\n for (let depth = 0; node && typeof node === 'object' && depth < maxFallbackAncestors; depth++) {\n const key = Object.getOwnPropertyNames(node).find((name) => reactFiberKeyPattern.test(name))\n if (key) {\n return node[key]\n }\n node = node.parentNode\n }\n\n return undefined\n}\n\n// Returns the owner node this event happened under, or undefined if none owns it. Walks the fiber\n// tree, not the DOM: RNW's Modal portals to document.body, so the DOM parent chain leaves the\n// subtree but fiber `.return` does not. Kept separate from the element walk in captureFromEvent,\n// which stops at maxElementsCaptured and would falsely reject a deep target.\nexport const findOwningNode = (e: any, owners: { has(node: unknown): boolean }): unknown => {\n let current: Element | undefined = e._targetInst || getFallbackTargetInstance(e)\n for (let depth = 0; current && depth < maxOwnerAncestors; depth++) {\n if (current.stateNode && owners.has(current.stateNode)) {\n return current.stateNode\n }\n current = current.return\n }\n\n return undefined\n}\n\n// Fail-closed bound on the walk; unrelated to maxElementsCaptured, which caps the emitted payload.\nexport const maxAncestorsTraversed = 1000\n\nconst defaultMaxElementsCaptured = 20\n\n// Autocapture must never break the host app: a throw would escape into RN's touch dispatch on\n// native, or the DOM click handler on web. Matches the browser SDK, which guards its equivalent\n// document-level handler (packages/browser/src/autocapture.ts).\nexport const autocaptureFromTouchEvent = (\n e: any,\n posthog: PostHog,\n options: PostHogAutocaptureOptions = {},\n eventType: 'touch' | 'click' = 'touch'\n): void => {\n try {\n captureFromEvent(e, posthog, options, eventType)\n } catch (error) {\n if (!warnedCaptureFailure) {\n warnedCaptureFailure = true\n console.warn('PostHog autocapture: capturing the interaction threw:', error)\n }\n }\n}\n\nconst captureFromEvent = (\n e: any,\n posthog: PostHog,\n options: PostHogAutocaptureOptions,\n eventType: 'touch' | 'click'\n): void => {\n const {\n noCaptureProp = 'ph-no-capture',\n customLabelProp = defaultPostHogLabelProp,\n maxElementsCaptured: maxElementsCapturedOption = defaultMaxElementsCaptured,\n ignoreLabels = [],\n propsToCapture = ['style', 'testID', 'accessibilityLabel', customLabelProp, 'children'],\n } = options\n\n // The destructure default only covers `undefined`; a NaN would make every comparison against it\n // false, silently uncapping the payload instead of capping it.\n const maxElementsCaptured = Number.isFinite(maxElementsCapturedOption)\n ? maxElementsCapturedOption\n : defaultMaxElementsCaptured\n\n const nativeInst = e._targetInst\n const targetInst: Element | undefined = nativeInst || getFallbackTargetInstance(e)\n if (!targetInst) {\n return\n }\n const elements: PostHogAutocaptureElement[] = []\n const autocaptureProperties: Record<string, JsonType> = {}\n\n let currentInst: Element | undefined = targetInst\n let ancestorsTraversed = 0\n\n while (currentInst) {\n const props = currentInst.memoizedProps\n\n if (ancestorsTraversed++ >= maxAncestorsTraversed) {\n return\n }\n\n if (props?.[noCaptureProp]) {\n // Immediately ignore events if a no capture is in the chain\n return\n }\n\n if (elements.length >= maxElementsCaptured) {\n // keep walking so a no capture ancestor above the cap is still seen\n currentInst = currentInst.return\n continue\n }\n\n const el: PostHogAutocaptureElement = {\n tag_name: '',\n }\n const elAutocaptureProperties: Record<string, JsonType> = {}\n\n if (props) {\n // Capture data-ph-capture-attribute props as event properties.\n // Element props are only captured from propsToCapture.\n Object.keys(props).forEach((key) => {\n const value = props[key]\n\n if (key.indexOf(captureAttributePrefix) === 0) {\n const propertyKey = key.slice(captureAttributePrefix.length)\n if (propertyKey && ['string', 'number', 'boolean'].includes(typeof value) && value !== '') {\n elAutocaptureProperties[propertyKey] = value as JsonType\n }\n }\n\n if (!propsToCapture.includes(key)) {\n return\n }\n\n if (key === 'style') {\n // Safely handle style prop, especially for animated styles\n try {\n el.attr__style = stringifyStyle(value)\n } catch (error) {\n // Skip style capturing if it fails (e.g., animated styles)\n }\n } else if (['string', 'number', 'boolean'].includes(typeof value)) {\n if (key === 'children') {\n el.$el_text = typeof value === 'string' ? value : JSON.stringify(value)\n } else {\n el[`attr__${key}`] = value as JsonType\n }\n }\n })\n }\n\n // Try and find a sensible label\n const hasCustomLabel = typeof props?.[customLabelProp] !== 'undefined'\n const label = hasCustomLabel\n ? `${props?.[customLabelProp]}`\n : currentInst.elementType?.displayName || currentInst.elementType?.name\n\n Object.assign(autocaptureProperties, elAutocaptureProperties)\n\n // RNW wraps the touched host node directly, so its internals only ever head the chain; a match\n // further up is the app's own component. A user-set label is never a framework internal.\n const isFrameworkWrapper =\n !nativeInst && !hasCustomLabel && elements.length === 0 && frameworkInternalLabels.includes(label as string)\n\n if (label && !isFrameworkWrapper && !ignoreLabels.includes(label)) {\n el.tag_name = sanitiseLabel(label)\n elements.push(el)\n }\n\n currentInst = currentInst.return\n }\n\n if (elements.length) {\n // The element that was tapped, may be a child (or grandchild of an element with a customLabelProp (default: ph-label))\n // In this case, the current labels applied obscure the customLabelProp (default: ph-label)\n // To correct this, loop over the elements in reverse, and promote the customLabelProp (default: ph-label)\n const elAttrLabelKey = `attr__${customLabelProp}`\n let lastLabel: string | undefined = undefined\n\n for (let i = elements.length - 1; i >= 0; i--) {\n const element = elements[i]\n if (element[elAttrLabelKey]) {\n // this element had a customLabelProp (default: ph-label) set, promote it to the lastLabel\n lastLabel = element[elAttrLabelKey] as string\n }\n\n // if lastLabel is set, update this elements tag_name\n if (lastLabel) {\n element['tag_name'] = lastLabel\n }\n }\n posthog.autocapture(eventType, elements, {\n ...autocaptureProperties,\n $touch_x: e.nativeEvent?.pageX,\n $touch_y: e.nativeEvent?.pageY,\n })\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_core","require","_utils","_utils2","_OptionalPlugin","_createForOfIteratorHelper","r","e","t","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","_arrayLikeToArray","toString","slice","constructor","name","from","test","ownKeys","Object","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","LogLevelList","ErrorTracking","exports","instance","options","undefined","logger","persistFatalException","_classCallCheck2","_nativeForwardingEnabled","_autocaptureEnabled","createLogger","resolveOptions","exceptionSteps","_exceptionStepsConfig","CoreErrorTracking","resolveExceptionStepsConfig","enabled","max_bytes","maxBytes","_exceptionStepsBuffer","ExceptionStepsBuffer","autocapture","_createClass2","key","getNativePluginExceptionStepsConfig","addExceptionStep","message","properties","isString","trim","warn","userProperties","isObject","_CoreErrorTracking$st","stripReservedExceptionStepFields","sanitizedProperties","droppedKeys","add","EXCEPTION_STEP_INTERNAL_FIELDS","MESSAGE","TIMESTAMP","Date","toISOString","forwardExceptionStepToNative","error","onNativeErrorTrackingReady","_iterator","getAttachableExceptionSteps","_step","step","$message","err","_this","OptionalReactNativePlugin","Promise","resolve","concat","attachExceptionSteps","isNullish","$exception_steps","steps","getAttachable","clearExceptionSteps","clear","shutdown","_a","_unsubscribeUncaughtExceptions","onRemoteConfig","errorTracking","getRemoteConfigBool","info","autocaptureOptions","resolveAutocaptureOptions","uncaughtExceptions","unhandledRejections","console","resolveConsoleOptions","level","includes","autocaptureUncaughtErrors","_this2","onUncaughtException","isFatal","isPostHogFetchNetworkError","hint","mechanism","type","handled","additionalProperties","captureException","persisted","flush","critical","trackUncaughtExceptions","autocaptureUnhandledRejections","_this3","onUnhandledRejection","trackUnhandledRejections","autocaptureConsole","levels","_this4","onConsole","syntheticException","$exception_level","_iterator2","_step2","trackConsole"],"sources":["../../src/error-tracking/index.ts"],"sourcesContent":["import type { PostHog } from '../posthog-rn'\nimport {\n JsonType,\n Logger,\n ErrorTracking as CoreErrorTracking,\n isPostHogFetchNetworkError,\n isNullish,\n isObject,\n isString,\n PostHogEventProperties,\n} from '@posthog/core'\nimport { Properties } from '@posthog/types'\nimport { trackConsole, trackUncaughtExceptions, trackUnhandledRejections } from './utils'\nimport { getRemoteConfigBool } from '../utils'\nimport { OptionalReactNativePlugin } from '../optional/OptionalPlugin'\n\ntype LogLevel = 'debug' | 'log' | 'info' | 'warn' | 'error'\n\nconst LogLevelList: LogLevel[] = ['debug', 'log', 'info', 'warn', 'error']\n\n// user provided configuration\ninterface AutocaptureOptions {\n uncaughtExceptions?: boolean\n unhandledRejections?: boolean\n console?: boolean | LogLevel[]\n /**\n * Enables native iOS/Android/macOS crash autocapture through the optional native plugin.\n * Disabled by default. Requires `@posthog/react-native-plugin` installed (2.2.0 or newer for macOS).\n */\n nativeCrashes?: boolean\n}\n\n/**\n * Controls the breadcrumb-style exception steps recorded via `addExceptionStep` and attached\n * to captured exceptions as `$exception_steps`.\n */\nexport interface ExceptionStepsOptions {\n /**\n * Whether exception steps are recorded and attached.\n * @default true\n */\n enabled?: boolean\n /**\n * Total UTF-8 byte budget (~32KB) for the in-memory buffer. Oldest steps are evicted first when exceeded.\n * @default 32768\n */\n maxBytes?: number\n}\n\nexport interface ErrorTrackingOptions {\n autocapture?: AutocaptureOptions | boolean\n exceptionSteps?: ExceptionStepsOptions\n}\n\n// resolved configuration\ninterface ResolvedAutocaptureOptions {\n uncaughtExceptions: boolean\n unhandledRejections: boolean\n console: LogLevel[]\n}\n\ninterface ResolvedErrorTrackingOptions {\n autocapture: ResolvedAutocaptureOptions\n}\n\nexport class ErrorTracking {\n private logger: Logger\n private options: ResolvedErrorTrackingOptions\n private _exceptionStepsConfig: CoreErrorTracking.ResolvedExceptionStepsConfig\n private _exceptionStepsBuffer: CoreErrorTracking.ExceptionStepsBuffer\n private _nativeForwardingEnabled: boolean = false\n private _unsubscribeUncaughtExceptions?: () => void\n\n /**\n * Controls whether autocaptured exceptions are actually sent.\n * When remote config disables error tracking, this is set to false\n * so that installed handlers become no-ops.\n * Defaults to true (don't block locally enabled capture before remote config loads).\n */\n private _autocaptureEnabled: boolean = true\n\n constructor(\n private instance: PostHog,\n options: ErrorTrackingOptions = {},\n logger: Logger,\n private readonly persistFatalException?: () => Promise<void>\n ) {\n this.logger = logger.createLogger('[ErrorTracking]')\n this.options = this.resolveOptions(options)\n const exceptionSteps = options.exceptionSteps\n this._exceptionStepsConfig = CoreErrorTracking.resolveExceptionStepsConfig(\n exceptionSteps ? { enabled: exceptionSteps.enabled, max_bytes: exceptionSteps.maxBytes } : undefined\n )\n this._exceptionStepsBuffer = new CoreErrorTracking.ExceptionStepsBuffer(this._exceptionStepsConfig)\n this.autocapture(this.options.autocapture)\n }\n\n /**\n * Exception-steps config in the native plugin's shape, so the embedded native SDK keeps one\n * logical buffer with the same byte budget and enabled state.\n */\n getNativePluginExceptionStepsConfig(): ExceptionStepsOptions {\n return { enabled: this._exceptionStepsConfig.enabled, maxBytes: this._exceptionStepsConfig.max_bytes }\n }\n\n /**\n * Records a breadcrumb-style exception step in the instance buffer and mirrors it to the embedded\n * native SDK. The `$timestamp` is captured at call time. Invalid messages are ignored with a\n * warning and never throw. The step only reaches native when it was actually buffered.\n */\n addExceptionStep(message: string, properties?: Properties): void {\n if (!this._exceptionStepsConfig.enabled) {\n return\n }\n\n try {\n if (!isString(message) || message.trim().length === 0) {\n this.logger.warn('Ignoring exception step because message must be a non-empty string')\n return\n }\n\n const userProperties = isObject(properties) ? { ...properties } : {}\n const { sanitizedProperties, droppedKeys } = CoreErrorTracking.stripReservedExceptionStepFields(userProperties)\n\n if (droppedKeys.length > 0) {\n this.logger.warn('Ignoring reserved exception step fields', { droppedKeys })\n }\n\n this._exceptionStepsBuffer.add({\n [CoreErrorTracking.EXCEPTION_STEP_INTERNAL_FIELDS.MESSAGE]: message,\n [CoreErrorTracking.EXCEPTION_STEP_INTERNAL_FIELDS.TIMESTAMP]: new Date().toISOString(),\n ...sanitizedProperties,\n })\n this.forwardExceptionStepToNative(message, properties)\n } catch (error) {\n this.logger.error('Failed to add exception step. Ignoring breadcrumb.', error)\n }\n }\n\n /**\n * Native error tracking initializes asynchronously, so steps recorded before then are buffered\n * only in JS. The host calls this once native is ready to enable forwarding and replay the buffer,\n * so a native crash shortly after startup carries the steps recorded before native was ready.\n */\n onNativeErrorTrackingReady(): void {\n this._nativeForwardingEnabled = true\n for (const step of this.getAttachableExceptionSteps()) {\n this.forwardExceptionStepToNative(step.$message, step as Properties)\n }\n }\n\n private forwardExceptionStepToNative(message: string, properties?: Properties): void {\n if (!this._nativeForwardingEnabled || !OptionalReactNativePlugin?.addExceptionStep) {\n return\n }\n try {\n // Fire-and-forget: the native layer validates and buffers independently and must never block.\n void Promise.resolve(OptionalReactNativePlugin.addExceptionStep(message, properties)).catch((e) => {\n this.logger.warn(`Failed to forward exception step to native: ${e}`)\n })\n } catch (e) {\n this.logger.warn(`Failed to forward exception step to native: ${e}`)\n }\n }\n\n /**\n * Returns `properties` with a snapshot of the buffered steps attached as `$exception_steps`,\n * unless the feature is disabled, the caller already provided that key, or the buffer is empty.\n * The buffer is left intact so subsequent exceptions read the same steps.\n */\n attachExceptionSteps(properties: PostHogEventProperties): PostHogEventProperties {\n if (!this._exceptionStepsConfig.enabled || !isNullish(properties.$exception_steps)) {\n return properties\n }\n const steps = this.getAttachableExceptionSteps()\n if (steps.length === 0) {\n return properties\n }\n // Steps are already normalized to their JSON-safe wire form by the buffer.\n return { ...properties, $exception_steps: steps as unknown as JsonType }\n }\n\n /**\n * Snapshot of the buffered steps (oldest first), or an empty array when disabled or empty.\n */\n getAttachableExceptionSteps(): CoreErrorTracking.ExceptionStep[] {\n if (!this._exceptionStepsConfig.enabled) {\n return []\n }\n try {\n return this._exceptionStepsBuffer.getAttachable()\n } catch (error) {\n this.logger.error('Failed to read buffered exception steps.', error)\n return []\n }\n }\n\n /**\n * Clears the buffer. Called on SDK close, not on capture or identity changes.\n */\n clearExceptionSteps(): void {\n this._exceptionStepsBuffer.clear()\n }\n\n shutdown(): void {\n this._autocaptureEnabled = false\n this._unsubscribeUncaughtExceptions?.()\n this._unsubscribeUncaughtExceptions = undefined\n this.clearExceptionSteps()\n }\n\n /**\n * Called when remote config is loaded.\n * If errorTracking.autocaptureExceptions is explicitly false, autocapture is disabled.\n * If it's true or undefined (not yet loaded / not present), autocapture follows local config.\n */\n onRemoteConfig(errorTracking: boolean | { [key: string]: JsonType } | undefined): void {\n if (errorTracking == null) {\n // Remote config doesn't include errorTracking — don't change anything\n return\n }\n\n // Default to false: if remote config is present but the key is missing, disable autocapture\n this._autocaptureEnabled = getRemoteConfigBool(errorTracking, 'autocaptureExceptions', false)\n\n this.logger.info(\n `Error tracking autocapture ${this._autocaptureEnabled ? 'enabled' : 'disabled'} by remote config.`\n )\n }\n\n private resolveOptions(options: ErrorTrackingOptions): ResolvedErrorTrackingOptions {\n const autocaptureOptions = this.resolveAutocaptureOptions(options.autocapture)\n return {\n autocapture: autocaptureOptions,\n }\n }\n\n private resolveAutocaptureOptions(autocapture: AutocaptureOptions | boolean = false): ResolvedAutocaptureOptions {\n if (typeof autocapture === 'boolean') {\n return {\n uncaughtExceptions: autocapture,\n unhandledRejections: autocapture,\n console: [],\n }\n }\n return {\n uncaughtExceptions: !!autocapture.uncaughtExceptions,\n unhandledRejections: !!autocapture.unhandledRejections,\n console: this.resolveConsoleOptions(autocapture.console),\n }\n }\n\n private resolveConsoleOptions(console: boolean | LogLevel[] = false): LogLevel[] {\n if (typeof console === 'boolean') {\n return console ? ['error'] : []\n }\n return Array.isArray(console) ? console.filter((level) => LogLevelList.includes(level)) : []\n }\n\n private autocaptureUncaughtErrors() {\n const onUncaughtException = (error: unknown, isFatal: boolean) => {\n // Gate on remote config — if remotely disabled, don't capture\n if (!this._autocaptureEnabled) {\n return\n }\n\n // Offline/timeout failures are expected, not application errors.\n if (isPostHogFetchNetworkError(error)) {\n return\n }\n\n const hint: CoreErrorTracking.EventHint = {\n mechanism: {\n type: 'onuncaughtexception',\n handled: false,\n },\n }\n const additionalProperties: any = {}\n\n if (isFatal) {\n additionalProperties['$exception_level'] = 'fatal' as CoreErrorTracking.SeverityLevel\n }\n\n this.instance.captureException(error, additionalProperties, hint)\n\n if (isFatal) {\n const persisted = this.persistFatalException?.()\n void this.instance.flush().catch(() => {\n this.logger.critical('Failed to flush events')\n })\n return persisted\n }\n }\n try {\n this._unsubscribeUncaughtExceptions = trackUncaughtExceptions(onUncaughtException)\n } catch (err) {\n this.logger.warn('Failed to track uncaught exceptions: ', err)\n }\n }\n\n private autocaptureUnhandledRejections() {\n const onUnhandledRejection = (error: unknown) => {\n // Gate on remote config — if remotely disabled, don't capture\n if (!this._autocaptureEnabled) {\n return\n }\n\n // Offline/timeout failures are expected, not application errors.\n if (isPostHogFetchNetworkError(error)) {\n return\n }\n\n const hint: CoreErrorTracking.EventHint = {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false,\n },\n }\n this.instance.captureException(error, {}, hint)\n }\n\n try {\n trackUnhandledRejections(onUnhandledRejection)\n } catch (err) {\n this.logger.warn('Failed to track unhandled rejections: ', err)\n }\n }\n\n private autocaptureConsole(levels: LogLevel[]) {\n const onConsole = (level: LogLevel) => (error: unknown, isFatal: boolean, syntheticException?: Error) => {\n // Gate on remote config — if remotely disabled, don't capture\n if (!this._autocaptureEnabled) {\n return\n }\n\n const hint: CoreErrorTracking.EventHint = {\n mechanism: {\n type: 'onconsole',\n handled: true,\n },\n syntheticException,\n }\n const additionalProperties = {\n $exception_level: level as CoreErrorTracking.SeverityLevel,\n }\n this.instance.captureException(error, additionalProperties, hint)\n }\n\n try {\n for (const level of levels) {\n trackConsole(level, onConsole(level))\n }\n } catch (err) {\n this.logger.warn('Failed to track console errors: ', err)\n }\n }\n\n private autocapture(autocaptureOptions: ResolvedAutocaptureOptions) {\n if (autocaptureOptions.uncaughtExceptions === true) {\n this.autocaptureUncaughtErrors()\n }\n if (autocaptureOptions.unhandledRejections === true) {\n this.autocaptureUnhandledRejections()\n }\n if (autocaptureOptions.console.length > 0) {\n this.autocaptureConsole(autocaptureOptions.console)\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_core","require","_utils","_utils2","_OptionalPlugin","_createForOfIteratorHelper","r","e","t","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","_arrayLikeToArray","toString","slice","constructor","name","from","test","ownKeys","Object","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","LogLevelList","ErrorTracking","exports","instance","options","undefined","logger","persistFatalException","_classCallCheck2","_nativeForwardingEnabled","_autocaptureEnabled","createLogger","resolveOptions","exceptionSteps","_exceptionStepsConfig","CoreErrorTracking","resolveExceptionStepsConfig","enabled","max_bytes","maxBytes","_exceptionStepsBuffer","ExceptionStepsBuffer","autocapture","_createClass2","key","getNativePluginExceptionStepsConfig","addExceptionStep","message","properties","isString","trim","warn","userProperties","isObject","_CoreErrorTracking$st","stripReservedExceptionStepFields","sanitizedProperties","droppedKeys","add","EXCEPTION_STEP_INTERNAL_FIELDS","MESSAGE","TIMESTAMP","Date","toISOString","forwardExceptionStepToNative","error","onNativeErrorTrackingReady","_iterator","getAttachableExceptionSteps","_step","step","$message","err","_this","OptionalReactNativePlugin","Promise","resolve","concat","attachExceptionSteps","isNullish","$exception_steps","steps","getAttachable","clearExceptionSteps","clear","shutdown","_a","_unsubscribeUncaughtExceptions","onRemoteConfig","errorTracking","getRemoteConfigBool","info","autocaptureOptions","resolveAutocaptureOptions","uncaughtExceptions","unhandledRejections","console","resolveConsoleOptions","level","includes","autocaptureUncaughtErrors","_this2","onUncaughtException","isFatal","isPostHogFetchNetworkError","hint","mechanism","type","handled","additionalProperties","captureException","persisted","flush","critical","trackUncaughtExceptions","autocaptureUnhandledRejections","_this3","onUnhandledRejection","trackUnhandledRejections","autocaptureConsole","levels","_this4","onConsole","syntheticException","$exception_level","_iterator2","_step2","trackConsole"],"sources":["../../src/error-tracking/index.ts"],"sourcesContent":["import type { PostHog } from '../posthog-rn'\nimport {\n JsonType,\n Logger,\n ErrorTracking as CoreErrorTracking,\n isPostHogFetchNetworkError,\n isNullish,\n isObject,\n isString,\n PostHogEventProperties,\n} from '@posthog/core'\nimport { Properties } from '@posthog/types'\nimport { trackConsole, trackUncaughtExceptions, trackUnhandledRejections } from './utils'\nimport { getRemoteConfigBool } from '../utils'\nimport { OptionalReactNativePlugin } from '../optional/OptionalPlugin'\n\ntype LogLevel = 'debug' | 'log' | 'info' | 'warn' | 'error'\n\nconst LogLevelList: LogLevel[] = ['debug', 'log', 'info', 'warn', 'error']\n\n// user provided configuration\ninterface AutocaptureOptions {\n uncaughtExceptions?: boolean\n unhandledRejections?: boolean\n console?: boolean | LogLevel[]\n /**\n * Enables native iOS/Android/macOS crash autocapture through the optional native plugin.\n * Disabled by default. Requires `@posthog/react-native-plugin` installed (2.2.0 or newer for macOS).\n */\n nativeCrashes?: boolean\n}\n\n/**\n * Controls the breadcrumb-style exception steps recorded via `addExceptionStep` and attached\n * to captured exceptions as `$exception_steps`.\n */\nexport interface ExceptionStepsOptions {\n /**\n * Whether exception steps are recorded and attached.\n * @default true\n */\n enabled?: boolean\n /**\n * Total UTF-8 byte budget (~32KB) for the in-memory buffer. Oldest steps are evicted first when exceeded.\n * @default 32768\n */\n maxBytes?: number\n}\n\nexport interface ErrorTrackingOptions {\n autocapture?: AutocaptureOptions | boolean\n exceptionSteps?: ExceptionStepsOptions\n}\n\n// resolved configuration\ninterface ResolvedAutocaptureOptions {\n uncaughtExceptions: boolean\n unhandledRejections: boolean\n console: LogLevel[]\n}\n\ninterface ResolvedErrorTrackingOptions {\n autocapture: ResolvedAutocaptureOptions\n}\n\nexport class ErrorTracking {\n private logger: Logger\n private options: ResolvedErrorTrackingOptions\n private _exceptionStepsConfig: CoreErrorTracking.ResolvedExceptionStepsConfig\n private _exceptionStepsBuffer: CoreErrorTracking.ExceptionStepsBuffer\n private _nativeForwardingEnabled: boolean = false\n private _unsubscribeUncaughtExceptions?: () => void\n\n /**\n * Controls whether autocaptured exceptions are actually sent.\n * When remote config disables error tracking, this is set to false\n * so that installed handlers become no-ops.\n * Defaults to true (don't block locally enabled capture before remote config loads).\n */\n private _autocaptureEnabled: boolean = true\n\n constructor(\n private instance: PostHog,\n options: ErrorTrackingOptions = {},\n logger: Logger,\n private readonly persistFatalException?: () => Promise<void>\n ) {\n this.logger = logger.createLogger('[ErrorTracking]')\n this.options = this.resolveOptions(options)\n const exceptionSteps = options.exceptionSteps\n this._exceptionStepsConfig = CoreErrorTracking.resolveExceptionStepsConfig(\n exceptionSteps ? { enabled: exceptionSteps.enabled, max_bytes: exceptionSteps.maxBytes } : undefined\n )\n this._exceptionStepsBuffer = new CoreErrorTracking.ExceptionStepsBuffer(this._exceptionStepsConfig)\n this.autocapture(this.options.autocapture)\n }\n\n /**\n * Exception-steps config in the native plugin's shape, so the embedded native SDK keeps one\n * logical buffer with the same byte budget and enabled state.\n */\n getNativePluginExceptionStepsConfig(): ExceptionStepsOptions {\n return { enabled: this._exceptionStepsConfig.enabled, maxBytes: this._exceptionStepsConfig.max_bytes }\n }\n\n /**\n * Records a breadcrumb-style exception step in the instance buffer and mirrors it to the embedded\n * native SDK. The `$timestamp` is captured at call time. Invalid messages are ignored with a\n * warning and never throw. The step only reaches native when it was actually buffered.\n */\n addExceptionStep(message: string, properties?: Properties): void {\n if (!this._exceptionStepsConfig.enabled) {\n return\n }\n\n try {\n if (!isString(message) || message.trim().length === 0) {\n this.logger.warn('Ignoring exception step because message must be a non-empty string')\n return\n }\n\n const userProperties = isObject(properties) ? { ...properties } : {}\n const { sanitizedProperties, droppedKeys } = CoreErrorTracking.stripReservedExceptionStepFields(userProperties)\n\n if (droppedKeys.length > 0) {\n this.logger.warn('Ignoring reserved exception step fields', { droppedKeys })\n }\n\n this._exceptionStepsBuffer.add({\n [CoreErrorTracking.EXCEPTION_STEP_INTERNAL_FIELDS.MESSAGE]: message,\n [CoreErrorTracking.EXCEPTION_STEP_INTERNAL_FIELDS.TIMESTAMP]: new Date().toISOString(),\n ...sanitizedProperties,\n })\n this.forwardExceptionStepToNative(message, properties)\n } catch (error) {\n this.logger.error('Failed to add exception step. Ignoring breadcrumb.', error)\n }\n }\n\n /**\n * Native error tracking initializes asynchronously, so steps recorded before then are buffered\n * only in JS. The host calls this once native is ready to enable forwarding and replay the buffer,\n * so a native crash shortly after startup carries the steps recorded before native was ready.\n */\n onNativeErrorTrackingReady(): void {\n this._nativeForwardingEnabled = true\n for (const step of this.getAttachableExceptionSteps()) {\n this.forwardExceptionStepToNative(step.$message, step as Properties)\n }\n }\n\n private forwardExceptionStepToNative(message: string, properties?: Properties): void {\n if (!this._nativeForwardingEnabled || !OptionalReactNativePlugin?.addExceptionStep) {\n return\n }\n try {\n // Fire-and-forget: the native layer validates and buffers independently and must never block.\n void Promise.resolve(OptionalReactNativePlugin.addExceptionStep(message, properties)).catch((e) => {\n this.logger.warn(`Failed to forward exception step to native: ${e}`)\n })\n } catch (e) {\n this.logger.warn(`Failed to forward exception step to native: ${e}`)\n }\n }\n\n /**\n * Returns `properties` with a snapshot of the buffered steps attached as `$exception_steps`,\n * unless the feature is disabled, the caller already provided that key, or the buffer is empty.\n * The buffer is left intact so subsequent exceptions read the same steps.\n */\n attachExceptionSteps(properties: PostHogEventProperties): PostHogEventProperties {\n if (!this._exceptionStepsConfig.enabled || !isNullish(properties.$exception_steps)) {\n return properties\n }\n const steps = this.getAttachableExceptionSteps()\n if (steps.length === 0) {\n return properties\n }\n // Steps are already normalized to their JSON-safe wire form by the buffer.\n return { ...properties, $exception_steps: steps as unknown as JsonType }\n }\n\n /**\n * Snapshot of the buffered steps (oldest first), or an empty array when disabled or empty.\n */\n getAttachableExceptionSteps(): CoreErrorTracking.ExceptionStep[] {\n if (!this._exceptionStepsConfig.enabled) {\n return []\n }\n try {\n return this._exceptionStepsBuffer.getAttachable()\n } catch (error) {\n this.logger.error('Failed to read buffered exception steps.', error)\n return []\n }\n }\n\n /**\n * Clears the buffer. Called on SDK close, not on capture or identity changes.\n */\n clearExceptionSteps(): void {\n this._exceptionStepsBuffer.clear()\n }\n\n shutdown(): void {\n this._autocaptureEnabled = false\n this._unsubscribeUncaughtExceptions?.()\n this._unsubscribeUncaughtExceptions = undefined\n this.clearExceptionSteps()\n }\n\n /**\n * Called when remote config is loaded.\n * If errorTracking.autocaptureExceptions is explicitly false, autocapture is disabled.\n * If it's true or undefined (not yet loaded / not present), autocapture follows local config.\n */\n onRemoteConfig(errorTracking: boolean | { [key: string]: JsonType } | undefined): void {\n if (errorTracking == null) {\n // Remote config doesn't include errorTracking — don't change anything\n return\n }\n\n // Default to false: if remote config is present but the key is missing, disable autocapture\n this._autocaptureEnabled = getRemoteConfigBool(errorTracking, 'autocaptureExceptions', false)\n\n this.logger.info(\n `Error tracking autocapture ${this._autocaptureEnabled ? 'enabled' : 'disabled'} by remote config.`\n )\n }\n\n private resolveOptions(options: ErrorTrackingOptions): ResolvedErrorTrackingOptions {\n const autocaptureOptions = this.resolveAutocaptureOptions(options.autocapture)\n return {\n autocapture: autocaptureOptions,\n }\n }\n\n private resolveAutocaptureOptions(autocapture: AutocaptureOptions | boolean = false): ResolvedAutocaptureOptions {\n if (typeof autocapture === 'boolean') {\n return {\n uncaughtExceptions: autocapture,\n unhandledRejections: autocapture,\n console: [],\n }\n }\n return {\n uncaughtExceptions: !!autocapture.uncaughtExceptions,\n unhandledRejections: !!autocapture.unhandledRejections,\n console: this.resolveConsoleOptions(autocapture.console),\n }\n }\n\n private resolveConsoleOptions(console: boolean | LogLevel[] = false): LogLevel[] {\n if (typeof console === 'boolean') {\n return console ? ['error'] : []\n }\n return Array.isArray(console) ? console.filter((level) => LogLevelList.includes(level)) : []\n }\n\n private autocaptureUncaughtErrors() {\n const onUncaughtException = (error: unknown, isFatal: boolean) => {\n // Gate on remote config — if remotely disabled, don't capture\n if (!this._autocaptureEnabled) {\n return\n }\n\n // Offline/timeout failures are expected, not application errors.\n if (isPostHogFetchNetworkError(error)) {\n return\n }\n\n const hint: CoreErrorTracking.EventHint = {\n mechanism: {\n type: 'onuncaughtexception',\n handled: false,\n },\n }\n const additionalProperties: any = {}\n\n if (isFatal) {\n additionalProperties['$exception_level'] = 'fatal' as CoreErrorTracking.SeverityLevel\n }\n\n this.instance.captureException(error, additionalProperties, hint)\n\n if (isFatal) {\n const persisted = this.persistFatalException?.()\n void this.instance.flush().catch(() => {\n this.logger.critical('Failed to flush events')\n })\n return persisted\n }\n }\n try {\n this._unsubscribeUncaughtExceptions = trackUncaughtExceptions(onUncaughtException)\n } catch (err) {\n this.logger.warn('Failed to track uncaught exceptions: ', err)\n }\n }\n\n private autocaptureUnhandledRejections() {\n const onUnhandledRejection = (error: unknown) => {\n // Gate on remote config — if remotely disabled, don't capture\n if (!this._autocaptureEnabled) {\n return\n }\n\n // Offline/timeout failures are expected, not application errors.\n if (isPostHogFetchNetworkError(error)) {\n return\n }\n\n const hint: CoreErrorTracking.EventHint = {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false,\n },\n }\n this.instance.captureException(error, {}, hint)\n }\n\n try {\n trackUnhandledRejections(onUnhandledRejection)\n } catch (err) {\n this.logger.warn('Failed to track unhandled rejections: ', err)\n }\n }\n\n private autocaptureConsole(levels: LogLevel[]) {\n const onConsole = (level: LogLevel) => (error: unknown, isFatal: boolean, syntheticException?: Error) => {\n // Gate on remote config — if remotely disabled, don't capture\n if (!this._autocaptureEnabled) {\n return\n }\n\n const hint: CoreErrorTracking.EventHint = {\n mechanism: {\n type: 'onconsole',\n handled: true,\n },\n syntheticException,\n }\n const additionalProperties = {\n $exception_level: level as CoreErrorTracking.SeverityLevel,\n }\n this.instance.captureException(error, additionalProperties, hint)\n }\n\n try {\n for (const level of levels) {\n trackConsole(level, onConsole(level))\n }\n } catch (err) {\n this.logger.warn('Failed to track console errors: ', err)\n }\n }\n\n private autocapture(autocaptureOptions: ResolvedAutocaptureOptions) {\n if (autocaptureOptions.uncaughtExceptions === true) {\n this.autocaptureUncaughtErrors()\n }\n if (autocaptureOptions.unhandledRejections === true) {\n this.autocaptureUnhandledRejections()\n }\n if (autocaptureOptions.console.length > 0) {\n this.autocaptureConsole(autocaptureOptions.console)\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["_core","require","_utils","FATAL_PERSISTENCE_TIMEOUT_MS","trackUnhandledRejections","tracker","isHermes","_a","GLOBAL_OBJ","HermesInternal","enablePromiseRejectionTracker","_c","_b","hasPromise","call","allRejections","onUnhandled","_","error","onHandled","isWeb","addWebUnhandledRejectionListener","Error","uncaughtExceptionSubscriptions","WeakMap","trackUncaughtExceptions","errorUtils","ErrorUtils","setGlobalHandler","getGlobalHandler","subscription","get","previousHandler","trackers","Set","handler","isFatal","pending","_i","_Array$from","Array","from","length","callback","result","isPromise","push","Promise","resolve","forwarded","forward","deadline","safeSetTimeout","all","then","clearTimeout","restore","set","_subscription","add","size","trackConsole","level","con","console","originalMethod","_len","arguments","args","_key","message","join","find","arg","syntheticException","apply","_oldUnhandledRejectionHandler","onunhandledrejection","event"],"sources":["../../src/error-tracking/utils.ts"],"sourcesContent":["import { isPromise, safeSetTimeout } from '@posthog/core'\nimport { GLOBAL_OBJ, isHermes, isWeb } from '../utils'\n\ntype ExceptionHook = (error: unknown, isFatal: boolean, syntheticException?: Error) => void\ntype UncaughtExceptionHook = (error: unknown, isFatal: boolean) => void | Promise<void>\n\nconst FATAL_PERSISTENCE_TIMEOUT_MS = 2000\n\nexport function trackUnhandledRejections(tracker: ExceptionHook): void {\n if (\n isHermes() &&\n GLOBAL_OBJ?.HermesInternal?.enablePromiseRejectionTracker &&\n GLOBAL_OBJ?.HermesInternal?.hasPromise?.()\n ) {\n GLOBAL_OBJ.HermesInternal.enablePromiseRejectionTracker({\n allRejections: true,\n onUnhandled: (_, error: unknown) => tracker(error as Error, false),\n onHandled: () => {},\n })\n } else if (isWeb()) {\n addWebUnhandledRejectionListener(tracker)\n } else {\n throw new Error('Promise rejection tracking is only supported on Web and Hermes runtime')\n }\n}\n\nconst uncaughtExceptionSubscriptions = new WeakMap<\n NonNullable<typeof GLOBAL_OBJ.ErrorUtils>,\n { trackers: Set<UncaughtExceptionHook>; restore: () => void }\n>()\n\nexport function trackUncaughtExceptions(tracker: UncaughtExceptionHook): () => void {\n const errorUtils = GLOBAL_OBJ?.ErrorUtils\n if (!errorUtils?.setGlobalHandler || !errorUtils.getGlobalHandler) {\n throw new Error('ErrorUtils globalHandlers are not defined')\n }\n\n let subscription = uncaughtExceptionSubscriptions.get(errorUtils)\n if (!subscription) {\n const previousHandler = errorUtils.getGlobalHandler()\n const trackers = new Set<UncaughtExceptionHook>()\n const handler = (error: Error, isFatal: boolean): void => {\n const pending: Promise<void>[] = []\n try {\n for (const callback of Array.from(trackers)) {\n try {\n const result = callback(error, isFatal ?? false)\n if (isPromise(result)) {\n pending.push(Promise.resolve(result).catch(() => {}))\n }\n } catch {\n // One reporter must not prevent other reporters or React Native from handling the error.\n }\n }\n } finally {\n if (isFatal && pending.length > 0) {\n let forwarded = false\n const forward = () => {\n if (!forwarded) {\n forwarded = true\n previousHandler?.(error, isFatal)\n }\n }\n const deadline = safeSetTimeout(forward, FATAL_PERSISTENCE_TIMEOUT_MS)\n void Promise.all(pending).then(() => {\n if (!forwarded) {\n clearTimeout(deadline)\n // Keep errors thrown by the previous handler outside Promise rejection handling.\n safeSetTimeout(forward, 0)\n }\n })\n } else {\n previousHandler?.(error, isFatal)\n }\n }\n }\n subscription = {\n trackers,\n restore: () => {\n // Leave another SDK's chain intact, but retire this empty subscription in case it is later detached.\n if (errorUtils.getGlobalHandler?.() === handler) {\n errorUtils.setGlobalHandler?.(previousHandler)\n }\n uncaughtExceptionSubscriptions.delete(errorUtils)\n },\n }\n errorUtils.setGlobalHandler(handler)\n uncaughtExceptionSubscriptions.set(errorUtils, subscription)\n }\n\n const { trackers, restore } = subscription\n trackers.add(tracker)\n return () => {\n if (trackers.delete(tracker) && trackers.size === 0) {\n restore()\n }\n }\n}\n\nexport function trackConsole(level: string, tracker: ExceptionHook): void {\n const con = console as any\n if (!con) {\n throw new Error('console not available, cannot wrap console.error')\n }\n\n const originalMethod = con[level]\n con[level] = function (...args: any[]): void {\n const message = args.join(' ')\n const error = args.find((arg) => arg instanceof Error)\n const syntheticException = new Error('Synthetic PostHog Error')\n tracker(error ?? message, false, syntheticException)\n return originalMethod?.(...args)\n }\n}\n\nfunction addWebUnhandledRejectionListener(tracker: ExceptionHook): void {\n const _oldUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection\n GLOBAL_OBJ.onunhandledrejection = (event) => {\n tracker(event, false)\n if (_oldUnhandledRejectionHandler) {\n _oldUnhandledRejectionHandler.apply(GLOBAL_OBJ, [event])\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["_core","require","_utils","FATAL_PERSISTENCE_TIMEOUT_MS","trackUnhandledRejections","tracker","isHermes","_a","GLOBAL_OBJ","HermesInternal","enablePromiseRejectionTracker","_c","_b","hasPromise","call","allRejections","onUnhandled","_","error","onHandled","isWeb","addWebUnhandledRejectionListener","Error","uncaughtExceptionSubscriptions","WeakMap","trackUncaughtExceptions","errorUtils","ErrorUtils","setGlobalHandler","getGlobalHandler","subscription","get","previousHandler","trackers","Set","handler","isFatal","pending","_i","_Array$from","Array","from","length","callback","result","isPromise","push","Promise","resolve","forwarded","forward","deadline","safeSetTimeout","all","then","clearTimeout","restore","set","_subscription","add","size","trackConsole","level","con","console","originalMethod","_len","arguments","args","_key","message","join","find","arg","syntheticException","apply","_oldUnhandledRejectionHandler","onunhandledrejection","event"],"sources":["../../src/error-tracking/utils.ts"],"sourcesContent":["import { isPromise, safeSetTimeout } from '@posthog/core'\nimport { GLOBAL_OBJ, isHermes, isWeb } from '../utils'\n\ntype ExceptionHook = (error: unknown, isFatal: boolean, syntheticException?: Error) => void\ntype UncaughtExceptionHook = (error: unknown, isFatal: boolean) => void | Promise<void>\n\nconst FATAL_PERSISTENCE_TIMEOUT_MS = 2000\n\nexport function trackUnhandledRejections(tracker: ExceptionHook): void {\n if (\n isHermes() &&\n GLOBAL_OBJ?.HermesInternal?.enablePromiseRejectionTracker &&\n GLOBAL_OBJ?.HermesInternal?.hasPromise?.()\n ) {\n GLOBAL_OBJ.HermesInternal.enablePromiseRejectionTracker({\n allRejections: true,\n onUnhandled: (_, error: unknown) => tracker(error as Error, false),\n onHandled: () => {},\n })\n } else if (isWeb()) {\n addWebUnhandledRejectionListener(tracker)\n } else {\n throw new Error('Promise rejection tracking is only supported on Web and Hermes runtime')\n }\n}\n\nconst uncaughtExceptionSubscriptions = new WeakMap<\n NonNullable<typeof GLOBAL_OBJ.ErrorUtils>,\n { trackers: Set<UncaughtExceptionHook>; restore: () => void }\n>()\n\nexport function trackUncaughtExceptions(tracker: UncaughtExceptionHook): () => void {\n const errorUtils = GLOBAL_OBJ?.ErrorUtils\n if (!errorUtils?.setGlobalHandler || !errorUtils.getGlobalHandler) {\n throw new Error('ErrorUtils globalHandlers are not defined')\n }\n\n let subscription = uncaughtExceptionSubscriptions.get(errorUtils)\n if (!subscription) {\n const previousHandler = errorUtils.getGlobalHandler()\n const trackers = new Set<UncaughtExceptionHook>()\n const handler = (error: Error, isFatal: boolean): void => {\n const pending: Promise<void>[] = []\n try {\n for (const callback of Array.from(trackers)) {\n try {\n const result = callback(error, isFatal ?? false)\n if (isPromise(result)) {\n pending.push(Promise.resolve(result).catch(() => {}))\n }\n } catch {\n // One reporter must not prevent other reporters or React Native from handling the error.\n }\n }\n } finally {\n if (isFatal && pending.length > 0) {\n let forwarded = false\n const forward = () => {\n if (!forwarded) {\n forwarded = true\n previousHandler?.(error, isFatal)\n }\n }\n const deadline = safeSetTimeout(forward, FATAL_PERSISTENCE_TIMEOUT_MS)\n void Promise.all(pending).then(() => {\n if (!forwarded) {\n clearTimeout(deadline)\n // Keep errors thrown by the previous handler outside Promise rejection handling.\n safeSetTimeout(forward, 0)\n }\n })\n } else {\n previousHandler?.(error, isFatal)\n }\n }\n }\n subscription = {\n trackers,\n restore: () => {\n // Leave another SDK's chain intact, but retire this empty subscription in case it is later detached.\n if (errorUtils.getGlobalHandler?.() === handler) {\n errorUtils.setGlobalHandler?.(previousHandler)\n }\n uncaughtExceptionSubscriptions.delete(errorUtils)\n },\n }\n errorUtils.setGlobalHandler(handler)\n uncaughtExceptionSubscriptions.set(errorUtils, subscription)\n }\n\n const { trackers, restore } = subscription\n trackers.add(tracker)\n return () => {\n if (trackers.delete(tracker) && trackers.size === 0) {\n restore()\n }\n }\n}\n\nexport function trackConsole(level: string, tracker: ExceptionHook): void {\n const con = console as any\n if (!con) {\n throw new Error('console not available, cannot wrap console.error')\n }\n\n const originalMethod = con[level]\n con[level] = function (...args: any[]): void {\n const message = args.join(' ')\n const error = args.find((arg) => arg instanceof Error)\n const syntheticException = new Error('Synthetic PostHog Error')\n tracker(error ?? message, false, syntheticException)\n return originalMethod?.(...args)\n }\n}\n\nfunction addWebUnhandledRejectionListener(tracker: ExceptionHook): void {\n const _oldUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection\n GLOBAL_OBJ.onunhandledrejection = (event) => {\n tracker(event, false)\n if (_oldUnhandledRejectionHandler) {\n _oldUnhandledRejectionHandler.apply(GLOBAL_OBJ, [event])\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.withReactNativeNavigation=void 0;var _OptionalReactNativeNavigationWix=require("../optional/OptionalReactNativeNavigationWix");var withReactNativeNavigation=exports.withReactNativeNavigation=function withReactNativeNavigation(posthog){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(!_OptionalReactNativeNavigationWix.OptionalReactNativeNavigationWix){return false;}var Navigation=_OptionalReactNativeNavigationWix.OptionalReactNativeNavigationWix.Navigation;Navigation.events().registerComponentDidAppearListener(function(_ref){var componentName=_ref.componentName,passProps=_ref.passProps;var _a,_b,_c,_d,_e;if(!((_a=options.captureScreens)!==null&&_a!==void 0?_a:true)){return;}var currentRouteName=((_c=(_b=options===null||options===void 0?void 0:options.navigation)===null||_b===void 0?void 0:_b.routeToName)===null||_c===void 0?void 0:_c.call(_b,componentName,passProps||{}))||componentName||'Unknown';if(currentRouteName){var properties=(_e=(_d=options===null||options===void 0?void 0:options.navigation)===null||_d===void 0?void 0:_d.routeToProperties)===null||_e===void 0?void 0:_e.call(_d,currentRouteName,passProps||{});posthog.screen(currentRouteName,properties);}});return true;};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.withReactNativeNavigation=void 0;var _OptionalReactNativeNavigationWix=require("../optional/OptionalReactNativeNavigationWix");var withReactNativeNavigation=exports.withReactNativeNavigation=function withReactNativeNavigation(posthog){var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};if(!_OptionalReactNativeNavigationWix.OptionalReactNativeNavigationWix){return false;}var Navigation=_OptionalReactNativeNavigationWix.OptionalReactNativeNavigationWix.Navigation;Navigation.events().registerComponentDidAppearListener(function(_ref){var componentName=_ref.componentName,passProps=_ref.passProps;var _a,_b,_c,_d;var _e;if(!((_e=options.captureScreens)!==null&&_e!==void 0?_e:true)){return;}var currentRouteName=((_b=(_a=options===null||options===void 0?void 0:options.navigation)===null||_a===void 0?void 0:_a.routeToName)===null||_b===void 0?void 0:_b.call(_a,componentName,passProps||{}))||componentName||'Unknown';if(currentRouteName){var properties=(_d=(_c=options===null||options===void 0?void 0:options.navigation)===null||_c===void 0?void 0:_c.routeToProperties)===null||_d===void 0?void 0:_d.call(_c,currentRouteName,passProps||{});posthog.screen(currentRouteName,properties);}});return true;};
2
2
  //# sourceMappingURL=wix-navigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wix-navigation.js","names":["_OptionalReactNativeNavigationWix","require","withReactNativeNavigation","exports","posthog","options","arguments","length","undefined","OptionalReactNativeNavigationWix","Navigation","events","registerComponentDidAppearListener","_ref","componentName","passProps","_a","captureScreens","currentRouteName","_c","_b","navigation","routeToName","call","properties","_e","_d","routeToProperties","screen"],"sources":["../../src/frameworks/wix-navigation.ts"],"sourcesContent":["/*\n * Wix Navigation (react-native-navigation)\n *\n * Wix Navigation uses a very different paradigm for rendering screens, with a more imperative / config driven approach\n * Instead of hooking into the natural React lifecycle, it provides a very different API which we can hook into and use instead.\n */\n\nimport { OptionalReactNativeNavigationWix } from '../optional/OptionalReactNativeNavigationWix'\nimport { PostHog } from '../posthog-rn'\nimport { PostHogAutocaptureOptions } from '../types'\n\nexport const withReactNativeNavigation = (posthog: PostHog, options: PostHogAutocaptureOptions = {}): boolean => {\n if (!OptionalReactNativeNavigationWix) {\n return false\n }\n\n const Navigation = OptionalReactNativeNavigationWix.Navigation\n\n // Equivalent of `useNavigationTracker`\n Navigation.events().registerComponentDidAppearListener(({ componentName, passProps }) => {\n if (!(options.captureScreens ?? true)) {\n return\n }\n\n const currentRouteName =\n options?.navigation?.routeToName?.(componentName, passProps || {}) || componentName || 'Unknown'\n\n if (currentRouteName) {\n const properties = options?.navigation?.routeToProperties?.(currentRouteName, passProps || {})\n posthog.screen(currentRouteName, properties)\n }\n })\n\n return true\n}\n"],"mappings":"+GAOA,IAAAA,iCAAA,CAAAC,OAAA,iDAIO,GAAM,CAAAC,yBAAyB,CAAAC,OAAA,CAAAD,yBAAA,CAAG,QAA5B,CAAAA,yBAAyBA,CAAIE,OAAgB,CAAsD,IAApD,CAAAC,OAAA,CAAAC,SAAA,CAAAC,MAAA,IAAAD,SAAA,MAAAE,SAAA,CAAAF,SAAA,IAAqC,EAAE,CACjG,GAAI,CAACG,kEAAgC,CAAE,CACrC,MAAO,MAAK,CACd,CAEA,GAAM,CAAAC,UAAU,CAAGD,kEAAgC,CAACC,UAAU,CAG9DA,UAAU,CAACC,MAAM,EAAE,CAACC,kCAAkC,CAAC,SAAAC,IAAA,CAAiC,IAA9B,CAAAC,aAAa,CAAAD,IAAA,CAAbC,aAAa,CAAEC,SAAS,CAAAF,IAAA,CAATE,SAAS,C,mBAChF,GAAI,EAAE,CAAAC,EAAA,CAAAX,OAAO,CAACY,cAAc,UAAAD,EAAA,UAAAA,EAAA,CAAI,IAAI,CAAC,CAAE,CACrC,OACF,CAEA,GAAM,CAAAE,gBAAgB,CACpB,EAAAC,EAAA,EAAAC,EAAA,CAAAf,OAAO,SAAPA,OAAO,iBAAPA,OAAO,CAAEgB,UAAU,UAAAD,EAAA,iBAAAA,EAAA,CAAEE,WAAW,UAAAH,EAAA,iBAAAA,EAAA,CAAAI,IAAA,CAAAH,EAAA,CAAGN,aAAa,CAAEC,SAAS,EAAI,EAAE,CAAC,GAAID,aAAa,EAAI,SAAS,CAElG,GAAII,gBAAgB,CAAE,CACpB,GAAM,CAAAM,UAAU,CAAG,CAAAC,EAAA,EAAAC,EAAA,CAAArB,OAAO,SAAPA,OAAO,iBAAPA,OAAO,CAAEgB,UAAU,UAAAK,EAAA,iBAAAA,EAAA,CAAEC,iBAAiB,UAAAF,EAAA,iBAAAA,EAAA,CAAAF,IAAA,CAAAG,EAAA,CAAGR,gBAAgB,CAAEH,SAAS,EAAI,EAAE,CAAC,CAC9FX,OAAO,CAACwB,MAAM,CAACV,gBAAgB,CAAEM,UAAU,CAAC,CAC9C,CACF,CAAC,CAAC,CAEF,MAAO,KAAI,CACb,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"wix-navigation.js","names":["_OptionalReactNativeNavigationWix","require","withReactNativeNavigation","exports","posthog","options","arguments","length","undefined","OptionalReactNativeNavigationWix","Navigation","events","registerComponentDidAppearListener","_ref","componentName","passProps","_e","captureScreens","currentRouteName","_b","_a","navigation","routeToName","call","properties","_d","_c","routeToProperties","screen"],"sources":["../../src/frameworks/wix-navigation.ts"],"sourcesContent":["/*\n * Wix Navigation (react-native-navigation)\n *\n * Wix Navigation uses a very different paradigm for rendering screens, with a more imperative / config driven approach\n * Instead of hooking into the natural React lifecycle, it provides a very different API which we can hook into and use instead.\n */\n\nimport { OptionalReactNativeNavigationWix } from '../optional/OptionalReactNativeNavigationWix'\nimport { PostHog } from '../posthog-rn'\nimport { PostHogAutocaptureOptions } from '../types'\n\nexport const withReactNativeNavigation = (posthog: PostHog, options: PostHogAutocaptureOptions = {}): boolean => {\n if (!OptionalReactNativeNavigationWix) {\n return false\n }\n\n const Navigation = OptionalReactNativeNavigationWix.Navigation\n\n // Equivalent of `useNavigationTracker`\n Navigation.events().registerComponentDidAppearListener(({ componentName, passProps }) => {\n if (!(options.captureScreens ?? true)) {\n return\n }\n\n const currentRouteName =\n options?.navigation?.routeToName?.(componentName, passProps || {}) || componentName || 'Unknown'\n\n if (currentRouteName) {\n const properties = options?.navigation?.routeToProperties?.(currentRouteName, passProps || {})\n posthog.screen(currentRouteName, properties)\n }\n })\n\n return true\n}\n"],"mappings":"+GAOA,IAAAA,iCAAA,CAAAC,OAAA,iDAIO,GAAM,CAAAC,yBAAyB,CAAAC,OAAA,CAAAD,yBAAA,CAAG,QAA5B,CAAAA,yBAAyBA,CAAIE,OAAgB,CAAsD,IAApD,CAAAC,OAAO,CAAAC,SAAA,CAAAC,MAAA,IAAAD,SAAA,MAAAE,SAAA,CAAAF,SAAA,IAA8B,EAAE,CACjG,GAAI,CAACG,kEAAgC,CAAE,CACrC,MAAO,MAAK,CACd,CAEA,GAAM,CAAAC,UAAU,CAAGD,kEAAgC,CAACC,UAAU,CAG9DA,UAAU,CAACC,MAAM,EAAE,CAACC,kCAAkC,CAAC,SAAAC,IAAA,CAAiC,IAA9B,CAAAC,aAAa,CAAAD,IAAA,CAAbC,aAAa,CAAEC,SAAS,CAAAF,IAAA,CAATE,SAAS,C,uBAChF,GAAI,EAAC,CAAAC,EAAA,CAACX,OAAO,CAACY,cAAc,UAAAD,EAAA,UAAAA,EAAA,CAAI,IAAI,CAAC,CAAE,CACrC,OACF,CAEA,GAAM,CAAAE,gBAAgB,CACpB,EAAAC,EAAA,EAAAC,EAAA,CAAAf,OAAO,SAAPA,OAAO,iBAAPA,OAAO,CAAEgB,UAAU,UAAAD,EAAA,iBAAAA,EAAA,CAAEE,WAAW,UAAAH,EAAA,iBAAAA,EAAA,CAAAI,IAAA,CAAAH,EAAA,CAAGN,aAAa,CAAEC,SAAS,EAAI,EAAE,CAAC,GAAID,aAAa,EAAI,SAAS,CAElG,GAAII,gBAAgB,CAAE,CACpB,GAAM,CAAAM,UAAU,CAAG,CAAAC,EAAA,EAAAC,EAAA,CAAArB,OAAO,SAAPA,OAAO,iBAAPA,OAAO,CAAEgB,UAAU,UAAAK,EAAA,iBAAAA,EAAA,CAAEC,iBAAiB,UAAAF,EAAA,iBAAAA,EAAA,CAAAF,IAAA,CAAAG,EAAA,CAAGR,gBAAgB,CAAEH,SAAS,EAAI,EAAE,CAAC,CAC9FX,OAAO,CAACwB,MAAM,CAACV,gBAAgB,CAAEM,UAAU,CAAC,CAC9C,CACF,CAAC,CAAC,CAEF,MAAO,KAAI,CACb,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigationTracker.js","names":["_react","require","_OptionalReactNativeNavigation","_utils","_useNavigationTrackerDisabled","_useNavigationTracker","options","navigationRef","client","posthog","useOverridablePostHog","OptionalReactNativeNavigation","Error","navigationState","undefined","navigation","useNavigationState","state","error","console","useNavigation","trackRoute","useCallback","currentNavigation","current","currentRoute","isReady","getCurrentRoute","_currentRoute","name","params","currentRouteName","_a","routeToName","call","properties","_b","routeToProperties","screen","useEffect","timeout","setTimeout","clearTimeout","useNavigationTracker","exports"],"sources":["../../src/hooks/useNavigationTracker.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react'\nimport { OptionalReactNativeNavigation } from '../optional/OptionalReactNativeNavigation'\nimport type { PostHog } from '../posthog-rn'\nimport { PostHogAutocaptureNavigationTrackerOptions } from '../types'\nimport { useOverridablePostHog } from './utils'\nimport { PostHogNavigationRef } from '../types'\n\nfunction _useNavigationTrackerDisabled(): void {\n return\n}\n\nfunction _useNavigationTracker(\n options?: PostHogAutocaptureNavigationTrackerOptions,\n navigationRef?: PostHogNavigationRef,\n client?: PostHog\n): void {\n // oxlint-disable-next-line react-hooks/rules-of-hooks -- This internal function is exported as useNavigationTracker.\n const posthog = useOverridablePostHog(client, 'useNavigationTracker')\n\n if (!OptionalReactNativeNavigation) {\n // NOTE: This is taken care of by the export, but we keep this here for TS\n throw new Error('No OptionalReactNativeNavigation')\n }\n\n let navigationState: any = undefined\n let navigation: any = navigationRef\n\n try {\n // oxlint-disable-next-line react/rules-of-hooks\n navigationState = OptionalReactNativeNavigation.useNavigationState((state: any) => state)\n } catch (error) {\n // useNavigationState might not be available in static navigation setups\n // We'll rely on the navigation object to get the current route\n console.error('useNavigationState error', error)\n }\n\n try {\n if (!navigation) {\n // oxlint-disable-next-line react/rules-of-hooks\n navigation = OptionalReactNativeNavigation.useNavigation()\n }\n } catch (error) {\n // useNavigation hook might not be available in static navigation setups\n // Navigation tracking will be disabled in this case\n console.error('useNavigation error', error)\n return\n }\n\n // oxlint-disable-next-line react/rules-of-hooks\n const trackRoute = useCallback((): void => {\n if (!navigation || !posthog) {\n return\n }\n\n // if you create a navigation ref with createNavigationContainerRef, you need to use the current property to get the navigation object\n let currentNavigation = navigation\n if (navigation.current) {\n currentNavigation = navigation.current\n }\n\n let currentRoute: any = undefined\n\n // NOTE: This method is not typed correctly but is available and takes care of parsing the router state correctly\n try {\n let isReady = false\n try {\n isReady = (currentNavigation as any).isReady()\n } catch (error) {\n // keep compatibility with older versions of react-navigation\n isReady = true\n }\n\n if (!isReady) {\n return\n }\n\n currentRoute = (currentNavigation as any).getCurrentRoute()\n } catch (error) {\n // if this happens, we're not in a navigation context, so we can't track the route\n return\n }\n\n if (!currentRoute) {\n return\n }\n\n const { name, params } = currentRoute\n\n const currentRouteName = options?.routeToName?.(name, params) || name || 'Unknown'\n\n if (currentRouteName) {\n const properties = options?.routeToProperties?.(currentRouteName, params)\n posthog.screen(currentRouteName, properties)\n }\n }, [navigation, options, posthog])\n\n // oxlint-disable-next-line react/rules-of-hooks\n useEffect(() => {\n // NOTE: The navigation stacks may not be fully rendered initially. This means the first route can be missed (it doesn't update useNavigationState)\n // If missing we simply wait a tick and call it again.\n if (!navigationState) {\n const timeout = setTimeout(trackRoute, 1)\n return () => clearTimeout(timeout)\n }\n trackRoute()\n }, [navigationState, trackRoute])\n}\n\nexport const useNavigationTracker = OptionalReactNativeNavigation\n ? _useNavigationTracker\n : _useNavigationTrackerDisabled\n"],"mappings":"0GAAA,IAAAA,MAAA,CAAAC,OAAA,UACA,IAAAC,8BAAA,CAAAD,OAAA,8CAGA,IAAAE,MAAA,CAAAF,OAAA,YAGA,QAAS,CAAAG,6BAA6BA,CAAA,EACpC,OACF,CAEA,QAAS,CAAAC,qBAAqBA,CAC5BC,OAAoD,CACpDC,aAAoC,CACpCC,MAAgB,EAGhB,GAAM,CAAAC,OAAO,CAAG,GAAAC,4BAAqB,EAACF,MAAM,CAAE,sBAAsB,CAAC,CAErE,GAAI,CAACG,4DAA6B,CAAE,CAElC,KAAM,IAAI,CAAAC,KAAK,CAAC,kCAAkC,CAAC,CACrD,CAEA,GAAI,CAAAC,eAAe,CAAQC,SAAS,CACpC,GAAI,CAAAC,UAAU,CAAQR,aAAa,CAEnC,GAAI,CAEFM,eAAe,CAAGF,4DAA6B,CAACK,kBAAkB,CAAC,SAACC,KAAU,QAAK,CAAAA,KAAK,GAAC,CAC3F,CAAE,MAAOC,KAAK,CAAE,CAGdC,OAAO,CAACD,KAAK,CAAC,0BAA0B,CAAEA,KAAK,CAAC,CAClD,CAEA,GAAI,CACF,GAAI,CAACH,UAAU,CAAE,CAEfA,UAAU,CAAGJ,4DAA6B,CAACS,aAAa,EAAE,CAC5D,CACF,CAAE,MAAOF,KAAK,CAAE,CAGdC,OAAO,CAACD,KAAK,CAAC,qBAAqB,CAAEA,KAAK,CAAC,CAC3C,OACF,CAGA,GAAM,CAAAG,UAAU,CAAG,GAAAC,kBAAW,EAAC,UAAW,C,UACxC,GAAI,CAACP,UAAU,EAAI,CAACN,OAAO,CAAE,CAC3B,OACF,CAGA,GAAI,CAAAc,iBAAiB,CAAGR,UAAU,CAClC,GAAIA,UAAU,CAACS,OAAO,CAAE,CACtBD,iBAAiB,CAAGR,UAAU,CAACS,OAAO,CACxC,CAEA,GAAI,CAAAC,YAAY,CAAQX,SAAS,CAGjC,GAAI,CACF,GAAI,CAAAY,OAAO,CAAG,KAAK,CACnB,GAAI,CACFA,OAAO,CAAIH,iBAAyB,CAACG,OAAO,EAAE,CAChD,CAAE,MAAOR,KAAK,CAAE,CAEdQ,OAAO,CAAG,IAAI,CAChB,CAEA,GAAI,CAACA,OAAO,CAAE,CACZ,OACF,CAEAD,YAAY,CAAIF,iBAAyB,CAACI,eAAe,EAAE,CAC7D,CAAE,MAAOT,KAAK,CAAE,CAEd,OACF,CAEA,GAAI,CAACO,YAAY,CAAE,CACjB,OACF,CAEA,IAAAG,aAAA,CAAyBH,YAAY,CAA7BI,IAAI,CAAAD,aAAA,CAAJC,IAAI,CAAEC,MAAM,CAAAF,aAAA,CAANE,MAAM,CAEpB,GAAM,CAAAC,gBAAgB,CAAG,EAAAC,EAAA,CAAA1B,OAAO,SAAPA,OAAO,iBAAPA,OAAO,CAAE2B,WAAW,UAAAD,EAAA,iBAAAA,EAAA,CAAAE,IAAA,CAAA5B,OAAA,CAAGuB,IAAI,CAAEC,MAAM,CAAC,GAAID,IAAI,EAAI,SAAS,CAElF,GAAIE,gBAAgB,CAAE,CACpB,GAAM,CAAAI,UAAU,CAAG,CAAAC,EAAA,CAAA9B,OAAO,SAAPA,OAAO,iBAAPA,OAAO,CAAE+B,iBAAiB,UAAAD,EAAA,iBAAAA,EAAA,CAAAF,IAAA,CAAA5B,OAAA,CAAGyB,gBAAgB,CAAED,MAAM,CAAC,CACzErB,OAAO,CAAC6B,MAAM,CAACP,gBAAgB,CAAEI,UAAU,CAAC,CAC9C,CACF,CAAC,CAAE,CAACpB,UAAU,CAAET,OAAO,CAAEG,OAAO,CAAC,CAAC,CAGlC,GAAA8B,gBAAS,EAAC,UAAK,CAGb,GAAI,CAAC1B,eAAe,CAAE,CACpB,GAAM,CAAA2B,OAAO,CAAGC,UAAU,CAACpB,UAAU,CAAE,CAAC,CAAC,CACzC,MAAO,kBAAM,CAAAqB,YAAY,CAACF,OAAO,CAAC,GACpC,CACAnB,UAAU,EAAE,CACd,CAAC,CAAE,CAACR,eAAe,CAAEQ,UAAU,CAAC,CAAC,CACnC,CAEO,GAAM,CAAAsB,oBAAoB,CAAAC,OAAA,CAAAD,oBAAA,CAAGhC,4DAA6B,CAC7DN,qBAAqB,CACrBD,6BAA6B","ignoreList":[]}
1
+ {"version":3,"file":"useNavigationTracker.js","names":["_react","require","_OptionalReactNativeNavigation","_utils","_useNavigationTrackerDisabled","_useNavigationTracker","options","navigationRef","client","posthog","useOverridablePostHog","OptionalReactNativeNavigation","Error","navigationState","undefined","navigation","useNavigationState","state","error","console","useNavigation","trackRoute","useCallback","currentNavigation","current","currentRoute","isReady","getCurrentRoute","_currentRoute","name","params","currentRouteName","_a","routeToName","call","properties","_b","routeToProperties","screen","useEffect","timeout","setTimeout","clearTimeout","useNavigationTracker","exports"],"sources":["../../src/hooks/useNavigationTracker.ts"],"sourcesContent":["import { useCallback, useEffect } from 'react'\nimport { OptionalReactNativeNavigation } from '../optional/OptionalReactNativeNavigation'\nimport type { PostHog } from '../posthog-rn'\nimport { PostHogAutocaptureNavigationTrackerOptions } from '../types'\nimport { useOverridablePostHog } from './utils'\nimport { PostHogNavigationRef } from '../types'\n\nfunction _useNavigationTrackerDisabled(): void {\n return\n}\n\nfunction _useNavigationTracker(\n options?: PostHogAutocaptureNavigationTrackerOptions,\n navigationRef?: PostHogNavigationRef,\n client?: PostHog\n): void {\n // oxlint-disable-next-line react-hooks/rules-of-hooks -- This internal function is exported as useNavigationTracker.\n const posthog = useOverridablePostHog(client, 'useNavigationTracker')\n\n if (!OptionalReactNativeNavigation) {\n // NOTE: This is taken care of by the export, but we keep this here for TS\n throw new Error('No OptionalReactNativeNavigation')\n }\n\n let navigationState: any = undefined\n let navigation: any = navigationRef\n\n try {\n // oxlint-disable-next-line react/rules-of-hooks\n navigationState = OptionalReactNativeNavigation.useNavigationState((state: any) => state)\n } catch (error) {\n // useNavigationState might not be available in static navigation setups\n // We'll rely on the navigation object to get the current route\n console.error('useNavigationState error', error)\n }\n\n try {\n if (!navigation) {\n // oxlint-disable-next-line react/rules-of-hooks\n navigation = OptionalReactNativeNavigation.useNavigation()\n }\n } catch (error) {\n // useNavigation hook might not be available in static navigation setups\n // Navigation tracking will be disabled in this case\n console.error('useNavigation error', error)\n return\n }\n\n // oxlint-disable-next-line react/rules-of-hooks\n const trackRoute = useCallback((): void => {\n if (!navigation || !posthog) {\n return\n }\n\n // if you create a navigation ref with createNavigationContainerRef, you need to use the current property to get the navigation object\n let currentNavigation = navigation\n if (navigation.current) {\n currentNavigation = navigation.current\n }\n\n let currentRoute: any = undefined\n\n // NOTE: This method is not typed correctly but is available and takes care of parsing the router state correctly\n try {\n let isReady = false\n try {\n isReady = (currentNavigation as any).isReady()\n } catch (error) {\n // keep compatibility with older versions of react-navigation\n isReady = true\n }\n\n if (!isReady) {\n return\n }\n\n currentRoute = (currentNavigation as any).getCurrentRoute()\n } catch (error) {\n // if this happens, we're not in a navigation context, so we can't track the route\n return\n }\n\n if (!currentRoute) {\n return\n }\n\n const { name, params } = currentRoute\n\n const currentRouteName = options?.routeToName?.(name, params) || name || 'Unknown'\n\n if (currentRouteName) {\n const properties = options?.routeToProperties?.(currentRouteName, params)\n posthog.screen(currentRouteName, properties)\n }\n }, [navigation, options, posthog])\n\n // oxlint-disable-next-line react/rules-of-hooks\n useEffect(() => {\n // NOTE: The navigation stacks may not be fully rendered initially. This means the first route can be missed (it doesn't update useNavigationState)\n // If missing we simply wait a tick and call it again.\n if (!navigationState) {\n const timeout = setTimeout(trackRoute, 1)\n return () => clearTimeout(timeout)\n }\n trackRoute()\n }, [navigationState, trackRoute])\n}\n\nexport const useNavigationTracker = OptionalReactNativeNavigation\n ? _useNavigationTracker\n : _useNavigationTrackerDisabled\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_TERMINATION_FLUSH_BUDGET_MS=exports.DEFAULT_RATE_CAP_WINDOW_MS=exports.DEFAULT_MAX_LOGS_PER_INTERVAL=exports.DEFAULT_MAX_BUFFER_SIZE=exports.DEFAULT_MAX_BATCH_RECORDS_PER_POST=exports.DEFAULT_FLUSH_INTERVAL_MS=exports.DEFAULT_BACKGROUND_FLUSH_BUDGET_MS=void 0;exports.resolveLogsConfig=resolveLogsConfig;var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _reactNative=require("react-native");var _utils=require("./utils");var _excluded=["rateCap"];function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var DEFAULT_FLUSH_INTERVAL_MS=exports.DEFAULT_FLUSH_INTERVAL_MS=10000;var DEFAULT_RATE_CAP_WINDOW_MS=exports.DEFAULT_RATE_CAP_WINDOW_MS=10000;var DEFAULT_MAX_BUFFER_SIZE=exports.DEFAULT_MAX_BUFFER_SIZE=100;var DEFAULT_MAX_LOGS_PER_INTERVAL=exports.DEFAULT_MAX_LOGS_PER_INTERVAL=500;var DEFAULT_MAX_BATCH_RECORDS_PER_POST=exports.DEFAULT_MAX_BATCH_RECORDS_PER_POST=50;var DEFAULT_BACKGROUND_FLUSH_BUDGET_MS=exports.DEFAULT_BACKGROUND_FLUSH_BUDGET_MS=25000;var DEFAULT_TERMINATION_FLUSH_BUDGET_MS=exports.DEFAULT_TERMINATION_FLUSH_BUDGET_MS=2000;function getPlatformVersion(){try{return(_reactNative.Platform===null||_reactNative.Platform===void 0?void 0:_reactNative.Platform.Version)!==undefined?String(_reactNative.Platform.Version):undefined;}catch(_a){return undefined;}}function defaultResourceAttributes(){var osName=(0,_utils.getPlatformOS)();var osVersion=getPlatformVersion();return _objectSpread(_objectSpread({},osName?{'os.name':osName}:{}),osVersion?{'os.version':osVersion}:{});}function resolveLogsConfig(config){var _a,_b,_c,_d,_e,_f,_g;var _ref=config!==null&&config!==void 0?config:{},_rateCap=_ref.rateCap,rest=(0,_objectWithoutProperties2["default"])(_ref,_excluded);return _objectSpread(_objectSpread({},rest),{},{maxBufferSize:(_a=config===null||config===void 0?void 0:config.maxBufferSize)!==null&&_a!==void 0?_a:DEFAULT_MAX_BUFFER_SIZE,flushIntervalMs:(_b=config===null||config===void 0?void 0:config.flushIntervalMs)!==null&&_b!==void 0?_b:DEFAULT_FLUSH_INTERVAL_MS,maxBatchRecordsPerPost:(_c=config===null||config===void 0?void 0:config.maxBatchRecordsPerPost)!==null&&_c!==void 0?_c:DEFAULT_MAX_BATCH_RECORDS_PER_POST,rateCapWindowMs:(_e=(_d=config===null||config===void 0?void 0:config.rateCap)===null||_d===void 0?void 0:_d.windowMs)!==null&&_e!==void 0?_e:DEFAULT_RATE_CAP_WINDOW_MS,maxLogsPerInterval:(_g=(_f=config===null||config===void 0?void 0:config.rateCap)===null||_f===void 0?void 0:_f.maxLogs)!==null&&_g!==void 0?_g:DEFAULT_MAX_LOGS_PER_INTERVAL,backgroundFlushBudgetMs:DEFAULT_BACKGROUND_FLUSH_BUDGET_MS,terminationFlushBudgetMs:DEFAULT_TERMINATION_FLUSH_BUDGET_MS,resourceAttributes:_objectSpread(_objectSpread({},defaultResourceAttributes()),config===null||config===void 0?void 0:config.resourceAttributes)});}
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.DEFAULT_TERMINATION_FLUSH_BUDGET_MS=exports.DEFAULT_RATE_CAP_WINDOW_MS=exports.DEFAULT_MAX_LOGS_PER_INTERVAL=exports.DEFAULT_MAX_BUFFER_SIZE=exports.DEFAULT_MAX_BATCH_RECORDS_PER_POST=exports.DEFAULT_FLUSH_INTERVAL_MS=exports.DEFAULT_BACKGROUND_FLUSH_BUDGET_MS=void 0;exports.resolveLogsConfig=resolveLogsConfig;var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _reactNative=require("react-native");var _utils=require("./utils");var _excluded=["rateCap"];function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2["default"])(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}var DEFAULT_FLUSH_INTERVAL_MS=exports.DEFAULT_FLUSH_INTERVAL_MS=10000;var DEFAULT_RATE_CAP_WINDOW_MS=exports.DEFAULT_RATE_CAP_WINDOW_MS=10000;var DEFAULT_MAX_BUFFER_SIZE=exports.DEFAULT_MAX_BUFFER_SIZE=100;var DEFAULT_MAX_LOGS_PER_INTERVAL=exports.DEFAULT_MAX_LOGS_PER_INTERVAL=500;var DEFAULT_MAX_BATCH_RECORDS_PER_POST=exports.DEFAULT_MAX_BATCH_RECORDS_PER_POST=50;var DEFAULT_BACKGROUND_FLUSH_BUDGET_MS=exports.DEFAULT_BACKGROUND_FLUSH_BUDGET_MS=25000;var DEFAULT_TERMINATION_FLUSH_BUDGET_MS=exports.DEFAULT_TERMINATION_FLUSH_BUDGET_MS=2000;function getPlatformVersion(){try{return(_reactNative.Platform===null||_reactNative.Platform===void 0?void 0:_reactNative.Platform.Version)!==undefined?String(_reactNative.Platform.Version):undefined;}catch(_a){return undefined;}}function defaultResourceAttributes(){var osName=(0,_utils.getPlatformOS)();var osVersion=getPlatformVersion();return _objectSpread(_objectSpread({},osName?{'os.name':osName}:{}),osVersion?{'os.version':osVersion}:{});}function resolveLogsConfig(config){var _a,_b;var _c,_d,_e,_f,_g;var _ref=config!==null&&config!==void 0?config:{},_rateCap=_ref.rateCap,rest=(0,_objectWithoutProperties2["default"])(_ref,_excluded);return _objectSpread(_objectSpread({},rest),{},{maxBufferSize:(_c=config===null||config===void 0?void 0:config.maxBufferSize)!==null&&_c!==void 0?_c:DEFAULT_MAX_BUFFER_SIZE,flushIntervalMs:(_d=config===null||config===void 0?void 0:config.flushIntervalMs)!==null&&_d!==void 0?_d:DEFAULT_FLUSH_INTERVAL_MS,maxBatchRecordsPerPost:(_e=config===null||config===void 0?void 0:config.maxBatchRecordsPerPost)!==null&&_e!==void 0?_e:DEFAULT_MAX_BATCH_RECORDS_PER_POST,rateCapWindowMs:(_f=(_a=config===null||config===void 0?void 0:config.rateCap)===null||_a===void 0?void 0:_a.windowMs)!==null&&_f!==void 0?_f:DEFAULT_RATE_CAP_WINDOW_MS,maxLogsPerInterval:(_g=(_b=config===null||config===void 0?void 0:config.rateCap)===null||_b===void 0?void 0:_b.maxLogs)!==null&&_g!==void 0?_g:DEFAULT_MAX_LOGS_PER_INTERVAL,backgroundFlushBudgetMs:DEFAULT_BACKGROUND_FLUSH_BUDGET_MS,terminationFlushBudgetMs:DEFAULT_TERMINATION_FLUSH_BUDGET_MS,resourceAttributes:_objectSpread(_objectSpread({},defaultResourceAttributes()),config===null||config===void 0?void 0:config.resourceAttributes)});}
2
2
  //# sourceMappingURL=logs-defaults.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs-defaults.js","names":["_reactNative","require","_utils","_excluded","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","DEFAULT_FLUSH_INTERVAL_MS","exports","DEFAULT_RATE_CAP_WINDOW_MS","DEFAULT_MAX_BUFFER_SIZE","DEFAULT_MAX_LOGS_PER_INTERVAL","DEFAULT_MAX_BATCH_RECORDS_PER_POST","DEFAULT_BACKGROUND_FLUSH_BUDGET_MS","DEFAULT_TERMINATION_FLUSH_BUDGET_MS","getPlatformVersion","Platform","Version","undefined","String","_a","defaultResourceAttributes","osName","getPlatformOS","osVersion","resolveLogsConfig","config","_ref","_rateCap","rateCap","rest","_objectWithoutProperties2","maxBufferSize","flushIntervalMs","_b","maxBatchRecordsPerPost","_c","rateCapWindowMs","_e","_d","windowMs","maxLogsPerInterval","_g","_f","maxLogs","backgroundFlushBudgetMs","terminationFlushBudgetMs","resourceAttributes"],"sources":["../src/logs-defaults.ts"],"sourcesContent":["import { Platform } from 'react-native'\nimport type { PostHogLogsConfig, ResolvedPostHogLogsConfig } from '@posthog/core'\nimport { getPlatformOS } from './utils'\n\n// Mobile defaults. Tuned for cellular radio tail (longer flush interval keeps\n// the radio asleep) and cellular data cost (tighter per-interval rate cap).\nexport const DEFAULT_FLUSH_INTERVAL_MS = 10000\nexport const DEFAULT_RATE_CAP_WINDOW_MS = 10000\nexport const DEFAULT_MAX_BUFFER_SIZE = 100\nexport const DEFAULT_MAX_LOGS_PER_INTERVAL = 500\nexport const DEFAULT_MAX_BATCH_RECORDS_PER_POST = 50\n// iOS beginBackgroundTask budget is ~30s; stay comfortably under.\nexport const DEFAULT_BACKGROUND_FLUSH_BUDGET_MS = 25000\nexport const DEFAULT_TERMINATION_FLUSH_BUDGET_MS = 2000\n\n/**\n * RN-specific resource attribute defaults. Identifies the device's OS so\n * logs can be filtered by platform (e.g. \"all errors on Android 13\" or\n * \"iOS 17 only\" in the PostHog UI). User-supplied `resourceAttributes`\n * spreads last in `_buildResourceAttributes` so these are overridable.\n *\n * `Platform.Version` is `string` on iOS and `number` on Android — coerce\n * to string so the OTLP `os.version` attribute has a stable type.\n */\nfunction getPlatformVersion(): string | undefined {\n try {\n return Platform?.Version !== undefined ? String(Platform.Version) : undefined\n } catch {\n return undefined\n }\n}\n\nfunction defaultResourceAttributes(): Record<string, string> {\n const osName = getPlatformOS()\n const osVersion = getPlatformVersion()\n return {\n ...(osName ? { 'os.name': osName } : {}),\n ...(osVersion ? { 'os.version': osVersion } : {}),\n }\n}\n\nexport function resolveLogsConfig(config: PostHogLogsConfig | undefined): ResolvedPostHogLogsConfig {\n // `rateCap` is dropped from the spread so the resolved (flat) names below\n // are the only authoritative form on the resolved config.\n const { rateCap: _rateCap, ...rest } = config ?? {}\n return {\n ...rest,\n maxBufferSize: config?.maxBufferSize ?? DEFAULT_MAX_BUFFER_SIZE,\n flushIntervalMs: config?.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS,\n maxBatchRecordsPerPost: config?.maxBatchRecordsPerPost ?? DEFAULT_MAX_BATCH_RECORDS_PER_POST,\n // Rate-cap window defaults independently of flush cadence: changing flush\n // frequency shouldn't implicitly re-shape the rate budget.\n rateCapWindowMs: config?.rateCap?.windowMs ?? DEFAULT_RATE_CAP_WINDOW_MS,\n // RN defaults to 500/window to bound cellular data cost.\n maxLogsPerInterval: config?.rateCap?.maxLogs ?? DEFAULT_MAX_LOGS_PER_INTERVAL,\n backgroundFlushBudgetMs: DEFAULT_BACKGROUND_FLUSH_BUDGET_MS,\n terminationFlushBudgetMs: DEFAULT_TERMINATION_FLUSH_BUDGET_MS,\n // Merge platform-detected attrs first so user-provided `resourceAttributes`\n // wins on any conflict. Never throw if `Platform` is unavailable in\n // unusual envs (web bundle, vi without RN preset) — fall back silently.\n resourceAttributes: {\n ...defaultResourceAttributes(),\n ...config?.resourceAttributes,\n },\n }\n}\n"],"mappings":"uqBAAA,IAAAA,YAAA,CAAAC,OAAA,iBAEA,IAAAC,MAAA,CAAAD,OAAA,YAAuC,IAAAE,SAAA,sBAAAC,QAAAC,CAAA,CAAAC,CAAA,MAAAC,CAAA,CAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,KAAAG,MAAA,CAAAE,qBAAA,MAAAC,CAAA,CAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,CAAAC,CAAA,IAAAK,CAAA,CAAAA,CAAA,CAAAC,MAAA,UAAAN,CAAA,SAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,CAAAC,CAAA,EAAAQ,UAAA,KAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,CAAAI,CAAA,UAAAJ,CAAA,WAAAU,cAAAZ,CAAA,UAAAC,CAAA,GAAAA,CAAA,CAAAY,SAAA,CAAAC,MAAA,CAAAb,CAAA,QAAAC,CAAA,OAAAW,SAAA,CAAAZ,CAAA,EAAAY,SAAA,CAAAZ,CAAA,IAAAA,CAAA,IAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,MAAAa,OAAA,UAAAd,CAAA,KAAAe,gBAAA,aAAAhB,CAAA,CAAAC,CAAA,CAAAC,CAAA,CAAAD,CAAA,MAAAE,MAAA,CAAAc,yBAAA,CAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,CAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,GAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,UAAAd,CAAA,EAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,CAAAC,CAAA,CAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,CAAAD,CAAA,cAAAD,CAAA,EAIhC,GAAM,CAAAoB,yBAAyB,CAAAC,OAAA,CAAAD,yBAAA,CAAG,KAAK,CACvC,GAAM,CAAAE,0BAA0B,CAAAD,OAAA,CAAAC,0BAAA,CAAG,KAAK,CACxC,GAAM,CAAAC,uBAAuB,CAAAF,OAAA,CAAAE,uBAAA,CAAG,GAAG,CACnC,GAAM,CAAAC,6BAA6B,CAAAH,OAAA,CAAAG,6BAAA,CAAG,GAAG,CACzC,GAAM,CAAAC,kCAAkC,CAAAJ,OAAA,CAAAI,kCAAA,CAAG,EAAE,CAE7C,GAAM,CAAAC,kCAAkC,CAAAL,OAAA,CAAAK,kCAAA,CAAG,KAAK,CAChD,GAAM,CAAAC,mCAAmC,CAAAN,OAAA,CAAAM,mCAAA,CAAG,IAAI,CAWvD,QAAS,CAAAC,kBAAkBA,CAAA,EACzB,GAAI,CACF,MAAO,CAAAC,qBAAQ,SAARA,qBAAQ,iBAARA,qBAAQ,CAAEC,OAAO,IAAKC,SAAS,CAAGC,MAAM,CAACH,qBAAQ,CAACC,OAAO,CAAC,CAAGC,SAAS,CAC/E,CAAE,MAAAE,EAAA,CAAM,CACN,MAAO,CAAAF,SAAS,CAClB,CACF,CAEA,QAAS,CAAAG,yBAAyBA,CAAA,EAChC,GAAM,CAAAC,MAAM,CAAG,GAAAC,oBAAa,GAAE,CAC9B,GAAM,CAAAC,SAAS,CAAGT,kBAAkB,EAAE,CACtC,OAAAhB,aAAA,CAAAA,aAAA,IACMuB,MAAM,CAAG,CAAE,SAAS,CAAEA,MAAM,CAAE,CAAG,EAAE,EACnCE,SAAS,CAAG,CAAE,YAAY,CAAEA,SAAS,CAAE,CAAG,EAAE,EAEpD,CAEM,QAAU,CAAAC,iBAAiBA,CAACC,MAAqC,E,yBAGrE,IAAAC,IAAA,CAAuCD,MAAM,SAANA,MAAM,UAANA,MAAM,CAAI,EAAE,CAAlCE,QAAQ,CAAAD,IAAA,CAAjBE,OAAO,CAAeC,IAAI,IAAAC,yBAAA,aAAAJ,IAAA,CAAA1C,SAAA,EAClC,OAAAc,aAAA,CAAAA,aAAA,IACK+B,IAAI,MACPE,aAAa,CAAE,CAAAZ,EAAA,CAAAM,MAAM,SAANA,MAAM,iBAANA,MAAM,CAAEM,aAAa,UAAAZ,EAAA,UAAAA,EAAA,CAAIV,uBAAuB,CAC/DuB,eAAe,CAAE,CAAAC,EAAA,CAAAR,MAAM,SAANA,MAAM,iBAANA,MAAM,CAAEO,eAAe,UAAAC,EAAA,UAAAA,EAAA,CAAI3B,yBAAyB,CACrE4B,sBAAsB,CAAE,CAAAC,EAAA,CAAAV,MAAM,SAANA,MAAM,iBAANA,MAAM,CAAES,sBAAsB,UAAAC,EAAA,UAAAA,EAAA,CAAIxB,kCAAkC,CAG5FyB,eAAe,CAAE,CAAAC,EAAA,EAAAC,EAAA,CAAAb,MAAM,SAANA,MAAM,iBAANA,MAAM,CAAEG,OAAO,UAAAU,EAAA,iBAAAA,EAAA,CAAEC,QAAQ,UAAAF,EAAA,UAAAA,EAAA,CAAI7B,0BAA0B,CAExEgC,kBAAkB,CAAE,CAAAC,EAAA,EAAAC,EAAA,CAAAjB,MAAM,SAANA,MAAM,iBAANA,MAAM,CAAEG,OAAO,UAAAc,EAAA,iBAAAA,EAAA,CAAEC,OAAO,UAAAF,EAAA,UAAAA,EAAA,CAAI/B,6BAA6B,CAC7EkC,uBAAuB,CAAEhC,kCAAkC,CAC3DiC,wBAAwB,CAAEhC,mCAAmC,CAI7DiC,kBAAkB,CAAAhD,aAAA,CAAAA,aAAA,IACbsB,yBAAyB,EAAE,EAC3BK,MAAM,SAANA,MAAM,iBAANA,MAAM,CAAEqB,kBAAkB,CAC9B,GAEL","ignoreList":[]}
1
+ {"version":3,"file":"logs-defaults.js","names":["_reactNative","require","_utils","_excluded","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","DEFAULT_FLUSH_INTERVAL_MS","exports","DEFAULT_RATE_CAP_WINDOW_MS","DEFAULT_MAX_BUFFER_SIZE","DEFAULT_MAX_LOGS_PER_INTERVAL","DEFAULT_MAX_BATCH_RECORDS_PER_POST","DEFAULT_BACKGROUND_FLUSH_BUDGET_MS","DEFAULT_TERMINATION_FLUSH_BUDGET_MS","getPlatformVersion","Platform","Version","undefined","String","defaultResourceAttributes","osName","getPlatformOS","osVersion","resolveLogsConfig","config","_ref","_rateCap","rateCap","rest","_objectWithoutProperties2","maxBufferSize","_c","flushIntervalMs","_d","maxBatchRecordsPerPost","_e","rateCapWindowMs","_f","_a","windowMs","maxLogsPerInterval","_g","_b","maxLogs","backgroundFlushBudgetMs","terminationFlushBudgetMs","resourceAttributes"],"sources":["../src/logs-defaults.ts"],"sourcesContent":["import { Platform } from 'react-native'\nimport type { PostHogLogsConfig, ResolvedPostHogLogsConfig } from '@posthog/core'\nimport { getPlatformOS } from './utils'\n\n// Mobile defaults. Tuned for cellular radio tail (longer flush interval keeps\n// the radio asleep) and cellular data cost (tighter per-interval rate cap).\nexport const DEFAULT_FLUSH_INTERVAL_MS = 10000\nexport const DEFAULT_RATE_CAP_WINDOW_MS = 10000\nexport const DEFAULT_MAX_BUFFER_SIZE = 100\nexport const DEFAULT_MAX_LOGS_PER_INTERVAL = 500\nexport const DEFAULT_MAX_BATCH_RECORDS_PER_POST = 50\n// iOS beginBackgroundTask budget is ~30s; stay comfortably under.\nexport const DEFAULT_BACKGROUND_FLUSH_BUDGET_MS = 25000\nexport const DEFAULT_TERMINATION_FLUSH_BUDGET_MS = 2000\n\n/**\n * RN-specific resource attribute defaults. Identifies the device's OS so\n * logs can be filtered by platform (e.g. \"all errors on Android 13\" or\n * \"iOS 17 only\" in the PostHog UI). User-supplied `resourceAttributes`\n * spreads last in `_buildResourceAttributes` so these are overridable.\n *\n * `Platform.Version` is `string` on iOS and `number` on Android — coerce\n * to string so the OTLP `os.version` attribute has a stable type.\n */\nfunction getPlatformVersion(): string | undefined {\n try {\n return Platform?.Version !== undefined ? String(Platform.Version) : undefined\n } catch {\n return undefined\n }\n}\n\nfunction defaultResourceAttributes(): Record<string, string> {\n const osName = getPlatformOS()\n const osVersion = getPlatformVersion()\n return {\n ...(osName ? { 'os.name': osName } : {}),\n ...(osVersion ? { 'os.version': osVersion } : {}),\n }\n}\n\nexport function resolveLogsConfig(config: PostHogLogsConfig | undefined): ResolvedPostHogLogsConfig {\n // `rateCap` is dropped from the spread so the resolved (flat) names below\n // are the only authoritative form on the resolved config.\n const { rateCap: _rateCap, ...rest } = config ?? {}\n return {\n ...rest,\n maxBufferSize: config?.maxBufferSize ?? DEFAULT_MAX_BUFFER_SIZE,\n flushIntervalMs: config?.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS,\n maxBatchRecordsPerPost: config?.maxBatchRecordsPerPost ?? DEFAULT_MAX_BATCH_RECORDS_PER_POST,\n // Rate-cap window defaults independently of flush cadence: changing flush\n // frequency shouldn't implicitly re-shape the rate budget.\n rateCapWindowMs: config?.rateCap?.windowMs ?? DEFAULT_RATE_CAP_WINDOW_MS,\n // RN defaults to 500/window to bound cellular data cost.\n maxLogsPerInterval: config?.rateCap?.maxLogs ?? DEFAULT_MAX_LOGS_PER_INTERVAL,\n backgroundFlushBudgetMs: DEFAULT_BACKGROUND_FLUSH_BUDGET_MS,\n terminationFlushBudgetMs: DEFAULT_TERMINATION_FLUSH_BUDGET_MS,\n // Merge platform-detected attrs first so user-provided `resourceAttributes`\n // wins on any conflict. Never throw if `Platform` is unavailable in\n // unusual envs (web bundle, vi without RN preset) — fall back silently.\n resourceAttributes: {\n ...defaultResourceAttributes(),\n ...config?.resourceAttributes,\n },\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"OptionalExpoUpdates.js","names":["_reactNative","require","OptionalExpoUpdates","Platform","OS","exports","_a"],"sources":["../../src/optional/OptionalExpoUpdates.ts"],"sourcesContent":["import { Platform } from 'react-native'\n\n// Only read the public constants we use; older or unlinked modules may omit them.\ntype ExpoUpdatesContext = {\n isEnabled?: boolean\n updateId?: string | null\n runtimeVersion?: string | null\n channel?: string | null\n isEmbeddedLaunch?: boolean\n}\n\nexport let OptionalExpoUpdates: ExpoUpdatesContext | undefined\n\nif (Platform.OS === 'ios' || Platform.OS === 'android') {\n try {\n // Metro recognizes optional dependencies only when require is directly inside the try block.\n OptionalExpoUpdates = require('expo-updates')\n } catch {}\n}\n"],"mappings":"yGAAA,IAAAA,YAAA,CAAAC,OAAA,iBAWO,GAAI,CAAAC,mBAAmD,CAE9D,GAAIC,qBAAQ,CAACC,EAAE,GAAK,KAAK,EAAID,qBAAQ,CAACC,EAAE,GAAK,SAAS,CAAE,CACtD,GAAI,CAEFC,OAAA,CAAAH,mBAAA,CAAAA,mBAAmB,CAAGD,OAAO,CAAC,cAAc,CAAC,CAC/C,CAAE,MAAAK,EAAA,CAAM,CAAC,CACX","ignoreList":[]}
1
+ {"version":3,"file":"OptionalExpoUpdates.js","names":["_reactNative","require","OptionalExpoUpdates","Platform","OS","exports"],"sources":["../../src/optional/OptionalExpoUpdates.ts"],"sourcesContent":["import { Platform } from 'react-native'\n\n// Only read the public constants we use; older or unlinked modules may omit them.\ntype ExpoUpdatesContext = {\n isEnabled?: boolean\n updateId?: string | null\n runtimeVersion?: string | null\n channel?: string | null\n isEmbeddedLaunch?: boolean\n}\n\nexport let OptionalExpoUpdates: ExpoUpdatesContext | undefined\n\nif (Platform.OS === 'ios' || Platform.OS === 'android') {\n try {\n // Metro recognizes optional dependencies only when require is directly inside the try block.\n OptionalExpoUpdates = require('expo-updates')\n } catch {}\n}\n"],"mappings":"yGAAA,IAAAA,YAAA,CAAAC,OAAA,iBAWO,GAAI,CAAAC,mBAAmD,CAE9D,GAAIC,qBAAQ,CAACC,EAAE,GAAK,KAAK,EAAID,qBAAQ,CAACC,EAAE,GAAK,SAAS,CAAE,CACtD,GAAI,CAEFC,OAAA,CAAAH,mBAAA,CAAAA,mBAAmB,CAAGD,OAAO,CAAC,cAAc,CAAC,CAC/C,C,SAAQ,CAAC,CACX","ignoreList":[]}