@salesforce/lightning-out 2.2.5-rc.2 → 2.2.5-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! @salesforce/lightning-out v2.2.5-rc.2 (2026-07-14) */
1
+ /*! @salesforce/lightning-out v2.2.5-rc.3 (2026-07-20) */
2
2
  /**
3
3
  * Numeric ranks for {@link LogLevel}; lower values are more severe.
4
4
  */
@@ -182,11 +182,9 @@ const messages = {
182
182
  const logger$4 = new Logger("LightningOutError");
183
183
  const errorMessages = {
184
184
  sessionNotReady: "Session not ready",
185
- sessionRefreshSuperseded: "Session refresh superseded",
186
- sessionRefreshTimeout: "Session refresh timeout",
187
- sessionRefreshIframeError: "Session refresh failed: iframe error",
188
- sessionExpiryTimeout: "Session expiry timeout",
189
- sessionExpiryMalformedResponse: "Malformed sessionExpiry response",
185
+ sessionTimeout: "Session timeout",
186
+ sessionIframeError: "Session failed: iframe error",
187
+ sessionMalformedResponse: "Malformed sessionExpiry response",
190
188
  sessionTerminated: "Session terminated",
191
189
  notSupportedInOrgUrlMode: "Session APIs are not supported in org-url mode",
192
190
  };
@@ -1488,7 +1486,7 @@ class LightningOutRouter {
1488
1486
  url.searchParams.set("parentElementId", parentElementId);
1489
1487
  url.searchParams.set("loAppOrigin", this.config.loAppOrigin);
1490
1488
  // This helps in general but also for cache busting
1491
- url.searchParams.set("loVersion", "2.2.5-rc.2");
1489
+ url.searchParams.set("loVersion", "2.2.5-rc.3");
1492
1490
  if (this.config.appId) {
1493
1491
  url.searchParams.set("appId", this.config.appId);
1494
1492
  }
@@ -1640,9 +1638,10 @@ class LightningOutApplication extends HTMLElement {
1640
1638
  return this.getRouter().getPageURL(pagePathname, this._uuid);
1641
1639
  }
1642
1640
  // Three paths reach #iframeLoaded:
1643
- // 1. frontdoor-url update (#isRefreshing=true): supersession in _propertyChanged_frontdoorUrl has already
1644
- // cleared #promiseSessionRefresh, so only #isRefreshing needs to be checked.
1645
- // 2. sessionRefresh()-initiated reload (#promiseSessionRefresh set): resolve and skip initial-auth bookkeeping.
1641
+ // 1. frontdoor-url update (#isRefreshing=true): _propertyChanged_frontdoorUrl has already failed any pending
1642
+ // sessionRefresh via #failAllPending, so only #isRefreshing needs to be checked here.
1643
+ // 2. sessionRefresh()-initiated reload (#promiseSessionRefresh set): coalesced callers share this slot;
1644
+ // resolve it and skip initial-auth bookkeeping.
1646
1645
  // 3. Initial auth (neither flag set): existing behavior.
1647
1646
  #iframeLoaded = (event) => {
1648
1647
  this.applicationReady = true;
@@ -1685,33 +1684,25 @@ class LightningOutApplication extends HTMLElement {
1685
1684
  if (!this.applicationReady) {
1686
1685
  return Promise.reject(this.#loError.create(errorMessages.sessionNotReady));
1687
1686
  }
1688
- if (this.#promiseSessionExpiry) {
1689
- // coalesce concurrent callers onto the same in-flight Promise
1690
- return new Promise((resolve, reject) => {
1691
- const slot = this.#promiseSessionExpiry;
1692
- const prevResolve = slot.resolve;
1693
- const prevReject = slot.reject;
1694
- slot.resolve = (n) => {
1695
- prevResolve(n);
1696
- resolve(n);
1697
- };
1698
- slot.reject = (e) => {
1699
- prevReject(e);
1700
- reject(e);
1701
- };
1702
- });
1703
- }
1704
- return new Promise((resolve, reject) => {
1705
- const timeoutId = window.setTimeout(() => {
1706
- // Read slot.reject (the chained wrapper) at fire time — the local `reject` only
1707
- // resolves the first caller, while coalesced callers are reachable via slot.reject.
1708
- const slot = this.#promiseSessionExpiry;
1709
- this.#promiseSessionExpiry = null;
1710
- slot?.reject(this.#loError.create(errorMessages.sessionExpiryTimeout));
1711
- }, 30_000);
1712
- this.#promiseSessionExpiry = { resolve, reject, timeoutId };
1713
- this.#loIFrame.postMessage({ type: messages.lo.sessionExpiry, id: this._uuid });
1687
+ if (this.#promiseSessionExpiry)
1688
+ return this.#promiseSessionExpiry.promise;
1689
+ let resolveFn;
1690
+ let rejectFn;
1691
+ const promise = new Promise((resolve, reject) => {
1692
+ resolveFn = resolve;
1693
+ rejectFn = reject;
1714
1694
  });
1695
+ // 30s covers a single postMessage round-trip to SessionTimeServlet via the auth iframe —
1696
+ // generous headroom for a stable channel; the paired sessionRefresh timeout is longer
1697
+ // because it drives a full SSO/IdP redirect chain (see #promiseSessionRefresh setTimeout).
1698
+ const timeoutId = window.setTimeout(() => {
1699
+ const slot = this.#promiseSessionExpiry;
1700
+ this.#promiseSessionExpiry = null;
1701
+ slot?.reject(this.#loError.create(errorMessages.sessionTimeout));
1702
+ }, 30_000);
1703
+ this.#promiseSessionExpiry = { promise, resolve: resolveFn, reject: rejectFn, timeoutId };
1704
+ this.#loIFrame.postMessage({ type: messages.lo.sessionExpiry, id: this._uuid });
1705
+ return promise;
1715
1706
  }
1716
1707
  sessionRefresh() {
1717
1708
  // org-url mode has no auth iframe to reload — fast-fail rather than hang.
@@ -1721,24 +1712,26 @@ class LightningOutApplication extends HTMLElement {
1721
1712
  if (!this.applicationReady) {
1722
1713
  return Promise.reject(this.#loError.create(errorMessages.sessionNotReady));
1723
1714
  }
1724
- // Supersede in-flight refresh (caller initiated a new one) — reuse the in-progress reload.
1725
- let shouldPostReload = true;
1726
- if (this.#promiseSessionRefresh) {
1727
- clearTimeout(this.#promiseSessionRefresh.timeoutId);
1728
- this.#promiseSessionRefresh.reject(this.#loError.create(errorMessages.sessionRefreshSuperseded));
1729
- this.#promiseSessionRefresh = null;
1730
- shouldPostReload = false;
1731
- }
1732
- return new Promise((resolve, reject) => {
1733
- const timeoutId = window.setTimeout(() => {
1734
- this.#promiseSessionRefresh = null;
1735
- reject(this.#loError.create(errorMessages.sessionRefreshTimeout));
1736
- }, 60_000);
1737
- this.#promiseSessionRefresh = { resolve, reject, timeoutId };
1738
- if (shouldPostReload) {
1739
- this.#loIFrame.postMessage({ type: messages.lo.authReload, id: this._uuid });
1740
- }
1715
+ if (this.#promiseSessionRefresh)
1716
+ return this.#promiseSessionRefresh.promise;
1717
+ let resolveFn;
1718
+ let rejectFn;
1719
+ const promise = new Promise((resolve, reject) => {
1720
+ resolveFn = resolve;
1721
+ rejectFn = reject;
1741
1722
  });
1723
+ // 60s reflects that this posts `lo.auth.reload` and waits for a full iframe
1724
+ // window.location.reload() → SSO redirect chain (frontdoor + IdP handshake + app bootstrap)
1725
+ // before `lo.loaded` returns — legitimately tens of seconds under IdP slowness. The
1726
+ // paired sessionExpiry timeout is shorter because it's a single servlet round-trip.
1727
+ const timeoutId = window.setTimeout(() => {
1728
+ const slot = this.#promiseSessionRefresh;
1729
+ this.#promiseSessionRefresh = null;
1730
+ slot?.reject(this.#loError.create(errorMessages.sessionTimeout));
1731
+ }, 60_000);
1732
+ this.#promiseSessionRefresh = { promise, resolve: resolveFn, reject: rejectFn, timeoutId };
1733
+ this.#loIFrame.postMessage({ type: messages.lo.authReload, id: this._uuid });
1734
+ return promise;
1742
1735
  }
1743
1736
  /**
1744
1737
  * @internal
@@ -1757,7 +1750,7 @@ class LightningOutApplication extends HTMLElement {
1757
1750
  if (msg.error !== undefined)
1758
1751
  slot.reject(this.#loError.create(msg.error));
1759
1752
  else if (msg.ttl === undefined)
1760
- slot.reject(this.#loError.create(errorMessages.sessionExpiryMalformedResponse));
1753
+ slot.reject(this.#loError.create(errorMessages.sessionMalformedResponse));
1761
1754
  else
1762
1755
  slot.resolve(msg.ttl);
1763
1756
  }
@@ -1769,12 +1762,25 @@ class LightningOutApplication extends HTMLElement {
1769
1762
  this.#promiseSessionRefresh = null;
1770
1763
  slot.reject(this.#loError.create(detail));
1771
1764
  }
1765
+ #failPendingExpiry(detail) {
1766
+ const slot = this.#promiseSessionExpiry;
1767
+ if (!slot)
1768
+ return;
1769
+ clearTimeout(slot.timeoutId);
1770
+ this.#promiseSessionExpiry = null;
1771
+ slot.reject(this.#loError.create(detail));
1772
+ }
1773
+ #failAllPending(reason) {
1774
+ this.#failPendingRefresh(reason);
1775
+ this.#failPendingExpiry(reason);
1776
+ }
1772
1777
  #iframeError = (event) => {
1773
1778
  // Reset #isRefreshing so a failed frontdoor-url refresh doesn't leave the flag stuck —
1774
1779
  // otherwise the NEXT successful #iframeLoaded would be misinterpreted as a refresh and
1775
1780
  // skip #initComponents() + lo.application.ready.
1776
1781
  this.#isRefreshing = false;
1777
- this.#failPendingRefresh(event.detail?.message ?? errorMessages.sessionRefreshIframeError);
1782
+ const detail = event.detail?.message;
1783
+ this.#failAllPending(detail ?? errorMessages.sessionIframeError);
1778
1784
  // Notify the user that the application session has failed
1779
1785
  this.#loError.dispatch(events.lo.application.error, event);
1780
1786
  };
@@ -1851,16 +1857,13 @@ class LightningOutApplication extends HTMLElement {
1851
1857
  throw this.#loError.create(`Can't set "frontdoor-url" because "org-url" is already set`);
1852
1858
  }
1853
1859
  if (frontdoorUrl === "") {
1860
+ this.#failAllPending(errorMessages.sessionTerminated);
1854
1861
  this.#logout();
1855
1862
  return;
1856
1863
  }
1857
- // Supersede any in-flight sessionRefresh()
1858
- if (this.#promiseSessionRefresh) {
1859
- clearTimeout(this.#promiseSessionRefresh.timeoutId);
1860
- this.#promiseSessionRefresh.reject(this.#loError.create(errorMessages.sessionRefreshSuperseded));
1861
- this.#promiseSessionRefresh = null;
1862
- }
1863
- this.#isRefreshing = this.applicationReady;
1864
+ const hadPendingRefresh = this.#promiseSessionRefresh !== null;
1865
+ this.#failAllPending(errorMessages.sessionTerminated);
1866
+ this.#isRefreshing = this.applicationReady && !hadPendingRefresh;
1864
1867
  this.#login(frontdoorUrl);
1865
1868
  };
1866
1869
  _propertyChanged_sitePrefix = (sitePrefix) => {
@@ -1982,16 +1985,7 @@ class LightningOutApplication extends HTMLElement {
1982
1985
  logger.trace("disconnectedCallback: called", `_uuid: ${this._uuid}`);
1983
1986
  // Reject pending session Promises before #logout() — the navigation it triggers would otherwise
1984
1987
  // resolve a pending refresh that should be terminated.
1985
- if (this.#promiseSessionExpiry) {
1986
- clearTimeout(this.#promiseSessionExpiry.timeoutId);
1987
- this.#promiseSessionExpiry.reject(this.#loError.create(errorMessages.sessionTerminated));
1988
- this.#promiseSessionExpiry = null;
1989
- }
1990
- if (this.#promiseSessionRefresh) {
1991
- clearTimeout(this.#promiseSessionRefresh.timeoutId);
1992
- this.#promiseSessionRefresh.reject(this.#loError.create(errorMessages.sessionTerminated));
1993
- this.#promiseSessionRefresh = null;
1994
- }
1988
+ this.#failAllPending(errorMessages.sessionTerminated);
1995
1989
  // Since disconnectedCallback is called after the DOM has been removed, calling logout and destroying the iframe
1996
1990
  // here may be a moot point, but doing it for completeness.
1997
1991
  this.#logout();
@@ -1,4 +1,4 @@
1
- /*! @salesforce/lightning-out v2.2.5-rc.2 (2026-07-14) */
1
+ /*! @salesforce/lightning-out v2.2.5-rc.3 (2026-07-20) */
2
2
  var LO2 = (function (exports) {
3
3
  'use strict';
4
4
 
@@ -185,11 +185,9 @@ var LO2 = (function (exports) {
185
185
  const logger$4 = new Logger("LightningOutError");
186
186
  const errorMessages = {
187
187
  sessionNotReady: "Session not ready",
188
- sessionRefreshSuperseded: "Session refresh superseded",
189
- sessionRefreshTimeout: "Session refresh timeout",
190
- sessionRefreshIframeError: "Session refresh failed: iframe error",
191
- sessionExpiryTimeout: "Session expiry timeout",
192
- sessionExpiryMalformedResponse: "Malformed sessionExpiry response",
188
+ sessionTimeout: "Session timeout",
189
+ sessionIframeError: "Session failed: iframe error",
190
+ sessionMalformedResponse: "Malformed sessionExpiry response",
193
191
  sessionTerminated: "Session terminated",
194
192
  notSupportedInOrgUrlMode: "Session APIs are not supported in org-url mode",
195
193
  };
@@ -1491,7 +1489,7 @@ var LO2 = (function (exports) {
1491
1489
  url.searchParams.set("parentElementId", parentElementId);
1492
1490
  url.searchParams.set("loAppOrigin", this.config.loAppOrigin);
1493
1491
  // This helps in general but also for cache busting
1494
- url.searchParams.set("loVersion", "2.2.5-rc.2");
1492
+ url.searchParams.set("loVersion", "2.2.5-rc.3");
1495
1493
  if (this.config.appId) {
1496
1494
  url.searchParams.set("appId", this.config.appId);
1497
1495
  }
@@ -1643,9 +1641,10 @@ var LO2 = (function (exports) {
1643
1641
  return this.getRouter().getPageURL(pagePathname, this._uuid);
1644
1642
  }
1645
1643
  // Three paths reach #iframeLoaded:
1646
- // 1. frontdoor-url update (#isRefreshing=true): supersession in _propertyChanged_frontdoorUrl has already
1647
- // cleared #promiseSessionRefresh, so only #isRefreshing needs to be checked.
1648
- // 2. sessionRefresh()-initiated reload (#promiseSessionRefresh set): resolve and skip initial-auth bookkeeping.
1644
+ // 1. frontdoor-url update (#isRefreshing=true): _propertyChanged_frontdoorUrl has already failed any pending
1645
+ // sessionRefresh via #failAllPending, so only #isRefreshing needs to be checked here.
1646
+ // 2. sessionRefresh()-initiated reload (#promiseSessionRefresh set): coalesced callers share this slot;
1647
+ // resolve it and skip initial-auth bookkeeping.
1649
1648
  // 3. Initial auth (neither flag set): existing behavior.
1650
1649
  #iframeLoaded = (event) => {
1651
1650
  this.applicationReady = true;
@@ -1688,33 +1687,25 @@ var LO2 = (function (exports) {
1688
1687
  if (!this.applicationReady) {
1689
1688
  return Promise.reject(this.#loError.create(errorMessages.sessionNotReady));
1690
1689
  }
1691
- if (this.#promiseSessionExpiry) {
1692
- // coalesce concurrent callers onto the same in-flight Promise
1693
- return new Promise((resolve, reject) => {
1694
- const slot = this.#promiseSessionExpiry;
1695
- const prevResolve = slot.resolve;
1696
- const prevReject = slot.reject;
1697
- slot.resolve = (n) => {
1698
- prevResolve(n);
1699
- resolve(n);
1700
- };
1701
- slot.reject = (e) => {
1702
- prevReject(e);
1703
- reject(e);
1704
- };
1705
- });
1706
- }
1707
- return new Promise((resolve, reject) => {
1708
- const timeoutId = window.setTimeout(() => {
1709
- // Read slot.reject (the chained wrapper) at fire time — the local `reject` only
1710
- // resolves the first caller, while coalesced callers are reachable via slot.reject.
1711
- const slot = this.#promiseSessionExpiry;
1712
- this.#promiseSessionExpiry = null;
1713
- slot?.reject(this.#loError.create(errorMessages.sessionExpiryTimeout));
1714
- }, 30_000);
1715
- this.#promiseSessionExpiry = { resolve, reject, timeoutId };
1716
- this.#loIFrame.postMessage({ type: messages.lo.sessionExpiry, id: this._uuid });
1690
+ if (this.#promiseSessionExpiry)
1691
+ return this.#promiseSessionExpiry.promise;
1692
+ let resolveFn;
1693
+ let rejectFn;
1694
+ const promise = new Promise((resolve, reject) => {
1695
+ resolveFn = resolve;
1696
+ rejectFn = reject;
1717
1697
  });
1698
+ // 30s covers a single postMessage round-trip to SessionTimeServlet via the auth iframe —
1699
+ // generous headroom for a stable channel; the paired sessionRefresh timeout is longer
1700
+ // because it drives a full SSO/IdP redirect chain (see #promiseSessionRefresh setTimeout).
1701
+ const timeoutId = window.setTimeout(() => {
1702
+ const slot = this.#promiseSessionExpiry;
1703
+ this.#promiseSessionExpiry = null;
1704
+ slot?.reject(this.#loError.create(errorMessages.sessionTimeout));
1705
+ }, 30_000);
1706
+ this.#promiseSessionExpiry = { promise, resolve: resolveFn, reject: rejectFn, timeoutId };
1707
+ this.#loIFrame.postMessage({ type: messages.lo.sessionExpiry, id: this._uuid });
1708
+ return promise;
1718
1709
  }
1719
1710
  sessionRefresh() {
1720
1711
  // org-url mode has no auth iframe to reload — fast-fail rather than hang.
@@ -1724,24 +1715,26 @@ var LO2 = (function (exports) {
1724
1715
  if (!this.applicationReady) {
1725
1716
  return Promise.reject(this.#loError.create(errorMessages.sessionNotReady));
1726
1717
  }
1727
- // Supersede in-flight refresh (caller initiated a new one) — reuse the in-progress reload.
1728
- let shouldPostReload = true;
1729
- if (this.#promiseSessionRefresh) {
1730
- clearTimeout(this.#promiseSessionRefresh.timeoutId);
1731
- this.#promiseSessionRefresh.reject(this.#loError.create(errorMessages.sessionRefreshSuperseded));
1732
- this.#promiseSessionRefresh = null;
1733
- shouldPostReload = false;
1734
- }
1735
- return new Promise((resolve, reject) => {
1736
- const timeoutId = window.setTimeout(() => {
1737
- this.#promiseSessionRefresh = null;
1738
- reject(this.#loError.create(errorMessages.sessionRefreshTimeout));
1739
- }, 60_000);
1740
- this.#promiseSessionRefresh = { resolve, reject, timeoutId };
1741
- if (shouldPostReload) {
1742
- this.#loIFrame.postMessage({ type: messages.lo.authReload, id: this._uuid });
1743
- }
1718
+ if (this.#promiseSessionRefresh)
1719
+ return this.#promiseSessionRefresh.promise;
1720
+ let resolveFn;
1721
+ let rejectFn;
1722
+ const promise = new Promise((resolve, reject) => {
1723
+ resolveFn = resolve;
1724
+ rejectFn = reject;
1744
1725
  });
1726
+ // 60s reflects that this posts `lo.auth.reload` and waits for a full iframe
1727
+ // window.location.reload() → SSO redirect chain (frontdoor + IdP handshake + app bootstrap)
1728
+ // before `lo.loaded` returns — legitimately tens of seconds under IdP slowness. The
1729
+ // paired sessionExpiry timeout is shorter because it's a single servlet round-trip.
1730
+ const timeoutId = window.setTimeout(() => {
1731
+ const slot = this.#promiseSessionRefresh;
1732
+ this.#promiseSessionRefresh = null;
1733
+ slot?.reject(this.#loError.create(errorMessages.sessionTimeout));
1734
+ }, 60_000);
1735
+ this.#promiseSessionRefresh = { promise, resolve: resolveFn, reject: rejectFn, timeoutId };
1736
+ this.#loIFrame.postMessage({ type: messages.lo.authReload, id: this._uuid });
1737
+ return promise;
1745
1738
  }
1746
1739
  /**
1747
1740
  * @internal
@@ -1760,7 +1753,7 @@ var LO2 = (function (exports) {
1760
1753
  if (msg.error !== undefined)
1761
1754
  slot.reject(this.#loError.create(msg.error));
1762
1755
  else if (msg.ttl === undefined)
1763
- slot.reject(this.#loError.create(errorMessages.sessionExpiryMalformedResponse));
1756
+ slot.reject(this.#loError.create(errorMessages.sessionMalformedResponse));
1764
1757
  else
1765
1758
  slot.resolve(msg.ttl);
1766
1759
  }
@@ -1772,12 +1765,25 @@ var LO2 = (function (exports) {
1772
1765
  this.#promiseSessionRefresh = null;
1773
1766
  slot.reject(this.#loError.create(detail));
1774
1767
  }
1768
+ #failPendingExpiry(detail) {
1769
+ const slot = this.#promiseSessionExpiry;
1770
+ if (!slot)
1771
+ return;
1772
+ clearTimeout(slot.timeoutId);
1773
+ this.#promiseSessionExpiry = null;
1774
+ slot.reject(this.#loError.create(detail));
1775
+ }
1776
+ #failAllPending(reason) {
1777
+ this.#failPendingRefresh(reason);
1778
+ this.#failPendingExpiry(reason);
1779
+ }
1775
1780
  #iframeError = (event) => {
1776
1781
  // Reset #isRefreshing so a failed frontdoor-url refresh doesn't leave the flag stuck —
1777
1782
  // otherwise the NEXT successful #iframeLoaded would be misinterpreted as a refresh and
1778
1783
  // skip #initComponents() + lo.application.ready.
1779
1784
  this.#isRefreshing = false;
1780
- this.#failPendingRefresh(event.detail?.message ?? errorMessages.sessionRefreshIframeError);
1785
+ const detail = event.detail?.message;
1786
+ this.#failAllPending(detail ?? errorMessages.sessionIframeError);
1781
1787
  // Notify the user that the application session has failed
1782
1788
  this.#loError.dispatch(events.lo.application.error, event);
1783
1789
  };
@@ -1854,16 +1860,13 @@ var LO2 = (function (exports) {
1854
1860
  throw this.#loError.create(`Can't set "frontdoor-url" because "org-url" is already set`);
1855
1861
  }
1856
1862
  if (frontdoorUrl === "") {
1863
+ this.#failAllPending(errorMessages.sessionTerminated);
1857
1864
  this.#logout();
1858
1865
  return;
1859
1866
  }
1860
- // Supersede any in-flight sessionRefresh()
1861
- if (this.#promiseSessionRefresh) {
1862
- clearTimeout(this.#promiseSessionRefresh.timeoutId);
1863
- this.#promiseSessionRefresh.reject(this.#loError.create(errorMessages.sessionRefreshSuperseded));
1864
- this.#promiseSessionRefresh = null;
1865
- }
1866
- this.#isRefreshing = this.applicationReady;
1867
+ const hadPendingRefresh = this.#promiseSessionRefresh !== null;
1868
+ this.#failAllPending(errorMessages.sessionTerminated);
1869
+ this.#isRefreshing = this.applicationReady && !hadPendingRefresh;
1867
1870
  this.#login(frontdoorUrl);
1868
1871
  };
1869
1872
  _propertyChanged_sitePrefix = (sitePrefix) => {
@@ -1985,16 +1988,7 @@ var LO2 = (function (exports) {
1985
1988
  logger.trace("disconnectedCallback: called", `_uuid: ${this._uuid}`);
1986
1989
  // Reject pending session Promises before #logout() — the navigation it triggers would otherwise
1987
1990
  // resolve a pending refresh that should be terminated.
1988
- if (this.#promiseSessionExpiry) {
1989
- clearTimeout(this.#promiseSessionExpiry.timeoutId);
1990
- this.#promiseSessionExpiry.reject(this.#loError.create(errorMessages.sessionTerminated));
1991
- this.#promiseSessionExpiry = null;
1992
- }
1993
- if (this.#promiseSessionRefresh) {
1994
- clearTimeout(this.#promiseSessionRefresh.timeoutId);
1995
- this.#promiseSessionRefresh.reject(this.#loError.create(errorMessages.sessionTerminated));
1996
- this.#promiseSessionRefresh = null;
1997
- }
1991
+ this.#failAllPending(errorMessages.sessionTerminated);
1998
1992
  // Since disconnectedCallback is called after the DOM has been removed, calling logout and destroying the iframe
1999
1993
  // here may be a moot point, but doing it for completeness.
2000
1994
  this.#logout();
@@ -1,10 +1,10 @@
1
- /*! @salesforce/lightning-out v2.2.5-rc.2 (2026-07-14) */
2
- var LO2=function(e){"use strict";const t={error:0,warn:1,info:2,debug:3,trace:4};class r{static#e="LO2";static#t="error";#r;static set level(e){this.#t=e}static set prefix(e){this.#e=e}get brand(){return`${r.#e}:${this.#r}:`}constructor(e){this.#r="string"==typeof e?e:e.constructor?.name}error(...e){t.error<=t[r.#t]&&console.error(this.brand,...e)}warn(...e){t.warn<=t[r.#t]&&console.warn(this.brand,...e)}info(...e){t.info<=t[r.#t]&&console.info(this.brand,...e)}debug(...e){t.debug<=t[r.#t]&&console.debug(this.brand,...e)}trace(...e){t.trace<=t[r.#t]&&console.trace(this.brand,...e)}}function i(){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 r("LightningOutError"),a="Session not ready",h="Session refresh superseded",l="Session refresh timeout",c="Session refresh failed: iframe error",p="Session expiry timeout",d="Malformed sessionExpiry response",m="Session terminated",u="Session APIs are not supported in org-url mode";class g{#i;#r;constructor(e){this.#r="string"==typeof e?e:e.constructor?.name,"function"==typeof e.dispatchEvent&&(this.#i=e)}#s(e){return`${this.#r}: ${e}`}create(e){const t="string"==typeof e?e:e.message;return new Error(this.#s(t))}dispatch(e,t){const r="string"==typeof t?t:t.message||t.detail?.message;if(this.#i){const i=t.detail||{message:this.#s(r),originalError:t},s=new CustomEvent(e,{detail:i});this.#i.dispatchEvent(s),n.error(`${this.#s("dispatched error")} -> ${e}: ${r}`)}else n.error(`${this.#s("unable to dispatch error on a non-EventTarget object")} -> ${e}: ${r}`)}}const f=new g("LightningOutUtils");function v(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function w(e,t=!1){if(/[A-Z]/.test(e))throw f.create(`elementNameToStandardName: "${e}" is not a valid custom element name - must be all lowercase.`);const r=e.indexOf("-");if(-1===r)throw f.create(`elementNameToStandardName: "${e}" is not a valid custom element name - missing hyphen character.`);return`${function(e){if(/[A-Z]/.test(e))throw f.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,r))}${t?":":"/"}${function(e){if(/[A-Z]/.test(e))throw f.create(`kebabToCamel: "${e}" is not valid kebab-case - must be all lowercase.`);return e.replace(/-([a-z])/g,(e,t)=>t.toUpperCase())}(e.slice(r+1))}`}function b(e,t){const r=Object.entries(t).map(t=>{let[r,i]=t;const s=r.split("dataMirror");2===s.length&&""===s[0]&&(r=s[1].charAt(0).toLowerCase()+s[1].slice(1));const o=`_propertyChanged_${r}`;if("function"==typeof e[o]){i=(0,e[o])(i)}return[r,i]});return Object.fromEntries(r)}const E=new r("LightningOutIFrame");class y{#o;#n;#a;#h="display:none";#l="border:0px; width:100%; height:100%; overflow:auto;";#c;#p;#d;#m;#u;#g;constructor(e){this.#o=e.parentElement,this.#n=e.parentElement instanceof $,this.#a=new g(e.parentElement)}get iframeReady(){return!!this.#d&&!!this.#m}get iframeElement(){return this.#p}#f(e,t){this.#d=e,this.#m=t}#v=e=>{if(e.data.id===this.#o._uuid)switch(E.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.#p&&this.#n&&(this.#p.style.height=`${e}px`,E.debug(`#handleResize: applied height ${e}px to iframe`))}#b(){if(!this.#p){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.#p=e,this.#c=this.#o.attachShadow({mode:"closed"}),this.#c.appendChild(this.#p),e.addEventListener("load",this.#E),window.addEventListener("message",this.#v)}return this.#p}load(e){const t=this.#b();this.#u=new URL(e),E.debug("#loadIframe: endpoint =",function(e){const t={},r=e=>{const t={};for(const[r,i]of e.entries())t[r]=i;return t};if(t.url=e.origin+e.pathname,t.urlParams=r(e.searchParams),"/secur/frontdoor.jsp"===e.pathname){const e=t.urlParams.otp?"startURL":"retURL",i=new URL(t.urlParams[e],"http://dummy.com");t.urlParams[e]={url:i.pathname,urlParams:r(i.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}#E=()=>{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.#y(e)}},6e4)};destroy(){this.#c&&(this.#c.innerHTML=""),this.#p&&this.#p.remove(),this.#c=void 0,this.#p=void 0,this.#f(void 0,void 0)}#y(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.#d||!this.#m)throw this.#a.create("Error attempting to postMessage on an iframe that is not ready.");E.debug("postMessage:",`parentElement: ${this.#o._uuid}`,JSON.stringify(e));try{this.#d.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.5-rc.3 (2026-07-20) */
2
+ var LO2=function(e){"use strict";const t={error:0,warn:1,info:2,debug:3,trace:4};class r{static#e="LO2";static#t="error";#r;static set level(e){this.#t=e}static set prefix(e){this.#e=e}get brand(){return`${r.#e}:${this.#r}:`}constructor(e){this.#r="string"==typeof e?e:e.constructor?.name}error(...e){t.error<=t[r.#t]&&console.error(this.brand,...e)}warn(...e){t.warn<=t[r.#t]&&console.warn(this.brand,...e)}info(...e){t.info<=t[r.#t]&&console.info(this.brand,...e)}debug(...e){t.debug<=t[r.#t]&&console.debug(this.brand,...e)}trace(...e){t.trace<=t[r.#t]&&console.trace(this.brand,...e)}}function i(){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 r("LightningOutError"),a="Session not ready",h="Session timeout",l="Session failed: iframe error",c="Malformed sessionExpiry response",d="Session terminated",p="Session APIs are not supported in org-url mode";class m{#i;#r;constructor(e){this.#r="string"==typeof e?e:e.constructor?.name,"function"==typeof e.dispatchEvent&&(this.#i=e)}#s(e){return`${this.#r}: ${e}`}create(e){const t="string"==typeof e?e:e.message;return new Error(this.#s(t))}dispatch(e,t){const r="string"==typeof t?t:t.message||t.detail?.message;if(this.#i){const i=t.detail||{message:this.#s(r),originalError:t},s=new CustomEvent(e,{detail:i});this.#i.dispatchEvent(s),n.error(`${this.#s("dispatched error")} -> ${e}: ${r}`)}else n.error(`${this.#s("unable to dispatch error on a non-EventTarget object")} -> ${e}: ${r}`)}}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 r=e.indexOf("-");if(-1===r)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,r))}${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(r+1))}`}function v(e,t){const r=Object.entries(t).map(t=>{let[r,i]=t;const s=r.split("dataMirror");2===s.length&&""===s[0]&&(r=s[1].charAt(0).toLowerCase()+s[1].slice(1));const o=`_propertyChanged_${r}`;if("function"==typeof e[o]){i=(0,e[o])(i)}return[r,i]});return Object.fromEntries(r)}const w=new r("LightningOutIFrame");class b{#o;#n;#a;#h="display:none";#l="border:0px; width:100%; height:100%; overflow:auto;";#c;#d;#p;#m;#u;#g;constructor(e){this.#o=e.parentElement,this.#n=e.parentElement instanceof A,this.#a=new m(e.parentElement)}get iframeReady(){return!!this.#p&&!!this.#m}get iframeElement(){return this.#d}#f(e,t){this.#p=e,this.#m=t}#v=e=>{if(e.data.id===this.#o._uuid)switch(w.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 I&&this.#o._handleSessionExpiryResponse(e.data)}};#w(e){this.#d&&this.#n&&(this.#d.style.height=`${e}px`,w.debug(`#handleResize: applied height ${e}px to iframe`))}#b(){if(!this.#d){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.#d=e,this.#c=this.#o.attachShadow({mode:"closed"}),this.#c.appendChild(this.#d),e.addEventListener("load",this.#E),window.addEventListener("message",this.#v)}return this.#d}load(e){const t=this.#b();this.#u=new URL(e),w.debug("#loadIframe: endpoint =",function(e){const t={},r=e=>{const t={};for(const[r,i]of e.entries())t[r]=i;return t};if(t.url=e.origin+e.pathname,t.urlParams=r(e.searchParams),"/secur/frontdoor.jsp"===e.pathname){const e=t.urlParams.otp?"startURL":"retURL",i=new URL(t.urlParams[e],"http://dummy.com");t.urlParams[e]={url:i.pathname,urlParams:r(i.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}#E=()=>{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.#y(e)}},6e4)};destroy(){this.#c&&(this.#c.innerHTML=""),this.#d&&this.#d.remove(),this.#c=void 0,this.#d=void 0,this.#f(void 0,void 0)}#y(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.");w.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 _=new r("PropertyObserver");class C{_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,r){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(r&&"function"!=typeof r)throw new TypeError("shouldObserve callback must be a function");this._el=e,this._cb=t,this._cache=new Map,this._shouldObserve=r||((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 r=t.name,i=this._isStandardAttribute(r);if(!this._shouldObserve(r,i))continue;const s=this._attributeNameToPropName(r),o=t.value;e[s]=o,this._cache.set(s,o),this._installPropertyInterceptor(s)}for(const t of Object.getOwnPropertyNames(this._el)){const r=this._isStandardProperty(t);if(this._cache.has(t)||!this._shouldObserve(t,r))continue;const i=this._el[t];e[t]=i,this._cache.set(t,i),this._installPropertyInterceptor(t)}if(Object.keys(e).length>0)try{this._cb(e)}catch(e){_.error("Error in initial PropertyObserver callback:",e)}}_setupMutationObserver(){this._observer=new MutationObserver(e=>{const t={};for(const r of e)if("attributes"===r.type&&r.attributeName){const e=r.attributeName,i=this._isStandardAttribute(e);if(!this._shouldObserve(e,i))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 r={enumerable:t.enumerable,configurable:t.configurable,get:t.get||(()=>t.value),set:r=>{r!==this._cache.get(e)&&(t.set?t.set.call(this._el,r):t.value=r,this._cache.set(e,r),this._batchChanges({[e]:r}))}};Object.defineProperty(this._el,e,r),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){_.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 R=new class{#_=new g("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 r=t;if(!r){const t=e.localName;if(r=this.compNameToApp.get(t),!r)throw this.#_.create(`Could not find a parent App for component "${e.localName}"`)}return this.appToComps.get(r).add(e),this.compToApp.set(e,r),r}unregisterComponent(e){const t=this.compToApp.get(e);if(!t)return!1;const r=this.appToComps.get(t);return r?.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}},S=new r("LightningOutComponent"),L=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"]),A=new Set(["accesskey","autofocus","draggable","exportparts","hidden","inert","nonce","part","slot","tabindex"]),O=new Set(["aria-activedescendant","aria-controls","aria-describedby","aria-details","aria-errormessage","aria-flowto","aria-labelledby","aria-owns"]);class $ extends HTMLElement{_uuid=i();componentReady=!1;_standardName=w(this.localName);#C;#_=new g(this);#R=new y({parentElement:this});#S;#L=!0;#P=[];#A=new WeakMap;#O=0;constructor(){super(),S.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.#R.load(this._getComponentURL().href)}#v=e=>{if(e.data.id===this._uuid)switch(S.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.#P.length;){const e=this.#P.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.#S=new C(this,this.#$,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:S.info("#messageListener:","Unknown message received:",{"event.data":e.data})}};_propertyChanged_style=e=>{const t=this.style,r=[];for(let e=0;e<t.length;e+=1){const i=t.item(e);i.startsWith("--")&&r.push(`${i}:${t.getPropertyValue(i)}`)}return r.join(";")};#$=e=>{const t=b(this,e);S.debug("#propObserverCallback:",{changes:e,propsToSend:t}),this.#L?(this.#L=!1,this.#R.postMessage({type:o.setComponentData,componentData:{id:this._uuid,name:this._standardName,props:t}})):this.#R.postMessage({type:o.setComponentProps,componentProps:t})};#U=(e,t)=>{const r=v(e);return S.debug("#shouldObserveCallback:",{attrOrPropName:e,attrName:r,isStandard:t}),t?!(!L.has(r)&&!P.has(r))||(A.has(r)||O.has(r)||r.startsWith("on")?(S.warn(`"${r}" will not be mirrored.`),!1):!!r.startsWith("data-mirror-")||(S.warn(`"${r}" will not be mirrored.`),!1)):!r.startsWith("_")};addEventListener(e,t,r){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,r);let i=this.#A.get(t);i||(i=`${e}_${this.#O++}`,this.#A.set(t,i)),this.componentReady?(super.addEventListener(...arguments),this.#R.postMessage({name:e,options:r,listenerKey:i,type:o.addEventListener})):(this.#P.push({type:"add",args:[e,t,r]}),S.debug("addEventListener:","#eventQueue pushed add args:",[e,t,r]))}dispatchEvent(e){if(e.type.startsWith("lo."))return S.debug(`dispatchEvent: dispatching event "${e.type}" to this Element only`),super.dispatchEvent(e);if(this.componentReady){S.debug(`dispatchEvent: dispatching event "${e.type}" to this Element and embedded Element inside the iframe`);const t=super.dispatchEvent(e);return this.#R.postMessage({name:e.type,detail:e.detail||{},type:o.dispatchEvent}),t}return S.debug(`dispatchEvent: component not ready, queueing event "${e.type}"`),this.#P.push({type:"dispatch",event:e}),!0}removeEventListener(e,t,r){if(e.startsWith("lo."))return void super.removeEventListener(...arguments);const i=this.#A.get(t);this.componentReady?(super.removeEventListener(...arguments),this.#R.postMessage({name:e,options:r,listenerKey:i,type:o.removeEventListener})):(this.#P.push({type:"remove",args:[e,t,r]}),S.debug("removeEventListener:","#eventQueue pushed remove args:",[e,t,r])),i&&this.#A.delete(t)}adoptedCallback(){throw this.remove(),this.#_.create("This component cannot be rerendered for security reasons.")}connectedCallback(){if(S.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=R.registerComponent(this),this._standardName=this.#C._getComponentStandardName(this),this.#C.applicationReady&&this._init()}disconnectedCallback(){S.trace("disconnectedCallback: called",`_uuid: ${this._uuid}`),this.#R.destroy(),window.removeEventListener("message",this.#v),R.unregisterComponent(this),this.#S?.disconnect()}connectedMoveCallback(){}}class U{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 r;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 i=this.config.lang?`l/${this.config.lang}/`:"";r=new URL(`lwr/application/amd/0/${i}ai/${t}`,this.config.origin)}else r=new URL(`${this.config.sitePrefix}/lightning-out`,this.config.origin);return r.searchParams.set("componentName",e),this.#I(r,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.#I(t,e)}getPageURL(e,t){const r=new URL(e,this.config.origin);return this.#I(r,t)}#I(e,t){return e.searchParams.set("parentElementId",t),e.searchParams.set("loAppOrigin",this.config.loAppOrigin),e.searchParams.set("loVersion","2.2.5-rc.2"),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 I=new r("LightningOutApplication"),N=new Set(["slds1","slds2","none"]),T=new Set(["frontdoorUrl","orgUrl"]);class k extends HTMLElement{_uuid=i();applicationReady=!1;#_=new g(this);#R=new y({parentElement:this});#N;#S;#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(),I.trace("constructor: called",`_uuid: ${this._uuid}`),R.registerApplication(this)}addEventListener(e,t,r){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,r)}#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(),r=this.#H.searchParams.has("otp")?"startURL":"retURL";this.#H.searchParams.set(r,t.pathname+t.search);const i=this.#re(this.#F);this.#H.searchParams.set("error-redirect-uri",i.pathname+i.search)}catch{throw this.#_.create(`Invalid frontdoor-url: ${e}`)}this.#R.load(this.#H.href)}#ie(){const e=new URL(this.#W,this.#T),t=this.#re(this.#D);e.searchParams.set("redirect-uri",t.pathname+t.search),this.#R.load(e.href)}getRouter(){if(void 0===this.#N){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.#N=new U(e,e=>this.#_.create(e))}return this.#N}_getComponentURL(e,t){return this.getRouter().getComponentURL(e,t)}#te(){return this.getRouter().getAuthURL(this._uuid)}#re(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.#N=void 0,this.#G?(I.trace("#iframeLoaded: frontdoor-url refresh path"),this.#G=!1,void this.dispatchEvent(new CustomEvent(s.application.session.refresh))):this.#B?(I.trace("#iframeLoaded: sessionRefresh() reload path"),clearTimeout(this.#B.timeoutId),this.#B.resolve(),void(this.#B=null)):(I.trace("#iframeLoaded: initial-auth path"),this.#oe(),void this.dispatchEvent(new CustomEvent(s.application.ready)))};sessionExpiry(){return void 0!==this.#z?Promise.reject(this.#_.create(u)):this.applicationReady?this.#X?new Promise((e,t)=>{const r=this.#X,i=r.resolve,s=r.reject;r.resolve=t=>{i(t),e(t)},r.reject=e=>{s(e),t(e)}}):new Promise((e,t)=>{const r=window.setTimeout(()=>{const e=this.#X;this.#X=null,e?.reject(this.#_.create(p))},3e4);this.#X={resolve:e,reject:t,timeoutId:r},this.#R.postMessage({type:o.sessionExpiry,id:this._uuid})}):Promise.reject(this.#_.create(a))}sessionRefresh(){if(void 0!==this.#z)return Promise.reject(this.#_.create(u));if(!this.applicationReady)return Promise.reject(this.#_.create(a));let e=!0;return this.#B&&(clearTimeout(this.#B.timeoutId),this.#B.reject(this.#_.create(h)),this.#B=null,e=!1),new Promise((t,r)=>{const i=window.setTimeout(()=>{this.#B=null,r(this.#_.create(l))},6e4);this.#B={resolve:t,reject:r,timeoutId:i},e&&this.#R.postMessage({type:o.authReload,id:this._uuid})})}_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=>{this.#G=!1,this.#ne(e.detail?.message??c),this.#_.dispatch(s.application.error,e)};#he=e=>{this.dispatchEvent(new CustomEvent(s.application.logout))};#le=e=>{this.dispatchEvent(new CustomEvent(s.application.auth.redirect,{detail:e.detail}))};#oe(){R.getComps(this).forEach(e=>{e._init()})}#$=e=>{const t={},r={};Object.keys(e).forEach(i=>{T.has(i)?r[i]=e[i]:t[i]=e[i]}),b(this,t),b(this,r)};#U=(e,t)=>t?"lang"===e:!e.startsWith("_");_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.#ie():this.#Y(e)}};_propertyChanged_frontdoorUrl=e=>{if(void 0!==e){if(void 0!==this.#z)throw this.#_.create('Can\'t set "frontdoor-url" because "org-url" is already set');""!==e?(this.#B&&(clearTimeout(this.#B.timeoutId),this.#B.reject(this.#_.create(h)),this.#B=null),this.#G=this.applicationReady,this.#ee(e)):this.#ie()}};_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),r=[];for(const e of t){const[t,...i]=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=i.join(":").trim();o&&r.push(`${s}:${o}`)}this.#q=r.join(";")+";"}};_propertyChanged_components=e=>{void 0!==e&&e.split(",").forEach(e=>{const[t,r]=e.split(" as ").map(e=>e.trim()),i=function(e){return e.includes("/")||e.includes(":")}(t);if(i&&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=i?t:w(t),o=r||(i?function(e){const t=e.includes("/")?"/":":",r=e.indexOf(t);if(-1===r)throw f.create(`standardNameToElementName: "${e}" is not a valid component name - missing namespace separator.`);if(/-/.test(e))throw f.create(`standardNameToElementName: "${e}" is not a valid component name - must not contain hyphens.`);if(/^[A-Z]/.test(e))throw f.create(`standardNameToElementName: "${e}" is not a valid component name - first character must not be uppercase.`);const i=e.slice(0,r),s=e.slice(r+1);return`${i.replace(/([A-Z_])/g,"_$1").toLowerCase()}-${v(s)}`}(s):t);if(o&&!this.#Q.has(o)){this.#Q.set(o,s);try{R.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,r=e.hasAttribute("aura"),i=this.#Q.get(t);if(!i)throw this.#_.create(`"${t}" is not registered.`);return r&&i.includes("/")?i.replace("/",":"):i}get _compNames(){}connectedCallback(){if(I.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.#ae),this.addEventListener(s.iframe.logout,this.#he),this.addEventListener(s.iframe.auth.redirect,this.#le),this.#S=new C(this,this.#$,this.#U)}disconnectedCallback(){I.trace("disconnectedCallback: called",`_uuid: ${this._uuid}`),this.#X&&(clearTimeout(this.#X.timeoutId),this.#X.reject(this.#_.create(m)),this.#X=null),this.#B&&(clearTimeout(this.#B.timeoutId),this.#B.reject(this.#_.create(m)),this.#B=null),this.#ie(),this.#R.destroy(),this.removeEventListener(s.iframe.load,this.#se),this.removeEventListener(s.iframe.error,this.#ae),this.removeEventListener(s.iframe.logout,this.#he),this.removeEventListener(s.iframe.auth.redirect,this.#le),this.#S?.disconnect()}connectedMoveCallback(){}}return r.level="debug",window.customElements.define("lightning-out-application",k),e.LightningOutApplication=k,e}({});
9
+ */const E=new r("PropertyObserver");class y{_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,r){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(r&&"function"!=typeof r)throw new TypeError("shouldObserve callback must be a function");this._el=e,this._cb=t,this._cache=new Map,this._shouldObserve=r||((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 r=t.name,i=this._isStandardAttribute(r);if(!this._shouldObserve(r,i))continue;const s=this._attributeNameToPropName(r),o=t.value;e[s]=o,this._cache.set(s,o),this._installPropertyInterceptor(s)}for(const t of Object.getOwnPropertyNames(this._el)){const r=this._isStandardProperty(t);if(this._cache.has(t)||!this._shouldObserve(t,r))continue;const i=this._el[t];e[t]=i,this._cache.set(t,i),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 r of e)if("attributes"===r.type&&r.attributeName){const e=r.attributeName,i=this._isStandardAttribute(e);if(!this._shouldObserve(e,i))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 r={enumerable:t.enumerable,configurable:t.configurable,get:t.get||(()=>t.value),set:r=>{r!==this._cache.get(e)&&(t.set?t.set.call(this._el,r):t.value=r,this._cache.set(e,r),this._batchChanges({[e]:r}))}};Object.defineProperty(this._el,e,r),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 _=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 r=t;if(!r){const t=e.localName;if(r=this.compNameToApp.get(t),!r)throw this.#_.create(`Could not find a parent App for component "${e.localName}"`)}return this.appToComps.get(r).add(e),this.compToApp.set(e,r),r}unregisterComponent(e){const t=this.compToApp.get(e);if(!t)return!1;const r=this.appToComps.get(t);return r?.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}},C=new r("LightningOutComponent"),L=new Set(["autocapitalize","autocorrect","dir","enterkeyhint","inputmode","lang","spellcheck","style","title","translate"]),R=new Set(["aria-disabled","aria-hidden","aria-label","aria-live","aria-modal","aria-pressed","aria-valuemax","aria-valuemin","aria-valuenow"]),P=new Set(["accesskey","autofocus","draggable","exportparts","hidden","inert","nonce","part","slot","tabindex"]),S=new Set(["aria-activedescendant","aria-controls","aria-describedby","aria-details","aria-errormessage","aria-flowto","aria-labelledby","aria-owns"]);class A extends HTMLElement{_uuid=i();componentReady=!1;_standardName=f(this.localName);#C;#_=new m(this);#L=new b({parentElement:this});#R;#P=!0;#S=[];#A=new WeakMap;#O=0;constructor(){super(),C.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(C.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 y(this,this.#$,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:C.info("#messageListener:","Unknown message received:",{"event.data":e.data})}};_propertyChanged_style=e=>{const t=this.style,r=[];for(let e=0;e<t.length;e+=1){const i=t.item(e);i.startsWith("--")&&r.push(`${i}:${t.getPropertyValue(i)}`)}return r.join(";")};#$=e=>{const t=v(this,e);C.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 r=g(e);return C.debug("#shouldObserveCallback:",{attrOrPropName:e,attrName:r,isStandard:t}),t?!(!L.has(r)&&!R.has(r))||(P.has(r)||S.has(r)||r.startsWith("on")?(C.warn(`"${r}" will not be mirrored.`),!1):!!r.startsWith("data-mirror-")||(C.warn(`"${r}" will not be mirrored.`),!1)):!r.startsWith("_")};addEventListener(e,t,r){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,r);let i=this.#A.get(t);i||(i=`${e}_${this.#O++}`,this.#A.set(t,i)),this.componentReady?(super.addEventListener(...arguments),this.#L.postMessage({name:e,options:r,listenerKey:i,type:o.addEventListener})):(this.#S.push({type:"add",args:[e,t,r]}),C.debug("addEventListener:","#eventQueue pushed add args:",[e,t,r]))}dispatchEvent(e){if(e.type.startsWith("lo."))return C.debug(`dispatchEvent: dispatching event "${e.type}" to this Element only`),super.dispatchEvent(e);if(this.componentReady){C.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 C.debug(`dispatchEvent: component not ready, queueing event "${e.type}"`),this.#S.push({type:"dispatch",event:e}),!0}removeEventListener(e,t,r){if(e.startsWith("lo."))return void super.removeEventListener(...arguments);const i=this.#A.get(t);this.componentReady?(super.removeEventListener(...arguments),this.#L.postMessage({name:e,options:r,listenerKey:i,type:o.removeEventListener})):(this.#S.push({type:"remove",args:[e,t,r]}),C.debug("removeEventListener:","#eventQueue pushed remove args:",[e,t,r])),i&&this.#A.delete(t)}adoptedCallback(){throw this.remove(),this.#_.create("This component cannot be rerendered for security reasons.")}connectedCallback(){if(C.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=_.registerComponent(this),this._standardName=this.#C._getComponentStandardName(this),this.#C.applicationReady&&this._init()}disconnectedCallback(){C.trace("disconnectedCallback: called",`_uuid: ${this._uuid}`),this.#L.destroy(),window.removeEventListener("message",this.#v),_.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 r;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 i=this.config.lang?`l/${this.config.lang}/`:"";r=new URL(`lwr/application/amd/0/${i}ai/${t}`,this.config.origin)}else r=new URL(`${this.config.sitePrefix}/lightning-out`,this.config.origin);return r.searchParams.set("componentName",e),this.#N(r,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 r=new URL(e,this.config.origin);return this.#N(r,t)}#N(e,t){return e.searchParams.set("parentElementId",t),e.searchParams.set("loAppOrigin",this.config.loAppOrigin),e.searchParams.set("loVersion","2.2.5-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 $=new r("LightningOutApplication"),U=new Set(["slds1","slds2","none"]),N=new Set(["frontdoorUrl","orgUrl"]);class I extends HTMLElement{_uuid=i();applicationReady=!1;#_=new m(this);#L=new b({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(),$.trace("constructor: called",`_uuid: ${this._uuid}`),_.registerApplication(this)}addEventListener(e,t,r){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,r)}#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(),r=this.#H.searchParams.has("otp")?"startURL":"retURL";this.#H.searchParams.set(r,t.pathname+t.search);const i=this.#re(this.#F);this.#H.searchParams.set("error-redirect-uri",i.pathname+i.search)}catch{throw this.#_.create(`Invalid frontdoor-url: ${e}`)}this.#L.load(this.#H.href)}#ie(){const e=new URL(this.#W,this.#k),t=this.#re(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)}#re(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?($.trace("#iframeLoaded: frontdoor-url refresh path"),this.#G=!1,void this.dispatchEvent(new CustomEvent(s.application.session.refresh))):this.#B?($.trace("#iframeLoaded: sessionRefresh() reload path"),clearTimeout(this.#B.timeoutId),this.#B.resolve(),void(this.#B=null)):($.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 r=new Promise((r,i)=>{e=r,t=i}),i=window.setTimeout(()=>{const e=this.#X;this.#X=null,e?.reject(this.#_.create(h))},3e4);return this.#X={promise:r,resolve:e,reject:t,timeoutId:i},this.#L.postMessage({type:o.sessionExpiry,id:this._uuid}),r}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 r=new Promise((r,i)=>{e=r,t=i}),i=window.setTimeout(()=>{const e=this.#B;this.#B=null,e?.reject(this.#_.create(h))},6e4);return this.#B={promise:r,resolve:e,reject:t,timeoutId:i},this.#L.postMessage({type:o.authReload,id:this._uuid}),r}_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(c)):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)};#ce=e=>{this.dispatchEvent(new CustomEvent(s.application.logout))};#de=e=>{this.dispatchEvent(new CustomEvent(s.application.auth.redirect,{detail:e.detail}))};#oe(){_.getComps(this).forEach(e=>{e._init()})}#$=e=>{const t={},r={};Object.keys(e).forEach(i=>{N.has(i)?r[i]=e[i]:t[i]=e[i]}),v(this,t),v(this,r)};#U=(e,t)=>t?"lang"===e:!e.startsWith("_");_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.#ie():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(d),void this.#ie();const t=null!==this.#B;this.#he(d),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),r=[];for(const e of t){const[t,...i]=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=i.join(":").trim();o&&r.push(`${s}:${o}`)}this.#q=r.join(";")+";"}};_propertyChanged_components=e=>{void 0!==e&&e.split(",").forEach(e=>{const[t,r]=e.split(" as ").map(e=>e.trim()),i=function(e){return e.includes("/")||e.includes(":")}(t);if(i&&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=i?t:f(t),o=r||(i?function(e){const t=e.includes("/")?"/":":",r=e.indexOf(t);if(-1===r)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 i=e.slice(0,r),s=e.slice(r+1);return`${i.replace(/([A-Z_])/g,"_$1").toLowerCase()}-${g(s)}`}(s):t);if(o&&!this.#Q.has(o)){this.#Q.set(o,s);try{_.registerComponentName(o,this),customElements.define(o,class extends A{})}catch(e){throw this.#_.create(`"${o}" is already registered. ${e}`)}}})};_propertyChanged_designSystem=e=>{if(void 0!==e&&!U.has(e))throw this.#_.create(`Invalid design-system: ${e}`);this.#V=e};_getComponentStandardName(e){const t=e.localName,r=e.hasAttribute("aura"),i=this.#Q.get(t);if(!i)throw this.#_.create(`"${t}" is not registered.`);return r&&i.includes("/")?i.replace("/",":"):i}get _compNames(){}connectedCallback(){if($.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.#ce),this.addEventListener(s.iframe.auth.redirect,this.#de),this.#R=new y(this,this.#$,this.#U)}disconnectedCallback(){$.trace("disconnectedCallback: called",`_uuid: ${this._uuid}`),this.#he(d),this.#ie(),this.#L.destroy(),this.removeEventListener(s.iframe.load,this.#se),this.removeEventListener(s.iframe.error,this.#le),this.removeEventListener(s.iframe.logout,this.#ce),this.removeEventListener(s.iframe.auth.redirect,this.#de),this.#R?.disconnect()}connectedMoveCallback(){}}return r.level="debug",window.customElements.define("lightning-out-application",I),e.LightningOutApplication=I,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.5-rc.2",
3
+ "version": "2.2.5-rc.3",
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.5-rc.2",
26
- "utils": "2.2.5-rc.2"
25
+ "core": "2.2.5-rc.3",
26
+ "utils": "2.2.5-rc.3"
27
27
  },
28
28
  "files": [
29
29
  "dist/",