@elliemae/pui-logrocket 1.1.15 → 1.1.17
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 +6 -5
- 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/api/variables/LogRocket/index.html +2 -2
- package/build/docs/assets/images/cookie-choices-3b92aafd30e6e586295ab6215b5b177c.png +0 -0
- package/build/docs/assets/js/04ee7372.ff5b8d05.js +1 -0
- package/build/docs/assets/js/{211c08f1.d133fc82.js → 211c08f1.531a7dab.js} +1 -1
- package/build/docs/assets/js/e376fc56.9f577545.js +1 -0
- package/build/docs/assets/js/{main.2b591930.js → main.aec3bbc3.js} +2 -2
- package/build/docs/assets/js/runtime~main.471e2b2b.js +1 -0
- package/build/docs/compliance/index.html +16 -8
- package/build/docs/index.html +2 -2
- package/build/docs/usage-guide/index.html +18 -6
- package/dist/cjs/logrocket.js +10 -1
- package/dist/esm/logrocket.js +10 -1
- package/dist/public/index.html +1 -1
- package/dist/public/js/{emuiLogrocket.62c31029c170ae19a379.js → emuiLogrocket.f167e4f3fdd07d549011.js} +16 -16
- package/dist/public/js/emuiLogrocket.f167e4f3fdd07d549011.js.br +0 -0
- package/dist/public/js/emuiLogrocket.f167e4f3fdd07d549011.js.gz +0 -0
- package/dist/public/js/emuiLogrocket.f167e4f3fdd07d549011.js.map +1 -0
- package/dist/public/test.js +1 -1
- package/dist/public/test.js.br +0 -0
- package/dist/public/test.js.gz +0 -0
- package/dist/public/test.js.map +1 -1
- package/dist/types/lib/logrocket.d.ts +5 -4
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/umd/index.js +15 -15
- 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/dist/umd/test.js +1 -1
- package/dist/umd/test.js.br +0 -0
- package/dist/umd/test.js.gz +0 -0
- package/dist/umd/test.js.map +1 -1
- package/package.json +1 -1
- package/build/docs/assets/images/cookie-choices-2714be2ea99c6797644dd14b05ba1093.png +0 -0
- package/build/docs/assets/js/04ee7372.ce5efa70.js +0 -1
- package/build/docs/assets/js/e376fc56.f1721c2d.js +0 -1
- package/build/docs/assets/js/runtime~main.9d15ff5d.js +0 -1
- package/dist/public/js/emuiLogrocket.62c31029c170ae19a379.js.br +0 -0
- package/dist/public/js/emuiLogrocket.62c31029c170ae19a379.js.gz +0 -0
- package/dist/public/js/emuiLogrocket.62c31029c170ae19a379.js.map +0 -1
- /package/build/docs/assets/js/{main.2b591930.js.LICENSE.txt → main.aec3bbc3.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";var e,a,r,t,o,c={},d={};function f(e){var a=d[e];if(void 0!==a)return a.exports;var r=d[e]={id:e,loaded:!1,exports:{}};return c[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=c,f.c=d,e=[],f.O=(a,r,t,o)=>{if(!r){var c=1/0;for(b=0;b<e.length;b++){for(var[r,t,o]=e[b],d=!0,n=0;n<r.length;n++)(!1&o||c>=o)&&Object.keys(f.O).every(e=>f.O[e](r[n]))?r.splice(n--,1):(d=!1,o<c&&(c=o));if(d){e.splice(b--,1);var i=t();void 0!==i&&(a=i)}}return a}o=o||0;for(var b=e.length;b>0&&e[b-1][2]>o;b--)e[b]=e[b-1];e[b]=[r,t,o]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var c={};a=a||[null,r({}),r([]),r(r)];for(var d=2&t&&e;("object"==typeof d||"function"==typeof d)&&!~a.indexOf(d);d=r(d))Object.getOwnPropertyNames(d).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,f.d(o,c),o},f.d=(e,a)=>{for(var r in a)f.o(a,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:a[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((a,r)=>(f.f[r](e,a),a),[])),f.u=e=>"assets/js/"+({295:"51c4ceb1",594:"5e8c322a",2076:"common",3361:"c377a04b",3365:"ed616b60",3480:"e376fc56",4319:"211c08f1",4804:"7fcbe1af",5742:"aba21aa0",5754:"acaa8c75",5760:"552a934f",5908:"04ee7372",7098:"a7bd4aaa",8401:"17896441",9048:"a94703ab",9647:"5e95c892"}[e]||e)+"."+{33:"26b2760e",295:"e88fb182",407:"1609258d",459:"0ef6028a",594:"86d2fc4a",638:"a490f71f",654:"d3bf8f92",967:"54c4bee1",1519:"382051d0",1653:"0f512a56",1784:"d8d3eb6f",1945:"f17ce4cb",1991:"7f866f21",2045:"1bebedee",2076:"783bea07",2776:"108cd80f",3038:"002397e7",3070:"7cbc892b",3361:"e8bab181",3365:"5ce87321",3480:"9f577545",3899:"9ba4046a",4319:"531a7dab",4362:"e67b3c91",4804:"57ab9f7e",4860:"aa45023e",4931:"0293910b",5122:"7fe63ad9",5621:"853372b8",5742:"c2c2f2c9",5754:"be91209b",5760:"61bd8d58",5820:"c04e4b12",5908:"ff5b8d05",6409:"6f06126b",6959:"110f49dd",7039:"0493dc3c",7098:"6aa43433",7299:"909bd2d8",7666:"f71add4d",7685:"feb9b2b8",7807:"9aa70b38",7860:"d45cb0c2",7868:"0076697f",7968:"92fc7d89",7997:"2ae474c8",8130:"4423e15c",8182:"16116f9a",8257:"8e164d61",8401:"6f8fb109",8587:"8653f695",8796:"163faa83",8907:"6cf12a5a",9048:"53aa43ca",9176:"d6ec3115",9647:"add994c9",9839:"6a9eb650"}[e]+".js",f.miniCssF=e=>{},f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),t={},o="@elliemae/pui-logrocket:",f.l=(e,a,r,c)=>{if(t[e])t[e].push(a);else{var d,n;if(void 0!==r)for(var i=document.getElementsByTagName("script"),b=0;b<i.length;b++){var l=i[b];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+r){d=l;break}}d||(n=!0,(d=document.createElement("script")).charset="utf-8",f.nc&&d.setAttribute("nonce",f.nc),d.setAttribute("data-webpack",o+r),d.src=e),t[e]=[a];var u=(a,r)=>{d.onerror=d.onload=null,clearTimeout(s);var o=t[e];if(delete t[e],d.parentNode&&d.parentNode.removeChild(d),o&&o.forEach(e=>e(r)),a)return a(r)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),n&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/logrocket/",f.gca=function(e){return e={17896441:"8401","51c4ceb1":"295","5e8c322a":"594",common:"2076",c377a04b:"3361",ed616b60:"3365",e376fc56:"3480","211c08f1":"4319","7fcbe1af":"4804",aba21aa0:"5742",acaa8c75:"5754","552a934f":"5760","04ee7372":"5908",a7bd4aaa:"7098",a94703ab:"9048","5e95c892":"9647"}[e]||e,f.p+f.u(e)},(()=>{var e={5354:0,1869:0};f.f.j=(a,r)=>{var t=f.o(e,a)?e[a]:void 0;if(0!==t)if(t)r.push(t[2]);else if(/^(1869|5354)$/.test(a))e[a]=0;else{var o=new Promise((r,o)=>t=e[a]=[r,o]);r.push(t[2]=o);var c=f.p+f.u(a),d=new Error;f.l(c,r=>{if(f.o(e,a)&&(0!==(t=e[a])&&(e[a]=void 0),t)){var o=r&&("load"===r.type?"missing":r.type),c=r&&r.target&&r.target.src;d.message="Loading chunk "+a+" failed.\n("+o+": "+c+")",d.name="ChunkLoadError",d.type=o,d.request=c,t[1](d)}},"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,r)=>{var t,o,[c,d,n]=r,i=0;if(c.some(a=>0!==e[a])){for(t in d)f.o(d,t)&&(f.m[t]=d[t]);if(n)var b=n(f)}for(a&&a(r);i<c.length;i++)o=c[i],f.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return f.O(b)},r=globalThis.webpackChunk_elliemae_pui_logrocket=globalThis.webpackChunk_elliemae_pui_logrocket||[];r.forEach(a.bind(null,0)),r.push=a.bind(null,r.push.bind(r))})()})();
|
|
@@ -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">Compliance Requirements | 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/compliance"><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="Compliance Requirements | LogRocket"><meta data-rh="true" name="description" content="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,"><meta data-rh="true" property="og:description" content="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,"><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/compliance"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/compliance" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/compliance" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Compliance Requirements","item":"https://pui.ice.com/logrocket/compliance"}]}</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.471e2b2b.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.aec3bbc3.js" defer="defer"></script>
|
|
9
9
|
</head>
|
|
10
10
|
<body class="navigation-with-keyboard">
|
|
11
11
|
<svg style="display: none;"><defs>
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
<h2 class="anchor anchorTargetStickyNavbar_UXZL" id="key-requirements">Key Requirements<a href="#key-requirements" class="hash-link" aria-label="Direct link to Key Requirements" title="Direct link to Key Requirements" translate="no"></a></h2>
|
|
23
23
|
<h3 class="anchor anchorTargetStickyNavbar_UXZL" id="application-types">Application Types<a href="#application-types" class="hash-link" aria-label="Direct link to Application Types" title="Direct link to Application Types" translate="no"></a></h3>
|
|
24
24
|
<p>LogRocket session recording requirements differ based on the application type:</p>
|
|
25
|
-
<table><thead><tr><th>Aspect</th><th>Borrower-Facing (e.g., ECC)</th><th>Non-Borrower-Facing (e.g., EncompassWeb, TPO)</th></tr></thead><tbody><tr><td><strong>OneTrust Banner</strong></td><td>For obtaining user consent</td><td>For transparency/disclosure only</td></tr><tr><td><strong>Consent Required</strong></td><td>Yes - C0002 (init),
|
|
25
|
+
<table><thead><tr><th>Aspect</th><th>Borrower-Facing (e.g., ECC)</th><th>Non-Borrower-Facing (e.g., EncompassWeb, TPO)</th></tr></thead><tbody><tr><td><strong>OneTrust Banner</strong></td><td>For obtaining user consent</td><td>For transparency/disclosure only</td></tr><tr><td><strong>Consent Required</strong></td><td>Yes - C0002 (init), C0003 (recording)</td><td>No - shown for informational purposes</td></tr><tr><td><strong>Session Recording</strong></td><td>Enabled only with C0003 consent</td><td>Always enabled by default</td></tr><tr><td><strong>User Opt-Out</strong></td><td>✅ Can opt-out via OneTrust</td><td>❌ Cannot opt-out</td></tr><tr><td><strong>Target Users</strong></td><td>Consumers/borrowers</td><td>Professional/business users</td></tr></tbody></table>
|
|
26
26
|
<p><strong>Rationale for non-borrower-facing</strong>: Professional applications require continuous session recording for technical troubleshooting, security monitoring, user experience optimization, and compliance requirements.</p>
|
|
27
27
|
<h3 class="anchor anchorTargetStickyNavbar_UXZL" id="consent-matrix-borrower-facing-applications">Consent Matrix (Borrower-Facing Applications)<a href="#consent-matrix-borrower-facing-applications" class="hash-link" aria-label="Direct link to Consent Matrix (Borrower-Facing Applications)" title="Direct link to Consent Matrix (Borrower-Facing Applications)" translate="no"></a></h3>
|
|
28
|
-
<table><thead><tr><th>Feature</th><th>With C0002 Only</th><th>With C0002 +
|
|
28
|
+
<table><thead><tr><th>Feature</th><th>With C0002 Only</th><th>With C0002 + C0003</th><th>Without C0002</th></tr></thead><tbody><tr><td>LogRocket Init</td><td>✅ Initialized</td><td>✅ Initialized</td><td>❌ Not Initialized</td></tr><tr><td>Session Recording (DOM)</td><td>❌ Disabled</td><td>✅ Enabled</td><td>❌ Not Available</td></tr><tr><td>Visual Replay</td><td>❌ Not Available</td><td>✅ Available</td><td>❌ Not Available</td></tr><tr><td>Mouse Movements</td><td>❌ Not Captured</td><td>✅ Captured</td><td>❌ Not Captured</td></tr><tr><td>Clicks & Interactions</td><td>❌ Not Captured</td><td>✅ Captured</td><td>❌ Not Captured</td></tr><tr><td>Page Changes</td><td>❌ Not Captured</td><td>✅ Captured</td><td>❌ Not Captured</td></tr><tr><td>Network Requests</td><td>✅ Captured</td><td>✅ Captured</td><td>❌ Not Captured</td></tr><tr><td>Console Logs</td><td>✅ Captured</td><td>✅ Captured</td><td>❌ Not Captured</td></tr><tr><td>JavaScript Errors</td><td>✅ Captured</td><td>✅ Captured</td><td>❌ Not Captured</td></tr><tr><td>Performance Metrics</td><td>✅ Captured</td><td>✅ Captured</td><td>❌ Not Captured</td></tr><tr><td>Custom Events</td><td>✅ Captured</td><td>✅ Captured</td><td>❌ Not Captured</td></tr></tbody></table>
|
|
29
29
|
<ol>
|
|
30
30
|
<li class="">
|
|
31
31
|
<p><strong>Data Minimization</strong>: Only log data that is necessary for the intended purpose.</p>
|
|
@@ -52,13 +52,21 @@
|
|
|
52
52
|
<p>Sample OneTrust based cookie banner</p>
|
|
53
53
|
<p><img decoding="async" loading="lazy" alt="Cookie Banner" src="/logrocket/assets/images/cookie-banner-44da75a3249d0545c24f9b735d2fa068.png" width="1912" height="1007" class="img_moYf"></p>
|
|
54
54
|
<p>Sample Cookie Choices
|
|
55
|
-
<img decoding="async" loading="lazy" alt="Cookie Choices" src="/logrocket/assets/images/cookie-choices-
|
|
55
|
+
<img decoding="async" loading="lazy" alt="Cookie Choices" src="/logrocket/assets/images/cookie-choices-3b92aafd30e6e586295ab6215b5b177c.png" width="448" height="926" class="img_moYf"></p>
|
|
56
56
|
<h4 class="anchor anchorTargetStickyNavbar_UXZL" id="user-journey-first-visit-no-prior-consent">User Journey: First Visit (No Prior Consent)<a href="#user-journey-first-visit-no-prior-consent" class="hash-link" aria-label="Direct link to User Journey: First Visit (No Prior Consent)" title="Direct link to User Journey: First Visit (No Prior Consent)" translate="no"></a></h4>
|
|
57
57
|
<!-- -->
|
|
58
58
|
<h4 class="anchor anchorTargetStickyNavbar_UXZL" id="user-journey-returning-visit-consent-previously-given">User Journey: Returning Visit (Consent Previously Given)<a href="#user-journey-returning-visit-consent-previously-given" class="hash-link" aria-label="Direct link to User Journey: Returning Visit (Consent Previously Given)" title="Direct link to User Journey: Returning Visit (Consent Previously Given)" translate="no"></a></h4>
|
|
59
59
|
<!-- -->
|
|
60
60
|
<h4 class="anchor anchorTargetStickyNavbar_UXZL" id="consent-check-hierarchy">Consent Check Hierarchy<a href="#consent-check-hierarchy" class="hash-link" aria-label="Direct link to Consent Check Hierarchy" title="Direct link to Consent Check Hierarchy" translate="no"></a></h4>
|
|
61
61
|
<!-- -->
|
|
62
|
+
<p><strong>Priority Order:</strong></p>
|
|
63
|
+
<ol>
|
|
64
|
+
<li class="">Manual override (<code>dangerouslyOverrideSessionRecordingConsent</code>) - <strong>Highest priority</strong></li>
|
|
65
|
+
<li class="">OneTrust consent groups (C0003)</li>
|
|
66
|
+
<li class="">Current window URL parameter (<code>analyticsConsent</code>)</li>
|
|
67
|
+
<li class="">Iframe src URL parameter (<code>analyticsConsent</code>) - <strong>Legacy support for AngularJS microapps</strong></li>
|
|
68
|
+
<li class="">Default (no consent) - <strong>Lowest priority</strong></li>
|
|
69
|
+
</ol>
|
|
62
70
|
<h3 class="anchor anchorTargetStickyNavbar_UXZL" id="onetrust-integration-details">OneTrust Integration Details<a href="#onetrust-integration-details" class="hash-link" aria-label="Direct link to OneTrust Integration Details" title="Direct link to OneTrust Integration Details" translate="no"></a></h3>
|
|
63
71
|
<h4 class="anchor anchorTargetStickyNavbar_UXZL" id="integration-setup-shell-microapp-only">Integration Setup (Shell Microapp Only)<a href="#integration-setup-shell-microapp-only" class="hash-link" aria-label="Direct link to Integration Setup (Shell Microapp Only)" title="Direct link to Integration Setup (Shell Microapp Only)" translate="no"></a></h4>
|
|
64
72
|
<p>OneTrust SDK must be integrated using <strong>Google Tag Manager</strong> as a custom HTML tag:</p>
|
|
@@ -149,14 +157,14 @@
|
|
|
149
157
|
<h3 class="anchor anchorTargetStickyNavbar_UXZL" id="borrower-facing-specific-eg-ecc">Borrower-Facing Specific (e.g., ECC)<a href="#borrower-facing-specific-eg-ecc" class="hash-link" aria-label="Direct link to Borrower-Facing Specific (e.g., ECC)" title="Direct link to Borrower-Facing Specific (e.g., ECC)" translate="no"></a></h3>
|
|
150
158
|
<ul class="contains-task-list containsTaskList_IbxC">
|
|
151
159
|
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Confirmed application is borrower-facing (consumer-facing)</li>
|
|
152
|
-
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->OneTrust integration configured with C0002 and
|
|
160
|
+
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->OneTrust integration configured with C0002 and C0003 for consent control</li>
|
|
153
161
|
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Verified OneTrust banner obtains user consent</li>
|
|
154
162
|
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Verified C0002 required for LogRocket initialization</li>
|
|
155
|
-
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Verified
|
|
163
|
+
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Verified C0003 required for session recording (DOM capture)</li>
|
|
156
164
|
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Verified users can opt-out via OneTrust cookie preferences</li>
|
|
157
165
|
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->User consent flows tested (accept, decline, change preferences)</li>
|
|
158
166
|
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Verified LogRocket does NOT initialize without C0002</li>
|
|
159
|
-
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Verified LogRocket initializes with C0002 but disables DOM without
|
|
167
|
+
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Verified LogRocket initializes with C0002 but disables DOM without C0003</li>
|
|
160
168
|
</ul>
|
|
161
169
|
<h3 class="anchor anchorTargetStickyNavbar_UXZL" id="non-borrower-facing-specific-eg-encompassweb-tpo">Non-Borrower-Facing Specific (e.g., EncompassWeb, TPO)<a href="#non-borrower-facing-specific-eg-encompassweb-tpo" class="hash-link" aria-label="Direct link to Non-Borrower-Facing Specific (e.g., EncompassWeb, TPO)" title="Direct link to Non-Borrower-Facing Specific (e.g., EncompassWeb, TPO)" translate="no"></a></h3>
|
|
162
170
|
<ul class="contains-task-list containsTaskList_IbxC">
|
package/build/docs/index.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">Getting Started | 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/"><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="Getting Started | LogRocket"><meta data-rh="true" name="description" content="UI Platform LogRocket library standardizes the way we integrate LogRocket into our applications."><meta data-rh="true" property="og:description" content="UI Platform LogRocket library standardizes the way we integrate LogRocket into our applications."><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/" hreflang="x-default"><script data-rh="true">function insertBanner(){var n=document.createElement("div");n.id="__docusaurus-base-url-issue-banner-container";n.innerHTML='\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">/logrocket/</span> </p>\n <p>We suggest trying baseUrl = <span id="__docusaurus-base-url-issue-banner-suggestion-container" style="font-weight: bold; color: green;"></span></p>\n</div>\n',document.body.prepend(n);var e=document.getElementById("__docusaurus-base-url-issue-banner-suggestion-container"),o=window.location.pathname,s="/"===o.substr(-1)?o:o+"/";e.innerHTML=s}document.addEventListener("DOMContentLoaded",function(){void 0===window.docusaurus&&insertBanner()})</script><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Getting Started","item":"https://pui.ice.com/logrocket/"}]}</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.471e2b2b.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.aec3bbc3.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">Usage Guide | 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/usage-guide"><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="Usage Guide | LogRocket"><meta data-rh="true" name="description" content="UI Platform LogRocket library standardizes the way we integrate LogRocket into our applications."><meta data-rh="true" property="og:description" content="UI Platform LogRocket library standardizes the way we integrate LogRocket into our applications."><link data-rh="true" rel="icon" href="/logrocket/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/logrocket/usage-guide"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/usage-guide" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/logrocket/usage-guide" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Usage Guide","item":"https://pui.ice.com/logrocket/usage-guide"}]}</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.471e2b2b.js" defer="defer"></script>
|
|
8
|
+
<script src="/logrocket/assets/js/main.aec3bbc3.js" defer="defer"></script>
|
|
9
9
|
</head>
|
|
10
10
|
<body class="navigation-with-keyboard">
|
|
11
11
|
<svg style="display: none;"><defs>
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
</ul>
|
|
59
59
|
</li>
|
|
60
60
|
<li class="">
|
|
61
|
-
<p><strong>Session Recording (
|
|
61
|
+
<p><strong>Session Recording (C0003 - Functional Cookies)</strong>: Controls whether DOM recording is enabled</p>
|
|
62
62
|
<ul>
|
|
63
|
-
<li class="">If
|
|
63
|
+
<li class="">If C0003 is not granted, LogRocket still captures technical data but disables visual session recording</li>
|
|
64
64
|
<li class="">Technical data includes: network requests, console logs, JavaScript errors, performance metrics, and custom events</li>
|
|
65
65
|
</ul>
|
|
66
66
|
</li>
|
|
@@ -83,10 +83,22 @@
|
|
|
83
83
|
<p>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.</p>
|
|
84
84
|
<p><code>buildLogRocketQueryParams</code> function generates URL query parameters that contain following information to share with child micro applications as part of the iframe URL:</p>
|
|
85
85
|
<ul>
|
|
86
|
-
<li class=""><strong><code>analyticsConsent</code></strong>: Set to <code>'true'</code> if user has consented to
|
|
86
|
+
<li class=""><strong><code>analyticsConsent</code></strong>: Set to <code>'true'</code> if user has consented to functional cookies, <code>'false'</code> otherwise</li>
|
|
87
87
|
<li class=""><strong><code>lrEnabled</code></strong>: Set to <code>'true'</code> if LogRocket is enabled in the app, <code>'false'</code> otherwise</li>
|
|
88
88
|
<li class=""><strong><code>lrAppId</code></strong>: The LogRocket application ID being used in the app</li>
|
|
89
89
|
</ul>
|
|
90
|
-
<div class="language-javascript codeBlockContainer_hfT5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7tLg"><pre tabindex="0" class="prism-code language-javascript codeBlock_jGqy thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_reRH"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// parent microapplication</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> buildLogRocketQueryParams </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@elliemae/pui-logrocket'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> urlParams </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">buildLogRocketQueryParams</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// urlParams: "analyticsConsent=true&lrEnabled=true&lrAppId=your-app-id"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> childUrl </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">https://child-app.example.com?</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">urlParams</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// launch guest application with childUrl using SSF V2 / App SDK GuestMicroapp</span><br></span></code></pre></div></div
|
|
90
|
+
<div class="language-javascript codeBlockContainer_hfT5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7tLg"><pre tabindex="0" class="prism-code language-javascript codeBlock_jGqy thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_reRH"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// parent microapplication</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> buildLogRocketQueryParams </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@elliemae/pui-logrocket'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> urlParams </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">buildLogRocketQueryParams</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// urlParams: "analyticsConsent=true&lrEnabled=true&lrAppId=your-app-id"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> childUrl </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string string" style="color:#e3116c">https://child-app.example.com?</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation">urlParams</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// launch guest application with childUrl using SSF V2 / App SDK GuestMicroapp</span><br></span></code></pre></div></div>
|
|
91
|
+
<h3 class="anchor anchorTargetStickyNavbar_UXZL" id="support-for-legacy-angularjs-microapps-in-iframes">Support for Legacy AngularJS Microapps in Iframes<a href="#support-for-legacy-angularjs-microapps-in-iframes" class="hash-link" aria-label="Direct link to Support for Legacy AngularJS Microapps in Iframes" title="Direct link to Support for Legacy AngularJS Microapps in Iframes" translate="no"></a></h3>
|
|
92
|
+
<p>For older AngularJS-based microapplications running inside iframes, the library automatically reads the <code>analyticsConsent</code> parameter from the iframe's <code>src</code> URL. This provides backward compatibility for legacy microapps that cannot directly access parent window variables or URL parameters.</p>
|
|
93
|
+
<p><strong>Consent Check Priority</strong> (from highest to lowest):</p>
|
|
94
|
+
<ol>
|
|
95
|
+
<li class=""><strong>OneTrust consent groups</strong> (when OneTrust is loaded)</li>
|
|
96
|
+
<li class=""><strong>Current window URL</strong> <code>analyticsConsent</code> parameter</li>
|
|
97
|
+
<li class=""><strong>Iframe src URL</strong> <code>analyticsConsent</code> parameter (for legacy support)</li>
|
|
98
|
+
<li class=""><strong>Default</strong>: <code>false</code> (no consent)</li>
|
|
99
|
+
</ol>
|
|
100
|
+
<p>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 <code>analyticsConsent</code> parameter.</p>
|
|
101
|
+
<p><strong>Example for legacy iframe-based microapps:</strong></p>
|
|
102
|
+
<div class="language-javascript codeBlockContainer_hfT5 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_7tLg"><pre tabindex="0" class="prism-code language-javascript codeBlock_jGqy thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_reRH"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// The iframe's src URL will be checked automatically</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// No additional code needed in the child microapp</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token operator" style="color:#393A34"><</span><span class="token plain">iframe src</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"https://legacy-app.com/app?analyticsConsent=true&lrAppId=my-app"</span><span class="token operator" style="color:#393A34">></span><span class="token operator" style="color:#393A34"><</span><span class="token operator" style="color:#393A34">/</span><span class="token plain">iframe</span><span class="token operator" style="color:#393A34">></span><br></span></code></pre></div></div></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_x8Bu"><a href="https://git.elliemae.io/platform-ui/pui-logrocket.git/docs/usage-guide.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_xpf_" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_QUoF"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/logrocket/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Getting Started</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/logrocket/compliance"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Compliance Requirements</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_YLGy thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#initialization" class="table-of-contents__link toc-highlight">Initialization</a><ul><li><a href="#preventing-duplicate-initialization" class="table-of-contents__link toc-highlight">Preventing Duplicate Initialization</a></li><li><a href="#window-variables" class="table-of-contents__link toc-highlight">Window Variables</a></li></ul></li><li><a href="#testing-logrocket-integration-from-localhost" class="table-of-contents__link toc-highlight">Testing LogRocket Integration from Localhost</a><ul><li><a href="#option-1-environment-variable" class="table-of-contents__link toc-highlight">Option 1: Environment Variable</a></li><li><a href="#option-2-configuration-flag" class="table-of-contents__link toc-highlight">Option 2: Configuration Flag</a></li></ul></li><li><a href="#controlling-session-recording-based-on-user-consent" class="table-of-contents__link toc-highlight">Controlling Session Recording Based on User Consent</a><ul><li><a href="#two-level-consent-control" class="table-of-contents__link toc-highlight">Two-Level Consent Control</a></li><li><a href="#overriding-session-recording-consent-check" class="table-of-contents__link toc-highlight">Overriding Session Recording Consent Check</a></li></ul></li><li><a href="#sharing-information-with-child-micro-applications" class="table-of-contents__link toc-highlight">Sharing information with child micro applications</a><ul><li><a href="#support-for-legacy-angularjs-microapps-in-iframes" class="table-of-contents__link toc-highlight">Support for Legacy AngularJS Microapps in Iframes</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/logrocket/">Getting Started</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://icemortgagetechnology.slack.com/archives/C01M49EGP6Z" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_kEbG"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://git.elliemae.io/platform-ui/pui-logrocket.git" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_kEbG"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2025 ICE.</div></div></div></footer></div>
|
|
91
103
|
</body>
|
|
92
104
|
</html>
|
package/dist/cjs/logrocket.js
CHANGED
|
@@ -132,12 +132,21 @@ const hasUserConsentedToSessionRecording = () => {
|
|
|
132
132
|
return window.emui.dangerouslyOverrideSessionRecordingConsent;
|
|
133
133
|
}
|
|
134
134
|
if (window.OnetrustActiveGroups) {
|
|
135
|
-
return window.OnetrustActiveGroups.includes("
|
|
135
|
+
return window.OnetrustActiveGroups.includes("C0003");
|
|
136
136
|
}
|
|
137
137
|
const urlParams = new URLSearchParams(window.location.search);
|
|
138
138
|
if (urlParams.get("analyticsConsent") === "true") {
|
|
139
139
|
return true;
|
|
140
140
|
}
|
|
141
|
+
if (window.frameElement) {
|
|
142
|
+
try {
|
|
143
|
+
const frameUrl = new URL(window.frameElement.src);
|
|
144
|
+
if (frameUrl.searchParams.get("analyticsConsent") === "true") {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
} catch {
|
|
148
|
+
}
|
|
149
|
+
}
|
|
141
150
|
return false;
|
|
142
151
|
};
|
|
143
152
|
const getLRAppId = (appId) => {
|
package/dist/esm/logrocket.js
CHANGED
|
@@ -96,12 +96,21 @@ const hasUserConsentedToSessionRecording = () => {
|
|
|
96
96
|
return window.emui.dangerouslyOverrideSessionRecordingConsent;
|
|
97
97
|
}
|
|
98
98
|
if (window.OnetrustActiveGroups) {
|
|
99
|
-
return window.OnetrustActiveGroups.includes("
|
|
99
|
+
return window.OnetrustActiveGroups.includes("C0003");
|
|
100
100
|
}
|
|
101
101
|
const urlParams = new URLSearchParams(window.location.search);
|
|
102
102
|
if (urlParams.get("analyticsConsent") === "true") {
|
|
103
103
|
return true;
|
|
104
104
|
}
|
|
105
|
+
if (window.frameElement) {
|
|
106
|
+
try {
|
|
107
|
+
const frameUrl = new URL(window.frameElement.src);
|
|
108
|
+
if (frameUrl.searchParams.get("analyticsConsent") === "true") {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
} catch {
|
|
112
|
+
}
|
|
113
|
+
}
|
|
105
114
|
return false;
|
|
106
115
|
};
|
|
107
116
|
const getLRAppId = (appId) => {
|
package/dist/public/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>LogRocket Test</title><script defer="defer" src="js/emuiLogrocket.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>LogRocket Test</title><script defer="defer" src="js/emuiLogrocket.f167e4f3fdd07d549011.js"></script></head><body><h1>LogRocket Test</h1><button id="testButton">Click me</button></body></html>
|