@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 +66 -72
- package/dist/index.iife.debug.js +66 -72
- package/dist/index.iife.prod.js +3 -3
- package/package.json +3 -3
package/dist/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @salesforce/lightning-out v2.2.5-rc.
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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.
|
|
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):
|
|
1644
|
-
//
|
|
1645
|
-
// 2. sessionRefresh()-initiated reload (#promiseSessionRefresh set):
|
|
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
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
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
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
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
|
-
|
|
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();
|
package/dist/index.iife.debug.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @salesforce/lightning-out v2.2.5-rc.
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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.
|
|
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):
|
|
1647
|
-
//
|
|
1648
|
-
// 2. sessionRefresh()-initiated reload (#promiseSessionRefresh set):
|
|
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
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
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
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
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
|
-
|
|
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();
|
package/dist/index.iife.prod.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/*! @salesforce/lightning-out v2.2.5-rc.
|
|
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
|
|
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.
|
|
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.
|
|
26
|
-
"utils": "2.2.5-rc.
|
|
25
|
+
"core": "2.2.5-rc.3",
|
|
26
|
+
"utils": "2.2.5-rc.3"
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
29
29
|
"dist/",
|