@elliemae/pui-logrocket 1.2.3-alpha.1 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/docs/404.html +2 -2
- package/build/docs/api/functions/buildLogRocketQueryParams/index.html +2 -2
- package/build/docs/api/functions/hasUserConsentedToSessionRecording/index.html +2 -2
- package/build/docs/api/functions/initLogRocket/index.html +2 -2
- package/build/docs/api/index.html +2 -2
- package/build/docs/api/type-aliases/LROptions/index.html +2 -2
- package/build/docs/assets/js/04ee7372.91effd96.js +1 -0
- package/build/docs/assets/js/{7392.9b9efade.js → 6143.8bf840e9.js} +1 -1
- package/build/docs/assets/js/{7666.20fc9126.js → 7666.99e92eb2.js} +2 -2
- package/build/docs/assets/js/e376fc56.609d201b.js +1 -0
- package/build/docs/assets/js/main.7d3be447.js +2 -0
- package/build/docs/assets/js/{runtime~main.92c4c877.js → runtime~main.5e481bc4.js} +1 -1
- package/build/docs/compliance/index.html +2 -2
- package/build/docs/index.html +2 -2
- package/build/docs/usage-guide/index.html +26 -5
- package/dist/cjs/logrocket.js +36 -25
- package/dist/esm/logrocket.js +36 -25
- package/dist/public/index.html +1 -1
- package/dist/public/js/emuiLogrocket.32efbf89608d7f1ff787.js +45 -0
- package/dist/public/js/emuiLogrocket.32efbf89608d7f1ff787.js.br +0 -0
- package/dist/public/js/emuiLogrocket.32efbf89608d7f1ff787.js.gz +0 -0
- package/dist/public/js/emuiLogrocket.32efbf89608d7f1ff787.js.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/umd/index.js +16 -16
- package/dist/umd/index.js.br +0 -0
- package/dist/umd/index.js.gz +0 -0
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -2
- package/build/docs/assets/js/04ee7372.7628802a.js +0 -1
- package/build/docs/assets/js/e376fc56.4c90b364.js +0 -1
- package/build/docs/assets/js/main.01bafb97.js +0 -2
- package/dist/public/js/emuiLogrocket.ce70c014720a1d694f3a.js +0 -45
- package/dist/public/js/emuiLogrocket.ce70c014720a1d694f3a.js.br +0 -0
- package/dist/public/js/emuiLogrocket.ce70c014720a1d694f3a.js.gz +0 -0
- package/dist/public/js/emuiLogrocket.ce70c014720a1d694f3a.js.map +0 -1
- /package/build/docs/assets/js/{7666.20fc9126.js.LICENSE.txt → 7666.99e92eb2.js.LICENSE.txt} +0 -0
- /package/build/docs/assets/js/{main.01bafb97.js.LICENSE.txt → main.7d3be447.js.LICENSE.txt} +0 -0
package/build/docs/404.html
CHANGED
|
@@ -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.
|
|
8
|
-
<script src="/logrocket/assets/js/main.
|
|
7
|
+
<script src="/logrocket/assets/js/runtime~main.5e481bc4.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.7d3be447.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.
|
|
8
|
-
<script src="/logrocket/assets/js/main.
|
|
7
|
+
<script src="/logrocket/assets/js/runtime~main.5e481bc4.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.7d3be447.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.
|
|
8
|
-
<script src="/logrocket/assets/js/main.
|
|
7
|
+
<script src="/logrocket/assets/js/runtime~main.5e481bc4.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.7d3be447.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">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.
|
|
8
|
-
<script src="/logrocket/assets/js/main.
|
|
7
|
+
<script src="/logrocket/assets/js/runtime~main.5e481bc4.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.7d3be447.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.
|
|
8
|
-
<script src="/logrocket/assets/js/main.
|
|
7
|
+
<script src="/logrocket/assets/js/runtime~main.5e481bc4.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.7d3be447.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.
|
|
8
|
-
<script src="/logrocket/assets/js/main.
|
|
7
|
+
<script src="/logrocket/assets/js/runtime~main.5e481bc4.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.7d3be447.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,i,n){n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>l,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>a});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=n(6070),s=n(116);const r={sidebar_position:2},l="Usage Guide",c={},a=[{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:"How It Works",id:"how-it-works",level:3},{value:"CDN Domain Detection",id:"cdn-domain-detection",level:3},{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 Event-Based Integration",id:"onetrust-event-based-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:"Parent Domain Resolution in the Child",id:"parent-domain-resolution-in-the-child",level:3},{value:"Support for Legacy AngularJS Microapps in Iframes",id:"support-for-legacy-angularjs-microapps-in-iframes",level:3}];function d(e){const i={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)(i.header,{children:(0,t.jsx)(i.h1,{id:"usage-guide",children:"Usage Guide"})}),"\n",(0,t.jsx)(i.p,{children:"UI Platform LogRocket library standardizes the way we integrate LogRocket into our applications."}),"\n",(0,t.jsx)(i.h2,{id:"initialization",children:"Initialization"}),"\n",(0,t.jsxs)(i.p,{children:["To initialize LogRocket using the UI Platform LogRocket library, you can use the ",(0,t.jsx)(i.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)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-javascript",children:"import { initLogRocket } from '@elliemae/pui-logrocket';\n\ninitLogRocket({ appId: 'logrocket-app-id' });\n"})}),"\n",(0,t.jsxs)(i.p,{children:["Replace ",(0,t.jsx)(i.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)(i.h3,{id:"preventing-duplicate-initialization",children:"Preventing Duplicate Initialization"}),"\n",(0,t.jsxs)(i.p,{children:["The library automatically prevents multiple calls to ",(0,t.jsx)(i.code,{children:"initLogRocket"})," from re-initializing LogRocket. When ",(0,t.jsx)(i.code,{children:"initLogRocket"})," is called for the first time, it sets ",(0,t.jsx)(i.code,{children:"window.emui.isLogRocketInitialized"})," to ",(0,t.jsx)(i.code,{children:"true"}),". Subsequent calls to ",(0,t.jsx)(i.code,{children:"initLogRocket"})," will detect this flag and return early without re-initializing LogRocket."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-javascript",children:"import { initLogRocket } from '@elliemae/pui-logrocket';\n\n// First call - initializes LogRocket\ninitLogRocket({ appId: 'logrocket-app-id' });\n\n// Second call - returns early, does not re-initialize\ninitLogRocket({ appId: 'logrocket-app-id' });\n"})}),"\n",(0,t.jsx)(i.p,{children:"This is particularly useful in micro-frontend architectures where multiple modules might attempt to initialize LogRocket. The flag ensures that LogRocket is only initialized once per page load."}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"Note"}),": The ",(0,t.jsx)(i.code,{children:"isLogRocketInitialized"})," flag is only set to ",(0,t.jsx)(i.code,{children:"false"})," if it is ",(0,t.jsx)(i.code,{children:"undefined"}),". If the flag is already set (to ",(0,t.jsx)(i.code,{children:"true"})," or ",(0,t.jsx)(i.code,{children:"false"}),"), its value is preserved. This allows applications to control the initialization state if needed."]}),"\n",(0,t.jsx)(i.h3,{id:"window-variables",children:"Window Variables"}),"\n",(0,t.jsxs)(i.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)(i.code,{children:"initLogRocket"})," call."]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"window.emui.logRocketConfig"})}),": The main LogRocket configuration object."]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"This object has following properties:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"appId"})," (string): LogRocket application ID allocated to the product."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"enable"})," (boolean): Flag to enable or disable LogRocket in the microapp. Defaults to ",(0,t.jsx)(i.code,{children:"true"}),". If set to ",(0,t.jsx)(i.code,{children:"false"}),", LogRocket will not be initialized even if ",(0,t.jsx)(i.code,{children:"initLogRocket"})," is called. This can be useful for disabling LogRocket in certain environments (e.g., development or staging)."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"localhostEnable"})," (boolean): Flag to enable LogRocket when running on localhost. Defaults to ",(0,t.jsx)(i.code,{children:"false"}),". When set to ",(0,t.jsx)(i.code,{children:"true"}),", LogRocket will be enabled on localhost even if the ",(0,t.jsx)(i.code,{children:"LOGROCKET_ENABLE_ON_LOCALHOST"})," environment variable is not set. This is useful for local development and testing."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.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)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Default:"})," the library always includes the current origin, so same-origin children stitch automatically with no configuration."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Set this when:"})," the page is a parent that embeds ",(0,t.jsx)(i.strong,{children:"cross-origin"})," guest microapps (e.g. ",(0,t.jsx)(i.code,{children:"https://app.ice.com"})," embedding ",(0,t.jsx)(i.code,{children:"https://guest.example.com"}),"). List each cross-origin child origin."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Format:"})," array of full origins including protocol (e.g. ",(0,t.jsx)(i.code,{children:"['https://guest.example.com']"}),"). Bare hostnames, URLs with paths, and non-array values are dropped with a warning."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Note:"})," the caller's array is merged with the current origin (it cannot be removed). Children themselves don't set this option \u2014 they need ",(0,t.jsx)(i.code,{children:"parentDomain"})," (normally auto-detected). Both sides must be configured for cross-origin linking to work."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"parentDomain"})," (string, optional): Origin of the page that embeds this one. Used by LogRocket for ",(0,t.jsx)(i.code,{children:"postMessage"}),"-based session linking between cross-origin frames.","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Default:"})," auto-detected from (1) the ",(0,t.jsx)(i.code,{children:"lrParentOrigin"})," query parameter set by the parent via ",(0,t.jsx)(i.code,{children:"buildLogRocketQueryParams"}),", (2) ",(0,t.jsx)(i.code,{children:"window.parent.location.origin"})," for same-origin parents, or (3) ",(0,t.jsx)(i.code,{children:"document.referrer"}),". This covers most embed scenarios when the parent uses ",(0,t.jsx)(i.code,{children:"buildLogRocketQueryParams"}),"."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Set this when:"})," the parent is cross-origin, does ",(0,t.jsx)(i.strong,{children:"not"})," call ",(0,t.jsx)(i.code,{children:"buildLogRocketQueryParams"}),", and your ",(0,t.jsx)(i.code,{children:"Referrer-Policy"})," strips ",(0,t.jsx)(i.code,{children:"document.referrer"}),". In that case auto-detection returns ",(0,t.jsx)(i.code,{children:"null"})," and you must supply the parent origin yourself."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Format:"})," a full origin (e.g. ",(0,t.jsx)(i.code,{children:"https://parent.example.com"}),"). Bare hostnames or URLs with paths are dropped with a warning."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Note:"})," do not set this on a top-level page (no real parent). The validator only checks origin shape; on a top-level page a valid override tells LogRocket to wait on a parent that doesn't exist and stalls session start."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"rootHostname"})," (string, optional): Cookie scope for stitching sessions across subdomains of the ",(0,t.jsx)(i.strong,{children:"same site"})," (see ",(0,t.jsx)(i.a,{href:"https://docs.logrocket.com/reference/roothostname",children:"LogRocket docs"}),").","\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Default:"})," auto-detected as ",(0,t.jsx)(i.code,{children:".<last two hostname segments>"})," (e.g. ",(0,t.jsx)(i.code,{children:"beta.encompass.ice.com"})," \u2192 ",(0,t.jsx)(i.code,{children:".ice.com"}),"). Same-site iframes converge on the same value automatically."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Set this when:"})," you want to ",(0,t.jsx)(i.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)(i.code,{children:".beta.ice.com"})," on ",(0,t.jsx)(i.code,{children:"app.beta.ice.com"})," to keep beta sessions isolated from prod)."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Format:"})," must start with ",(0,t.jsx)(i.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)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Note:"})," cross-",(0,t.jsx)(i.strong,{children:"site"})," frame linking is handled by ",(0,t.jsx)(i.code,{children:"parentDomain"}),"/",(0,t.jsx)(i.code,{children:"childDomains"}),", not this option."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"proxying-logrocket-calls-through-cdn-domain",children:"Proxying LogRocket Calls Through CDN Domain"}),"\n",(0,t.jsxs)(i.p,{children:["By default, all LogRocket network traffic (script loading and data ingestion) is proxied through the UI Platform CDN domain (",(0,t.jsx)(i.code,{children:"cdn.mortgagetech.*.ice.com"}),") instead of LogRocket's own servers. This improves ad-blocker resilience since requests to first-party domains are less likely to be blocked, and ensures compliance with network policies in environments that restrict traffic to known internal domains."]}),"\n",(0,t.jsx)(i.h3,{id:"how-it-works",children:"How It Works"}),"\n",(0,t.jsxs)(i.p,{children:["When the library detects it was loaded from a matching CDN domain (e.g., ",(0,t.jsx)(i.code,{children:"cdn.mortgagetech.d1.ice.com"}),"), it automatically:"]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:["Sets ",(0,t.jsx)(i.code,{children:"window._lrAsyncScript"})," to load the LogRocket logger script from the CDN domain instead of LogRocket's default CDN"]}),"\n",(0,t.jsxs)(i.li,{children:["Sets ",(0,t.jsx)(i.code,{children:"ingestServer"})," to the CDN domain so all LogRocket data ingestion calls are routed through it"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"The CDN domain is auto-detected from the script source URL. For example, if the library is loaded via:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-html",children:'<script src="https://cdn.mortgagetech.d1.ice.com/logrocket/logrocket.umd.js"><\/script>\n'})}),"\n",(0,t.jsxs)(i.p,{children:["All LogRocket traffic will be proxied through ",(0,t.jsx)(i.code,{children:"https://cdn.mortgagetech.d1.ice.com"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"cdn-domain-detection",children:"CDN Domain Detection"}),"\n",(0,t.jsx)(i.p,{children:"The library resolves the CDN domain using the following precedence:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"window.emui.cdnDomain"})})," \u2014 if set before the library loads, this value is used directly"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Script source URL"})," \u2014 if the script was loaded from a URL matching ",(0,t.jsx)(i.code,{children:"cdn.mortgagetech.*.ice.com"})," or ",(0,t.jsx)(i.code,{children:"localhost"}),", the origin is extracted automatically"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Default fallback"})," \u2014 ",(0,t.jsx)(i.code,{children:"https://cdn.mortgagetech.ice.com"})," is used when ",(0,t.jsx)(i.code,{children:"window.emui.cdnDomain"})," is not set and no script source is detected"]}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["When loaded from ",(0,t.jsx)(i.code,{children:"localhost"}),", the CDN domain falls back to ",(0,t.jsx)(i.code,{children:"https://cdn.mortgagetech.d1.ice.com"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"setting-cdn-domain-for-bundled-npm-usage",children:"Setting CDN Domain for Bundled (npm) Usage"}),"\n",(0,t.jsxs)(i.p,{children:["If the library is loaded as an npm package (e.g., via ",(0,t.jsx)(i.code,{children:"import"})," in a bundled application) rather than from the CDN, the script source URL won't match the CDN pattern and auto-detection won't work. In this case, you must set ",(0,t.jsx)(i.code,{children:"window.emui.cdnDomain"})," to the correct CDN environment before the library loads:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-javascript",children:"window.emui = window.emui || {};\nwindow.emui.cdnDomain = 'https://cdn.mortgagetech.q1.ice.com'; // use the CDN domain for your environment (d1, q1, etc.)\n"})}),"\n",(0,t.jsx)(i.h3,{id:"verifying-proxying-in-browser-devtools",children:"Verifying Proxying in Browser DevTools"}),"\n",(0,t.jsxs)(i.p,{children:["To confirm that LogRocket traffic is being proxied through the CDN domain, open your browser's DevTools ",(0,t.jsx)(i.strong,{children:"Network"})," tab and look for:"]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Script loading"})," \u2014 a request to ",(0,t.jsx)(i.code,{children:"https://cdn.mortgagetech.<env>.ice.com/logrocket/logger-1.min.js"})," instead of LogRocket's default CDN (",(0,t.jsx)(i.code,{children:"cdn.lr-in-prod.com"}),")"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Data ingestion"})," \u2014 subsequent requests (XHR/Fetch) going to ",(0,t.jsx)(i.code,{children:"https://cdn.mortgagetech.<env>.ice.com/i?..."})," instead of ",(0,t.jsx)(i.code,{children:"r.lr-in-prod.com"})]}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["If you see requests going to ",(0,t.jsx)(i.code,{children:"cdn.lr-in-prod.com"})," or ",(0,t.jsx)(i.code,{children:"r.lr-in-prod.com"}),", proxying is not active. Verify that ",(0,t.jsx)(i.code,{children:"window.emui.cdnDomain"})," is set correctly or that the library is being loaded from the CDN."]}),"\n",(0,t.jsx)(i.h2,{id:"testing-logrocket-integration-from-localhost",children:"Testing LogRocket Integration from Localhost"}),"\n",(0,t.jsx)(i.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)(i.h3,{id:"option-1-environment-variable",children:"Option 1: Environment Variable"}),"\n",(0,t.jsxs)(i.p,{children:["Set the environment variable ",(0,t.jsx)(i.code,{children:"LOGROCKET_ENABLE_ON_LOCALHOST"})," to ",(0,t.jsx)(i.code,{children:"true"}),". If you are using a ",(0,t.jsx)(i.code,{children:".env"})," file, add the following line:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-txt",children:"LOGROCKET_ENABLE_ON_LOCALHOST=true\n"})}),"\n",(0,t.jsx)(i.h3,{id:"option-2-configuration-flag",children:"Option 2: Configuration Flag"}),"\n",(0,t.jsxs)(i.p,{children:["Set the ",(0,t.jsx)(i.code,{children:"window.emui.logRocketConfig.localhostEnable"})," flag to ",(0,t.jsx)(i.code,{children:"true"})," before calling ",(0,t.jsx)(i.code,{children:"initLogRocket"}),":"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.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)(i.p,{children:["LogRocket will be enabled on localhost if ",(0,t.jsx)(i.strong,{children:"either"})," the environment variable ",(0,t.jsx)(i.strong,{children:"or"})," the configuration flag is set to ",(0,t.jsx)(i.code,{children:"true"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"controlling-session-recording-based-on-user-consent",children:"Controlling Session Recording Based on User Consent"}),"\n",(0,t.jsx)(i.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)(i.h3,{id:"two-level-consent-control",children:"Two-Level Consent Control"}),"\n",(0,t.jsx)(i.p,{children:"The library implements a two-level consent control system:"}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"LogRocket Initialization (C0002 - Performance Cookies)"}),": Controls whether LogRocket is initialized at all"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"If C0002 is not granted, LogRocket will not initialize"}),"\n",(0,t.jsx)(i.li,{children:"When OneTrust is not loaded, LogRocket initializes by default"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:["\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"Session Recording (C0003 - Functional Cookies)"}),": Controls whether DOM recording is enabled"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"If C0003 is not granted, LogRocket still captures technical data but disables visual session recording"}),"\n",(0,t.jsx)(i.li,{children:"Technical data includes: network requests, console logs, JavaScript errors, performance metrics, and custom events"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.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)(i.h3,{id:"onetrust-event-based-integration",children:"OneTrust Event-Based Integration"}),"\n",(0,t.jsx)(i.p,{children:"The library uses OneTrust's event system to determine when to initialize LogRocket based on the user's consent banner state:"}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"First-time visitors"})," (no ",(0,t.jsx)(i.code,{children:"OptanonAlertBoxClosed"})," cookie):"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["The library first checks if the C0002 consent group is already active in ",(0,t.jsx)(i.code,{children:"window.OnetrustActiveGroups"})]}),"\n",(0,t.jsx)(i.li,{children:"If C0002 is already present (non-rejectable, as in internal apps like EncompassWeb/TPO), LogRocket initializes immediately without waiting for banner interaction"}),"\n",(0,t.jsxs)(i.li,{children:["If C0002 is not yet active, the library listens for the ",(0,t.jsx)(i.code,{children:"OTConsentApplied"})," event, which fires when the user first interacts with the consent banner (Accept/Decline)"]}),"\n",(0,t.jsx)(i.li,{children:"LogRocket initializes immediately after the user makes their choice"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"Returning visitors"})," (has ",(0,t.jsx)(i.code,{children:"OptanonAlertBoxClosed"})," cookie):"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["The library listens for the ",(0,t.jsx)(i.code,{children:"OneTrustGroupsUpdated"})," event"]}),"\n",(0,t.jsx)(i.li,{children:"This event fires when OneTrust SDK loads and updates the consent groups"}),"\n",(0,t.jsx)(i.li,{children:"LogRocket initializes once the consent groups are available"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"Timeout fallback"}),":"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["If the expected OneTrust event (",(0,t.jsx)(i.code,{children:"OTConsentApplied"})," or ",(0,t.jsx)(i.code,{children:"OneTrustGroupsUpdated"}),") is not received within 10 seconds, the library initializes LogRocket with the current consent state and logs a warning"]}),"\n",(0,t.jsx)(i.li,{children:"This prevents LogRocket from being permanently blocked if the OneTrust SDK fails to load or fire events"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"Init failure recovery"}),":"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:["If LogRocket initialization fails (e.g., due to a network error or invalid configuration), the ",(0,t.jsx)(i.code,{children:"isLogRocketInitialized"})," flag is reset to ",(0,t.jsx)(i.code,{children:"false"}),", allowing a retry on the next call to ",(0,t.jsx)(i.code,{children:"initLogRocket"})]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"This event-based approach ensures that:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"LogRocket only initializes when consent status is available"}),"\n",(0,t.jsx)(i.li,{children:"Internal apps with non-rejectable consent groups initialize immediately"}),"\n",(0,t.jsx)(i.li,{children:"First-time users of consumer apps see immediate feedback when they consent"}),"\n",(0,t.jsx)(i.li,{children:"Returning users get automatic initialization without re-showing the banner"}),"\n",(0,t.jsx)(i.li,{children:"The integration is resilient to OneTrust SDK failures via the timeout fallback"}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:"The library automatically applies privacy-focused defaults including:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:"Input sanitization using 'lipsum' method for all form inputs"}),"\n",(0,t.jsxs)(i.li,{children:["Text sanitization to protect sensitive text content (",(0,t.jsx)(i.code,{children:"textSanitizer: true"}),")"]}),"\n",(0,t.jsx)(i.li,{children:"Hidden ARIA attributes to prevent accessibility-related PII exposure"}),"\n",(0,t.jsx)(i.li,{children:"Network request/response body sanitization"}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["You can read more about the compliance features and data sanitization measures in the ",(0,t.jsx)(i.a,{href:"/logrocket/compliance",children:"Compliance Guide"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"overriding-session-recording-consent-check",children:"Overriding Session Recording Consent Check"}),"\n",(0,t.jsxs)(i.p,{children:["During local development, you may want to enable session recording regardless of the user's consent status from OneTrust. You can do this by setting the ",(0,t.jsx)(i.code,{children:"window.emui.dangerouslyOverrideSessionRecordingConsent"})," property to ",(0,t.jsx)(i.code,{children:"true"})," before calling the ",(0,t.jsx)(i.code,{children:"initLogRocket"})," function."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-javascript",children:"// root microapplication\nwindow.emui = window.emui || {};\nwindow.emui.dangerouslyOverrideSessionRecordingConsent = true;\nimport { initLogRocket } from '@elliemae/pui-logrocket';\ninitLogRocket({ appId: 'logrocket-app-id' });\n"})}),"\n",(0,t.jsxs)(i.p,{children:["This will force session recording to be enabled, even if the user has not consented to analytics tracking in OneTrust. ",(0,t.jsx)(i.strong,{children:"Use this option with caution, as it may have compliance implications. This option should only be used for local development and testing purposes."})," A warning will be logged when this override is active."]}),"\n",(0,t.jsx)(i.h2,{id:"sharing-information-with-child-micro-applications",children:"Sharing information with child micro applications"}),"\n",(0,t.jsxs)(i.p,{children:["LogRocket integration happens at each micro application level. To ensure that parent micro applications has control over LogRocket configuration in child micro applications (e.g., iframes), this library provides a utility function ",(0,t.jsx)(i.code,{children:"buildLogRocketQueryParams"})," to share LogRocket & user consent related configuration information via URL query parameters."]}),"\n",(0,t.jsx)(i.p,{children:"This also allows interoperable child micro applications to work with different parent micro application (Encompass, TPO etc.,) without requiring any hardcoded LogRocket configuration in the child micro applications."}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.code,{children:"buildLogRocketQueryParams"})," function generates URL query parameters that contain following information to share with child micro applications as part of the iframe URL:"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"analyticsConsent"})}),": Set to ",(0,t.jsx)(i.code,{children:"'true'"})," if user has consented to functional cookies, ",(0,t.jsx)(i.code,{children:"'false'"})," otherwise"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"lrEnabled"})}),": Set to ",(0,t.jsx)(i.code,{children:"'true'"})," if LogRocket is enabled in the app, ",(0,t.jsx)(i.code,{children:"'false'"})," otherwise"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"lrAppId"})}),": The LogRocket application ID being used in the app"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"lrParentOrigin"})}),": The parent window's ",(0,t.jsx)(i.code,{children:"origin"})," (e.g. ",(0,t.jsx)(i.code,{children:"https://parent-app.example.com"}),"). The child reads this to populate LogRocket's ",(0,t.jsx)(i.code,{children:"parentDomain"})," option, which is required for ",(0,t.jsx)(i.code,{children:"postMessage"}),"-based session linking between cross-origin frames. This avoids relying on ",(0,t.jsx)(i.code,{children:"window.parent.location.origin"})," (blocked cross-origin) or ",(0,t.jsx)(i.code,{children:"document.referrer"})," (often stripped by ",(0,t.jsx)(i.code,{children:"Referrer-Policy"}),"). Only consumed when the value is a valid origin; tampered values are ignored."]}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"Important"}),": After ",(0,t.jsx)(i.code,{children:"initLogRocket"})," completes, ",(0,t.jsx)(i.code,{children:"buildLogRocketQueryParams"})," returns the consent and enabled state captured at initialization time (stored in ",(0,t.jsx)(i.code,{children:"window.emui.lrSessionRecordingConsent"})," and ",(0,t.jsx)(i.code,{children:"window.emui.lrEnabled"}),"). This ensures child iframes always reflect the parent app's actual initialization state, even if the user changes consent preferences after initialization. If called before ",(0,t.jsx)(i.code,{children:"initLogRocket"}),", it evaluates the current live state as a fallback."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-javascript",children:"// parent microapplication\nimport { buildLogRocketQueryParams } from '@elliemae/pui-logrocket';\n\nconst urlParams = buildLogRocketQueryParams();\n// urlParams: \"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)(i.h3,{id:"parent-domain-resolution-in-the-child",children:"Parent Domain Resolution in the Child"}),"\n",(0,t.jsxs)(i.p,{children:["The child uses the following precedence to resolve LogRocket's ",(0,t.jsx)(i.code,{children:"parentDomain"})," option (used for cross-origin postMessage session linking):"]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"lrParentOrigin"})})," query parameter on the child's URL (or on ",(0,t.jsx)(i.code,{children:"window.frameElement.src"}),") \u2014 set by the parent via ",(0,t.jsx)(i.code,{children:"buildLogRocketQueryParams"}),". This is the only source that works reliably cross-origin and should be the primary mechanism."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"window.parent.location.origin"})})," \u2014 works only when the parent is same-origin."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:(0,t.jsx)(i.code,{children:"document.referrer"})})," \u2014 best-effort fallback; may be stripped by ",(0,t.jsx)(i.code,{children:"Referrer-Policy"})," to an opaque value or empty string."]}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["A self-referential value (the resolved origin equals the child's own origin) is suppressed ",(0,t.jsx)(i.strong,{children:"only when the page is top-level"})," (",(0,t.jsx)(i.code,{children:"window === window.top"}),"); on a true top-level page there is no real parent and pointing LogRocket at itself would block session start. When the page is running inside an iframe, the resolved value is kept even if it matches the child's own origin so same-origin children can still link to their parent's session. If no source produces a valid origin, ",(0,t.jsx)(i.code,{children:"parentDomain"})," is left unset and LogRocket treats the page as top-level."]}),"\n",(0,t.jsx)(i.h3,{id:"support-for-legacy-angularjs-microapps-in-iframes",children:"Support for Legacy AngularJS Microapps in Iframes"}),"\n",(0,t.jsxs)(i.p,{children:["For older AngularJS-based microapplications running inside iframes, the library automatically reads the ",(0,t.jsx)(i.code,{children:"analyticsConsent"})," parameter from the iframe's ",(0,t.jsx)(i.code,{children:"src"})," URL. This provides backward compatibility for legacy microapps that cannot directly access parent window variables or URL parameters."]}),"\n",(0,t.jsxs)(i.p,{children:[(0,t.jsx)(i.strong,{children:"Consent Check Priority"})," (from highest to lowest):"]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"OneTrust consent groups"})," (when OneTrust is loaded)"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Current window URL"})," ",(0,t.jsx)(i.code,{children:"analyticsConsent"})," parameter"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Iframe src URL"})," ",(0,t.jsx)(i.code,{children:"analyticsConsent"})," parameter (for legacy support)"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Default"}),": ",(0,t.jsx)(i.code,{children:"false"})," (no consent)"]}),"\n"]}),"\n",(0,t.jsxs)(i.p,{children:["This means if a microapp is running in an iframe and OneTrust is not available, it will check its own URL first, then fall back to checking the iframe element's src attribute for the ",(0,t.jsx)(i.code,{children:"analyticsConsent"})," parameter."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.strong,{children:"Example for legacy iframe-based microapps:"})}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-javascript",children:'// The iframe\'s src URL will be checked automatically\n// No additional code needed in the child microapp\n<iframe src="https://legacy-app.com/app?analyticsConsent=true&lrAppId=my-app"></iframe>\n'})})]})}function h(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}}}]);
|