@elliemae/pui-logrocket 1.2.3-beta.1 → 1.2.4

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 (37) hide show
  1. package/build/docs/404.html +2 -2
  2. package/build/docs/api/functions/buildLogRocketQueryParams/index.html +2 -2
  3. package/build/docs/api/functions/hasUserConsentedToSessionRecording/index.html +3 -3
  4. package/build/docs/api/functions/initLogRocket/index.html +2 -2
  5. package/build/docs/api/index.html +2 -2
  6. package/build/docs/api/type-aliases/LROptions/index.html +2 -2
  7. package/build/docs/assets/js/04ee7372.c7af6b05.js +1 -0
  8. package/build/docs/assets/js/211c08f1.c26e72ea.js +1 -0
  9. package/build/docs/assets/js/e376fc56.0c9034e0.js +1 -0
  10. package/build/docs/assets/js/main.33883ccf.js +2 -0
  11. package/build/docs/assets/js/{runtime~main.2c9f76e8.js → runtime~main.4402f01c.js} +1 -1
  12. package/build/docs/compliance/index.html +6 -6
  13. package/build/docs/index.html +2 -2
  14. package/build/docs/usage-guide/index.html +53 -102
  15. package/dist/cjs/logrocket.js +45 -18
  16. package/dist/esm/logrocket.js +44 -18
  17. package/dist/public/index.html +1 -1
  18. package/dist/public/js/emuiLogrocket.b05aab66ef02cf198fdf.js +45 -0
  19. package/dist/public/js/emuiLogrocket.b05aab66ef02cf198fdf.js.br +0 -0
  20. package/dist/public/js/emuiLogrocket.b05aab66ef02cf198fdf.js.gz +0 -0
  21. package/dist/public/js/emuiLogrocket.b05aab66ef02cf198fdf.js.map +1 -0
  22. package/dist/types/lib/logrocket.d.ts +1 -1
  23. package/dist/types/tsconfig.tsbuildinfo +1 -1
  24. package/dist/umd/index.js +16 -16
  25. package/dist/umd/index.js.br +0 -0
  26. package/dist/umd/index.js.gz +0 -0
  27. package/dist/umd/index.js.map +1 -1
  28. package/package.json +1 -1
  29. package/build/docs/assets/js/04ee7372.7628802a.js +0 -1
  30. package/build/docs/assets/js/211c08f1.f5d0523b.js +0 -1
  31. package/build/docs/assets/js/e376fc56.e8d801d6.js +0 -1
  32. package/build/docs/assets/js/main.7d1e671a.js +0 -2
  33. package/dist/public/js/emuiLogrocket.e8b7c0d946880c4dfd80.js +0 -45
  34. package/dist/public/js/emuiLogrocket.e8b7c0d946880c4dfd80.js.br +0 -0
  35. package/dist/public/js/emuiLogrocket.e8b7c0d946880c4dfd80.js.gz +0 -0
  36. package/dist/public/js/emuiLogrocket.e8b7c0d946880c4dfd80.js.map +0 -1
  37. /package/build/docs/assets/js/{main.7d1e671a.js.LICENSE.txt → main.33883ccf.js.LICENSE.txt} +0 -0
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.9.2">
6
6
  <title data-rh="true">LogRocket</title><meta data-rh="true" property="og:title" content="LogRocket"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pui.ice.com/logrocket/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/404.html"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/404.html" hreflang="x-default"><link rel="stylesheet" href="/logrocket/assets/css/styles.48d5ef50.css">
7
- <script src="/logrocket/assets/js/runtime~main.2c9f76e8.js" defer="defer"></script>
8
- <script src="/logrocket/assets/js/main.7d1e671a.js" defer="defer"></script>
7
+ <script src="/logrocket/assets/js/runtime~main.4402f01c.js" defer="defer"></script>
8
+ <script src="/logrocket/assets/js/main.33883ccf.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg style="display: none;"><defs>
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.9.2">
6
6
  <title data-rh="true">buildLogRocketQueryParams() | LogRocket</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pui.ice.com/logrocket/api/functions/buildLogRocketQueryParams"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="buildLogRocketQueryParams() | LogRocket"><meta data-rh="true" name="description" content="Builds a URL query string containing LogRocket-related parameters."><meta data-rh="true" property="og:description" content="Builds a URL query string containing LogRocket-related parameters."><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/api/functions/buildLogRocketQueryParams"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/functions/buildLogRocketQueryParams" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/functions/buildLogRocketQueryParams" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"LogRocket API","item":"https://pui.ice.com/logrocket/api/"},{"@type":"ListItem","position":2,"name":"buildLogRocketQueryParams()","item":"https://pui.ice.com/logrocket/api/functions/buildLogRocketQueryParams"}]}</script><link rel="stylesheet" href="/logrocket/assets/css/styles.48d5ef50.css">
7
- <script src="/logrocket/assets/js/runtime~main.2c9f76e8.js" defer="defer"></script>
8
- <script src="/logrocket/assets/js/main.7d1e671a.js" defer="defer"></script>
7
+ <script src="/logrocket/assets/js/runtime~main.4402f01c.js" defer="defer"></script>
8
+ <script src="/logrocket/assets/js/main.33883ccf.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg style="display: none;"><defs>
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.9.2">
6
6
  <title data-rh="true">hasUserConsentedToSessionRecording() | LogRocket</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pui.ice.com/logrocket/api/functions/hasUserConsentedToSessionRecording"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="hasUserConsentedToSessionRecording() | LogRocket"><meta data-rh="true" name="description" content="Determines whether the user has consented to session recording based on OneTrust configuration and other signals."><meta data-rh="true" property="og:description" content="Determines whether the user has consented to session recording based on OneTrust configuration and other signals."><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/api/functions/hasUserConsentedToSessionRecording"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/functions/hasUserConsentedToSessionRecording" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/functions/hasUserConsentedToSessionRecording" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"LogRocket API","item":"https://pui.ice.com/logrocket/api/"},{"@type":"ListItem","position":2,"name":"hasUserConsentedToSessionRecording()","item":"https://pui.ice.com/logrocket/api/functions/hasUserConsentedToSessionRecording"}]}</script><link rel="stylesheet" href="/logrocket/assets/css/styles.48d5ef50.css">
7
- <script src="/logrocket/assets/js/runtime~main.2c9f76e8.js" defer="defer"></script>
8
- <script src="/logrocket/assets/js/main.7d1e671a.js" defer="defer"></script>
7
+ <script src="/logrocket/assets/js/runtime~main.4402f01c.js" defer="defer"></script>
8
+ <script src="/logrocket/assets/js/main.33883ccf.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg style="display: none;"><defs>
@@ -16,7 +16,7 @@
16
16
  <p>Determines whether the user has consented to session recording based on OneTrust configuration and other signals.</p>
17
17
  <p>This function checks for user consent using multiple strategies, in the following order:</p>
18
18
  <ol>
19
- <li class="">Checks for a manual override via <code>window.emui.dangerouslyOverrideSessionRecordingConsent</code>.</li>
19
+ <li class="">If <code>window.emui.dangerouslyOverrideSessionRecordingConsent</code> is <code>true</code>, force consent ON (test/dev only). Any other value (<code>false</code>, <code>undefined</code>) defers to the normal sources below — <code>false</code> is <strong>not</strong> a force-disable.</li>
20
20
  <li class="">If OneTrust is loaded, checks if <code>window.OnetrustActiveGroups</code> contains the session recording group ID (&#x27;C0003&#x27;).</li>
21
21
  <li class="">If OneTrust is not loaded, checks the <code>analyticsConsent</code> query parameter in the current URL.</li>
22
22
  <li class="">If running in an iframe, checks the <code>analyticsConsent</code> query parameter in the iframe&#x27;s src URL.</li>
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.9.2">
6
6
  <title data-rh="true">initLogRocket() | LogRocket</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pui.ice.com/logrocket/api/functions/initLogRocket"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="initLogRocket() | LogRocket"><meta data-rh="true" name="description" content="Initialize LogRocket with optional OneTrust integration"><meta data-rh="true" property="og:description" content="Initialize LogRocket with optional OneTrust integration"><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/api/functions/initLogRocket"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/functions/initLogRocket" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/functions/initLogRocket" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"LogRocket API","item":"https://pui.ice.com/logrocket/api/"},{"@type":"ListItem","position":2,"name":"initLogRocket()","item":"https://pui.ice.com/logrocket/api/functions/initLogRocket"}]}</script><link rel="stylesheet" href="/logrocket/assets/css/styles.48d5ef50.css">
7
- <script src="/logrocket/assets/js/runtime~main.2c9f76e8.js" defer="defer"></script>
8
- <script src="/logrocket/assets/js/main.7d1e671a.js" defer="defer"></script>
7
+ <script src="/logrocket/assets/js/runtime~main.4402f01c.js" defer="defer"></script>
8
+ <script src="/logrocket/assets/js/main.33883ccf.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg style="display: none;"><defs>
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.9.2">
6
6
  <title data-rh="true">LogRocket API | LogRocket</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pui.ice.com/logrocket/api/"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="LogRocket API | LogRocket"><meta data-rh="true" name="description" content="Functions"><meta data-rh="true" property="og:description" content="Functions"><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/api/"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"LogRocket API","item":"https://pui.ice.com/logrocket/api/"}]}</script><link rel="stylesheet" href="/logrocket/assets/css/styles.48d5ef50.css">
7
- <script src="/logrocket/assets/js/runtime~main.2c9f76e8.js" defer="defer"></script>
8
- <script src="/logrocket/assets/js/main.7d1e671a.js" defer="defer"></script>
7
+ <script src="/logrocket/assets/js/runtime~main.4402f01c.js" defer="defer"></script>
8
+ <script src="/logrocket/assets/js/main.33883ccf.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg style="display: none;"><defs>
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.9.2">
6
6
  <title data-rh="true">LROptions | LogRocket</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pui.ice.com/logrocket/api/type-aliases/LROptions"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="LROptions | LogRocket"><meta data-rh="true" name="description" content="LogRocket initialization options"><meta data-rh="true" property="og:description" content="LogRocket initialization options"><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/api/type-aliases/LROptions"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/type-aliases/LROptions" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/api/type-aliases/LROptions" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"LogRocket API","item":"https://pui.ice.com/logrocket/api/"},{"@type":"ListItem","position":2,"name":"LROptions","item":"https://pui.ice.com/logrocket/api/type-aliases/LROptions"}]}</script><link rel="stylesheet" href="/logrocket/assets/css/styles.48d5ef50.css">
7
- <script src="/logrocket/assets/js/runtime~main.2c9f76e8.js" defer="defer"></script>
8
- <script src="/logrocket/assets/js/main.7d1e671a.js" defer="defer"></script>
7
+ <script src="/logrocket/assets/js/runtime~main.4402f01c.js" defer="defer"></script>
8
+ <script src="/logrocket/assets/js/main.33883ccf.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg style="display: none;"><defs>
@@ -0,0 +1 @@
1
+ "use strict";(globalThis.webpackChunk_elliemae_pui_logrocket=globalThis.webpackChunk_elliemae_pui_logrocket||[]).push([[5908],{578(e,n,i){i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>c});const o=JSON.parse('{"id":"usage-guide","title":"Usage Guide","description":"UI Platform LogRocket library standardizes the way we integrate LogRocket into our applications.","source":"@site/docs/usage-guide.md","sourceDirName":".","slug":"/usage-guide","permalink":"/logrocket/usage-guide","draft":false,"unlisted":false,"editUrl":"https://git.elliemae.io/platform-ui/pui-logrocket.git/docs/usage-guide.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_position":2},"sidebar":"docsSidebar","previous":{"title":"Getting Started","permalink":"/logrocket/"},"next":{"title":"Compliance Requirements","permalink":"/logrocket/compliance"}}');var t=i(6070),s=i(116);const r={sidebar_position:2},l="Usage Guide",a={},c=[{value:"Initialization",id:"initialization",level:2},{value:"Preventing Duplicate Initialization",id:"preventing-duplicate-initialization",level:3},{value:"Window Variables",id:"window-variables",level:3},{value:"Proxying LogRocket Calls Through CDN Domain",id:"proxying-logrocket-calls-through-cdn-domain",level:2},{value:"Setting CDN Domain for Bundled (npm) Usage",id:"setting-cdn-domain-for-bundled-npm-usage",level:3},{value:"Verifying Proxying in Browser DevTools",id:"verifying-proxying-in-browser-devtools",level:3},{value:"Testing LogRocket Integration from Localhost",id:"testing-logrocket-integration-from-localhost",level:2},{value:"Option 1: Environment Variable",id:"option-1-environment-variable",level:3},{value:"Option 2: Configuration Flag",id:"option-2-configuration-flag",level:3},{value:"Controlling Session Recording Based on User Consent",id:"controlling-session-recording-based-on-user-consent",level:2},{value:"Two-Level Consent Control",id:"two-level-consent-control",level:3},{value:"OneTrust Integration",id:"onetrust-integration",level:3},{value:"Overriding Session Recording Consent Check",id:"overriding-session-recording-consent-check",level:3},{value:"Sharing information with child micro applications",id:"sharing-information-with-child-micro-applications",level:2},{value:"Support for Legacy AngularJS Microapps in Iframes",id:"support-for-legacy-angularjs-microapps-in-iframes",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"usage-guide",children:"Usage Guide"})}),"\n",(0,t.jsx)(n.p,{children:"UI Platform LogRocket library standardizes the way we integrate LogRocket into our applications."}),"\n",(0,t.jsx)(n.h2,{id:"initialization",children:"Initialization"}),"\n",(0,t.jsxs)(n.p,{children:["To initialize LogRocket using the UI Platform LogRocket library, you can use the ",(0,t.jsx)(n.code,{children:"initLogRocket"})," function. This function accepts a configuration object where you can specify your LogRocket application ID and other optional settings."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-javascript",children:"import { initLogRocket } from '@elliemae/pui-logrocket';\n\ninitLogRocket({ appId: 'logrocket-app-id' });\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Replace ",(0,t.jsx)(n.code,{children:"logrocket-app-id"}),' with your actual LogRocket app ID. You can use window variables to configure LogRocket based on your environment (dev, stage, prod etc.,). See the "Window Variables" section below for more details.']}),"\n",(0,t.jsx)(n.h3,{id:"preventing-duplicate-initialization",children:"Preventing Duplicate Initialization"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"initLogRocket"})," is safe to call multiple times \u2014 only the first call initializes LogRocket; subsequent calls are no-ops. This lets each module in a micro-frontend call it without coordinating."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-javascript",children:"import { initLogRocket } from '@elliemae/pui-logrocket';\n\ninitLogRocket({ appId: 'logrocket-app-id' }); // initializes\ninitLogRocket({ appId: 'logrocket-app-id' }); // no-op\n"})}),"\n",(0,t.jsx)(n.h3,{id:"window-variables",children:"Window Variables"}),"\n",(0,t.jsxs)(n.p,{children:["The UI Platform LogRocket library can be configured using global window variables below, which can be set before making the ",(0,t.jsx)(n.code,{children:"initLogRocket"})," call."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"window.emui.logRocketConfig"})}),": The main LogRocket configuration object."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"This object has following properties:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"appId"})," (string): LogRocket application ID allocated to the product."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"enable"})," (boolean): Flag to enable or disable LogRocket in the microapp. Defaults to ",(0,t.jsx)(n.code,{children:"true"}),". If set to ",(0,t.jsx)(n.code,{children:"false"}),", LogRocket will not be initialized even if ",(0,t.jsx)(n.code,{children:"initLogRocket"})," is called. This can be useful for disabling LogRocket in certain environments (e.g., development or staging)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"localhostEnable"})," (boolean): Flag to enable LogRocket when running on localhost. Defaults to ",(0,t.jsx)(n.code,{children:"false"}),". When set to ",(0,t.jsx)(n.code,{children:"true"}),", LogRocket will be enabled on localhost even if the ",(0,t.jsx)(n.code,{children:"LOGROCKET_ENABLE_ON_LOCALHOST"})," environment variable is not set. This is useful for local development and testing."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"childDomains"})," (array of strings, optional): Cross-origin child app origins to link sessions with when the page embeds them as iframes.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Default:"})," same-origin children stitch automatically with no configuration."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Set this when:"})," the page is a parent that embeds ",(0,t.jsx)(n.strong,{children:"cross-origin"})," guest microapps (e.g. ",(0,t.jsx)(n.code,{children:"https://app.ice.com"})," embedding ",(0,t.jsx)(n.code,{children:"https://guest.example.com"}),"). List each cross-origin child origin."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Format:"})," array of full origins (e.g. ",(0,t.jsx)(n.code,{children:"['https://guest.example.com']"}),"). Bare hostnames, URLs with paths, and non-array values are dropped with a warning."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Note:"})," children themselves don't set this option \u2014 they need ",(0,t.jsx)(n.code,{children:"parentDomain"})," (normally auto-detected). Both sides must be configured for cross-origin linking to work."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"parentDomain"})," (string, optional): Origin of the page that embeds this one. Used by LogRocket to link the child's session to the parent's.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Default:"})," auto-detected when the parent uses ",(0,t.jsx)(n.code,{children:"buildLogRocketQueryParams"})," (covers cross-origin embeds reliably). Same-origin parents are also detected automatically."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Set this when:"})," the parent is cross-origin and does ",(0,t.jsx)(n.strong,{children:"not"})," call ",(0,t.jsx)(n.code,{children:"buildLogRocketQueryParams"}),". Otherwise leave unset."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Format:"})," a full origin (e.g. ",(0,t.jsx)(n.code,{children:"https://parent.example.com"}),"). Bare hostnames or URLs with paths are dropped with a warning."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Note:"})," do not set this on a top-level page (no parent) \u2014 it would tell LogRocket to wait on a parent that doesn't exist and stall session start."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"rootHostname"})," (string, optional): Cookie scope for stitching sessions across subdomains of the ",(0,t.jsx)(n.strong,{children:"same site"})," (see ",(0,t.jsx)(n.a,{href:"https://docs.logrocket.com/reference/roothostname",children:"LogRocket docs"}),").","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Default:"})," auto-detected as ",(0,t.jsx)(n.code,{children:".<last two hostname segments>"})," (e.g. ",(0,t.jsx)(n.code,{children:"beta.encompass.ice.com"})," \u2192 ",(0,t.jsx)(n.code,{children:".ice.com"}),"). Same-site iframes converge on the same value automatically."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Set this when:"})," you want to ",(0,t.jsx)(n.strong,{children:"narrow"})," the cookie scope to a deeper subtree so sessions in that subtree don't merge with the rest of the site (e.g. set ",(0,t.jsx)(n.code,{children:".beta.ice.com"})," on ",(0,t.jsx)(n.code,{children:"app.beta.ice.com"})," to keep beta sessions isolated from prod)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Format:"})," must start with ",(0,t.jsx)(n.code,{children:"."})," and end with the auto-detected value. A different site, a shallower scope, or a missing leading dot is rejected with a warning."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Note:"})," cross-",(0,t.jsx)(n.strong,{children:"site"})," frame linking is handled by ",(0,t.jsx)(n.code,{children:"parentDomain"}),"/",(0,t.jsx)(n.code,{children:"childDomains"}),", not this option."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"proxying-logrocket-calls-through-cdn-domain",children:"Proxying LogRocket Calls Through CDN Domain"}),"\n",(0,t.jsxs)(n.p,{children:["LogRocket script loading and data ingestion are proxied through the UI Platform CDN (",(0,t.jsx)(n.code,{children:"cdn.mortgagetech.*.ice.com"}),") instead of LogRocket's own servers. This improves ad-blocker resilience and complies with policies that restrict traffic to internal domains."]}),"\n",(0,t.jsxs)(n.p,{children:["The CDN domain is auto-detected when the library is loaded from a CDN URL or ",(0,t.jsx)(n.code,{children:"localhost"}),". No configuration is needed in that case."]}),"\n",(0,t.jsx)(n.h3,{id:"setting-cdn-domain-for-bundled-npm-usage",children:"Setting CDN Domain for Bundled (npm) Usage"}),"\n",(0,t.jsxs)(n.p,{children:["When the library is imported as an npm package, auto-detection cannot run. Set ",(0,t.jsx)(n.code,{children:"window.emui.cdnDomain"})," to the correct environment before the library loads:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-javascript",children:"window.emui = window.emui || {};\nwindow.emui.cdnDomain = 'https://cdn.mortgagetech.q1.ice.com'; // d1, q1, etc.\n"})}),"\n",(0,t.jsx)(n.h3,{id:"verifying-proxying-in-browser-devtools",children:"Verifying Proxying in Browser DevTools"}),"\n",(0,t.jsxs)(n.p,{children:["In the ",(0,t.jsx)(n.strong,{children:"Network"})," tab, requests should go to ",(0,t.jsx)(n.code,{children:"https://cdn.mortgagetech.<env>.ice.com/..."})," rather than ",(0,t.jsx)(n.code,{children:"cdn.lr-in-prod.com"})," or ",(0,t.jsx)(n.code,{children:"r.lr-in-prod.com"}),". If they don't, set ",(0,t.jsx)(n.code,{children:"window.emui.cdnDomain"})," or load the library from the CDN."]}),"\n",(0,t.jsx)(n.h2,{id:"testing-logrocket-integration-from-localhost",children:"Testing LogRocket Integration from Localhost"}),"\n",(0,t.jsx)(n.p,{children:"When developing locally, you may want to test LogRocket integration. There are two ways to enable LogRocket on localhost:"}),"\n",(0,t.jsx)(n.h3,{id:"option-1-environment-variable",children:"Option 1: Environment Variable"}),"\n",(0,t.jsxs)(n.p,{children:["Set the environment variable ",(0,t.jsx)(n.code,{children:"LOGROCKET_ENABLE_ON_LOCALHOST"})," to ",(0,t.jsx)(n.code,{children:"true"}),". If you are using a ",(0,t.jsx)(n.code,{children:".env"})," file, add the following line:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-txt",children:"LOGROCKET_ENABLE_ON_LOCALHOST=true\n"})}),"\n",(0,t.jsx)(n.h3,{id:"option-2-configuration-flag",children:"Option 2: Configuration Flag"}),"\n",(0,t.jsxs)(n.p,{children:["Set the ",(0,t.jsx)(n.code,{children:"window.emui.logRocketConfig.localhostEnable"})," flag to ",(0,t.jsx)(n.code,{children:"true"})," before calling ",(0,t.jsx)(n.code,{children:"initLogRocket"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-javascript",children:"window.emui = window.emui || {};\nwindow.emui.logRocketConfig = window.emui.logRocketConfig || {};\nwindow.emui.logRocketConfig.localhostEnable = true;\n\nimport { initLogRocket } from '@elliemae/pui-logrocket';\ninitLogRocket({ appId: 'logrocket-app-id' });\n"})}),"\n",(0,t.jsxs)(n.p,{children:["LogRocket will be enabled on localhost if ",(0,t.jsx)(n.strong,{children:"either"})," the environment variable ",(0,t.jsx)(n.strong,{children:"or"})," the configuration flag is set to ",(0,t.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"controlling-session-recording-based-on-user-consent",children:"Controlling Session Recording Based on User Consent"}),"\n",(0,t.jsx)(n.p,{children:"OneTrust consent management platform is the tool used to manage user consent in ICE. When the root microapplication integrates with OneTrust, the UI Platform LogRocket library leverages OneTrust to control LogRocket initialization and session recording based on user consent."}),"\n",(0,t.jsx)(n.h3,{id:"two-level-consent-control",children:"Two-Level Consent Control"}),"\n",(0,t.jsx)(n.p,{children:"The library implements a two-level consent control system:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"LogRocket Initialization (C0002 - Performance Cookies)"}),": Controls whether LogRocket is initialized at all"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"If C0002 is not granted, LogRocket will not initialize"}),"\n",(0,t.jsx)(n.li,{children:"When OneTrust is not loaded, LogRocket initializes by default"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Session Recording (C0003 - Functional Cookies)"}),": Controls whether DOM recording is enabled"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"If C0003 is not granted, LogRocket still captures technical data but disables visual session recording"}),"\n",(0,t.jsx)(n.li,{children:"Technical data includes: network requests, console logs, JavaScript errors, performance metrics, and custom events"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:'OneTrust should be integrated only in the root microapplication. Child microapplications (e.g., iframes) do not need to integrate with OneTrust directly, as they will inherit the consent status from the root microapplication via URL query parameters (see "Sharing LogRocket information with child micro applications" section below).'}),"\n",(0,t.jsx)(n.h3,{id:"onetrust-integration",children:"OneTrust Integration"}),"\n",(0,t.jsx)(n.p,{children:"When OneTrust is present, the library waits for the user's consent decision before initializing LogRocket. Both first-time visitors (waits for the consent banner) and returning visitors (uses cached consent) are handled automatically \u2014 there's nothing for the consuming app to wire up. If OneTrust signals don't arrive within 10 seconds, the library initializes with whatever consent state is available so LogRocket isn't blocked indefinitely."}),"\n",(0,t.jsxs)(n.p,{children:["The library also applies privacy-focused defaults (input/text sanitization, hidden ARIA attributes, network body redaction). See the ",(0,t.jsx)(n.a,{href:"/logrocket/compliance",children:"Compliance Guide"})," for details."]}),"\n",(0,t.jsx)(n.h3,{id:"overriding-session-recording-consent-check",children:"Overriding Session Recording Consent Check"}),"\n",(0,t.jsxs)(n.p,{children:["For local development, set ",(0,t.jsx)(n.code,{children:"window.emui.dangerouslyOverrideSessionRecordingConsent"})," to ",(0,t.jsx)(n.code,{children:"true"})," before calling ",(0,t.jsx)(n.code,{children:"initLogRocket"})," to force session recording on regardless of OneTrust consent. A console warning is logged whenever this override takes effect."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-javascript",children:"window.emui = window.emui || {};\nwindow.emui.dangerouslyOverrideSessionRecordingConsent = true;\ninitLogRocket({ appId: 'logrocket-app-id' });\n"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsxs)(n.strong,{children:["Only ",(0,t.jsx)(n.code,{children:"true"})," overrides consent."]})," Any other value \u2014 including ",(0,t.jsx)(n.code,{children:"false"})," \u2014 is a no-op: the library falls through to the normal consent sources (OneTrust C0003, ",(0,t.jsx)(n.code,{children:"analyticsConsent"})," URL parameter, iframe ",(0,t.jsx)(n.code,{children:"src"})," parameter), which can still grant consent on their own."]}),"\n",(0,t.jsxs)(n.p,{children:["\u26a0\ufe0f ",(0,t.jsx)(n.strong,{children:"Use only for local development and testing."})," This bypasses compliance controls and must never be set in production."]}),"\n",(0,t.jsx)(n.h2,{id:"sharing-information-with-child-micro-applications",children:"Sharing information with child micro applications"}),"\n",(0,t.jsxs)(n.p,{children:["LogRocket is initialized in each micro application independently. The ",(0,t.jsx)(n.code,{children:"buildLogRocketQueryParams"})," utility lets a parent share its LogRocket configuration and consent state with child micro applications (e.g. iframes) via URL query parameters, so children inherit the right setup without hardcoding it. It also lets interoperable children work under different parents (Encompass, TPO, etc.) without changes."]}),"\n",(0,t.jsx)(n.p,{children:"The function returns the following query parameters for inclusion in the child's iframe URL:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"analyticsConsent"})}),": ",(0,t.jsx)(n.code,{children:"'true'"})," if the user consented to functional cookies, else ",(0,t.jsx)(n.code,{children:"'false'"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"lrEnabled"})}),": ",(0,t.jsx)(n.code,{children:"'true'"})," if LogRocket is enabled in the parent, else ",(0,t.jsx)(n.code,{children:"'false'"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"lrAppId"})}),": the LogRocket application ID used by the parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.code,{children:"lrParentOrigin"})}),": the parent's ",(0,t.jsx)(n.code,{children:"origin"})," (e.g. ",(0,t.jsx)(n.code,{children:"https://parent-app.example.com"}),"). The child reads this to populate ",(0,t.jsx)(n.code,{children:"parentDomain"})," for cross-origin session linking."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Important"}),": call this after ",(0,t.jsx)(n.code,{children:"initLogRocket"})," so the returned values reflect the parent's actual init state (the parent's consent and enabled state are captured at init time and reused here, so they stay consistent even if the user changes consent later)."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-javascript",children:"import { buildLogRocketQueryParams } from '@elliemae/pui-logrocket';\n\nconst urlParams = buildLogRocketQueryParams();\n// \"analyticsConsent=true&lrEnabled=true&lrAppId=your-app-id&lrParentOrigin=https%3A%2F%2Fparent-app.example.com\"\nconst childUrl = `https://child-app.example.com?${urlParams}`;\n// launch guest application with childUrl using SSF V2 / App SDK GuestMicroapp\n"})}),"\n",(0,t.jsx)(n.h3,{id:"support-for-legacy-angularjs-microapps-in-iframes",children:"Support for Legacy AngularJS Microapps in Iframes"}),"\n",(0,t.jsxs)(n.p,{children:["For legacy AngularJS microapps running inside iframes, the library reads ",(0,t.jsx)(n.code,{children:"analyticsConsent"})," from the iframe's ",(0,t.jsx)(n.code,{children:"src"})," URL as a fallback so they inherit consent without code changes."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Consent Check Priority"})," (highest to lowest):"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"OneTrust consent groups"})," (when OneTrust is loaded)"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Current window URL"})," ",(0,t.jsx)(n.code,{children:"analyticsConsent"})," parameter"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Iframe src URL"})," ",(0,t.jsx)(n.code,{children:"analyticsConsent"})," parameter (legacy fallback)"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Default"}),": ",(0,t.jsx)(n.code,{children:"false"})]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-javascript",children:'// No code change needed in the child microapp; the library reads it automatically.\n<iframe src="https://legacy-app.com/app?analyticsConsent=true&lrAppId=my-app"></iframe>\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(globalThis.webpackChunk_elliemae_pui_logrocket=globalThis.webpackChunk_elliemae_pui_logrocket||[]).push([[4319],{7661(e,n,s){s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>a});const o=JSON.parse('{"id":"api/functions/hasUserConsentedToSessionRecording","title":"hasUserConsentedToSessionRecording()","description":"Determines whether the user has consented to session recording based on OneTrust configuration and other signals.","source":"@site/docs/api/functions/hasUserConsentedToSessionRecording.md","sourceDirName":"api/functions","slug":"/api/functions/hasUserConsentedToSessionRecording","permalink":"/logrocket/api/functions/hasUserConsentedToSessionRecording","draft":false,"unlisted":false,"editUrl":"https://git.elliemae.io/platform-ui/pui-logrocket.git/docs/api/functions/hasUserConsentedToSessionRecording.md","tags":[],"version":"current","frontMatter":{},"sidebar":"docsSidebar","previous":{"title":"buildLogRocketQueryParams()","permalink":"/logrocket/api/functions/buildLogRocketQueryParams"},"next":{"title":"initLogRocket()","permalink":"/logrocket/api/functions/initLogRocket"}}');var r=s(6070),i=s(116);const t={},c="hasUserConsentedToSessionRecording()",d={},a=[{value:"Returns",id:"returns",level:2}];function l(e){const n={code:"code",h1:"h1",h2:"h2",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"hasuserconsentedtosessionrecording",children:"hasUserConsentedToSessionRecording()"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-ts",children:"function hasUserConsentedToSessionRecording(): boolean;\n"})}),"\n",(0,r.jsx)(n.p,{children:"Determines whether the user has consented to session recording based on OneTrust configuration and other signals."}),"\n",(0,r.jsx)(n.p,{children:"This function checks for user consent using multiple strategies, in the following order:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["If ",(0,r.jsx)(n.code,{children:"window.emui.dangerouslyOverrideSessionRecordingConsent"})," is ",(0,r.jsx)(n.code,{children:"true"}),", force consent ON (test/dev only). Any other value (",(0,r.jsx)(n.code,{children:"false"}),", ",(0,r.jsx)(n.code,{children:"undefined"}),") defers to the normal sources below \u2014 ",(0,r.jsx)(n.code,{children:"false"})," is ",(0,r.jsx)(n.strong,{children:"not"})," a force-disable."]}),"\n",(0,r.jsxs)(n.li,{children:["If OneTrust is loaded, checks if ",(0,r.jsx)(n.code,{children:"window.OnetrustActiveGroups"})," contains the session recording group ID ('C0003')."]}),"\n",(0,r.jsxs)(n.li,{children:["If OneTrust is not loaded, checks the ",(0,r.jsx)(n.code,{children:"analyticsConsent"})," query parameter in the current URL."]}),"\n",(0,r.jsxs)(n.li,{children:["If running in an iframe, checks the ",(0,r.jsx)(n.code,{children:"analyticsConsent"})," query parameter in the iframe's src URL."]}),"\n",(0,r.jsxs)(n.li,{children:["Defaults to ",(0,r.jsx)(n.code,{children:"false"})," if no consent can be determined."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Note: When OneTrust is present, the OneTrust consent groups take precedence over URL parameters.\nThe ",(0,r.jsx)(n.code,{children:"analyticsConsent"})," URL parameter only applies when OneTrust is not loaded."]}),"\n",(0,r.jsx)(n.h2,{id:"returns",children:"Returns"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.code,{children:"boolean"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"true"})," if the user has consented to session recording, ",(0,r.jsx)(n.code,{children:"false"})," otherwise."]})]})}function h(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(globalThis.webpackChunk_elliemae_pui_logrocket=globalThis.webpackChunk_elliemae_pui_logrocket||[]).push([[3480],{2266(e,n,i){i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"compliance","title":"Compliance Requirements","description":"Due to wiretapping & privacy laws in certain jurisdictions, it is essential to ensure that our session recording practices comply with local regulations. Below are the key compliance requirements we need to adhere to when using LogRocket for recording user sessions and activities,","source":"@site/docs/compliance.md","sourceDirName":".","slug":"/compliance","permalink":"/logrocket/compliance","draft":false,"unlisted":false,"editUrl":"https://git.elliemae.io/platform-ui/pui-logrocket.git/docs/compliance.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"sidebar_position":3},"sidebar":"docsSidebar","previous":{"title":"Usage Guide","permalink":"/logrocket/usage-guide"},"next":{"title":"LogRocket API","permalink":"/logrocket/api/"}}');var r=i(6070),t=i(116);const l={sidebar_position:3},o="Compliance Requirements",a={},c=[{value:"Overview",id:"overview",level:2},{value:"Key Requirements",id:"key-requirements",level:2},{value:"Application Types",id:"application-types",level:3},{value:"Consent Matrix (Borrower-Facing Applications)",id:"consent-matrix-borrower-facing-applications",level:3},{value:"Implementation",id:"implementation",level:2},{value:"Cookie Banner with OneTrust",id:"cookie-banner-with-onetrust",level:3},{value:"User Journey: First Visit (No Prior Consent)",id:"user-journey-first-visit-no-prior-consent",level:4},{value:"User Journey: Returning Visit (Consent Previously Given)",id:"user-journey-returning-visit-consent-previously-given",level:4},{value:"Consent Check Hierarchy",id:"consent-check-hierarchy",level:4},{value:"OneTrust Integration Details",id:"onetrust-integration-details",level:3},{value:"Integration Setup (Shell Microapp Only)",id:"integration-setup-shell-microapp-only",level:4},{value:"Data Sanitization in Session Recordings",id:"data-sanitization-in-session-recordings",level:3},{value:"Input Sanitization",id:"input-sanitization",level:4},{value:"Text Content Sanitization",id:"text-content-sanitization",level:4},{value:"Hidden Attributes",id:"hidden-attributes",level:4},{value:"URL Sanitization",id:"url-sanitization",level:4},{value:"Network Sanitization",id:"network-sanitization",level:4},{value:"Testing and Development",id:"testing-and-development",level:2},{value:"Localhost Development",id:"localhost-development",level:3},{value:"Compliance Checklist",id:"compliance-checklist",level:2},{value:"Common Requirements (All Applications)",id:"common-requirements-all-applications",level:3},{value:"Borrower-Facing Specific (e.g., ECC)",id:"borrower-facing-specific-eg-ecc",level:3},{value:"Non-Borrower-Facing Specific (e.g., EncompassWeb, TPO)",id:"non-borrower-facing-specific-eg-encompassweb-tpo",level:3}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",img:"img",input:"input",li:"li",mermaid:"mermaid",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"compliance-requirements",children:"Compliance Requirements"})}),"\n",(0,r.jsx)(n.p,{children:"Due to wiretapping & privacy laws in certain jurisdictions, it is essential to ensure that our session recording practices comply with local regulations. Below are the key compliance requirements we need to adhere to when using LogRocket for recording user sessions and activities,"}),"\n",(0,r.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(n.p,{children:"LogRocket captures two categories of data:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Session Recordings (DOM capture)"}),": Visual replay of user interactions, mouse movements, clicks, and page changes"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Technical Data"}),": Network requests, console logs, JavaScript errors, performance metrics, and custom events"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"key-requirements",children:"Key Requirements"}),"\n",(0,r.jsx)(n.h3,{id:"application-types",children:"Application Types"}),"\n",(0,r.jsx)(n.p,{children:"LogRocket session recording requirements differ based on the application type:"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Aspect"}),(0,r.jsx)(n.th,{children:"Borrower-Facing (e.g., ECC)"}),(0,r.jsx)(n.th,{children:"Non-Borrower-Facing (e.g., EncompassWeb, TPO)"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"OneTrust Banner"})}),(0,r.jsx)(n.td,{children:"For obtaining user consent"}),(0,r.jsx)(n.td,{children:"For transparency/disclosure only"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Consent Required"})}),(0,r.jsx)(n.td,{children:"Yes - C0002 (init), C0003 (recording)"}),(0,r.jsx)(n.td,{children:"No - shown for informational purposes"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Session Recording"})}),(0,r.jsx)(n.td,{children:"Enabled only with C0003 consent"}),(0,r.jsx)(n.td,{children:"Always enabled by default"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"User Opt-Out"})}),(0,r.jsx)(n.td,{children:"\u2705 Can opt-out via OneTrust"}),(0,r.jsx)(n.td,{children:"\u274c Cannot opt-out"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Target Users"})}),(0,r.jsx)(n.td,{children:"Consumers/borrowers"}),(0,r.jsx)(n.td,{children:"Professional/business users"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Rationale for non-borrower-facing"}),": Professional applications require continuous session recording for technical troubleshooting, security monitoring, user experience optimization, and compliance requirements."]}),"\n",(0,r.jsx)(n.h3,{id:"consent-matrix-borrower-facing-applications",children:"Consent Matrix (Borrower-Facing Applications)"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Feature"}),(0,r.jsx)(n.th,{children:"With C0002 Only"}),(0,r.jsx)(n.th,{children:"With C0002 + C0003"}),(0,r.jsx)(n.th,{children:"Without C0002"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"LogRocket Init"}),(0,r.jsx)(n.td,{children:"\u2705 Initialized"}),(0,r.jsx)(n.td,{children:"\u2705 Initialized"}),(0,r.jsx)(n.td,{children:"\u274c Not Initialized"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Session Recording (DOM)"}),(0,r.jsx)(n.td,{children:"\u274c Disabled"}),(0,r.jsx)(n.td,{children:"\u2705 Enabled"}),(0,r.jsx)(n.td,{children:"\u274c Not Available"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Visual Replay"}),(0,r.jsx)(n.td,{children:"\u274c Not Available"}),(0,r.jsx)(n.td,{children:"\u2705 Available"}),(0,r.jsx)(n.td,{children:"\u274c Not Available"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Mouse Movements"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Clicks & Interactions"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Page Changes"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Network Requests"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Console Logs"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"JavaScript Errors"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Performance Metrics"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Custom Events"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u2705 Captured"}),(0,r.jsx)(n.td,{children:"\u274c Not Captured"})]})]})]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Data Minimization"}),": Only log data that is necessary for the intended purpose."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Anonymization"}),": Implement multiple anonymization strategies:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Input sanitization using 'lipsum' method to replace user input with placeholder text"}),"\n",(0,r.jsx)(n.li,{children:"Text sanitization enabled by default to protect sensitive text content"}),"\n",(0,r.jsx)(n.li,{children:"Hidden ARIA attributes (aria-label, aria-labelledby, aria-describedby, etc.) to protect accessibility-related PII"}),"\n",(0,r.jsx)(n.li,{children:"Request and response body sanitization to remove sensitive data"}),"\n",(0,r.jsx)(n.li,{children:"Custom sanitizers for URLs, network requests, and responses"}),"\n",(0,r.jsx)(n.li,{children:"Support for masking specific elements and attributes"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"implementation",children:"Implementation"}),"\n",(0,r.jsx)(n.h3,{id:"cookie-banner-with-onetrust",children:"Cookie Banner with OneTrust"}),"\n",(0,r.jsx)(n.p,{children:"Both application types display the OneTrust cookie banner with different purposes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Borrower-facing (ECC)"}),": Banner obtains user consent before enabling LogRocket"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Non-borrower-facing (EncompassWeb, TPO)"}),": Banner informs users about session recording (transparency only)"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Sample OneTrust based cookie banner"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Cookie Banner",src:i(6740).A+"",width:"1912",height:"1007"})}),"\n",(0,r.jsxs)(n.p,{children:["Sample Cookie Choices\n",(0,r.jsx)(n.img,{alt:"Cookie Choices",src:i(9323).A+"",width:"448",height:"926"})]}),"\n",(0,r.jsx)(n.h4,{id:"user-journey-first-visit-no-prior-consent",children:"User Journey: First Visit (No Prior Consent)"}),"\n",(0,r.jsx)(n.mermaid,{value:'sequenceDiagram\n actor User\n participant App as Application\n participant PUI as pui-logrocket<br/>Library\n participant OT as OneTrust\n participant Banner as Cookie Banner\n participant LR as LogRocket\n\n User->>App: Visits Application\n App->>PUI: initLogRocket()\n\n par OneTrust Consent Check\n OT->>OT: Check for existing consent\n OT->>Banner: No consent found\n Banner->>User: Show Cookie Banner\n Note over Banner,User: Banner displays:<br/>- Cookie usage information<br/>- Analytics/tracking options<br/>- Accept/Decline buttons\n and LogRocket Consent Evaluation (Parallel)\n PUI->>PUI: Check OptanonAlertBoxClosed cookie\n Note over PUI: Cookie not found (first visit)\n PUI->>PUI: Check OnetrustActiveGroups for C0002\n end\n\n alt C0002 Already Active (Non-Rejectable)\n Note over PUI: Internal apps (e.g., Encompass, TPO)<br/>C0002 is always active\n PUI->>LR: \u2705 Initialize LogRocket immediately\n PUI->>PUI: Check C0003 for session recording\n PUI->>LR: Set dom.isEnabled based on C0003\n Note over User,LR: LogRocket active without<br/>waiting for banner interaction\n else C0002 Not Active - Wait for User Consent\n PUI->>PUI: Add listener for OTConsentApplied event\n PUI->>PUI: Start 10s timeout fallback\n Note over PUI: \u23f3 Waiting for user to<br/>interact with banner\n alt User Accepts Functional Cookies\n User->>Banner: Click "Accept" or "Accept All"\n Banner->>OT: Save consent (C0002:1, C0003:1)\n OT->>OT: Store in OptanonConsent cookie\n OT->>OT: Set OptanonAlertBoxClosed cookie\n OT->>PUI: Fire OTConsentApplied event\n PUI->>PUI: Check consent (C0002:1)\n PUI->>LR: \u2705 Initialize LogRocket\n PUI->>PUI: Check consent (C0003:1)\n PUI->>LR: \u2705 Enable session recording\n Note over User,LR: LogRocket fully active<br/>in current session\n else User Declines Functional Cookies\n User->>Banner: Click "Decline" or customize\n Banner->>OT: Save preferences (C0002:0, C0003:0)\n OT->>OT: Store in OptanonConsent cookie\n Note over User,LR: LogRocket remains<br/>disabled for future visits\n else Timeout (10s, no event received)\n PUI->>PUI: OneTrust event not received\n PUI->>PUI: Log warning\n PUI->>LR: Initialize with current consent state\n Note over User,LR: Fallback prevents<br/>permanent blocking\n end\n end'}),"\n",(0,r.jsx)(n.h4,{id:"user-journey-returning-visit-consent-previously-given",children:"User Journey: Returning Visit (Consent Previously Given)"}),"\n",(0,r.jsx)(n.mermaid,{value:"sequenceDiagram\n actor User\n participant App as Application\n participant PUI as pui-logrocket<br/>Library\n participant Cookie as Browser Cookie<br/>(OptanonConsent)\n participant LR as LogRocket\n\n User->>App: Returns to Application\n App->>PUI: initLogRocket()\n PUI->>Cookie: Check OptanonAlertBoxClosed cookie\n Cookie->>PUI: Cookie found (banner seen before)\n Note over PUI: Banner not shown<br/>User previously interacted\n PUI->>PUI: Add listener for OneTrustGroupsUpdated event\n Note over PUI: \u23f3 Waiting for OneTrust<br/>to load consent groups\n App->>App: OneTrust SDK loads\n App->>PUI: Fire OneTrustGroupsUpdated event\n PUI->>Cookie: Check OptanonConsent cookie\n Cookie->>PUI: C0002 and C0003 consent found\n PUI->>LR: \u2705 Initialize LogRocket\n PUI->>LR: Set dom.isEnabled=true (C0003 granted)\n LR->>LR: \u2705 LogRocket Initialized\n LR->>LR: \u2705 Start Session Recording\n Note over User,LR: Seamless experience,<br/>full recording active"}),"\n",(0,r.jsx)(n.h4,{id:"consent-check-hierarchy",children:"Consent Check Hierarchy"}),"\n",(0,r.jsx)(n.mermaid,{value:"flowchart LR\n A[pui-logrocket<br/>Check Session Recording Consent] --\x3e B{dangerouslyOverrideSessionRecordingConsent<br/>=== true?}\n B --\x3e|Yes| C[\u2713 Consent Granted<br/>force ON]\n B --\x3e|No / false / unset| D{window.OnetrustActiveGroups<br/>exists?}\n D --\x3e|Yes| E{Contains C0003?}\n E --\x3e|Yes| F[\u2713 Consent Granted]\n E --\x3e|No| G[\u2717 No Consent]\n D --\x3e|No| H{Current URL Parameter<br/>analyticsConsent=true?}\n H --\x3e|Yes| F\n H --\x3e|No| I{Running in iframe?}\n I --\x3e|Yes| J{Iframe src URL Parameter<br/>analyticsConsent=true?}\n J --\x3e|Yes| F\n J --\x3e|No| G\n I --\x3e|No| G\n\n style F fill:#4CAF50,color:#fff\n style C fill:#4CAF50,color:#fff\n style G fill:#FF6B6B,color:#fff"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"Priority Order:"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Manual override (",(0,r.jsx)(n.code,{children:"dangerouslyOverrideSessionRecordingConsent === true"}),") \u2014 ",(0,r.jsx)(n.strong,{children:"force ON only"}),". Setting the override to ",(0,r.jsx)(n.code,{children:"false"})," does ",(0,r.jsx)(n.strong,{children:"not"})," force-disable; it falls through to the normal sources below."]}),"\n",(0,r.jsx)(n.li,{children:"OneTrust consent groups (C0003)"}),"\n",(0,r.jsxs)(n.li,{children:["Current window URL parameter (",(0,r.jsx)(n.code,{children:"analyticsConsent"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Iframe src URL parameter (",(0,r.jsx)(n.code,{children:"analyticsConsent"}),") - ",(0,r.jsx)(n.strong,{children:"Legacy support for AngularJS microapps"})]}),"\n",(0,r.jsxs)(n.li,{children:["Default (no consent) - ",(0,r.jsx)(n.strong,{children:"Lowest priority"})]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"onetrust-integration-details",children:"OneTrust Integration Details"}),"\n",(0,r.jsx)(n.h4,{id:"integration-setup-shell-microapp-only",children:"Integration Setup (Shell Microapp Only)"}),"\n",(0,r.jsxs)(n.p,{children:["OneTrust SDK must be integrated using ",(0,r.jsx)(n.strong,{children:"Google Tag Manager"})," as a custom HTML tag:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsxs)(n.strong,{children:["Set ",(0,r.jsx)(n.code,{children:"window.hasOneTrust"})," flag"]}),": The application's shell microapp must set ",(0,r.jsx)(n.code,{children:"window.hasOneTrust = true"})," ",(0,r.jsx)(n.strong,{children:"before"})," loading Google Tag Manager"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-javascript",children:"// In shell microapp - set before GTM loads\nwindow.hasOneTrust = true;\n"})}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsxs)(n.strong,{children:["Set ",(0,r.jsx)(n.code,{children:"appEnv"})," Data Layer variable"]}),": Push the application environment to the Data Layer before GTM loads"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-javascript",children:"// In shell microapp - set before GTM loads\nwindow.dataLayer = window.dataLayer || [];\nwindow.dataLayer.push({\n appEnv: 'production', // or 'development', 'staging', 'qa', etc.\n});\n"})}),"\n",(0,r.jsx)(n.p,{children:"This variable is used in GTM to load envvironment specific OneTrust SDK."}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Note"}),": React boilerplate based shell microapp to set the window.gtmDataLayer variable in ",(0,r.jsx)(n.a,{href:"https://git.elliemae.io/platform-ui/pui-react-boilerplate/blob/feature/logrocket/app/global.js#L34",children:"global.js "}),"file."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Configure OneTrust in Google Tag Manager"}),": Add OneTrust SDK as a custom HTML tag in GTM with the following steps:"]}),"\n",(0,r.jsxs)(n.p,{children:["a. ",(0,r.jsx)(n.strong,{children:"Setup Variables"})]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Create a JavaScript Variable for OneTrust flag"}),":"]}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Go to your GTM workspace"}),"\n",(0,r.jsx)(n.li,{children:'Click "Variables" \u2192 "User-Defined Variables" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "js-hasOneTrust"'}),"\n",(0,r.jsx)(n.li,{children:'Variable Type: Select "JavaScript Variable"'}),"\n",(0,r.jsxs)(n.li,{children:["Global Variable Name: ",(0,r.jsx)(n.code,{children:"hasOneTrust"})]}),"\n",(0,r.jsx)(n.li,{children:'Format Value: Check "Convert undefined to false"'}),"\n",(0,r.jsx)(n.li,{children:'Click "Save"'}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"2",children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Create a Data Layer Variable for application environment"}),":"]}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Go to your GTM workspace"}),"\n",(0,r.jsx)(n.li,{children:'Click "Variables" \u2192 "User-Defined Variables" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "dlv-appEnv"'}),"\n",(0,r.jsx)(n.li,{children:'Variable Type: Select "Data Layer Variable"'}),"\n",(0,r.jsxs)(n.li,{children:["Data Layer Variable Name: ",(0,r.jsx)(n.code,{children:"appEnv"})]}),"\n",(0,r.jsx)(n.li,{children:'Data Layer Version: Select "Version 2"'}),"\n",(0,r.jsxs)(n.li,{children:["Default Value: ",(0,r.jsx)(n.code,{children:"localhost"})]}),"\n",(0,r.jsx)(n.li,{children:'Click "Save"'}),"\n"]}),"\n",(0,r.jsxs)(n.ol,{start:"3",children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Create a Data Layer Variable for OneTrust consent groups"}),":"]}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Go to your GTM workspace"}),"\n",(0,r.jsx)(n.li,{children:'Click "Variables" \u2192 "User-Defined Variables" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "dlv-OnetrustActiveGroups"'}),"\n",(0,r.jsx)(n.li,{children:'Variable Type: Select "Data Layer Variable"'}),"\n",(0,r.jsxs)(n.li,{children:["Data Layer Variable Name: ",(0,r.jsx)(n.code,{children:"OnetrustActiveGroups"})]}),"\n",(0,r.jsx)(n.li,{children:'Data Layer Version: Select "Version 2"'}),"\n",(0,r.jsx)(n.li,{children:'Click "Save"'}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["b. ",(0,r.jsx)(n.strong,{children:"Set up triggers"}),":"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Custom-EnableOneTrust-d1"})," trigger:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'Click "Triggers" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "Custom-EnableOneTrust-d1"'}),"\n",(0,r.jsx)(n.li,{children:'Trigger Type: Select "Initialization"'}),"\n",(0,r.jsx)(n.li,{children:'This trigger fires on: "Some Initialization Events"'}),"\n",(0,r.jsxs)(n.li,{children:["Fire this trigger when: ",(0,r.jsx)(n.code,{children:"js-hasOneTrust"})," equals ",(0,r.jsx)(n.code,{children:"true"})," and ",(0,r.jsx)(n.code,{children:"dlv-appEnv"})," matches RegEx ",(0,r.jsx)(n.code,{children:"^(d1|localhost)$"})]}),"\n",(0,r.jsx)(n.li,{children:'Click "Save"'}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Custom-EnableOneTrust-q1"})," trigger:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'Click "Triggers" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "Custom-EnableOneTrust-q1"'}),"\n",(0,r.jsx)(n.li,{children:'Trigger Type: Select "Initialization"'}),"\n",(0,r.jsx)(n.li,{children:'This trigger fires on: "Some Initialization Events"'}),"\n",(0,r.jsxs)(n.li,{children:["Fire this trigger when: ",(0,r.jsx)(n.code,{children:"js-hasOneTrust"})," equals ",(0,r.jsx)(n.code,{children:"true"})," and ",(0,r.jsx)(n.code,{children:"dlv-appEnv"})," equals ",(0,r.jsx)(n.code,{children:"q1"})]}),"\n",(0,r.jsxs)(n.li,{children:['Click "Save"\n',(0,r.jsxs)(n.strong,{children:["Note: Similary create triggers for other environments like ",(0,r.jsx)(n.code,{children:"i1,pl1,s1,uat1 & pr"})," etc."]})]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Custom-EnableGA"})," trigger:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'Click "Triggers" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "Custom-EnableGA"'}),"\n",(0,r.jsx)(n.li,{children:'Trigger Type: Select "Initialization"'}),"\n",(0,r.jsx)(n.li,{children:'This trigger fires on: "Some Initialization Events"'}),"\n",(0,r.jsxs)(n.li,{children:["Fire this trigger when: ",(0,r.jsx)(n.code,{children:"js-hasOneTrust"})," equals ",(0,r.jsx)(n.code,{children:"false"})]}),"\n",(0,r.jsx)(n.li,{children:'Click "Save"'}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"(C0002) Activate Performance"})," trigger:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'Click "Triggers" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "(C0002) Activate Performance"'}),"\n",(0,r.jsx)(n.li,{children:'Trigger Type: Select "Custom Event"'}),"\n",(0,r.jsxs)(n.li,{children:["Event name: ",(0,r.jsx)(n.code,{children:"OneTrustGroupsUpdated"})]}),"\n",(0,r.jsx)(n.li,{children:"Use regex matching: Check this option"}),"\n",(0,r.jsx)(n.li,{children:'This trigger fires on: "Some Custom Events"'}),"\n",(0,r.jsxs)(n.li,{children:["Fire this trigger when: ",(0,r.jsx)(n.code,{children:"dlv-OnetrustActiveGroups"})," matches RegEx ",(0,r.jsx)(n.code,{children:",C0002,"})]}),"\n",(0,r.jsx)(n.li,{children:'Click "Save"'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["c. ",(0,r.jsx)(n.strong,{children:"Create tags"}),":"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OneTrust-Load-d1"})," tag:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Go to your GTM workspace"}),"\n",(0,r.jsx)(n.li,{children:'Click "Tags" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "OneTrust-Load-d1"'}),"\n",(0,r.jsx)(n.li,{children:'Tag Type: Select "Custom HTML"'}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Borrower-facing applications (e.g., ECC)"}),": Paste the OneTrust SDK script with consent control enabled (see ",(0,r.jsx)(n.code,{children:"docs/onetrust-borrower-facing.html"})," for reference template)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Non-borrower-facing applications (e.g., EncompassWeb, TPO)"}),": Paste the OneTrust SDK script with transparency-only mode (see ",(0,r.jsx)(n.code,{children:"docs/onetrust-non-borrower-facing.html"})," for reference template)"]}),"\n",(0,r.jsx)(n.li,{children:'Advanced Settings \u2192 Enable "Support document.write"'}),"\n",(0,r.jsx)(n.li,{children:'Firing Triggers: Select "Custom-EnableOneTrust-d1"'}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"OneTrust-Load-q1"})," tag:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Go to your GTM workspace"}),"\n",(0,r.jsx)(n.li,{children:'Click "Tags" \u2192 "New"'}),"\n",(0,r.jsx)(n.li,{children:'Name it "OneTrust-Load-q1"'}),"\n",(0,r.jsx)(n.li,{children:'Tag Type: Select "Custom HTML"'}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Borrower-facing applications (e.g., ECC)"}),": Paste the OneTrust SDK script with consent control enabled (see ",(0,r.jsx)(n.code,{children:"docs/onetrust-borrower-facing.html"})," for reference template)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Non-borrower-facing applications (e.g., EncompassWeb, TPO)"}),": Paste the OneTrust SDK script with transparency-only mode (see ",(0,r.jsx)(n.code,{children:"docs/onetrust-non-borrower-facing.html"})," for reference template)"]}),"\n",(0,r.jsx)(n.li,{children:'Advanced Settings \u2192 Enable "Support document.write"'}),"\n",(0,r.jsx)(n.li,{children:'Firing Triggers: Select "Custom-EnableOneTrust-q1"'}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"GA4-Config-Load"})," tag:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["if this tag exists, edit it to change the trigger to ",(0,r.jsx)(n.strong,{children:"(C0002) Activate Performance"})," & ",(0,r.jsx)(n.strong,{children:"Custom-EnableGA"})," triggers created above."]}),"\n",(0,r.jsx)(n.li,{children:"save the tag."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["d. ",(0,r.jsx)(n.strong,{children:"Test the integration"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Check whether OneTrust banner appears as expected"}),"\n",(0,r.jsx)(n.li,{children:"Verify that LogRocket initializes and session recording starts only after user consents"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["g. ",(0,r.jsx)(n.strong,{children:"Publish the changes"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Submit the workspace"}),"\n",(0,r.jsx)(n.li,{children:"Add version name/description"}),"\n",(0,r.jsx)(n.li,{children:"Publish to select environments"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Important"}),": The OneTrust script must be added via GTM, not directly in the HTML, to ensure proper consent management and integration with other GTM tags."]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"data-sanitization-in-session-recordings",children:"Data Sanitization in Session Recordings"}),"\n",(0,r.jsx)(n.p,{children:"To protect user privacy during session recording, the following sanitization measures are enforced:"}),"\n",(0,r.jsx)(n.h4,{id:"input-sanitization",children:"Input Sanitization"}),"\n",(0,r.jsx)(n.p,{children:"All form inputs are sanitized using the 'lipsum' method, which replaces actual user input with placeholder text. This prevents:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Password fields from being recorded"}),"\n",(0,r.jsx)(n.li,{children:"Credit card numbers from appearing in recordings"}),"\n",(0,r.jsx)(n.li,{children:"Personal information entered in forms from being captured"}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"text-content-sanitization",children:"Text Content Sanitization"}),"\n",(0,r.jsxs)(n.p,{children:["Text sanitization is enabled by default (",(0,r.jsx)(n.code,{children:"textSanitizer: true"}),") to protect sensitive information displayed on the page. This automatically sanitizes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Text content in HTML elements"}),"\n",(0,r.jsx)(n.li,{children:"Dynamically generated text that may contain PII"}),"\n",(0,r.jsx)(n.li,{children:"Text nodes that could reveal sensitive user data"}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"hidden-attributes",children:"Hidden Attributes"}),"\n",(0,r.jsx)(n.p,{children:"The following ARIA attributes are hidden from session recordings to prevent accessibility-related PII exposure:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"aria-label"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"aria-labelledby"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"aria-describedby"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"aria-details"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"aria-errormessage"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"aria-valuetext"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"aria-placeholder"})}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"url-sanitization",children:"URL Sanitization"}),"\n",(0,r.jsx)(n.p,{children:"Sensitive URL parameters are automatically redacted:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Authorization codes: The standalone ",(0,r.jsx)(n.code,{children:"code"})," query parameter is redacted to ",(0,r.jsx)(n.code,{children:"code=REDACTED"})," (does not affect parameters like ",(0,r.jsx)(n.code,{children:"zipcode"})," or ",(0,r.jsx)(n.code,{children:"promo_code"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["All occurrences of the ",(0,r.jsx)(n.code,{children:"code"})," parameter in the URL are redacted"]}),"\n",(0,r.jsxs)(n.li,{children:["Custom patterns can be added via the ",(0,r.jsx)(n.code,{children:"browser.urlSanitizer"})," configuration"]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"network-sanitization",children:"Network Sanitization"}),"\n",(0,r.jsx)(n.p,{children:"Network requests and responses are sanitized to prevent sensitive data leakage:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Request headers"}),": Authorization headers are replaced with ",(0,r.jsx)(n.code,{children:"**redacted**"})," (case-insensitive matching)"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Request bodies"}),": All request bodies are set to ",(0,r.jsx)(n.code,{children:"null"})," by default"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Response bodies"}),": All response bodies are removed by default"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Custom headers"}),": Headers like ",(0,r.jsx)(n.code,{children:"x-secret"})," trigger complete response removal"]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"testing-and-development",children:"Testing and Development"}),"\n",(0,r.jsxs)(n.p,{children:["For ",(0,r.jsx)(n.strong,{children:"development testing only"}),", session recording consent can be force-enabled using ",(0,r.jsx)(n.code,{children:"window.emui.dangerouslyOverrideSessionRecordingConsent"})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-javascript",children:"window.emui = window.emui || {};\nwindow.emui.dangerouslyOverrideSessionRecordingConsent = true;\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Critical Warnings"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\u26a0\ufe0f This variable is for ",(0,r.jsx)(n.strong,{children:"development testing ONLY"})]}),"\n",(0,r.jsxs)(n.li,{children:["\u26a0\ufe0f ",(0,r.jsx)(n.strong,{children:"NEVER use in production"})," - this bypasses user consent"]}),"\n",(0,r.jsx)(n.li,{children:"\u26a0\ufe0f A warning will be logged when this override is active"}),"\n",(0,r.jsxs)(n.li,{children:["\u26a0\ufe0f Only ",(0,r.jsx)(n.code,{children:"=== true"})," overrides consent. Setting it to ",(0,r.jsx)(n.code,{children:"false"})," (or leaving it unset) is ",(0,r.jsx)(n.strong,{children:"not"})," a force-disable \u2014 the library falls through to OneTrust / ",(0,r.jsx)(n.code,{children:"analyticsConsent"})," URL parameter / iframe ",(0,r.jsx)(n.code,{children:"src"})," parameter, which can still grant consent on their own."]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Use cases"}),": Testing session recording behavior without configuring OneTrust, or forcing recording on/off during local development."]}),"\n",(0,r.jsx)(n.h3,{id:"localhost-development",children:"Localhost Development"}),"\n",(0,r.jsxs)(n.p,{children:["For ",(0,r.jsx)(n.strong,{children:"local development"})," on localhost, LogRocket is disabled by default. You can enable it using either:"]}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Environment Variable"}),": Set ",(0,r.jsx)(n.code,{children:"LOGROCKET_ENABLE_ON_LOCALHOST=true"})," in your ",(0,r.jsx)(n.code,{children:".env"})," file"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Configuration Flag"}),": Set ",(0,r.jsx)(n.code,{children:"window.emui.logRocketConfig.localhostEnable = true"})," before calling ",(0,r.jsx)(n.code,{children:"initLogRocket"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["LogRocket will be enabled on localhost if ",(0,r.jsx)(n.strong,{children:"either"})," the environment variable ",(0,r.jsx)(n.strong,{children:"or"})," the configuration flag is set to ",(0,r.jsx)(n.code,{children:"true"}),"."]}),"\n",(0,r.jsx)(n.h2,{id:"compliance-checklist",children:"Compliance Checklist"}),"\n",(0,r.jsx)(n.h3,{id:"common-requirements-all-applications",children:"Common Requirements (All Applications)"}),"\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Input sanitization verified (all forms use 'lipsum' method)"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Text sanitization enabled (",(0,r.jsx)(n.code,{children:"textSanitizer: true"})," is set)"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","URL sanitization tested for sensitive parameters"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Network request/response sanitization confirmed"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","ARIA attribute hiding validated"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Cross-domain session tracking tested for multi-microapp scenarios (if applicable)"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"borrower-facing-specific-eg-ecc",children:"Borrower-Facing Specific (e.g., ECC)"}),"\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Confirmed application is borrower-facing (consumer-facing)"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","OneTrust integration configured with C0002 and C0003 for consent control"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified OneTrust banner obtains user consent"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified C0002 required for LogRocket initialization"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified C0003 required for session recording (DOM capture)"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified users can opt-out via OneTrust cookie preferences"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","User consent flows tested (accept, decline, change preferences)"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified LogRocket does NOT initialize without C0002"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified LogRocket initializes with C0002 but disables DOM without C0003"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"non-borrower-facing-specific-eg-encompassweb-tpo",children:"Non-Borrower-Facing Specific (e.g., EncompassWeb, TPO)"}),"\n",(0,r.jsxs)(n.ul,{className:"contains-task-list",children:["\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Confirmed application is non-borrower-facing (professional/business user tool)"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","OneTrust banner configured for transparency/disclosure only"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified OneTrust banner does NOT control LogRocket behavior"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified session recording always enabled (",(0,r.jsx)(n.code,{children:"dom.isEnabled: true"}),")"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Confirmed LogRocket initializes regardless of consent state"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Verified users CANNOT opt-out of session recording"]}),"\n",(0,r.jsxs)(n.li,{className:"task-list-item",children:[(0,r.jsx)(n.input,{type:"checkbox",disabled:!0})," ","Users informed about continuous session recording in terms of service"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},6740(e,n,i){i.d(n,{A:()=>s});const s=i.p+"assets/images/cookie-banner-44da75a3249d0545c24f9b735d2fa068.png"},9323(e,n,i){i.d(n,{A:()=>s});const s=i.p+"assets/images/cookie-choices-3b92aafd30e6e586295ab6215b5b177c.png"}}]);