@salesforce/lightning-out 2.2.7-rc.3 → 2.2.7

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/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! @salesforce/lightning-out v2.2.7-rc.3 (2026-09-20) */
1
+ /*! @salesforce/lightning-out v2.2.7 (2026-09-21) */
2
2
  /**
3
3
  * Numeric ranks for {@link LogLevel}; lower values are more severe.
4
4
  */
@@ -514,6 +514,9 @@ class LightningOutIFrame {
514
514
  get iframeElement() {
515
515
  return this.#element;
516
516
  }
517
+ isTrustedMessage(event) {
518
+ return this.iframeReady && event.source === this.#window && event.origin === this.#origin;
519
+ }
517
520
  #config(window, origin) {
518
521
  this.#window = window;
519
522
  this.#origin = origin;
@@ -1220,6 +1223,11 @@ class LightningOutComponent extends HTMLElement {
1220
1223
  }
1221
1224
  }
1222
1225
  #messageListener = (event) => {
1226
+ if (!this.#loIFrame.isTrustedMessage(event)) {
1227
+ // Reject messages that do not originate from the iframe we've handshaked with.
1228
+ logger$1.debug("#messageListener: rejected untrusted source/origin", `_uuid: ${this._uuid}`, `origin: ${event.origin}`);
1229
+ return;
1230
+ }
1223
1231
  if (event.data.id !== this._uuid) {
1224
1232
  // Ignore messages that are not meant to be received by this instance.
1225
1233
  return;
@@ -1513,7 +1521,7 @@ class LightningOutRouter {
1513
1521
  url.searchParams.set("parentElementId", parentElementId);
1514
1522
  url.searchParams.set("loAppOrigin", this.config.loAppOrigin);
1515
1523
  // This helps in general but also for cache busting
1516
- url.searchParams.set("loVersion", "2.2.7-rc.3");
1524
+ url.searchParams.set("loVersion", "2.2.7");
1517
1525
  if (this.config.appId) {
1518
1526
  url.searchParams.set("appId", this.config.appId);
1519
1527
  }
@@ -1,4 +1,4 @@
1
- /*! @salesforce/lightning-out v2.2.7-rc.3 (2026-09-20) */
1
+ /*! @salesforce/lightning-out v2.2.7 (2026-09-21) */
2
2
  var LO2 = (function (exports) {
3
3
  'use strict';
4
4
 
@@ -517,6 +517,9 @@ var LO2 = (function (exports) {
517
517
  get iframeElement() {
518
518
  return this.#element;
519
519
  }
520
+ isTrustedMessage(event) {
521
+ return this.iframeReady && event.source === this.#window && event.origin === this.#origin;
522
+ }
520
523
  #config(window, origin) {
521
524
  this.#window = window;
522
525
  this.#origin = origin;
@@ -1223,6 +1226,11 @@ var LO2 = (function (exports) {
1223
1226
  }
1224
1227
  }
1225
1228
  #messageListener = (event) => {
1229
+ if (!this.#loIFrame.isTrustedMessage(event)) {
1230
+ // Reject messages that do not originate from the iframe we've handshaked with.
1231
+ logger$1.debug("#messageListener: rejected untrusted source/origin", `_uuid: ${this._uuid}`, `origin: ${event.origin}`);
1232
+ return;
1233
+ }
1226
1234
  if (event.data.id !== this._uuid) {
1227
1235
  // Ignore messages that are not meant to be received by this instance.
1228
1236
  return;
@@ -1516,7 +1524,7 @@ var LO2 = (function (exports) {
1516
1524
  url.searchParams.set("parentElementId", parentElementId);
1517
1525
  url.searchParams.set("loAppOrigin", this.config.loAppOrigin);
1518
1526
  // This helps in general but also for cache busting
1519
- url.searchParams.set("loVersion", "2.2.7-rc.3");
1527
+ url.searchParams.set("loVersion", "2.2.7");
1520
1528
  if (this.config.appId) {
1521
1529
  url.searchParams.set("appId", this.config.appId);
1522
1530
  }
@@ -1,10 +1,10 @@
1
- /*! @salesforce/lightning-out v2.2.7-rc.3 (2026-09-20) */
2
- var LO2=function(e){"use strict";const t={error:0,warn:1,info:2,debug:3,trace:4};class i{static#e="LO2";static#t="error";#i;static set level(e){this.#t=e}static set prefix(e){this.#e=e}get brand(){return`${i.#e}:${this.#i}:`}constructor(e){this.#i="string"==typeof e?e:e.constructor?.name}error(...e){t.error<=t[i.#t]&&console.error(this.brand,...e)}warn(...e){t.warn<=t[i.#t]&&console.warn(this.brand,...e)}info(...e){t.info<=t[i.#t]&&console.info(this.brand,...e)}debug(...e){t.debug<=t[i.#t]&&console.debug(this.brand,...e)}trace(...e){t.trace<=t[i.#t]&&console.trace(this.brand,...e)}}function r(){return Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}const s={application:{ready:"lo.application.ready",error:"lo.application.error",logout:"lo.application.logout",auth:{redirect:"lo.application.auth.redirect"},session:{refresh:"lo.application.session.refresh"}},component:{ready:"lo.component.ready",error:"lo.component.error"},iframe:{load:"lo.iframe.load",error:"lo.iframe.error",logout:"lo.iframe.logout",auth:{redirect:"lo.iframe.auth.redirect"}}},o={addEventListener:"lo.addEventListener",authReload:"lo.auth.reload",dispatchEvent:"lo.dispatchEvent",error:"lo.error",getComponentData:"lo.getComponentData",loaded:"lo.loaded",logout:"lo.logout",ready:"lo.ready",redirect:"lo.redirect",removeEventListener:"lo.removeEventListener",resize:"lo.resize",sessionExpiry:"lo.sessionExpiry",sessionExpiryResponse:"lo.sessionExpiry.response",setComponentData:"lo.setComponentData",setComponentProps:"lo.setComponentProps"},n=new i("LightningOutError"),a="Session not ready",h="Session timeout",l="Session failed: iframe error",d="Malformed sessionExpiry response",c="Session terminated",p="Session APIs are not supported in org-url mode";class m{#r;#i;constructor(e){this.#i="string"==typeof e?e:e.constructor?.name,"function"==typeof e.dispatchEvent&&(this.#r=e)}#s(e){return`${this.#i}: ${e}`}create(e){const t="string"==typeof e?e:e.message;return new Error(this.#s(t))}dispatch(e,t){const i="string"==typeof t?t:t.message||t.detail?.message;if(this.#r){const r=t.detail||{message:this.#s(i),originalError:t},s=new CustomEvent(e,{detail:r});this.#r.dispatchEvent(s),n.error(`${this.#s("dispatched error")} -> ${e}: ${i}`)}else n.error(`${this.#s("unable to dispatch error on a non-EventTarget object")} -> ${e}: ${i}`)}}const u=new m("LightningOutUtils");function g(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function f(e,t=!1){if(/[A-Z]/.test(e))throw u.create(`elementNameToStandardName: "${e}" is not a valid custom element name - must be all lowercase.`);const i=e.indexOf("-");if(-1===i)throw u.create(`elementNameToStandardName: "${e}" is not a valid custom element name - missing hyphen character.`);return`${function(e){if(/[A-Z]/.test(e))throw u.create(`snakeToCamel: "${e}" is not valid snake_case - must be all lowercase.`);return e.replace(/_([a-z_])/g,(e,t)=>t.toUpperCase())}(e.slice(0,i))}${t?":":"/"}${function(e){if(/[A-Z]/.test(e))throw u.create(`kebabToCamel: "${e}" is not valid kebab-case - must be all lowercase.`);return e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}(e.slice(i+1))}`}function v(e){return e.startsWith("$$")}function w(e,t){const i=Object.entries(t).map(t=>{let[i,r]=t;const s=i.split("dataMirror");2===s.length&&""===s[0]&&(i=s[1].charAt(0).toLowerCase()+s[1].slice(1));const o=`_propertyChanged_${i}`;if("function"==typeof e[o]){r=(0,e[o])(r)}return[i,r]});return Object.fromEntries(i)}const b=new i("LightningOutIFrame");class y{#o;#n;#a;#h="display:none";#l="border:0px; width:100%; height:100%; overflow:auto;";#d;#c;#p;#m;#u;#g;constructor(e){this.#o=e.parentElement,this.#n=e.parentElement instanceof $,this.#a=new m(e.parentElement)}get iframeReady(){return!!this.#p&&!!this.#m}get iframeElement(){return this.#c}#f(e,t){this.#p=e,this.#m=t}#v=e=>{if(e.data.id===this.#o._uuid){if(this.iframeReady){if(e.source!==this.#p||e.origin!==this.#m)return void b.debug("#messageListener: rejected message with mismatched source/origin",`expected origin: ${this.#m}`,`got origin: ${e.origin}`)}else{if(e.data.type!==o.loaded)return void b.debug("#messageListener: rejected pre-ready message that is not lo.loaded",`type: ${e.data.type}`);if(e.source!==this.#c?.contentWindow)return void b.debug("#messageListener: rejected lo.loaded from a foreign source",`origin: ${e.origin}`)}switch(b.debug("#messageListener:",`parentElement._uuid: ${this.#o._uuid}`,`parentElement.localName: ${this.#o.localName}`,JSON.stringify(e.data)),e.data.type){case o.loaded:{this.#g=clearTimeout(this.#g),this.#f(e.source,e.origin);const t=e.data.lightningDomain;this.#o.dispatchEvent(new CustomEvent(s.iframe.load,{detail:{origin:e.origin,lightningDomain:t}}));break}case o.logout:this.#g=clearTimeout(this.#g),this.#o.dispatchEvent(new CustomEvent(s.iframe.logout));break;case o.redirect:this.#g=clearTimeout(this.#g),this.#o.dispatchEvent(new CustomEvent(s.iframe.auth.redirect,{detail:{redirectUrl:e.data.redirectUrl,redirectOrigin:e.origin}}));break;case o.resize:break;case o.sessionExpiryResponse:this.#o instanceof k&&this.#o._handleSessionExpiryResponse(e.data)}}};#w(e){this.#c&&this.#n&&(this.#c.style.height=`${e}px`,b.debug(`#handleResize: applied height ${e}px to iframe`))}#b(){if(!this.#c){const e=window.document.createElement("iframe");e.name="lightning_af",e.setAttribute("sandbox",["allow-downloads","allow-forms","allow-popups","allow-same-origin","allow-scripts","allow-top-navigation-by-user-activation"].join(" ")),e.style.cssText=this.#n?this.#l:this.#h,this.#c=e,this.#d=this.#o.attachShadow({mode:"closed"}),this.#d.appendChild(this.#c),e.addEventListener("load",this.#y),window.addEventListener("message",this.#v)}return this.#c}load(e){const t=this.#b();this.#u=new URL(e),b.debug("#loadIframe: endpoint =",function(e){const t={},i=e=>{const t={};for(const[i,r]of e.entries())t[i]=r;return t};if(t.url=e.origin+e.pathname,t.urlParams=i(e.searchParams),"/secur/frontdoor.jsp"===e.pathname){const e=t.urlParams.otp?"startURL":"retURL",r=new URL(t.urlParams[e],"http://dummy.com");t.urlParams[e]={url:r.pathname,urlParams:i(r.searchParams)}}return t}(this.#u)),this.#f(void 0,void 0),this.#n?t.src=e:localStorage.getItem("LightningOutIFrame:load:window.open")?window.open(e,`LO2 Hidden ${this.#o._uuid}`,"left=200,top=200,width=800,height=800"):t.src=e}#y=()=>{this.#g&&clearTimeout(this.#g),this.#g=setTimeout(()=>{if(!this.iframeReady){const e="Error: Unknown error, unable to load the iframe.";this.#a.dispatch(s.iframe.error,e),this.#E(e)}},6e4)};destroy(){this.#d&&(this.#d.innerHTML=""),this.#c&&this.#c.remove(),this.#d=void 0,this.#c=void 0,this.#f(void 0,void 0)}#E(e){if(this.#n&&this.#u){const t=new URL("/lightning/lightning.out.message.html",this.#u.origin);t.search=new URLSearchParams({loAppOrigin:window.location.origin,parentElementId:this.#o._uuid,message:e}).toString(),this.load(t.href)}}postMessage(e){if(!this.#p||!this.#m)throw this.#a.create("Error attempting to postMessage on an iframe that is not ready.");b.debug("postMessage:",`parentElement: ${this.#o._uuid}`,JSON.stringify(e));try{this.#p.postMessage(e,this.#m)}catch(e){const t=`postMessage error: ${e}`;throw this.#a.dispatch(s.iframe.error,t),this.#a.create(t)}}}
1
+ /*! @salesforce/lightning-out v2.2.7 (2026-09-21) */
2
+ var LO2=function(e){"use strict";const t={error:0,warn:1,info:2,debug:3,trace:4};class i{static#e="LO2";static#t="error";#i;static set level(e){this.#t=e}static set prefix(e){this.#e=e}get brand(){return`${i.#e}:${this.#i}:`}constructor(e){this.#i="string"==typeof e?e:e.constructor?.name}error(...e){t.error<=t[i.#t]&&console.error(this.brand,...e)}warn(...e){t.warn<=t[i.#t]&&console.warn(this.brand,...e)}info(...e){t.info<=t[i.#t]&&console.info(this.brand,...e)}debug(...e){t.debug<=t[i.#t]&&console.debug(this.brand,...e)}trace(...e){t.trace<=t[i.#t]&&console.trace(this.brand,...e)}}function r(){return Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(36)}const s={application:{ready:"lo.application.ready",error:"lo.application.error",logout:"lo.application.logout",auth:{redirect:"lo.application.auth.redirect"},session:{refresh:"lo.application.session.refresh"}},component:{ready:"lo.component.ready",error:"lo.component.error"},iframe:{load:"lo.iframe.load",error:"lo.iframe.error",logout:"lo.iframe.logout",auth:{redirect:"lo.iframe.auth.redirect"}}},o={addEventListener:"lo.addEventListener",authReload:"lo.auth.reload",dispatchEvent:"lo.dispatchEvent",error:"lo.error",getComponentData:"lo.getComponentData",loaded:"lo.loaded",logout:"lo.logout",ready:"lo.ready",redirect:"lo.redirect",removeEventListener:"lo.removeEventListener",resize:"lo.resize",sessionExpiry:"lo.sessionExpiry",sessionExpiryResponse:"lo.sessionExpiry.response",setComponentData:"lo.setComponentData",setComponentProps:"lo.setComponentProps"},n=new i("LightningOutError"),a="Session not ready",h="Session timeout",l="Session failed: iframe error",d="Malformed sessionExpiry response",c="Session terminated",p="Session APIs are not supported in org-url mode";class m{#r;#i;constructor(e){this.#i="string"==typeof e?e:e.constructor?.name,"function"==typeof e.dispatchEvent&&(this.#r=e)}#s(e){return`${this.#i}: ${e}`}create(e){const t="string"==typeof e?e:e.message;return new Error(this.#s(t))}dispatch(e,t){const i="string"==typeof t?t:t.message||t.detail?.message;if(this.#r){const r=t.detail||{message:this.#s(i),originalError:t},s=new CustomEvent(e,{detail:r});this.#r.dispatchEvent(s),n.error(`${this.#s("dispatched error")} -> ${e}: ${i}`)}else n.error(`${this.#s("unable to dispatch error on a non-EventTarget object")} -> ${e}: ${i}`)}}const u=new m("LightningOutUtils");function g(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function f(e,t=!1){if(/[A-Z]/.test(e))throw u.create(`elementNameToStandardName: "${e}" is not a valid custom element name - must be all lowercase.`);const i=e.indexOf("-");if(-1===i)throw u.create(`elementNameToStandardName: "${e}" is not a valid custom element name - missing hyphen character.`);return`${function(e){if(/[A-Z]/.test(e))throw u.create(`snakeToCamel: "${e}" is not valid snake_case - must be all lowercase.`);return e.replace(/_([a-z_])/g,(e,t)=>t.toUpperCase())}(e.slice(0,i))}${t?":":"/"}${function(e){if(/[A-Z]/.test(e))throw u.create(`kebabToCamel: "${e}" is not valid kebab-case - must be all lowercase.`);return e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}(e.slice(i+1))}`}function v(e){return e.startsWith("$$")}function w(e,t){const i=Object.entries(t).map(t=>{let[i,r]=t;const s=i.split("dataMirror");2===s.length&&""===s[0]&&(i=s[1].charAt(0).toLowerCase()+s[1].slice(1));const o=`_propertyChanged_${i}`;if("function"==typeof e[o]){r=(0,e[o])(r)}return[i,r]});return Object.fromEntries(i)}const b=new i("LightningOutIFrame");class y{#o;#n;#a;#h="display:none";#l="border:0px; width:100%; height:100%; overflow:auto;";#d;#c;#p;#m;#u;#g;constructor(e){this.#o=e.parentElement,this.#n=e.parentElement instanceof $,this.#a=new m(e.parentElement)}get iframeReady(){return!!this.#p&&!!this.#m}get iframeElement(){return this.#c}isTrustedMessage(e){return this.iframeReady&&e.source===this.#p&&e.origin===this.#m}#f(e,t){this.#p=e,this.#m=t}#v=e=>{if(e.data.id===this.#o._uuid){if(this.iframeReady){if(e.source!==this.#p||e.origin!==this.#m)return void b.debug("#messageListener: rejected message with mismatched source/origin",`expected origin: ${this.#m}`,`got origin: ${e.origin}`)}else{if(e.data.type!==o.loaded)return void b.debug("#messageListener: rejected pre-ready message that is not lo.loaded",`type: ${e.data.type}`);if(e.source!==this.#c?.contentWindow)return void b.debug("#messageListener: rejected lo.loaded from a foreign source",`origin: ${e.origin}`)}switch(b.debug("#messageListener:",`parentElement._uuid: ${this.#o._uuid}`,`parentElement.localName: ${this.#o.localName}`,JSON.stringify(e.data)),e.data.type){case o.loaded:{this.#g=clearTimeout(this.#g),this.#f(e.source,e.origin);const t=e.data.lightningDomain;this.#o.dispatchEvent(new CustomEvent(s.iframe.load,{detail:{origin:e.origin,lightningDomain:t}}));break}case o.logout:this.#g=clearTimeout(this.#g),this.#o.dispatchEvent(new CustomEvent(s.iframe.logout));break;case o.redirect:this.#g=clearTimeout(this.#g),this.#o.dispatchEvent(new CustomEvent(s.iframe.auth.redirect,{detail:{redirectUrl:e.data.redirectUrl,redirectOrigin:e.origin}}));break;case o.resize:break;case o.sessionExpiryResponse:this.#o instanceof T&&this.#o._handleSessionExpiryResponse(e.data)}}};#w(e){this.#c&&this.#n&&(this.#c.style.height=`${e}px`,b.debug(`#handleResize: applied height ${e}px to iframe`))}#b(){if(!this.#c){const e=window.document.createElement("iframe");e.name="lightning_af",e.setAttribute("sandbox",["allow-downloads","allow-forms","allow-popups","allow-same-origin","allow-scripts","allow-top-navigation-by-user-activation"].join(" ")),e.style.cssText=this.#n?this.#l:this.#h,this.#c=e,this.#d=this.#o.attachShadow({mode:"closed"}),this.#d.appendChild(this.#c),e.addEventListener("load",this.#y),window.addEventListener("message",this.#v)}return this.#c}load(e){const t=this.#b();this.#u=new URL(e),b.debug("#loadIframe: endpoint =",function(e){const t={},i=e=>{const t={};for(const[i,r]of e.entries())t[i]=r;return t};if(t.url=e.origin+e.pathname,t.urlParams=i(e.searchParams),"/secur/frontdoor.jsp"===e.pathname){const e=t.urlParams.otp?"startURL":"retURL",r=new URL(t.urlParams[e],"http://dummy.com");t.urlParams[e]={url:r.pathname,urlParams:i(r.searchParams)}}return t}(this.#u)),this.#f(void 0,void 0),this.#n?t.src=e:localStorage.getItem("LightningOutIFrame:load:window.open")?window.open(e,`LO2 Hidden ${this.#o._uuid}`,"left=200,top=200,width=800,height=800"):t.src=e}#y=()=>{this.#g&&clearTimeout(this.#g),this.#g=setTimeout(()=>{if(!this.iframeReady){const e="Error: Unknown error, unable to load the iframe.";this.#a.dispatch(s.iframe.error,e),this.#E(e)}},6e4)};destroy(){this.#d&&(this.#d.innerHTML=""),this.#c&&this.#c.remove(),this.#d=void 0,this.#c=void 0,this.#f(void 0,void 0)}#E(e){if(this.#n&&this.#u){const t=new URL("/lightning/lightning.out.message.html",this.#u.origin);t.search=new URLSearchParams({loAppOrigin:window.location.origin,parentElementId:this.#o._uuid,message:e}).toString(),this.load(t.href)}}postMessage(e){if(!this.#p||!this.#m)throw this.#a.create("Error attempting to postMessage on an iframe that is not ready.");b.debug("postMessage:",`parentElement: ${this.#o._uuid}`,JSON.stringify(e));try{this.#p.postMessage(e,this.#m)}catch(e){const t=`postMessage error: ${e}`;throw this.#a.dispatch(s.iframe.error,t),this.#a.create(t)}}}
3
3
  /**
4
4
  * @file property-observer.ts
5
5
  * @author Caridy Patiño (2025)
6
6
  * @license MIT
7
7
  * @description Provides the PropertyObserver class, a utility to observe property and attribute
8
8
  * changes on any DOM element, with automatic getter/setter interception and batched notifications.
9
- */const E=new i("PropertyObserver");class _{_el;_cb;_cache;_shouldObserve;_interceptedProps;_originalDescriptors;_observer;_changesPending;_pendingChanges;_attributeExceptions=new Map([["for","htmlFor"],["class","className"],["formnovalidate","formNoValidate"],["readonly","readOnly"],["maxlength","maxLength"],["minlength","minLength"],["contenteditable","contentEditable"],["spellcheck","spellcheck"],["novalidate","noValidate"],["autofocus","autofocus"],["autocomplete","autocomplete"],["crossorigin","crossOrigin"]]);constructor(e,t,i){if(!(e instanceof Element))throw new TypeError("Target must be a DOM Element");if("function"!=typeof t)throw new TypeError("Callback must be a function");if(i&&"function"!=typeof i)throw new TypeError("shouldObserve callback must be a function");this._el=e,this._cb=t,this._cache=new Map,this._shouldObserve=i||((e,t)=>!1===t),this._interceptedProps=new Set,this._originalDescriptors=new Map,this._changesPending=!1,this._pendingChanges={},this._initialScan(),this._setupMutationObserver()}disconnect(){this._observer&&this._observer.disconnect();for(const[e,t]of this._originalDescriptors)Object.defineProperty(this._el,e,t);this._cache.clear(),this._interceptedProps.clear(),this._originalDescriptors.clear(),this._pendingChanges={},this._changesPending=!1}_initialScan(){const e={};for(const t of Array.from(this._el.attributes)){const i=t.name,r=this._isStandardAttribute(i);if(!this._shouldObserve(i,r))continue;const s=this._attributeNameToPropName(i),o=t.value;e[s]=o,this._cache.set(s,o),this._installPropertyInterceptor(s)}for(const t of Object.getOwnPropertyNames(this._el)){const i=this._isStandardProperty(t);if(this._cache.has(t)||!this._shouldObserve(t,i))continue;const r=this._el[t];e[t]=r,this._cache.set(t,r),this._installPropertyInterceptor(t)}if(Object.keys(e).length>0)try{this._cb(e)}catch(e){E.error("Error in initial PropertyObserver callback:",e)}}_setupMutationObserver(){this._observer=new MutationObserver(e=>{const t={};for(const i of e)if("attributes"===i.type&&i.attributeName){const e=i.attributeName,r=this._isStandardAttribute(e);if(!this._shouldObserve(e,r))continue;const s=this._attributeNameToPropName(e),o=this._el.getAttribute(e);o!==this._cache.get(s)&&(t[s]=o,this._cache.set(s,o),this._interceptedProps.has(s)||this._installPropertyInterceptor(s))}Object.keys(t).length>0&&this._batchChanges(t)}),this._observer.observe(this._el,{attributes:!0,attributeOldValue:!1})}_installPropertyInterceptor(e){if(this._interceptedProps.has(e))return;const t=Object.getOwnPropertyDescriptor(this._el,e)||{value:this._el[e],writable:!0,enumerable:!0,configurable:!0};this._originalDescriptors.set(e,t);const i={enumerable:t.enumerable,configurable:t.configurable,get:t.get||(()=>t.value),set:i=>{i!==this._cache.get(e)&&(t.set?t.set.call(this._el,i):t.value=i,this._cache.set(e,i),this._batchChanges({[e]:i}))}};Object.defineProperty(this._el,e,i),this._interceptedProps.add(e)}_batchChanges(e){Object.assign(this._pendingChanges,e),this._changesPending||(this._changesPending=!0,queueMicrotask(()=>{this._changesPending=!1;const e={...this._pendingChanges};this._pendingChanges={};try{this._cb(e)}catch(e){E.error("Error in PropertyObserver callback:",e)}}))}_attributeNameToPropName(e){return this._attributeExceptions.has(e)?this._attributeExceptions.get(e):e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}_isStandardAttribute(e){if(e.startsWith("data-")||e.startsWith("aria-")||e.startsWith("on"))return!0;const t=this._attributeNameToPropName(e);return this._isStandardProperty(t)}_isStandardProperty(e){return e in HTMLElement.prototype}}const C=new class{#_=new m("LightningOutRegistry");appToComps=new WeakMap;compToApp=new WeakMap;compNameToApp=new Map;registerApplication(e){this.appToComps.has(e)||this.appToComps.set(e,new Set)}registerComponentName(e,t){if(this.compNameToApp.has(e))throw this.#_.create(`"${e}" is already registered to another App.`);this.compNameToApp.set(e,t)}registerComponent(e,t){if(this.compToApp.has(e))throw this.#_.create("This Comp is already registered to another App.");let i=t;if(!i){const t=e.localName;if(i=this.compNameToApp.get(t),!i)throw this.#_.create(`Could not find a parent App for component "${e.localName}"`)}return this.appToComps.get(i).add(e),this.compToApp.set(e,i),i}unregisterComponent(e){const t=this.compToApp.get(e);if(!t)return!1;const i=this.appToComps.get(t);return i?.delete(e),this.compToApp.delete(e),!0}getComps(e){const t=this.appToComps.get(e);if(!t)throw this.#_.create("Unable to find set of LightningOutComponents");return t}},L=new i("LightningOutComponent"),R=new Set(["autocapitalize","autocorrect","dir","enterkeyhint","inputmode","lang","spellcheck","style","title","translate"]),P=new Set(["aria-disabled","aria-hidden","aria-label","aria-live","aria-modal","aria-pressed","aria-valuemax","aria-valuemin","aria-valuenow"]),S=new Set(["accesskey","autofocus","draggable","exportparts","hidden","inert","nonce","part","slot","tabindex"]),A=new Set(["aria-activedescendant","aria-controls","aria-describedby","aria-details","aria-errormessage","aria-flowto","aria-labelledby","aria-owns"]);class $ extends HTMLElement{_uuid=r();componentReady=!1;_standardName=f(this.localName);#C;#_=new m(this);#L=new y({parentElement:this});#R;#P=!0;#S=[];#A=new WeakMap;#$=0;constructor(){super(),L.trace("constructor: called",`_uuid: ${this._uuid}`)}_getComponentURL(){const e=this.#C;if(!e)throw this.#_.create("Undefined parent App!");return e._getComponentURL(this._standardName,this._uuid)}_init(){this.componentReady||this.#L.load(this._getComponentURL().href)}#v=e=>{if(e.data.id===this._uuid)switch(L.debug("#messageListener:",`this._uuid: ${this._uuid}`,`this._standardName: ${this._standardName}`,`event.data: ${JSON.stringify(e.data)}`),e.data.type){case o.ready:for(this.componentReady=!0;this.#S.length;){const e=this.#S.shift();e&&("add"===e.type?this.addEventListener(...e.args):"remove"===e.type?this.removeEventListener(...e.args):"dispatch"===e.type&&this.dispatchEvent(e.event))}super.dispatchEvent(new CustomEvent(s.component.ready));break;case o.getComponentData:this.#R=new _(this,this.#O,this.#U);break;case o.dispatchEvent:{const t=new CustomEvent(e.data.name,{detail:e.data.detail});super.dispatchEvent(t);break}case o.error:this.#_.dispatch(s.component.error,e.data.error);break;default:L.info("#messageListener:","Unknown message received:",{"event.data":e.data})}};_propertyChanged_style=e=>{const t=this.style,i=[];for(let e=0;e<t.length;e+=1){const r=t.item(e);r.startsWith("--")&&i.push(`${r}:${t.getPropertyValue(r)}`)}return i.join(";")};#O=e=>{const t=w(this,e);L.debug("#propObserverCallback:",{changes:e,propsToSend:t}),this.#P?(this.#P=!1,this.#L.postMessage({type:o.setComponentData,componentData:{id:this._uuid,name:this._standardName,props:t}})):this.#L.postMessage({type:o.setComponentProps,componentProps:t})};#U=(e,t)=>{const i=g(e);return L.debug("#shouldObserveCallback:",{attrOrPropName:e,attrName:i,isStandard:t}),t?!(!R.has(i)&&!P.has(i))||(S.has(i)||A.has(i)||i.startsWith("on")?(L.warn(`"${i}" will not be mirrored.`),!1):!!i.startsWith("data-mirror-")||(L.warn(`"${i}" will not be mirrored.`),!1)):!i.startsWith("_")&&!v(e)};addEventListener(e,t,i){if(e===s.component.ready&&this.componentReady){const e=new CustomEvent(s.component.ready);queueMicrotask(()=>{"function"==typeof t?t.call(this,e):t.handleEvent(e)})}if(e.startsWith("lo."))return void super.addEventListener(e,t,i);let r=this.#A.get(t);r||(r=`${e}_${this.#$++}`,this.#A.set(t,r)),this.componentReady?(super.addEventListener(...arguments),this.#L.postMessage({name:e,options:i,listenerKey:r,type:o.addEventListener})):(this.#S.push({type:"add",args:[e,t,i]}),L.debug("addEventListener:","#eventQueue pushed add args:",[e,t,i]))}dispatchEvent(e){if(e.type.startsWith("lo."))return L.debug(`dispatchEvent: dispatching event "${e.type}" to this Element only`),super.dispatchEvent(e);if(this.componentReady){L.debug(`dispatchEvent: dispatching event "${e.type}" to this Element and embedded Element inside the iframe`);const t=super.dispatchEvent(e);return this.#L.postMessage({name:e.type,detail:e.detail||{},type:o.dispatchEvent}),t}return L.debug(`dispatchEvent: component not ready, queueing event "${e.type}"`),this.#S.push({type:"dispatch",event:e}),!0}removeEventListener(e,t,i){if(e.startsWith("lo."))return void super.removeEventListener(...arguments);const r=this.#A.get(t);this.componentReady?(super.removeEventListener(...arguments),this.#L.postMessage({name:e,options:i,listenerKey:r,type:o.removeEventListener})):(this.#S.push({type:"remove",args:[e,t,i]}),L.debug("removeEventListener:","#eventQueue pushed remove args:",[e,t,i])),r&&this.#A.delete(t)}adoptedCallback(){throw this.remove(),this.#_.create("This component cannot be rerendered for security reasons.")}connectedCallback(){if(L.trace("connectedCallback: called",`_uuid: ${this._uuid}`),window.addEventListener("message",this.#v),this.hasChildNodes())throw this.#_.create("Should not have child nodes");this.style.display||="block",this.style.width||="100%",this.style.height||="100%",this.#C=C.registerComponent(this),this._standardName=this.#C._getComponentStandardName(this),this.#C.applicationReady&&this._init()}disconnectedCallback(){L.trace("disconnectedCallback: called",`_uuid: ${this._uuid}`),this.#L.destroy(),window.removeEventListener("message",this.#v),C.unregisterComponent(this),this.#R?.disconnect()}connectedMoveCallback(){}}class O{config;errorHandler;constructor(e,t){if(this.config=e,this.errorHandler=t,!this.config.origin)throw this.errorHandler('Missing "frontdoor-url" or "org-url" attribute')}getComponentURL(e,t){let i;if(void 0===this.config.sitePrefix){let t=e.includes("/")?this.config.lwrAppComp:e.includes(":")?this.config.lwrAppAura:void 0;if(void 0===t)throw this.errorHandler(`Invalid componentName: ${e}`);t=t.replace("/","%2F");const r=this.config.lang?`l/${this.config.lang}/`:"";i=new URL(`lwr/application/amd/0/${r}ai/${t}`,this.config.origin)}else i=new URL(`${this.config.sitePrefix}/lightning-out`,this.config.origin);return i.searchParams.set("componentName",e),this.#N(i,t)}getAuthURL(e){let t;if(void 0===this.config.sitePrefix){const e=this.config.lwrAppAuth.replace("/","%2F");t=new URL(`lwr/application/amd/0/ai/${e}`,this.config.origin)}else t=new URL(this.config.lwrPageAuth,this.config.origin);return this.#N(t,e)}getPageURL(e,t){const i=new URL(e,this.config.origin);return this.#N(i,t)}#N(e,t){return e.searchParams.set("parentElementId",t),e.searchParams.set("loAppOrigin",this.config.loAppOrigin),e.searchParams.set("loVersion","2.2.7-rc.3"),this.config.appId&&e.searchParams.set("appId",this.config.appId),this.config.testMode&&e.searchParams.set("testMode","true"),this.config.designSystem&&e.searchParams.set("designSystem",this.config.designSystem),this.config.globalStyle&&e.searchParams.set("globalStyle",this.config.globalStyle),e}}const U=new i("LightningOutApplication"),N=new Set(["slds1","slds2","none"]),I=new Set(["frontdoorUrl","orgUrl"]);class k extends HTMLElement{_uuid=r();applicationReady=!1;#_=new m(this);#L=new y({parentElement:this});#I;#R;#k="";#T="lightningout/auth";#x="lightningout/container";#M="lightningout/auraContainer";#j="lightning/lightning.out.auth.html";#D="lightning/lightning.out.logout.html";#F="lightning/lightning.out.auth.error.html";#W="/secur/logout.jsp";lwrApplication;orgUrl;#z;frontdoorUrl;#H;appId;#K;components;#Q=new Map;sitePrefix;#Z;designSystem;#V;globalStyle;#q;#J=document.documentElement.lang??"";#G=!1;#X=null;#B=null;constructor(){super(),U.trace("constructor: called",`_uuid: ${this._uuid}`),C.registerApplication(this)}addEventListener(e,t,i){if(e===s.application.ready&&this.applicationReady){const e=new CustomEvent(s.application.ready);queueMicrotask(()=>{"function"==typeof t?t.call(this,e):t.handleEvent(e)})}super.addEventListener(e,t,i)}#Y(e){try{this.#z=new URL(e)}catch{throw this.#_.create(`Invalid org-url: ${e}`)}this.dispatchEvent(new CustomEvent(s.iframe.load,{detail:this.#z.origin}))}#ee(e){try{this.#H=new URL(e),this.#k=this.#H.origin;const t=this.#te(),i=this.#H.searchParams.has("otp")?"startURL":"retURL";this.#H.searchParams.set(i,t.pathname+t.search);const r=this.#ie(this.#F);this.#H.searchParams.set("error-redirect-uri",r.pathname+r.search)}catch{throw this.#_.create(`Invalid frontdoor-url: ${e}`)}this.#L.load(this.#H.href)}#re(){const e=new URL(this.#W,this.#k),t=this.#ie(this.#D);e.searchParams.set("redirect-uri",t.pathname+t.search),this.#L.load(e.href)}getRouter(){if(void 0===this.#I){const e={origin:this.#k,lwrPageAuth:this.#j,lwrAppAuth:this.#T,lwrAppComp:this.#x,lwrAppAura:this.#M,sitePrefix:this.#Z,lang:this.#J,appId:this.#K,testMode:this.__testMode||!1,loAppOrigin:window.location.origin,designSystem:this.#V,globalStyle:this.#q};this.#I=new O(e,e=>this.#_.create(e))}return this.#I}_getComponentURL(e,t){return this.getRouter().getComponentURL(e,t)}#te(){return this.getRouter().getAuthURL(this._uuid)}#ie(e){return this.getRouter().getPageURL(e,this._uuid)}#se=e=>{this.applicationReady=!0;const t=e.detail;return this.#k="string"==typeof t?t:t.lightningDomain||t.origin,this.#I=void 0,this.#G?(U.trace("#iframeLoaded: frontdoor-url refresh path"),this.#G=!1,void this.dispatchEvent(new CustomEvent(s.application.session.refresh))):this.#B?(U.trace("#iframeLoaded: sessionRefresh() reload path"),clearTimeout(this.#B.timeoutId),this.#B.resolve(),void(this.#B=null)):(U.trace("#iframeLoaded: initial-auth path"),this.#oe(),void this.dispatchEvent(new CustomEvent(s.application.ready)))};sessionExpiry(){if(void 0!==this.#z)return Promise.reject(this.#_.create(p));if(!this.applicationReady)return Promise.reject(this.#_.create(a));if(this.#X)return this.#X.promise;let e,t;const i=new Promise((i,r)=>{e=i,t=r}),r=window.setTimeout(()=>{const e=this.#X;this.#X=null,e?.reject(this.#_.create(h))},3e4);return this.#X={promise:i,resolve:e,reject:t,timeoutId:r},this.#L.postMessage({type:o.sessionExpiry,id:this._uuid}),i}sessionRefresh(){if(void 0!==this.#z)return Promise.reject(this.#_.create(p));if(!this.applicationReady)return Promise.reject(this.#_.create(a));if(this.#B)return this.#B.promise;let e,t;const i=new Promise((i,r)=>{e=i,t=r}),r=window.setTimeout(()=>{const e=this.#B;this.#B=null,e?.reject(this.#_.create(h))},6e4);return this.#B={promise:i,resolve:e,reject:t,timeoutId:r},this.#L.postMessage({type:o.authReload,id:this._uuid}),i}_handleSessionExpiryResponse(e){const t=this.#X;t&&(clearTimeout(t.timeoutId),this.#X=null,void 0!==e.error?t.reject(this.#_.create(e.error)):void 0===e.ttl?t.reject(this.#_.create(d)):t.resolve(e.ttl))}#ne(e){const t=this.#B;t&&(clearTimeout(t.timeoutId),this.#B=null,t.reject(this.#_.create(e)))}#ae(e){const t=this.#X;t&&(clearTimeout(t.timeoutId),this.#X=null,t.reject(this.#_.create(e)))}#he(e){this.#ne(e),this.#ae(e)}#le=e=>{this.#G=!1;const t=e.detail?.message;this.#he(t??l),this.#_.dispatch(s.application.error,e)};#de=e=>{this.dispatchEvent(new CustomEvent(s.application.logout))};#ce=e=>{this.dispatchEvent(new CustomEvent(s.application.auth.redirect,{detail:e.detail}))};#oe(){C.getComps(this).forEach(e=>{e._init()})}#O=e=>{const t={},i={};Object.keys(e).forEach(r=>{I.has(r)?i[r]=e[r]:t[r]=e[r]}),w(this,t),w(this,i)};#U=(e,t)=>t?"lang"===e:!e.startsWith("_")&&!v(e);_propertyChanged_lwrApplication=e=>{if(void 0!==e){const t=e.split("/");if(2!==t.length||!t[0]||!t[1])throw this.#_.create(`"${e}" is not a valid lwr-application name, must be of the form 'namespace/name'`);this.#x=e}};_propertyChanged_lang=e=>{this.#J=e??""};_propertyChanged_orgUrl=e=>{if(void 0!==e){if(void 0!==this.#H)throw this.#_.create('Can\'t set "org-url" because "frontdoor-url" is already set');""===e?this.#re():this.#Y(e)}};_propertyChanged_frontdoorUrl=e=>{if(void 0===e)return;if(void 0!==this.#z)throw this.#_.create('Can\'t set "frontdoor-url" because "org-url" is already set');if(""===e)return this.#he(c),void this.#re();const t=null!==this.#B;this.#he(c),this.#G=this.applicationReady&&!t,this.#ee(e)};_propertyChanged_sitePrefix=e=>{void 0!==e&&(this.#Z=e)};_propertyChanged_appId=e=>{void 0!==e&&(this.#K=e)};_propertyChanged_globalStyle=e=>{if(void 0!==e){const t=e.split(";").map(e=>e.trim()).filter(e=>e.length>0),i=[];for(const e of t){const[t,...r]=e.split(":"),s=t.trim();if(!s.startsWith("--"))throw this.#_.create(`Invalid global-style: "${s}" is not a CSS custom property. Only CSS custom properties (starting with --) are allowed.`);const o=r.join(":").trim();o&&i.push(`${s}:${o}`)}this.#q=i.join(";")+";"}};_propertyChanged_components=e=>{void 0!==e&&e.split(",").forEach(e=>{const[t,i]=e.split(" as ").map(e=>e.trim()),r=function(e){return e.includes("/")||e.includes(":")}(t);if(r&&t.includes(":"))throw this.#_.create(`"${t}" is not supported in components. Use kebab "namespace-name" in components and the "aura" attribute on the component element instead.`);const s=r?t:f(t),o=i||(r?function(e){const t=e.includes("/")?"/":":",i=e.indexOf(t);if(-1===i)throw u.create(`standardNameToElementName: "${e}" is not a valid component name - missing namespace separator.`);if(/-/.test(e))throw u.create(`standardNameToElementName: "${e}" is not a valid component name - must not contain hyphens.`);if(/^[A-Z]/.test(e))throw u.create(`standardNameToElementName: "${e}" is not a valid component name - first character must not be uppercase.`);const r=e.slice(0,i),s=e.slice(i+1);return`${r.replace(/([A-Z_])/g,"_$1").toLowerCase()}-${g(s)}`}(s):t);if(o&&!this.#Q.has(o)){this.#Q.set(o,s);try{C.registerComponentName(o,this),customElements.define(o,class extends ${})}catch(e){throw this.#_.create(`"${o}" is already registered. ${e}`)}}})};_propertyChanged_designSystem=e=>{if(void 0!==e&&!N.has(e))throw this.#_.create(`Invalid design-system: ${e}`);this.#V=e};_getComponentStandardName(e){const t=e.localName,i=e.hasAttribute("aura"),r=this.#Q.get(t);if(!r)throw this.#_.create(`"${t}" is not registered.`);return i&&r.includes("/")?r.replace("/",":"):r}get _compNames(){}connectedCallback(){if(U.trace("connectedCallback: called",`_uuid: ${this._uuid}`),this.hasChildNodes())throw this.#_.create("Should not have child nodes");this.style.display||="none",this.addEventListener(s.iframe.load,this.#se),this.addEventListener(s.iframe.error,this.#le),this.addEventListener(s.iframe.logout,this.#de),this.addEventListener(s.iframe.auth.redirect,this.#ce),this.#R=new _(this,this.#O,this.#U)}disconnectedCallback(){U.trace("disconnectedCallback: called",`_uuid: ${this._uuid}`),this.#he(c),this.#re(),this.#L.destroy(),this.removeEventListener(s.iframe.load,this.#se),this.removeEventListener(s.iframe.error,this.#le),this.removeEventListener(s.iframe.logout,this.#de),this.removeEventListener(s.iframe.auth.redirect,this.#ce),this.#R?.disconnect()}connectedMoveCallback(){}}return i.level="debug",window.customElements.define("lightning-out-application",k),e.LightningOutApplication=k,e}({});
9
+ */const E=new i("PropertyObserver");class _{_el;_cb;_cache;_shouldObserve;_interceptedProps;_originalDescriptors;_observer;_changesPending;_pendingChanges;_attributeExceptions=new Map([["for","htmlFor"],["class","className"],["formnovalidate","formNoValidate"],["readonly","readOnly"],["maxlength","maxLength"],["minlength","minLength"],["contenteditable","contentEditable"],["spellcheck","spellcheck"],["novalidate","noValidate"],["autofocus","autofocus"],["autocomplete","autocomplete"],["crossorigin","crossOrigin"]]);constructor(e,t,i){if(!(e instanceof Element))throw new TypeError("Target must be a DOM Element");if("function"!=typeof t)throw new TypeError("Callback must be a function");if(i&&"function"!=typeof i)throw new TypeError("shouldObserve callback must be a function");this._el=e,this._cb=t,this._cache=new Map,this._shouldObserve=i||((e,t)=>!1===t),this._interceptedProps=new Set,this._originalDescriptors=new Map,this._changesPending=!1,this._pendingChanges={},this._initialScan(),this._setupMutationObserver()}disconnect(){this._observer&&this._observer.disconnect();for(const[e,t]of this._originalDescriptors)Object.defineProperty(this._el,e,t);this._cache.clear(),this._interceptedProps.clear(),this._originalDescriptors.clear(),this._pendingChanges={},this._changesPending=!1}_initialScan(){const e={};for(const t of Array.from(this._el.attributes)){const i=t.name,r=this._isStandardAttribute(i);if(!this._shouldObserve(i,r))continue;const s=this._attributeNameToPropName(i),o=t.value;e[s]=o,this._cache.set(s,o),this._installPropertyInterceptor(s)}for(const t of Object.getOwnPropertyNames(this._el)){const i=this._isStandardProperty(t);if(this._cache.has(t)||!this._shouldObserve(t,i))continue;const r=this._el[t];e[t]=r,this._cache.set(t,r),this._installPropertyInterceptor(t)}if(Object.keys(e).length>0)try{this._cb(e)}catch(e){E.error("Error in initial PropertyObserver callback:",e)}}_setupMutationObserver(){this._observer=new MutationObserver(e=>{const t={};for(const i of e)if("attributes"===i.type&&i.attributeName){const e=i.attributeName,r=this._isStandardAttribute(e);if(!this._shouldObserve(e,r))continue;const s=this._attributeNameToPropName(e),o=this._el.getAttribute(e);o!==this._cache.get(s)&&(t[s]=o,this._cache.set(s,o),this._interceptedProps.has(s)||this._installPropertyInterceptor(s))}Object.keys(t).length>0&&this._batchChanges(t)}),this._observer.observe(this._el,{attributes:!0,attributeOldValue:!1})}_installPropertyInterceptor(e){if(this._interceptedProps.has(e))return;const t=Object.getOwnPropertyDescriptor(this._el,e)||{value:this._el[e],writable:!0,enumerable:!0,configurable:!0};this._originalDescriptors.set(e,t);const i={enumerable:t.enumerable,configurable:t.configurable,get:t.get||(()=>t.value),set:i=>{i!==this._cache.get(e)&&(t.set?t.set.call(this._el,i):t.value=i,this._cache.set(e,i),this._batchChanges({[e]:i}))}};Object.defineProperty(this._el,e,i),this._interceptedProps.add(e)}_batchChanges(e){Object.assign(this._pendingChanges,e),this._changesPending||(this._changesPending=!0,queueMicrotask(()=>{this._changesPending=!1;const e={...this._pendingChanges};this._pendingChanges={};try{this._cb(e)}catch(e){E.error("Error in PropertyObserver callback:",e)}}))}_attributeNameToPropName(e){return this._attributeExceptions.has(e)?this._attributeExceptions.get(e):e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}_isStandardAttribute(e){if(e.startsWith("data-")||e.startsWith("aria-")||e.startsWith("on"))return!0;const t=this._attributeNameToPropName(e);return this._isStandardProperty(t)}_isStandardProperty(e){return e in HTMLElement.prototype}}const C=new class{#_=new m("LightningOutRegistry");appToComps=new WeakMap;compToApp=new WeakMap;compNameToApp=new Map;registerApplication(e){this.appToComps.has(e)||this.appToComps.set(e,new Set)}registerComponentName(e,t){if(this.compNameToApp.has(e))throw this.#_.create(`"${e}" is already registered to another App.`);this.compNameToApp.set(e,t)}registerComponent(e,t){if(this.compToApp.has(e))throw this.#_.create("This Comp is already registered to another App.");let i=t;if(!i){const t=e.localName;if(i=this.compNameToApp.get(t),!i)throw this.#_.create(`Could not find a parent App for component "${e.localName}"`)}return this.appToComps.get(i).add(e),this.compToApp.set(e,i),i}unregisterComponent(e){const t=this.compToApp.get(e);if(!t)return!1;const i=this.appToComps.get(t);return i?.delete(e),this.compToApp.delete(e),!0}getComps(e){const t=this.appToComps.get(e);if(!t)throw this.#_.create("Unable to find set of LightningOutComponents");return t}},L=new i("LightningOutComponent"),R=new Set(["autocapitalize","autocorrect","dir","enterkeyhint","inputmode","lang","spellcheck","style","title","translate"]),P=new Set(["aria-disabled","aria-hidden","aria-label","aria-live","aria-modal","aria-pressed","aria-valuemax","aria-valuemin","aria-valuenow"]),S=new Set(["accesskey","autofocus","draggable","exportparts","hidden","inert","nonce","part","slot","tabindex"]),A=new Set(["aria-activedescendant","aria-controls","aria-describedby","aria-details","aria-errormessage","aria-flowto","aria-labelledby","aria-owns"]);class $ extends HTMLElement{_uuid=r();componentReady=!1;_standardName=f(this.localName);#C;#_=new m(this);#L=new y({parentElement:this});#R;#P=!0;#S=[];#A=new WeakMap;#$=0;constructor(){super(),L.trace("constructor: called",`_uuid: ${this._uuid}`)}_getComponentURL(){const e=this.#C;if(!e)throw this.#_.create("Undefined parent App!");return e._getComponentURL(this._standardName,this._uuid)}_init(){this.componentReady||this.#L.load(this._getComponentURL().href)}#v=e=>{if(this.#L.isTrustedMessage(e)){if(e.data.id===this._uuid)switch(L.debug("#messageListener:",`this._uuid: ${this._uuid}`,`this._standardName: ${this._standardName}`,`event.data: ${JSON.stringify(e.data)}`),e.data.type){case o.ready:for(this.componentReady=!0;this.#S.length;){const e=this.#S.shift();e&&("add"===e.type?this.addEventListener(...e.args):"remove"===e.type?this.removeEventListener(...e.args):"dispatch"===e.type&&this.dispatchEvent(e.event))}super.dispatchEvent(new CustomEvent(s.component.ready));break;case o.getComponentData:this.#R=new _(this,this.#O,this.#U);break;case o.dispatchEvent:{const t=new CustomEvent(e.data.name,{detail:e.data.detail});super.dispatchEvent(t);break}case o.error:this.#_.dispatch(s.component.error,e.data.error);break;default:L.info("#messageListener:","Unknown message received:",{"event.data":e.data})}}else L.debug("#messageListener: rejected untrusted source/origin",`_uuid: ${this._uuid}`,`origin: ${e.origin}`)};_propertyChanged_style=e=>{const t=this.style,i=[];for(let e=0;e<t.length;e+=1){const r=t.item(e);r.startsWith("--")&&i.push(`${r}:${t.getPropertyValue(r)}`)}return i.join(";")};#O=e=>{const t=w(this,e);L.debug("#propObserverCallback:",{changes:e,propsToSend:t}),this.#P?(this.#P=!1,this.#L.postMessage({type:o.setComponentData,componentData:{id:this._uuid,name:this._standardName,props:t}})):this.#L.postMessage({type:o.setComponentProps,componentProps:t})};#U=(e,t)=>{const i=g(e);return L.debug("#shouldObserveCallback:",{attrOrPropName:e,attrName:i,isStandard:t}),t?!(!R.has(i)&&!P.has(i))||(S.has(i)||A.has(i)||i.startsWith("on")?(L.warn(`"${i}" will not be mirrored.`),!1):!!i.startsWith("data-mirror-")||(L.warn(`"${i}" will not be mirrored.`),!1)):!i.startsWith("_")&&!v(e)};addEventListener(e,t,i){if(e===s.component.ready&&this.componentReady){const e=new CustomEvent(s.component.ready);queueMicrotask(()=>{"function"==typeof t?t.call(this,e):t.handleEvent(e)})}if(e.startsWith("lo."))return void super.addEventListener(e,t,i);let r=this.#A.get(t);r||(r=`${e}_${this.#$++}`,this.#A.set(t,r)),this.componentReady?(super.addEventListener(...arguments),this.#L.postMessage({name:e,options:i,listenerKey:r,type:o.addEventListener})):(this.#S.push({type:"add",args:[e,t,i]}),L.debug("addEventListener:","#eventQueue pushed add args:",[e,t,i]))}dispatchEvent(e){if(e.type.startsWith("lo."))return L.debug(`dispatchEvent: dispatching event "${e.type}" to this Element only`),super.dispatchEvent(e);if(this.componentReady){L.debug(`dispatchEvent: dispatching event "${e.type}" to this Element and embedded Element inside the iframe`);const t=super.dispatchEvent(e);return this.#L.postMessage({name:e.type,detail:e.detail||{},type:o.dispatchEvent}),t}return L.debug(`dispatchEvent: component not ready, queueing event "${e.type}"`),this.#S.push({type:"dispatch",event:e}),!0}removeEventListener(e,t,i){if(e.startsWith("lo."))return void super.removeEventListener(...arguments);const r=this.#A.get(t);this.componentReady?(super.removeEventListener(...arguments),this.#L.postMessage({name:e,options:i,listenerKey:r,type:o.removeEventListener})):(this.#S.push({type:"remove",args:[e,t,i]}),L.debug("removeEventListener:","#eventQueue pushed remove args:",[e,t,i])),r&&this.#A.delete(t)}adoptedCallback(){throw this.remove(),this.#_.create("This component cannot be rerendered for security reasons.")}connectedCallback(){if(L.trace("connectedCallback: called",`_uuid: ${this._uuid}`),window.addEventListener("message",this.#v),this.hasChildNodes())throw this.#_.create("Should not have child nodes");this.style.display||="block",this.style.width||="100%",this.style.height||="100%",this.#C=C.registerComponent(this),this._standardName=this.#C._getComponentStandardName(this),this.#C.applicationReady&&this._init()}disconnectedCallback(){L.trace("disconnectedCallback: called",`_uuid: ${this._uuid}`),this.#L.destroy(),window.removeEventListener("message",this.#v),C.unregisterComponent(this),this.#R?.disconnect()}connectedMoveCallback(){}}class O{config;errorHandler;constructor(e,t){if(this.config=e,this.errorHandler=t,!this.config.origin)throw this.errorHandler('Missing "frontdoor-url" or "org-url" attribute')}getComponentURL(e,t){let i;if(void 0===this.config.sitePrefix){let t=e.includes("/")?this.config.lwrAppComp:e.includes(":")?this.config.lwrAppAura:void 0;if(void 0===t)throw this.errorHandler(`Invalid componentName: ${e}`);t=t.replace("/","%2F");const r=this.config.lang?`l/${this.config.lang}/`:"";i=new URL(`lwr/application/amd/0/${r}ai/${t}`,this.config.origin)}else i=new URL(`${this.config.sitePrefix}/lightning-out`,this.config.origin);return i.searchParams.set("componentName",e),this.#N(i,t)}getAuthURL(e){let t;if(void 0===this.config.sitePrefix){const e=this.config.lwrAppAuth.replace("/","%2F");t=new URL(`lwr/application/amd/0/ai/${e}`,this.config.origin)}else t=new URL(this.config.lwrPageAuth,this.config.origin);return this.#N(t,e)}getPageURL(e,t){const i=new URL(e,this.config.origin);return this.#N(i,t)}#N(e,t){return e.searchParams.set("parentElementId",t),e.searchParams.set("loAppOrigin",this.config.loAppOrigin),e.searchParams.set("loVersion","2.2.7"),this.config.appId&&e.searchParams.set("appId",this.config.appId),this.config.testMode&&e.searchParams.set("testMode","true"),this.config.designSystem&&e.searchParams.set("designSystem",this.config.designSystem),this.config.globalStyle&&e.searchParams.set("globalStyle",this.config.globalStyle),e}}const U=new i("LightningOutApplication"),N=new Set(["slds1","slds2","none"]),I=new Set(["frontdoorUrl","orgUrl"]);class T extends HTMLElement{_uuid=r();applicationReady=!1;#_=new m(this);#L=new y({parentElement:this});#I;#R;#T="";#k="lightningout/auth";#x="lightningout/container";#M="lightningout/auraContainer";#j="lightning/lightning.out.auth.html";#D="lightning/lightning.out.logout.html";#F="lightning/lightning.out.auth.error.html";#W="/secur/logout.jsp";lwrApplication;orgUrl;#z;frontdoorUrl;#H;appId;#K;components;#Q=new Map;sitePrefix;#Z;designSystem;#V;globalStyle;#q;#J=document.documentElement.lang??"";#G=!1;#X=null;#B=null;constructor(){super(),U.trace("constructor: called",`_uuid: ${this._uuid}`),C.registerApplication(this)}addEventListener(e,t,i){if(e===s.application.ready&&this.applicationReady){const e=new CustomEvent(s.application.ready);queueMicrotask(()=>{"function"==typeof t?t.call(this,e):t.handleEvent(e)})}super.addEventListener(e,t,i)}#Y(e){try{this.#z=new URL(e)}catch{throw this.#_.create(`Invalid org-url: ${e}`)}this.dispatchEvent(new CustomEvent(s.iframe.load,{detail:this.#z.origin}))}#ee(e){try{this.#H=new URL(e),this.#T=this.#H.origin;const t=this.#te(),i=this.#H.searchParams.has("otp")?"startURL":"retURL";this.#H.searchParams.set(i,t.pathname+t.search);const r=this.#ie(this.#F);this.#H.searchParams.set("error-redirect-uri",r.pathname+r.search)}catch{throw this.#_.create(`Invalid frontdoor-url: ${e}`)}this.#L.load(this.#H.href)}#re(){const e=new URL(this.#W,this.#T),t=this.#ie(this.#D);e.searchParams.set("redirect-uri",t.pathname+t.search),this.#L.load(e.href)}getRouter(){if(void 0===this.#I){const e={origin:this.#T,lwrPageAuth:this.#j,lwrAppAuth:this.#k,lwrAppComp:this.#x,lwrAppAura:this.#M,sitePrefix:this.#Z,lang:this.#J,appId:this.#K,testMode:this.__testMode||!1,loAppOrigin:window.location.origin,designSystem:this.#V,globalStyle:this.#q};this.#I=new O(e,e=>this.#_.create(e))}return this.#I}_getComponentURL(e,t){return this.getRouter().getComponentURL(e,t)}#te(){return this.getRouter().getAuthURL(this._uuid)}#ie(e){return this.getRouter().getPageURL(e,this._uuid)}#se=e=>{this.applicationReady=!0;const t=e.detail;return this.#T="string"==typeof t?t:t.lightningDomain||t.origin,this.#I=void 0,this.#G?(U.trace("#iframeLoaded: frontdoor-url refresh path"),this.#G=!1,void this.dispatchEvent(new CustomEvent(s.application.session.refresh))):this.#B?(U.trace("#iframeLoaded: sessionRefresh() reload path"),clearTimeout(this.#B.timeoutId),this.#B.resolve(),void(this.#B=null)):(U.trace("#iframeLoaded: initial-auth path"),this.#oe(),void this.dispatchEvent(new CustomEvent(s.application.ready)))};sessionExpiry(){if(void 0!==this.#z)return Promise.reject(this.#_.create(p));if(!this.applicationReady)return Promise.reject(this.#_.create(a));if(this.#X)return this.#X.promise;let e,t;const i=new Promise((i,r)=>{e=i,t=r}),r=window.setTimeout(()=>{const e=this.#X;this.#X=null,e?.reject(this.#_.create(h))},3e4);return this.#X={promise:i,resolve:e,reject:t,timeoutId:r},this.#L.postMessage({type:o.sessionExpiry,id:this._uuid}),i}sessionRefresh(){if(void 0!==this.#z)return Promise.reject(this.#_.create(p));if(!this.applicationReady)return Promise.reject(this.#_.create(a));if(this.#B)return this.#B.promise;let e,t;const i=new Promise((i,r)=>{e=i,t=r}),r=window.setTimeout(()=>{const e=this.#B;this.#B=null,e?.reject(this.#_.create(h))},6e4);return this.#B={promise:i,resolve:e,reject:t,timeoutId:r},this.#L.postMessage({type:o.authReload,id:this._uuid}),i}_handleSessionExpiryResponse(e){const t=this.#X;t&&(clearTimeout(t.timeoutId),this.#X=null,void 0!==e.error?t.reject(this.#_.create(e.error)):void 0===e.ttl?t.reject(this.#_.create(d)):t.resolve(e.ttl))}#ne(e){const t=this.#B;t&&(clearTimeout(t.timeoutId),this.#B=null,t.reject(this.#_.create(e)))}#ae(e){const t=this.#X;t&&(clearTimeout(t.timeoutId),this.#X=null,t.reject(this.#_.create(e)))}#he(e){this.#ne(e),this.#ae(e)}#le=e=>{this.#G=!1;const t=e.detail?.message;this.#he(t??l),this.#_.dispatch(s.application.error,e)};#de=e=>{this.dispatchEvent(new CustomEvent(s.application.logout))};#ce=e=>{this.dispatchEvent(new CustomEvent(s.application.auth.redirect,{detail:e.detail}))};#oe(){C.getComps(this).forEach(e=>{e._init()})}#O=e=>{const t={},i={};Object.keys(e).forEach(r=>{I.has(r)?i[r]=e[r]:t[r]=e[r]}),w(this,t),w(this,i)};#U=(e,t)=>t?"lang"===e:!e.startsWith("_")&&!v(e);_propertyChanged_lwrApplication=e=>{if(void 0!==e){const t=e.split("/");if(2!==t.length||!t[0]||!t[1])throw this.#_.create(`"${e}" is not a valid lwr-application name, must be of the form 'namespace/name'`);this.#x=e}};_propertyChanged_lang=e=>{this.#J=e??""};_propertyChanged_orgUrl=e=>{if(void 0!==e){if(void 0!==this.#H)throw this.#_.create('Can\'t set "org-url" because "frontdoor-url" is already set');""===e?this.#re():this.#Y(e)}};_propertyChanged_frontdoorUrl=e=>{if(void 0===e)return;if(void 0!==this.#z)throw this.#_.create('Can\'t set "frontdoor-url" because "org-url" is already set');if(""===e)return this.#he(c),void this.#re();const t=null!==this.#B;this.#he(c),this.#G=this.applicationReady&&!t,this.#ee(e)};_propertyChanged_sitePrefix=e=>{void 0!==e&&(this.#Z=e)};_propertyChanged_appId=e=>{void 0!==e&&(this.#K=e)};_propertyChanged_globalStyle=e=>{if(void 0!==e){const t=e.split(";").map(e=>e.trim()).filter(e=>e.length>0),i=[];for(const e of t){const[t,...r]=e.split(":"),s=t.trim();if(!s.startsWith("--"))throw this.#_.create(`Invalid global-style: "${s}" is not a CSS custom property. Only CSS custom properties (starting with --) are allowed.`);const o=r.join(":").trim();o&&i.push(`${s}:${o}`)}this.#q=i.join(";")+";"}};_propertyChanged_components=e=>{void 0!==e&&e.split(",").forEach(e=>{const[t,i]=e.split(" as ").map(e=>e.trim()),r=function(e){return e.includes("/")||e.includes(":")}(t);if(r&&t.includes(":"))throw this.#_.create(`"${t}" is not supported in components. Use kebab "namespace-name" in components and the "aura" attribute on the component element instead.`);const s=r?t:f(t),o=i||(r?function(e){const t=e.includes("/")?"/":":",i=e.indexOf(t);if(-1===i)throw u.create(`standardNameToElementName: "${e}" is not a valid component name - missing namespace separator.`);if(/-/.test(e))throw u.create(`standardNameToElementName: "${e}" is not a valid component name - must not contain hyphens.`);if(/^[A-Z]/.test(e))throw u.create(`standardNameToElementName: "${e}" is not a valid component name - first character must not be uppercase.`);const r=e.slice(0,i),s=e.slice(i+1);return`${r.replace(/([A-Z_])/g,"_$1").toLowerCase()}-${g(s)}`}(s):t);if(o&&!this.#Q.has(o)){this.#Q.set(o,s);try{C.registerComponentName(o,this),customElements.define(o,class extends ${})}catch(e){throw this.#_.create(`"${o}" is already registered. ${e}`)}}})};_propertyChanged_designSystem=e=>{if(void 0!==e&&!N.has(e))throw this.#_.create(`Invalid design-system: ${e}`);this.#V=e};_getComponentStandardName(e){const t=e.localName,i=e.hasAttribute("aura"),r=this.#Q.get(t);if(!r)throw this.#_.create(`"${t}" is not registered.`);return i&&r.includes("/")?r.replace("/",":"):r}get _compNames(){}connectedCallback(){if(U.trace("connectedCallback: called",`_uuid: ${this._uuid}`),this.hasChildNodes())throw this.#_.create("Should not have child nodes");this.style.display||="none",this.addEventListener(s.iframe.load,this.#se),this.addEventListener(s.iframe.error,this.#le),this.addEventListener(s.iframe.logout,this.#de),this.addEventListener(s.iframe.auth.redirect,this.#ce),this.#R=new _(this,this.#O,this.#U)}disconnectedCallback(){U.trace("disconnectedCallback: called",`_uuid: ${this._uuid}`),this.#he(c),this.#re(),this.#L.destroy(),this.removeEventListener(s.iframe.load,this.#se),this.removeEventListener(s.iframe.error,this.#le),this.removeEventListener(s.iframe.logout,this.#de),this.removeEventListener(s.iframe.auth.redirect,this.#ce),this.#R?.disconnect()}connectedMoveCallback(){}}return i.level="debug",window.customElements.define("lightning-out-application",T),e.LightningOutApplication=T,e}({});
10
10
  //# sourceMappingURL=index.iife.prod.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lightning-out",
3
- "version": "2.2.7-rc.3",
3
+ "version": "2.2.7",
4
4
  "private": false,
5
5
  "description": "Lightning Out 2.0 for Salesforce",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -22,8 +22,8 @@
22
22
  },
23
23
  "dependencies": {},
24
24
  "devDependencies": {
25
- "core": "2.2.7-rc.3",
26
- "utils": "2.2.7-rc.3"
25
+ "core": "2.2.7",
26
+ "utils": "2.2.7"
27
27
  },
28
28
  "files": [
29
29
  "dist/",