@mocanetwork/airkit 1.2.0-beta.0 → 1.2.0-beta.1
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/airkit.cjs.js +246 -18
- package/dist/airkit.esm.js +246 -18
- package/dist/airkit.umd.js +246 -18
- package/dist/types/airWalletProvider.d.ts +1 -1
- package/dist/types/common/realm/messaging/types.d.ts +15 -2
- package/dist/types/common/utils.d.ts +3 -2
- package/dist/types/interfaces.d.ts +1 -0
- package/dist/types/messageService.d.ts +3 -0
- package/dist/types/utils.d.ts +1 -0
- package/dist/types/windowController.d.ts +19 -0
- package/dist/types/windowService.d.ts +18 -0
- package/package.json +1 -1
package/dist/airkit.cjs.js
CHANGED
|
@@ -150,6 +150,9 @@ const AirMessageTypes = {
|
|
|
150
150
|
LIST_ALL_SESSION_KEY_SCOPES_REQUEST: "air_list_all_session_key_scopes_request",
|
|
151
151
|
LIST_ALL_SESSION_KEY_SCOPES_RESPONSE: "air_list_all_session_key_scopes_response",
|
|
152
152
|
WALLET_IFRAME_VISIBILITY_REQUEST: "air_wallet_iframe_visibility_request",
|
|
153
|
+
OPEN_WINDOW_REQUEST: "air_open_window_request",
|
|
154
|
+
OPEN_WINDOW_RESPONSE: "air_open_window_response",
|
|
155
|
+
WINDOW_CLOSED: "air_window_closed",
|
|
153
156
|
IS_SMART_ACCOUNT_DEPLOYED_REQUEST: "air_is_smart_account_deployed_request",
|
|
154
157
|
IS_SMART_ACCOUNT_DEPLOYED_RESPONSE: "air_is_smart_account_deployed_response",
|
|
155
158
|
LOGOUT_REQUEST: "air_logout_request",
|
|
@@ -177,6 +180,16 @@ class BaseError extends Error {
|
|
|
177
180
|
};
|
|
178
181
|
}
|
|
179
182
|
}
|
|
183
|
+
function ensureError(value) {
|
|
184
|
+
if (value instanceof Error) return value;
|
|
185
|
+
let stringified = "[Unable to stringify the thrown value]";
|
|
186
|
+
try {
|
|
187
|
+
stringified = JSON.stringify(value);
|
|
188
|
+
} catch {
|
|
189
|
+
// ignoring failed stringify
|
|
190
|
+
}
|
|
191
|
+
return new Error(`This value was not thrown as type Error: ${stringified}`);
|
|
192
|
+
}
|
|
180
193
|
|
|
181
194
|
class AirServiceError extends BaseError {
|
|
182
195
|
static from(error) {
|
|
@@ -1384,6 +1397,7 @@ const ACCOUNT_MESSAGES = [
|
|
|
1384
1397
|
AirMessageTypes.WALLET_INITIALIZED,
|
|
1385
1398
|
AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST,
|
|
1386
1399
|
AirMessageTypes.LOGOUT_RESPONSE,
|
|
1400
|
+
AirMessageTypes.OPEN_WINDOW_REQUEST,
|
|
1387
1401
|
];
|
|
1388
1402
|
const AUTH_MESSAGES = [
|
|
1389
1403
|
AirAuthMessageTypes.INITIALIZATION_RESPONSE,
|
|
@@ -1628,6 +1642,37 @@ class AirMessageService {
|
|
|
1628
1642
|
walletIframe.contentWindow.postMessage({ type: AirMessageTypes.SETUP_MFA_REQUEST }, origin);
|
|
1629
1643
|
return response;
|
|
1630
1644
|
}
|
|
1645
|
+
sendOpenWindowSuccessResponse(walletIframe, windowId, port) {
|
|
1646
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1647
|
+
walletIframe.contentWindow.postMessage({
|
|
1648
|
+
type: AirMessageTypes.OPEN_WINDOW_RESPONSE,
|
|
1649
|
+
payload: {
|
|
1650
|
+
success: true,
|
|
1651
|
+
windowId,
|
|
1652
|
+
},
|
|
1653
|
+
}, walletOrigin, [port]);
|
|
1654
|
+
}
|
|
1655
|
+
sendOpenWindowErrorResponse(walletIframe, windowId, error) {
|
|
1656
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1657
|
+
walletIframe.contentWindow.postMessage({
|
|
1658
|
+
type: AirMessageTypes.OPEN_WINDOW_RESPONSE,
|
|
1659
|
+
payload: {
|
|
1660
|
+
success: false,
|
|
1661
|
+
windowId,
|
|
1662
|
+
errorName: "UNKNOWN_ERROR",
|
|
1663
|
+
errorMessage: error.message,
|
|
1664
|
+
},
|
|
1665
|
+
}, walletOrigin);
|
|
1666
|
+
}
|
|
1667
|
+
sendWindowClosed(walletIframe, windowId) {
|
|
1668
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1669
|
+
walletIframe.contentWindow.postMessage({
|
|
1670
|
+
type: AirMessageTypes.WINDOW_CLOSED,
|
|
1671
|
+
payload: {
|
|
1672
|
+
windowId,
|
|
1673
|
+
},
|
|
1674
|
+
}, walletOrigin);
|
|
1675
|
+
}
|
|
1631
1676
|
async sendClaimIdRequest(walletIframe, payload) {
|
|
1632
1677
|
const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.CLAIM_ID_RESPONSE)));
|
|
1633
1678
|
const { origin } = new URL(walletIframe.src);
|
|
@@ -1685,6 +1730,7 @@ var AirMessageService$1 = AirMessageService.instance;
|
|
|
1685
1730
|
|
|
1686
1731
|
const BUILD_ENV = {
|
|
1687
1732
|
PRODUCTION: "production",
|
|
1733
|
+
UAT: "uat",
|
|
1688
1734
|
STAGING: "staging",
|
|
1689
1735
|
DEVELOPMENT: "development",
|
|
1690
1736
|
};
|
|
@@ -1695,6 +1741,11 @@ const AIR_URLS = {
|
|
|
1695
1741
|
walletUrl: "http://localhost:8200",
|
|
1696
1742
|
logLevel: "debug",
|
|
1697
1743
|
},
|
|
1744
|
+
[BUILD_ENV.UAT]: {
|
|
1745
|
+
authUrl: "https://auth.uat.air3.com",
|
|
1746
|
+
walletUrl: "https://account.uat.air3.com",
|
|
1747
|
+
logLevel: "info",
|
|
1748
|
+
},
|
|
1698
1749
|
[BUILD_ENV.STAGING]: {
|
|
1699
1750
|
authUrl: "https://auth.staging.air3.com",
|
|
1700
1751
|
walletUrl: "https://account.staging.air3.com",
|
|
@@ -1708,6 +1759,24 @@ const AIR_URLS = {
|
|
|
1708
1759
|
};
|
|
1709
1760
|
const isElement = (element) => element instanceof Element || element instanceof Document;
|
|
1710
1761
|
const randomId = () => Math.random().toString(36).slice(2);
|
|
1762
|
+
const getWindowFeatures = (width, height) => {
|
|
1763
|
+
const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
|
|
1764
|
+
const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
|
|
1765
|
+
const w = window.innerWidth
|
|
1766
|
+
? window.innerWidth
|
|
1767
|
+
: document.documentElement.clientWidth
|
|
1768
|
+
? document.documentElement.clientWidth
|
|
1769
|
+
: window.screen.width;
|
|
1770
|
+
const h = window.innerHeight
|
|
1771
|
+
? window.innerHeight
|
|
1772
|
+
: document.documentElement.clientHeight
|
|
1773
|
+
? document.documentElement.clientHeight
|
|
1774
|
+
: window.screen.height;
|
|
1775
|
+
const systemZoom = 1; // No reliable estimate
|
|
1776
|
+
const left = Math.abs((w - width) / 2 / systemZoom + dualScreenLeft);
|
|
1777
|
+
const top = Math.abs((h - height) / 2 / systemZoom + dualScreenTop);
|
|
1778
|
+
return `titlebar=0,toolbar=0,status=0,location=0,menubar=0,height=${height / systemZoom},width=${width / systemZoom},top=${top},left=${left}`;
|
|
1779
|
+
};
|
|
1711
1780
|
|
|
1712
1781
|
var _AirWalletProvider_instances, _AirWalletProvider_isLoggedIn, _AirWalletProvider_ensureWallet, _AirWalletProvider_getWalletIframeController, _AirWalletProvider_eventListeners, _AirWalletProvider_emit;
|
|
1713
1782
|
class AirWalletProvider {
|
|
@@ -1864,7 +1933,145 @@ IframeController.defaultState = {
|
|
|
1864
1933
|
isVisible: false,
|
|
1865
1934
|
};
|
|
1866
1935
|
|
|
1867
|
-
|
|
1936
|
+
class WindowController {
|
|
1937
|
+
get messages$() {
|
|
1938
|
+
return this._messages$.asObservable();
|
|
1939
|
+
}
|
|
1940
|
+
constructor(windowUrl, windowId) {
|
|
1941
|
+
this._windowInstance = null;
|
|
1942
|
+
this._messageHandler = null;
|
|
1943
|
+
this._messages$ = new Subject();
|
|
1944
|
+
this.windowUrl = windowUrl;
|
|
1945
|
+
this.windowOrigin = new URL(windowUrl).origin;
|
|
1946
|
+
this.windowId = windowId;
|
|
1947
|
+
}
|
|
1948
|
+
get windowInstance() {
|
|
1949
|
+
return this._windowInstance;
|
|
1950
|
+
}
|
|
1951
|
+
openWindow() {
|
|
1952
|
+
if (this._windowInstance && !this._windowInstance.closed) {
|
|
1953
|
+
this._windowInstance.focus();
|
|
1954
|
+
return this._windowInstance;
|
|
1955
|
+
}
|
|
1956
|
+
const windowInstance = window.open(this.windowUrl, this.windowId, getWindowFeatures(400, 600));
|
|
1957
|
+
if (!windowInstance) {
|
|
1958
|
+
throw new Error("Failed to open window. Popup might be blocked by the browser.");
|
|
1959
|
+
}
|
|
1960
|
+
this._windowInstance = windowInstance;
|
|
1961
|
+
this._messageHandler = (ev) => {
|
|
1962
|
+
if (ev.source !== windowInstance ||
|
|
1963
|
+
ev.origin !== this.windowOrigin ||
|
|
1964
|
+
!ev.data ||
|
|
1965
|
+
!(ev.data instanceof Object)) {
|
|
1966
|
+
return;
|
|
1967
|
+
}
|
|
1968
|
+
this._messages$.next(ev);
|
|
1969
|
+
};
|
|
1970
|
+
window.addEventListener("message", this._messageHandler);
|
|
1971
|
+
const checkWindow = setInterval(() => {
|
|
1972
|
+
if (!this._windowInstance || this._windowInstance?.closed) {
|
|
1973
|
+
this.cleanup();
|
|
1974
|
+
clearInterval(checkWindow);
|
|
1975
|
+
}
|
|
1976
|
+
}, 500);
|
|
1977
|
+
return windowInstance;
|
|
1978
|
+
}
|
|
1979
|
+
postMessage(message, transfer) {
|
|
1980
|
+
if (!this._windowInstance)
|
|
1981
|
+
return;
|
|
1982
|
+
this._windowInstance.postMessage(message, this.windowOrigin, transfer);
|
|
1983
|
+
}
|
|
1984
|
+
onMessage(callback) {
|
|
1985
|
+
const listener = (ev) => {
|
|
1986
|
+
if (ev.source !== this._windowInstance)
|
|
1987
|
+
return;
|
|
1988
|
+
callback(ev);
|
|
1989
|
+
};
|
|
1990
|
+
window.addEventListener("message", listener);
|
|
1991
|
+
const close = () => window.removeEventListener("message", listener);
|
|
1992
|
+
this.onClose(close);
|
|
1993
|
+
return {
|
|
1994
|
+
close,
|
|
1995
|
+
};
|
|
1996
|
+
}
|
|
1997
|
+
cleanup() {
|
|
1998
|
+
if (this._windowInstance && !this._windowInstance.closed) {
|
|
1999
|
+
this._windowInstance.close();
|
|
2000
|
+
}
|
|
2001
|
+
if (this._messageHandler) {
|
|
2002
|
+
window.removeEventListener("message", this._messageHandler);
|
|
2003
|
+
this._messageHandler = null;
|
|
2004
|
+
}
|
|
2005
|
+
if (this._messages$ && !this._messages$.closed) {
|
|
2006
|
+
this._messages$.complete();
|
|
2007
|
+
}
|
|
2008
|
+
this._windowInstance = null;
|
|
2009
|
+
}
|
|
2010
|
+
onClose(callback) {
|
|
2011
|
+
return this._messages$.subscribe({
|
|
2012
|
+
complete: callback,
|
|
2013
|
+
});
|
|
2014
|
+
}
|
|
2015
|
+
}
|
|
2016
|
+
|
|
2017
|
+
class WindowService {
|
|
2018
|
+
constructor() {
|
|
2019
|
+
this.windowControllers = new Map();
|
|
2020
|
+
}
|
|
2021
|
+
static get instance() {
|
|
2022
|
+
return this._instance || (this._instance = new this());
|
|
2023
|
+
}
|
|
2024
|
+
async sendWindowInitializationRequest(windowId, payload, port) {
|
|
2025
|
+
const windowController = this.windowControllers.get(windowId);
|
|
2026
|
+
if (!windowController) {
|
|
2027
|
+
throw new Error("Window controller not found");
|
|
2028
|
+
}
|
|
2029
|
+
const windowInstance = windowController.windowInstance;
|
|
2030
|
+
if (!windowInstance) {
|
|
2031
|
+
throw new Error("Window instance not found");
|
|
2032
|
+
}
|
|
2033
|
+
const response = firstValueFrom(windowController.messages$.pipe(filter((event) => event.data.type === AirMessageTypes.INITIALIZATION_RESPONSE)));
|
|
2034
|
+
windowController.postMessage({ type: AirMessageTypes.INITIALIZATION_REQUEST, payload }, [port]);
|
|
2035
|
+
return (await response).data;
|
|
2036
|
+
}
|
|
2037
|
+
async openAndInitializeWalletServiceWindow({ url, windowId, partnerId, enableLogging, port, }) {
|
|
2038
|
+
if (this.windowControllers.has(windowId)) {
|
|
2039
|
+
throw new Error("Window controller already exists");
|
|
2040
|
+
}
|
|
2041
|
+
const windowController = new WindowController(url, windowId);
|
|
2042
|
+
this.windowControllers.set(windowId, windowController);
|
|
2043
|
+
windowController.openWindow();
|
|
2044
|
+
windowController.onClose(() => {
|
|
2045
|
+
this.removeWindowController(windowId);
|
|
2046
|
+
});
|
|
2047
|
+
await new Promise((resolve, reject) => {
|
|
2048
|
+
windowController.onMessage(async (ev) => {
|
|
2049
|
+
if (ev.data === AirMessageTypes.SERVICE_STARTED) {
|
|
2050
|
+
const { payload } = await this.sendWindowInitializationRequest(windowId, {
|
|
2051
|
+
partnerId,
|
|
2052
|
+
enableLogging,
|
|
2053
|
+
}, port);
|
|
2054
|
+
if (payload.success === false) {
|
|
2055
|
+
reject(new AirServiceError(payload.errorName, payload.errorMessage));
|
|
2056
|
+
}
|
|
2057
|
+
else {
|
|
2058
|
+
resolve();
|
|
2059
|
+
}
|
|
2060
|
+
}
|
|
2061
|
+
});
|
|
2062
|
+
});
|
|
2063
|
+
return windowController;
|
|
2064
|
+
}
|
|
2065
|
+
getWindowController(windowId) {
|
|
2066
|
+
return this.windowControllers.get(windowId);
|
|
2067
|
+
}
|
|
2068
|
+
removeWindowController(windowId) {
|
|
2069
|
+
this.windowControllers.delete(windowId);
|
|
2070
|
+
}
|
|
2071
|
+
}
|
|
2072
|
+
var WindowService$1 = WindowService.instance;
|
|
2073
|
+
|
|
2074
|
+
var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airAuthListener, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet;
|
|
1868
2075
|
class AirService {
|
|
1869
2076
|
constructor({ partnerId }) {
|
|
1870
2077
|
_AirService_instances.add(this);
|
|
@@ -2251,23 +2458,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
|
|
|
2251
2458
|
try {
|
|
2252
2459
|
__classPrivateFieldSet(this, _AirService_walletIframeController, new IframeController(walletUrl, `air-wallet-${randomId()}`), "f");
|
|
2253
2460
|
__classPrivateFieldGet(this, _AirService_walletIframeController, "f").createIframe();
|
|
2254
|
-
|
|
2255
|
-
switch (msg.type) {
|
|
2256
|
-
case AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST: {
|
|
2257
|
-
const walletIframeController = __classPrivateFieldGet(this, _AirService_walletIframeController, "f");
|
|
2258
|
-
walletIframeController.setIframeVisibility(msg.payload.visible);
|
|
2259
|
-
walletIframeController.updateIframeState();
|
|
2260
|
-
break;
|
|
2261
|
-
}
|
|
2262
|
-
case AirMessageTypes.WALLET_LOGIN_RESPONSE: {
|
|
2263
|
-
if (msg.payload.success === true && !__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")) {
|
|
2264
|
-
__classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
|
|
2265
|
-
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
|
|
2266
|
-
}
|
|
2267
|
-
break;
|
|
2268
|
-
}
|
|
2269
|
-
}
|
|
2270
|
-
});
|
|
2461
|
+
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_subscribeToWalletEvents).call(this);
|
|
2271
2462
|
await new Promise((resolve, reject) => {
|
|
2272
2463
|
const handleAuthMessage = async (ev) => {
|
|
2273
2464
|
if (ev.origin !== walletIframeOrigin)
|
|
@@ -2306,6 +2497,43 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
|
|
|
2306
2497
|
await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
|
|
2307
2498
|
throw error;
|
|
2308
2499
|
}
|
|
2500
|
+
}, _AirService_subscribeToWalletEvents = function _AirService_subscribeToWalletEvents() {
|
|
2501
|
+
AirMessageService$1.messages$.subscribe(async (msg) => {
|
|
2502
|
+
switch (msg.type) {
|
|
2503
|
+
case AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST: {
|
|
2504
|
+
const walletIframeController = __classPrivateFieldGet(this, _AirService_walletIframeController, "f");
|
|
2505
|
+
walletIframeController.setIframeVisibility(msg.payload.visible);
|
|
2506
|
+
walletIframeController.updateIframeState();
|
|
2507
|
+
break;
|
|
2508
|
+
}
|
|
2509
|
+
case AirMessageTypes.WALLET_LOGIN_RESPONSE: {
|
|
2510
|
+
if (msg.payload.success === true && !__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")) {
|
|
2511
|
+
__classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
|
|
2512
|
+
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
|
|
2513
|
+
}
|
|
2514
|
+
break;
|
|
2515
|
+
}
|
|
2516
|
+
case AirMessageTypes.OPEN_WINDOW_REQUEST: {
|
|
2517
|
+
try {
|
|
2518
|
+
const channel = new MessageChannel();
|
|
2519
|
+
const windowController = await WindowService$1.openAndInitializeWalletServiceWindow({
|
|
2520
|
+
url: msg.payload.url,
|
|
2521
|
+
windowId: msg.payload.windowId,
|
|
2522
|
+
partnerId: __classPrivateFieldGet(this, _AirService_partnerId, "f"),
|
|
2523
|
+
enableLogging: __classPrivateFieldGet(this, _AirService_enableLogging, "f"),
|
|
2524
|
+
port: channel.port1,
|
|
2525
|
+
});
|
|
2526
|
+
windowController.onClose(() => AirMessageService$1.sendWindowClosed(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId));
|
|
2527
|
+
AirMessageService$1.sendOpenWindowSuccessResponse(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId, channel.port2);
|
|
2528
|
+
}
|
|
2529
|
+
catch (err) {
|
|
2530
|
+
const error = ensureError(err);
|
|
2531
|
+
AirMessageService$1.sendOpenWindowErrorResponse(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId, error);
|
|
2532
|
+
}
|
|
2533
|
+
break;
|
|
2534
|
+
}
|
|
2535
|
+
}
|
|
2536
|
+
});
|
|
2309
2537
|
}, _AirService_triggerEventListeners = function _AirService_triggerEventListeners(data) {
|
|
2310
2538
|
__classPrivateFieldGet(this, _AirService_airAuthListener, "f").forEach((listener) => {
|
|
2311
2539
|
listener(data);
|
package/dist/airkit.esm.js
CHANGED
|
@@ -148,6 +148,9 @@ const AirMessageTypes = {
|
|
|
148
148
|
LIST_ALL_SESSION_KEY_SCOPES_REQUEST: "air_list_all_session_key_scopes_request",
|
|
149
149
|
LIST_ALL_SESSION_KEY_SCOPES_RESPONSE: "air_list_all_session_key_scopes_response",
|
|
150
150
|
WALLET_IFRAME_VISIBILITY_REQUEST: "air_wallet_iframe_visibility_request",
|
|
151
|
+
OPEN_WINDOW_REQUEST: "air_open_window_request",
|
|
152
|
+
OPEN_WINDOW_RESPONSE: "air_open_window_response",
|
|
153
|
+
WINDOW_CLOSED: "air_window_closed",
|
|
151
154
|
IS_SMART_ACCOUNT_DEPLOYED_REQUEST: "air_is_smart_account_deployed_request",
|
|
152
155
|
IS_SMART_ACCOUNT_DEPLOYED_RESPONSE: "air_is_smart_account_deployed_response",
|
|
153
156
|
LOGOUT_REQUEST: "air_logout_request",
|
|
@@ -175,6 +178,16 @@ class BaseError extends Error {
|
|
|
175
178
|
};
|
|
176
179
|
}
|
|
177
180
|
}
|
|
181
|
+
function ensureError(value) {
|
|
182
|
+
if (value instanceof Error) return value;
|
|
183
|
+
let stringified = "[Unable to stringify the thrown value]";
|
|
184
|
+
try {
|
|
185
|
+
stringified = JSON.stringify(value);
|
|
186
|
+
} catch {
|
|
187
|
+
// ignoring failed stringify
|
|
188
|
+
}
|
|
189
|
+
return new Error(`This value was not thrown as type Error: ${stringified}`);
|
|
190
|
+
}
|
|
178
191
|
|
|
179
192
|
class AirServiceError extends BaseError {
|
|
180
193
|
static from(error) {
|
|
@@ -1382,6 +1395,7 @@ const ACCOUNT_MESSAGES = [
|
|
|
1382
1395
|
AirMessageTypes.WALLET_INITIALIZED,
|
|
1383
1396
|
AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST,
|
|
1384
1397
|
AirMessageTypes.LOGOUT_RESPONSE,
|
|
1398
|
+
AirMessageTypes.OPEN_WINDOW_REQUEST,
|
|
1385
1399
|
];
|
|
1386
1400
|
const AUTH_MESSAGES = [
|
|
1387
1401
|
AirAuthMessageTypes.INITIALIZATION_RESPONSE,
|
|
@@ -1626,6 +1640,37 @@ class AirMessageService {
|
|
|
1626
1640
|
walletIframe.contentWindow.postMessage({ type: AirMessageTypes.SETUP_MFA_REQUEST }, origin);
|
|
1627
1641
|
return response;
|
|
1628
1642
|
}
|
|
1643
|
+
sendOpenWindowSuccessResponse(walletIframe, windowId, port) {
|
|
1644
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1645
|
+
walletIframe.contentWindow.postMessage({
|
|
1646
|
+
type: AirMessageTypes.OPEN_WINDOW_RESPONSE,
|
|
1647
|
+
payload: {
|
|
1648
|
+
success: true,
|
|
1649
|
+
windowId,
|
|
1650
|
+
},
|
|
1651
|
+
}, walletOrigin, [port]);
|
|
1652
|
+
}
|
|
1653
|
+
sendOpenWindowErrorResponse(walletIframe, windowId, error) {
|
|
1654
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1655
|
+
walletIframe.contentWindow.postMessage({
|
|
1656
|
+
type: AirMessageTypes.OPEN_WINDOW_RESPONSE,
|
|
1657
|
+
payload: {
|
|
1658
|
+
success: false,
|
|
1659
|
+
windowId,
|
|
1660
|
+
errorName: "UNKNOWN_ERROR",
|
|
1661
|
+
errorMessage: error.message,
|
|
1662
|
+
},
|
|
1663
|
+
}, walletOrigin);
|
|
1664
|
+
}
|
|
1665
|
+
sendWindowClosed(walletIframe, windowId) {
|
|
1666
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1667
|
+
walletIframe.contentWindow.postMessage({
|
|
1668
|
+
type: AirMessageTypes.WINDOW_CLOSED,
|
|
1669
|
+
payload: {
|
|
1670
|
+
windowId,
|
|
1671
|
+
},
|
|
1672
|
+
}, walletOrigin);
|
|
1673
|
+
}
|
|
1629
1674
|
async sendClaimIdRequest(walletIframe, payload) {
|
|
1630
1675
|
const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.CLAIM_ID_RESPONSE)));
|
|
1631
1676
|
const { origin } = new URL(walletIframe.src);
|
|
@@ -1683,6 +1728,7 @@ var AirMessageService$1 = AirMessageService.instance;
|
|
|
1683
1728
|
|
|
1684
1729
|
const BUILD_ENV = {
|
|
1685
1730
|
PRODUCTION: "production",
|
|
1731
|
+
UAT: "uat",
|
|
1686
1732
|
STAGING: "staging",
|
|
1687
1733
|
DEVELOPMENT: "development",
|
|
1688
1734
|
};
|
|
@@ -1693,6 +1739,11 @@ const AIR_URLS = {
|
|
|
1693
1739
|
walletUrl: "http://localhost:8200",
|
|
1694
1740
|
logLevel: "debug",
|
|
1695
1741
|
},
|
|
1742
|
+
[BUILD_ENV.UAT]: {
|
|
1743
|
+
authUrl: "https://auth.uat.air3.com",
|
|
1744
|
+
walletUrl: "https://account.uat.air3.com",
|
|
1745
|
+
logLevel: "info",
|
|
1746
|
+
},
|
|
1696
1747
|
[BUILD_ENV.STAGING]: {
|
|
1697
1748
|
authUrl: "https://auth.staging.air3.com",
|
|
1698
1749
|
walletUrl: "https://account.staging.air3.com",
|
|
@@ -1706,6 +1757,24 @@ const AIR_URLS = {
|
|
|
1706
1757
|
};
|
|
1707
1758
|
const isElement = (element) => element instanceof Element || element instanceof Document;
|
|
1708
1759
|
const randomId = () => Math.random().toString(36).slice(2);
|
|
1760
|
+
const getWindowFeatures = (width, height) => {
|
|
1761
|
+
const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
|
|
1762
|
+
const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
|
|
1763
|
+
const w = window.innerWidth
|
|
1764
|
+
? window.innerWidth
|
|
1765
|
+
: document.documentElement.clientWidth
|
|
1766
|
+
? document.documentElement.clientWidth
|
|
1767
|
+
: window.screen.width;
|
|
1768
|
+
const h = window.innerHeight
|
|
1769
|
+
? window.innerHeight
|
|
1770
|
+
: document.documentElement.clientHeight
|
|
1771
|
+
? document.documentElement.clientHeight
|
|
1772
|
+
: window.screen.height;
|
|
1773
|
+
const systemZoom = 1; // No reliable estimate
|
|
1774
|
+
const left = Math.abs((w - width) / 2 / systemZoom + dualScreenLeft);
|
|
1775
|
+
const top = Math.abs((h - height) / 2 / systemZoom + dualScreenTop);
|
|
1776
|
+
return `titlebar=0,toolbar=0,status=0,location=0,menubar=0,height=${height / systemZoom},width=${width / systemZoom},top=${top},left=${left}`;
|
|
1777
|
+
};
|
|
1709
1778
|
|
|
1710
1779
|
var _AirWalletProvider_instances, _AirWalletProvider_isLoggedIn, _AirWalletProvider_ensureWallet, _AirWalletProvider_getWalletIframeController, _AirWalletProvider_eventListeners, _AirWalletProvider_emit;
|
|
1711
1780
|
class AirWalletProvider {
|
|
@@ -1862,7 +1931,145 @@ IframeController.defaultState = {
|
|
|
1862
1931
|
isVisible: false,
|
|
1863
1932
|
};
|
|
1864
1933
|
|
|
1865
|
-
|
|
1934
|
+
class WindowController {
|
|
1935
|
+
get messages$() {
|
|
1936
|
+
return this._messages$.asObservable();
|
|
1937
|
+
}
|
|
1938
|
+
constructor(windowUrl, windowId) {
|
|
1939
|
+
this._windowInstance = null;
|
|
1940
|
+
this._messageHandler = null;
|
|
1941
|
+
this._messages$ = new Subject();
|
|
1942
|
+
this.windowUrl = windowUrl;
|
|
1943
|
+
this.windowOrigin = new URL(windowUrl).origin;
|
|
1944
|
+
this.windowId = windowId;
|
|
1945
|
+
}
|
|
1946
|
+
get windowInstance() {
|
|
1947
|
+
return this._windowInstance;
|
|
1948
|
+
}
|
|
1949
|
+
openWindow() {
|
|
1950
|
+
if (this._windowInstance && !this._windowInstance.closed) {
|
|
1951
|
+
this._windowInstance.focus();
|
|
1952
|
+
return this._windowInstance;
|
|
1953
|
+
}
|
|
1954
|
+
const windowInstance = window.open(this.windowUrl, this.windowId, getWindowFeatures(400, 600));
|
|
1955
|
+
if (!windowInstance) {
|
|
1956
|
+
throw new Error("Failed to open window. Popup might be blocked by the browser.");
|
|
1957
|
+
}
|
|
1958
|
+
this._windowInstance = windowInstance;
|
|
1959
|
+
this._messageHandler = (ev) => {
|
|
1960
|
+
if (ev.source !== windowInstance ||
|
|
1961
|
+
ev.origin !== this.windowOrigin ||
|
|
1962
|
+
!ev.data ||
|
|
1963
|
+
!(ev.data instanceof Object)) {
|
|
1964
|
+
return;
|
|
1965
|
+
}
|
|
1966
|
+
this._messages$.next(ev);
|
|
1967
|
+
};
|
|
1968
|
+
window.addEventListener("message", this._messageHandler);
|
|
1969
|
+
const checkWindow = setInterval(() => {
|
|
1970
|
+
if (!this._windowInstance || this._windowInstance?.closed) {
|
|
1971
|
+
this.cleanup();
|
|
1972
|
+
clearInterval(checkWindow);
|
|
1973
|
+
}
|
|
1974
|
+
}, 500);
|
|
1975
|
+
return windowInstance;
|
|
1976
|
+
}
|
|
1977
|
+
postMessage(message, transfer) {
|
|
1978
|
+
if (!this._windowInstance)
|
|
1979
|
+
return;
|
|
1980
|
+
this._windowInstance.postMessage(message, this.windowOrigin, transfer);
|
|
1981
|
+
}
|
|
1982
|
+
onMessage(callback) {
|
|
1983
|
+
const listener = (ev) => {
|
|
1984
|
+
if (ev.source !== this._windowInstance)
|
|
1985
|
+
return;
|
|
1986
|
+
callback(ev);
|
|
1987
|
+
};
|
|
1988
|
+
window.addEventListener("message", listener);
|
|
1989
|
+
const close = () => window.removeEventListener("message", listener);
|
|
1990
|
+
this.onClose(close);
|
|
1991
|
+
return {
|
|
1992
|
+
close,
|
|
1993
|
+
};
|
|
1994
|
+
}
|
|
1995
|
+
cleanup() {
|
|
1996
|
+
if (this._windowInstance && !this._windowInstance.closed) {
|
|
1997
|
+
this._windowInstance.close();
|
|
1998
|
+
}
|
|
1999
|
+
if (this._messageHandler) {
|
|
2000
|
+
window.removeEventListener("message", this._messageHandler);
|
|
2001
|
+
this._messageHandler = null;
|
|
2002
|
+
}
|
|
2003
|
+
if (this._messages$ && !this._messages$.closed) {
|
|
2004
|
+
this._messages$.complete();
|
|
2005
|
+
}
|
|
2006
|
+
this._windowInstance = null;
|
|
2007
|
+
}
|
|
2008
|
+
onClose(callback) {
|
|
2009
|
+
return this._messages$.subscribe({
|
|
2010
|
+
complete: callback,
|
|
2011
|
+
});
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
class WindowService {
|
|
2016
|
+
constructor() {
|
|
2017
|
+
this.windowControllers = new Map();
|
|
2018
|
+
}
|
|
2019
|
+
static get instance() {
|
|
2020
|
+
return this._instance || (this._instance = new this());
|
|
2021
|
+
}
|
|
2022
|
+
async sendWindowInitializationRequest(windowId, payload, port) {
|
|
2023
|
+
const windowController = this.windowControllers.get(windowId);
|
|
2024
|
+
if (!windowController) {
|
|
2025
|
+
throw new Error("Window controller not found");
|
|
2026
|
+
}
|
|
2027
|
+
const windowInstance = windowController.windowInstance;
|
|
2028
|
+
if (!windowInstance) {
|
|
2029
|
+
throw new Error("Window instance not found");
|
|
2030
|
+
}
|
|
2031
|
+
const response = firstValueFrom(windowController.messages$.pipe(filter((event) => event.data.type === AirMessageTypes.INITIALIZATION_RESPONSE)));
|
|
2032
|
+
windowController.postMessage({ type: AirMessageTypes.INITIALIZATION_REQUEST, payload }, [port]);
|
|
2033
|
+
return (await response).data;
|
|
2034
|
+
}
|
|
2035
|
+
async openAndInitializeWalletServiceWindow({ url, windowId, partnerId, enableLogging, port, }) {
|
|
2036
|
+
if (this.windowControllers.has(windowId)) {
|
|
2037
|
+
throw new Error("Window controller already exists");
|
|
2038
|
+
}
|
|
2039
|
+
const windowController = new WindowController(url, windowId);
|
|
2040
|
+
this.windowControllers.set(windowId, windowController);
|
|
2041
|
+
windowController.openWindow();
|
|
2042
|
+
windowController.onClose(() => {
|
|
2043
|
+
this.removeWindowController(windowId);
|
|
2044
|
+
});
|
|
2045
|
+
await new Promise((resolve, reject) => {
|
|
2046
|
+
windowController.onMessage(async (ev) => {
|
|
2047
|
+
if (ev.data === AirMessageTypes.SERVICE_STARTED) {
|
|
2048
|
+
const { payload } = await this.sendWindowInitializationRequest(windowId, {
|
|
2049
|
+
partnerId,
|
|
2050
|
+
enableLogging,
|
|
2051
|
+
}, port);
|
|
2052
|
+
if (payload.success === false) {
|
|
2053
|
+
reject(new AirServiceError(payload.errorName, payload.errorMessage));
|
|
2054
|
+
}
|
|
2055
|
+
else {
|
|
2056
|
+
resolve();
|
|
2057
|
+
}
|
|
2058
|
+
}
|
|
2059
|
+
});
|
|
2060
|
+
});
|
|
2061
|
+
return windowController;
|
|
2062
|
+
}
|
|
2063
|
+
getWindowController(windowId) {
|
|
2064
|
+
return this.windowControllers.get(windowId);
|
|
2065
|
+
}
|
|
2066
|
+
removeWindowController(windowId) {
|
|
2067
|
+
this.windowControllers.delete(windowId);
|
|
2068
|
+
}
|
|
2069
|
+
}
|
|
2070
|
+
var WindowService$1 = WindowService.instance;
|
|
2071
|
+
|
|
2072
|
+
var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airAuthListener, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet;
|
|
1866
2073
|
class AirService {
|
|
1867
2074
|
constructor({ partnerId }) {
|
|
1868
2075
|
_AirService_instances.add(this);
|
|
@@ -2249,23 +2456,7 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
|
|
|
2249
2456
|
try {
|
|
2250
2457
|
__classPrivateFieldSet(this, _AirService_walletIframeController, new IframeController(walletUrl, `air-wallet-${randomId()}`), "f");
|
|
2251
2458
|
__classPrivateFieldGet(this, _AirService_walletIframeController, "f").createIframe();
|
|
2252
|
-
|
|
2253
|
-
switch (msg.type) {
|
|
2254
|
-
case AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST: {
|
|
2255
|
-
const walletIframeController = __classPrivateFieldGet(this, _AirService_walletIframeController, "f");
|
|
2256
|
-
walletIframeController.setIframeVisibility(msg.payload.visible);
|
|
2257
|
-
walletIframeController.updateIframeState();
|
|
2258
|
-
break;
|
|
2259
|
-
}
|
|
2260
|
-
case AirMessageTypes.WALLET_LOGIN_RESPONSE: {
|
|
2261
|
-
if (msg.payload.success === true && !__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")) {
|
|
2262
|
-
__classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
|
|
2263
|
-
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
|
|
2264
|
-
}
|
|
2265
|
-
break;
|
|
2266
|
-
}
|
|
2267
|
-
}
|
|
2268
|
-
});
|
|
2459
|
+
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_subscribeToWalletEvents).call(this);
|
|
2269
2460
|
await new Promise((resolve, reject) => {
|
|
2270
2461
|
const handleAuthMessage = async (ev) => {
|
|
2271
2462
|
if (ev.origin !== walletIframeOrigin)
|
|
@@ -2304,6 +2495,43 @@ _AirService_loginResult = new WeakMap(), _AirService_buildEnv = new WeakMap(), _
|
|
|
2304
2495
|
await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
|
|
2305
2496
|
throw error;
|
|
2306
2497
|
}
|
|
2498
|
+
}, _AirService_subscribeToWalletEvents = function _AirService_subscribeToWalletEvents() {
|
|
2499
|
+
AirMessageService$1.messages$.subscribe(async (msg) => {
|
|
2500
|
+
switch (msg.type) {
|
|
2501
|
+
case AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST: {
|
|
2502
|
+
const walletIframeController = __classPrivateFieldGet(this, _AirService_walletIframeController, "f");
|
|
2503
|
+
walletIframeController.setIframeVisibility(msg.payload.visible);
|
|
2504
|
+
walletIframeController.updateIframeState();
|
|
2505
|
+
break;
|
|
2506
|
+
}
|
|
2507
|
+
case AirMessageTypes.WALLET_LOGIN_RESPONSE: {
|
|
2508
|
+
if (msg.payload.success === true && !__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")) {
|
|
2509
|
+
__classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
|
|
2510
|
+
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
|
|
2511
|
+
}
|
|
2512
|
+
break;
|
|
2513
|
+
}
|
|
2514
|
+
case AirMessageTypes.OPEN_WINDOW_REQUEST: {
|
|
2515
|
+
try {
|
|
2516
|
+
const channel = new MessageChannel();
|
|
2517
|
+
const windowController = await WindowService$1.openAndInitializeWalletServiceWindow({
|
|
2518
|
+
url: msg.payload.url,
|
|
2519
|
+
windowId: msg.payload.windowId,
|
|
2520
|
+
partnerId: __classPrivateFieldGet(this, _AirService_partnerId, "f"),
|
|
2521
|
+
enableLogging: __classPrivateFieldGet(this, _AirService_enableLogging, "f"),
|
|
2522
|
+
port: channel.port1,
|
|
2523
|
+
});
|
|
2524
|
+
windowController.onClose(() => AirMessageService$1.sendWindowClosed(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId));
|
|
2525
|
+
AirMessageService$1.sendOpenWindowSuccessResponse(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId, channel.port2);
|
|
2526
|
+
}
|
|
2527
|
+
catch (err) {
|
|
2528
|
+
const error = ensureError(err);
|
|
2529
|
+
AirMessageService$1.sendOpenWindowErrorResponse(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId, error);
|
|
2530
|
+
}
|
|
2531
|
+
break;
|
|
2532
|
+
}
|
|
2533
|
+
}
|
|
2534
|
+
});
|
|
2307
2535
|
}, _AirService_triggerEventListeners = function _AirService_triggerEventListeners(data) {
|
|
2308
2536
|
__classPrivateFieldGet(this, _AirService_airAuthListener, "f").forEach((listener) => {
|
|
2309
2537
|
listener(data);
|
package/dist/airkit.umd.js
CHANGED
|
@@ -154,6 +154,9 @@
|
|
|
154
154
|
LIST_ALL_SESSION_KEY_SCOPES_REQUEST: "air_list_all_session_key_scopes_request",
|
|
155
155
|
LIST_ALL_SESSION_KEY_SCOPES_RESPONSE: "air_list_all_session_key_scopes_response",
|
|
156
156
|
WALLET_IFRAME_VISIBILITY_REQUEST: "air_wallet_iframe_visibility_request",
|
|
157
|
+
OPEN_WINDOW_REQUEST: "air_open_window_request",
|
|
158
|
+
OPEN_WINDOW_RESPONSE: "air_open_window_response",
|
|
159
|
+
WINDOW_CLOSED: "air_window_closed",
|
|
157
160
|
IS_SMART_ACCOUNT_DEPLOYED_REQUEST: "air_is_smart_account_deployed_request",
|
|
158
161
|
IS_SMART_ACCOUNT_DEPLOYED_RESPONSE: "air_is_smart_account_deployed_response",
|
|
159
162
|
LOGOUT_REQUEST: "air_logout_request",
|
|
@@ -181,6 +184,16 @@
|
|
|
181
184
|
};
|
|
182
185
|
}
|
|
183
186
|
}
|
|
187
|
+
function ensureError(value) {
|
|
188
|
+
if (value instanceof Error) return value;
|
|
189
|
+
let stringified = "[Unable to stringify the thrown value]";
|
|
190
|
+
try {
|
|
191
|
+
stringified = JSON.stringify(value);
|
|
192
|
+
} catch {
|
|
193
|
+
// ignoring failed stringify
|
|
194
|
+
}
|
|
195
|
+
return new Error(`This value was not thrown as type Error: ${stringified}`);
|
|
196
|
+
}
|
|
184
197
|
|
|
185
198
|
class AirServiceError extends BaseError {
|
|
186
199
|
static from(error) {
|
|
@@ -1388,6 +1401,7 @@
|
|
|
1388
1401
|
AirMessageTypes.WALLET_INITIALIZED,
|
|
1389
1402
|
AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST,
|
|
1390
1403
|
AirMessageTypes.LOGOUT_RESPONSE,
|
|
1404
|
+
AirMessageTypes.OPEN_WINDOW_REQUEST,
|
|
1391
1405
|
];
|
|
1392
1406
|
const AUTH_MESSAGES = [
|
|
1393
1407
|
AirAuthMessageTypes.INITIALIZATION_RESPONSE,
|
|
@@ -1632,6 +1646,37 @@
|
|
|
1632
1646
|
walletIframe.contentWindow.postMessage({ type: AirMessageTypes.SETUP_MFA_REQUEST }, origin);
|
|
1633
1647
|
return response;
|
|
1634
1648
|
}
|
|
1649
|
+
sendOpenWindowSuccessResponse(walletIframe, windowId, port) {
|
|
1650
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1651
|
+
walletIframe.contentWindow.postMessage({
|
|
1652
|
+
type: AirMessageTypes.OPEN_WINDOW_RESPONSE,
|
|
1653
|
+
payload: {
|
|
1654
|
+
success: true,
|
|
1655
|
+
windowId,
|
|
1656
|
+
},
|
|
1657
|
+
}, walletOrigin, [port]);
|
|
1658
|
+
}
|
|
1659
|
+
sendOpenWindowErrorResponse(walletIframe, windowId, error) {
|
|
1660
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1661
|
+
walletIframe.contentWindow.postMessage({
|
|
1662
|
+
type: AirMessageTypes.OPEN_WINDOW_RESPONSE,
|
|
1663
|
+
payload: {
|
|
1664
|
+
success: false,
|
|
1665
|
+
windowId,
|
|
1666
|
+
errorName: "UNKNOWN_ERROR",
|
|
1667
|
+
errorMessage: error.message,
|
|
1668
|
+
},
|
|
1669
|
+
}, walletOrigin);
|
|
1670
|
+
}
|
|
1671
|
+
sendWindowClosed(walletIframe, windowId) {
|
|
1672
|
+
const { origin: walletOrigin } = new URL(walletIframe.src);
|
|
1673
|
+
walletIframe.contentWindow.postMessage({
|
|
1674
|
+
type: AirMessageTypes.WINDOW_CLOSED,
|
|
1675
|
+
payload: {
|
|
1676
|
+
windowId,
|
|
1677
|
+
},
|
|
1678
|
+
}, walletOrigin);
|
|
1679
|
+
}
|
|
1635
1680
|
async sendClaimIdRequest(walletIframe, payload) {
|
|
1636
1681
|
const response = firstValueFrom(this.messages$.pipe(filter((msg) => msg.type === AirMessageTypes.CLAIM_ID_RESPONSE)));
|
|
1637
1682
|
const { origin } = new URL(walletIframe.src);
|
|
@@ -1689,6 +1734,7 @@
|
|
|
1689
1734
|
|
|
1690
1735
|
const BUILD_ENV = {
|
|
1691
1736
|
PRODUCTION: "production",
|
|
1737
|
+
UAT: "uat",
|
|
1692
1738
|
STAGING: "staging",
|
|
1693
1739
|
DEVELOPMENT: "development",
|
|
1694
1740
|
};
|
|
@@ -1699,6 +1745,11 @@
|
|
|
1699
1745
|
walletUrl: "http://localhost:8200",
|
|
1700
1746
|
logLevel: "debug",
|
|
1701
1747
|
},
|
|
1748
|
+
[BUILD_ENV.UAT]: {
|
|
1749
|
+
authUrl: "https://auth.uat.air3.com",
|
|
1750
|
+
walletUrl: "https://account.uat.air3.com",
|
|
1751
|
+
logLevel: "info",
|
|
1752
|
+
},
|
|
1702
1753
|
[BUILD_ENV.STAGING]: {
|
|
1703
1754
|
authUrl: "https://auth.staging.air3.com",
|
|
1704
1755
|
walletUrl: "https://account.staging.air3.com",
|
|
@@ -1712,6 +1763,24 @@
|
|
|
1712
1763
|
};
|
|
1713
1764
|
const isElement = (element) => element instanceof Element || element instanceof Document;
|
|
1714
1765
|
const randomId = () => Math.random().toString(36).slice(2);
|
|
1766
|
+
const getWindowFeatures = (width, height) => {
|
|
1767
|
+
const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : window.screenX;
|
|
1768
|
+
const dualScreenTop = window.screenTop !== undefined ? window.screenTop : window.screenY;
|
|
1769
|
+
const w = window.innerWidth
|
|
1770
|
+
? window.innerWidth
|
|
1771
|
+
: document.documentElement.clientWidth
|
|
1772
|
+
? document.documentElement.clientWidth
|
|
1773
|
+
: window.screen.width;
|
|
1774
|
+
const h = window.innerHeight
|
|
1775
|
+
? window.innerHeight
|
|
1776
|
+
: document.documentElement.clientHeight
|
|
1777
|
+
? document.documentElement.clientHeight
|
|
1778
|
+
: window.screen.height;
|
|
1779
|
+
const systemZoom = 1; // No reliable estimate
|
|
1780
|
+
const left = Math.abs((w - width) / 2 / systemZoom + dualScreenLeft);
|
|
1781
|
+
const top = Math.abs((h - height) / 2 / systemZoom + dualScreenTop);
|
|
1782
|
+
return `titlebar=0,toolbar=0,status=0,location=0,menubar=0,height=${height / systemZoom},width=${width / systemZoom},top=${top},left=${left}`;
|
|
1783
|
+
};
|
|
1715
1784
|
|
|
1716
1785
|
var _AirWalletProvider_instances, _AirWalletProvider_isLoggedIn, _AirWalletProvider_ensureWallet, _AirWalletProvider_getWalletIframeController, _AirWalletProvider_eventListeners, _AirWalletProvider_emit;
|
|
1717
1786
|
class AirWalletProvider {
|
|
@@ -1868,7 +1937,145 @@
|
|
|
1868
1937
|
isVisible: false,
|
|
1869
1938
|
};
|
|
1870
1939
|
|
|
1871
|
-
|
|
1940
|
+
class WindowController {
|
|
1941
|
+
get messages$() {
|
|
1942
|
+
return this._messages$.asObservable();
|
|
1943
|
+
}
|
|
1944
|
+
constructor(windowUrl, windowId) {
|
|
1945
|
+
this._windowInstance = null;
|
|
1946
|
+
this._messageHandler = null;
|
|
1947
|
+
this._messages$ = new Subject();
|
|
1948
|
+
this.windowUrl = windowUrl;
|
|
1949
|
+
this.windowOrigin = new URL(windowUrl).origin;
|
|
1950
|
+
this.windowId = windowId;
|
|
1951
|
+
}
|
|
1952
|
+
get windowInstance() {
|
|
1953
|
+
return this._windowInstance;
|
|
1954
|
+
}
|
|
1955
|
+
openWindow() {
|
|
1956
|
+
if (this._windowInstance && !this._windowInstance.closed) {
|
|
1957
|
+
this._windowInstance.focus();
|
|
1958
|
+
return this._windowInstance;
|
|
1959
|
+
}
|
|
1960
|
+
const windowInstance = window.open(this.windowUrl, this.windowId, getWindowFeatures(400, 600));
|
|
1961
|
+
if (!windowInstance) {
|
|
1962
|
+
throw new Error("Failed to open window. Popup might be blocked by the browser.");
|
|
1963
|
+
}
|
|
1964
|
+
this._windowInstance = windowInstance;
|
|
1965
|
+
this._messageHandler = (ev) => {
|
|
1966
|
+
if (ev.source !== windowInstance ||
|
|
1967
|
+
ev.origin !== this.windowOrigin ||
|
|
1968
|
+
!ev.data ||
|
|
1969
|
+
!(ev.data instanceof Object)) {
|
|
1970
|
+
return;
|
|
1971
|
+
}
|
|
1972
|
+
this._messages$.next(ev);
|
|
1973
|
+
};
|
|
1974
|
+
window.addEventListener("message", this._messageHandler);
|
|
1975
|
+
const checkWindow = setInterval(() => {
|
|
1976
|
+
if (!this._windowInstance || this._windowInstance?.closed) {
|
|
1977
|
+
this.cleanup();
|
|
1978
|
+
clearInterval(checkWindow);
|
|
1979
|
+
}
|
|
1980
|
+
}, 500);
|
|
1981
|
+
return windowInstance;
|
|
1982
|
+
}
|
|
1983
|
+
postMessage(message, transfer) {
|
|
1984
|
+
if (!this._windowInstance)
|
|
1985
|
+
return;
|
|
1986
|
+
this._windowInstance.postMessage(message, this.windowOrigin, transfer);
|
|
1987
|
+
}
|
|
1988
|
+
onMessage(callback) {
|
|
1989
|
+
const listener = (ev) => {
|
|
1990
|
+
if (ev.source !== this._windowInstance)
|
|
1991
|
+
return;
|
|
1992
|
+
callback(ev);
|
|
1993
|
+
};
|
|
1994
|
+
window.addEventListener("message", listener);
|
|
1995
|
+
const close = () => window.removeEventListener("message", listener);
|
|
1996
|
+
this.onClose(close);
|
|
1997
|
+
return {
|
|
1998
|
+
close,
|
|
1999
|
+
};
|
|
2000
|
+
}
|
|
2001
|
+
cleanup() {
|
|
2002
|
+
if (this._windowInstance && !this._windowInstance.closed) {
|
|
2003
|
+
this._windowInstance.close();
|
|
2004
|
+
}
|
|
2005
|
+
if (this._messageHandler) {
|
|
2006
|
+
window.removeEventListener("message", this._messageHandler);
|
|
2007
|
+
this._messageHandler = null;
|
|
2008
|
+
}
|
|
2009
|
+
if (this._messages$ && !this._messages$.closed) {
|
|
2010
|
+
this._messages$.complete();
|
|
2011
|
+
}
|
|
2012
|
+
this._windowInstance = null;
|
|
2013
|
+
}
|
|
2014
|
+
onClose(callback) {
|
|
2015
|
+
return this._messages$.subscribe({
|
|
2016
|
+
complete: callback,
|
|
2017
|
+
});
|
|
2018
|
+
}
|
|
2019
|
+
}
|
|
2020
|
+
|
|
2021
|
+
class WindowService {
|
|
2022
|
+
constructor() {
|
|
2023
|
+
this.windowControllers = new Map();
|
|
2024
|
+
}
|
|
2025
|
+
static get instance() {
|
|
2026
|
+
return this._instance || (this._instance = new this());
|
|
2027
|
+
}
|
|
2028
|
+
async sendWindowInitializationRequest(windowId, payload, port) {
|
|
2029
|
+
const windowController = this.windowControllers.get(windowId);
|
|
2030
|
+
if (!windowController) {
|
|
2031
|
+
throw new Error("Window controller not found");
|
|
2032
|
+
}
|
|
2033
|
+
const windowInstance = windowController.windowInstance;
|
|
2034
|
+
if (!windowInstance) {
|
|
2035
|
+
throw new Error("Window instance not found");
|
|
2036
|
+
}
|
|
2037
|
+
const response = firstValueFrom(windowController.messages$.pipe(filter((event) => event.data.type === AirMessageTypes.INITIALIZATION_RESPONSE)));
|
|
2038
|
+
windowController.postMessage({ type: AirMessageTypes.INITIALIZATION_REQUEST, payload }, [port]);
|
|
2039
|
+
return (await response).data;
|
|
2040
|
+
}
|
|
2041
|
+
async openAndInitializeWalletServiceWindow({ url, windowId, partnerId, enableLogging, port, }) {
|
|
2042
|
+
if (this.windowControllers.has(windowId)) {
|
|
2043
|
+
throw new Error("Window controller already exists");
|
|
2044
|
+
}
|
|
2045
|
+
const windowController = new WindowController(url, windowId);
|
|
2046
|
+
this.windowControllers.set(windowId, windowController);
|
|
2047
|
+
windowController.openWindow();
|
|
2048
|
+
windowController.onClose(() => {
|
|
2049
|
+
this.removeWindowController(windowId);
|
|
2050
|
+
});
|
|
2051
|
+
await new Promise((resolve, reject) => {
|
|
2052
|
+
windowController.onMessage(async (ev) => {
|
|
2053
|
+
if (ev.data === AirMessageTypes.SERVICE_STARTED) {
|
|
2054
|
+
const { payload } = await this.sendWindowInitializationRequest(windowId, {
|
|
2055
|
+
partnerId,
|
|
2056
|
+
enableLogging,
|
|
2057
|
+
}, port);
|
|
2058
|
+
if (payload.success === false) {
|
|
2059
|
+
reject(new AirServiceError(payload.errorName, payload.errorMessage));
|
|
2060
|
+
}
|
|
2061
|
+
else {
|
|
2062
|
+
resolve();
|
|
2063
|
+
}
|
|
2064
|
+
}
|
|
2065
|
+
});
|
|
2066
|
+
});
|
|
2067
|
+
return windowController;
|
|
2068
|
+
}
|
|
2069
|
+
getWindowController(windowId) {
|
|
2070
|
+
return this.windowControllers.get(windowId);
|
|
2071
|
+
}
|
|
2072
|
+
removeWindowController(windowId) {
|
|
2073
|
+
this.windowControllers.delete(windowId);
|
|
2074
|
+
}
|
|
2075
|
+
}
|
|
2076
|
+
var WindowService$1 = WindowService.instance;
|
|
2077
|
+
|
|
2078
|
+
var _AirService_instances, _AirService_loginResult, _AirService_buildEnv, _AirService_enableLogging, _AirService_partnerId, _AirService_authIframeController, _AirService_isAuthInitialized, _AirService_airAuthListener, _AirService_walletIframeController, _AirService_walletInitialization, _AirService_walletLoggedInResult, _AirService_airWalletProvider, _AirService_ensureWallet, _AirService_initializeWallet, _AirService_subscribeToWalletEvents, _AirService_triggerEventListeners, _AirService_triggerAirAuthInitialized, _AirService_triggerAirAuthLoggedIn, _AirService_triggerAirAuthLoggedOut, _AirService_triggerWalletInitialized, _AirService_createLoginResult, _AirService_createWalletInitializedResult, _AirService_cleanUpAuth, _AirService_cleanUpWallet;
|
|
1872
2079
|
class AirService {
|
|
1873
2080
|
constructor({ partnerId }) {
|
|
1874
2081
|
_AirService_instances.add(this);
|
|
@@ -2255,23 +2462,7 @@
|
|
|
2255
2462
|
try {
|
|
2256
2463
|
__classPrivateFieldSet(this, _AirService_walletIframeController, new IframeController(walletUrl, `air-wallet-${randomId()}`), "f");
|
|
2257
2464
|
__classPrivateFieldGet(this, _AirService_walletIframeController, "f").createIframe();
|
|
2258
|
-
|
|
2259
|
-
switch (msg.type) {
|
|
2260
|
-
case AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST: {
|
|
2261
|
-
const walletIframeController = __classPrivateFieldGet(this, _AirService_walletIframeController, "f");
|
|
2262
|
-
walletIframeController.setIframeVisibility(msg.payload.visible);
|
|
2263
|
-
walletIframeController.updateIframeState();
|
|
2264
|
-
break;
|
|
2265
|
-
}
|
|
2266
|
-
case AirMessageTypes.WALLET_LOGIN_RESPONSE: {
|
|
2267
|
-
if (msg.payload.success === true && !__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")) {
|
|
2268
|
-
__classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
|
|
2269
|
-
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
|
|
2270
|
-
}
|
|
2271
|
-
break;
|
|
2272
|
-
}
|
|
2273
|
-
}
|
|
2274
|
-
});
|
|
2465
|
+
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_subscribeToWalletEvents).call(this);
|
|
2275
2466
|
await new Promise((resolve, reject) => {
|
|
2276
2467
|
const handleAuthMessage = async (ev) => {
|
|
2277
2468
|
if (ev.origin !== walletIframeOrigin)
|
|
@@ -2310,6 +2501,43 @@
|
|
|
2310
2501
|
await __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_cleanUpWallet).call(this);
|
|
2311
2502
|
throw error;
|
|
2312
2503
|
}
|
|
2504
|
+
}, _AirService_subscribeToWalletEvents = function _AirService_subscribeToWalletEvents() {
|
|
2505
|
+
AirMessageService$1.messages$.subscribe(async (msg) => {
|
|
2506
|
+
switch (msg.type) {
|
|
2507
|
+
case AirMessageTypes.WALLET_IFRAME_VISIBILITY_REQUEST: {
|
|
2508
|
+
const walletIframeController = __classPrivateFieldGet(this, _AirService_walletIframeController, "f");
|
|
2509
|
+
walletIframeController.setIframeVisibility(msg.payload.visible);
|
|
2510
|
+
walletIframeController.updateIframeState();
|
|
2511
|
+
break;
|
|
2512
|
+
}
|
|
2513
|
+
case AirMessageTypes.WALLET_LOGIN_RESPONSE: {
|
|
2514
|
+
if (msg.payload.success === true && !__classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f")) {
|
|
2515
|
+
__classPrivateFieldSet(this, _AirService_walletLoggedInResult, __classPrivateFieldGet(this, _AirService_instances, "m", _AirService_createWalletInitializedResult).call(this, msg.payload), "f");
|
|
2516
|
+
__classPrivateFieldGet(this, _AirService_instances, "m", _AirService_triggerWalletInitialized).call(this, __classPrivateFieldGet(this, _AirService_walletLoggedInResult, "f"));
|
|
2517
|
+
}
|
|
2518
|
+
break;
|
|
2519
|
+
}
|
|
2520
|
+
case AirMessageTypes.OPEN_WINDOW_REQUEST: {
|
|
2521
|
+
try {
|
|
2522
|
+
const channel = new MessageChannel();
|
|
2523
|
+
const windowController = await WindowService$1.openAndInitializeWalletServiceWindow({
|
|
2524
|
+
url: msg.payload.url,
|
|
2525
|
+
windowId: msg.payload.windowId,
|
|
2526
|
+
partnerId: __classPrivateFieldGet(this, _AirService_partnerId, "f"),
|
|
2527
|
+
enableLogging: __classPrivateFieldGet(this, _AirService_enableLogging, "f"),
|
|
2528
|
+
port: channel.port1,
|
|
2529
|
+
});
|
|
2530
|
+
windowController.onClose(() => AirMessageService$1.sendWindowClosed(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId));
|
|
2531
|
+
AirMessageService$1.sendOpenWindowSuccessResponse(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId, channel.port2);
|
|
2532
|
+
}
|
|
2533
|
+
catch (err) {
|
|
2534
|
+
const error = ensureError(err);
|
|
2535
|
+
AirMessageService$1.sendOpenWindowErrorResponse(__classPrivateFieldGet(this, _AirService_walletIframeController, "f").iframeElement, msg.payload.windowId, error);
|
|
2536
|
+
}
|
|
2537
|
+
break;
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
});
|
|
2313
2541
|
}, _AirService_triggerEventListeners = function _AirService_triggerEventListeners(data) {
|
|
2314
2542
|
__classPrivateFieldGet(this, _AirService_airAuthListener, "f").forEach((listener) => {
|
|
2315
2543
|
listener(data);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EIP1193EventMap, EIP1193Provider } from "
|
|
1
|
+
import { EIP1193EventMap, EIP1193Provider } from "./common/provider/types";
|
|
2
2
|
import { AirWalletInitializedResult } from "./interfaces";
|
|
3
3
|
import { IframeController } from "./iframeController";
|
|
4
4
|
declare class AirWalletProvider implements EIP1193Provider {
|
|
@@ -25,6 +25,9 @@ export declare const AirMessageTypes: {
|
|
|
25
25
|
readonly LIST_ALL_SESSION_KEY_SCOPES_REQUEST: "air_list_all_session_key_scopes_request";
|
|
26
26
|
readonly LIST_ALL_SESSION_KEY_SCOPES_RESPONSE: "air_list_all_session_key_scopes_response";
|
|
27
27
|
readonly WALLET_IFRAME_VISIBILITY_REQUEST: "air_wallet_iframe_visibility_request";
|
|
28
|
+
readonly OPEN_WINDOW_REQUEST: "air_open_window_request";
|
|
29
|
+
readonly OPEN_WINDOW_RESPONSE: "air_open_window_response";
|
|
30
|
+
readonly WINDOW_CLOSED: "air_window_closed";
|
|
28
31
|
readonly IS_SMART_ACCOUNT_DEPLOYED_REQUEST: "air_is_smart_account_deployed_request";
|
|
29
32
|
readonly IS_SMART_ACCOUNT_DEPLOYED_RESPONSE: "air_is_smart_account_deployed_response";
|
|
30
33
|
readonly LOGOUT_REQUEST: "air_logout_request";
|
|
@@ -41,7 +44,7 @@ type AirMessageBaseWithoutPayload<TType extends AirMessageType> = {
|
|
|
41
44
|
type AirSuccessPayload = {
|
|
42
45
|
success: true;
|
|
43
46
|
};
|
|
44
|
-
type AirErrorPayload = {
|
|
47
|
+
export type AirErrorPayload = {
|
|
45
48
|
success: false;
|
|
46
49
|
errorName: AirErrorName;
|
|
47
50
|
errorMessage?: string;
|
|
@@ -127,5 +130,15 @@ export type AirWalletIframeVisibilityRequestMessage = AirMessageBase<"air_wallet
|
|
|
127
130
|
}>;
|
|
128
131
|
export type AirLogoutRequestMessage = AirMessageBaseWithoutPayload<"air_logout_request">;
|
|
129
132
|
export type AirLogoutResponseMessage = AirMessageBase<"air_logout_response", AirSuccessPayload | AirErrorPayload>;
|
|
130
|
-
export type
|
|
133
|
+
export type AirOpenWindowRequestMessage = AirMessageBase<"air_open_window_request", {
|
|
134
|
+
url: string;
|
|
135
|
+
windowId: string;
|
|
136
|
+
}>;
|
|
137
|
+
export type AirOpenWindowResponseMessage = AirMessageBase<"air_open_window_response", (AirSuccessPayload | AirErrorPayload) & {
|
|
138
|
+
windowId: string;
|
|
139
|
+
}>;
|
|
140
|
+
export type AirWindowClosedMessage = AirMessageBase<"air_window_closed", {
|
|
141
|
+
windowId: string;
|
|
142
|
+
}>;
|
|
143
|
+
export type AirMessage = AirInitializationRequestMessage | AirInitializationResponseMessage | AirWalletInitializedMessage | AirWalletLoginRequestMessage | AirWalletLoginResponseMessage | AirSetupMfaRequestMessage | AirSetupMfaResponseMessage | AirClaimIdRequestMessage | AirClaimIdResponseMessage | AirInitAuthCommunicationMessage | AirIsSmartAccountDeployedRequestMessage | AirIsSmartAccountDeployedResponseMessage | AirDeploySmartAccountRequestMessage | AirDeploySmartAccountResponseMessage | AirGrantPermissionsRequestMessage | AirGrantPermissionsResponseMessage | AirRevokePermissionsRequestMessage | AirRevokePermissionsResponseMessage | AirExecuteActionRequestMessage | AirExecuteActionResponseMessage | AirListAllSessionKeyScopesRequestMessage | AirListAllSessionKeyScopesResponseMessage | AirWalletIframeVisibilityRequestMessage | AirLogoutRequestMessage | AirLogoutResponseMessage | AirOpenWindowRequestMessage | AirOpenWindowResponseMessage | AirWindowClosedMessage;
|
|
131
144
|
export {};
|
|
@@ -6,8 +6,9 @@ export declare function promiseCreator<T>(): {
|
|
|
6
6
|
reject: (reason?: string) => void;
|
|
7
7
|
promise: Promise<T>;
|
|
8
8
|
};
|
|
9
|
-
export declare const
|
|
10
|
-
export declare const
|
|
9
|
+
export declare const isRoot: boolean;
|
|
10
|
+
export declare const getParentOrReferrerOrigin: () => string | undefined;
|
|
11
|
+
export declare const getWindowId: () => string | undefined;
|
|
11
12
|
export declare const isUnsafeOrigin: (origin: string) => boolean;
|
|
12
13
|
export declare const isParentHttps: (origin: string) => boolean;
|
|
13
14
|
export declare const formatPublicKey: (publicKey: string) => string;
|
|
@@ -3,6 +3,7 @@ import { AirIdDetails } from "./common/realm/user/types";
|
|
|
3
3
|
import { EIP1193Provider as EIP1193ProviderInterface } from "./common/provider/types";
|
|
4
4
|
export declare const BUILD_ENV: {
|
|
5
5
|
readonly PRODUCTION: "production";
|
|
6
|
+
readonly UAT: "uat";
|
|
6
7
|
readonly STAGING: "staging";
|
|
7
8
|
readonly DEVELOPMENT: "development";
|
|
8
9
|
};
|
|
@@ -50,6 +50,9 @@ declare class AirMessageService {
|
|
|
50
50
|
onWalletInitialized(): Promise<import("./common/realm/messaging/types").AirWalletInitializedMessage>;
|
|
51
51
|
sendWalletLoginRequest(walletIframe: HTMLIFrameElement): Promise<import("./common/realm/messaging/types").AirWalletLoginResponseMessage>;
|
|
52
52
|
sendSetupMfaRequest(walletIframe: HTMLIFrameElement): Promise<import("./common/realm/messaging/types").AirSetupMfaResponseMessage>;
|
|
53
|
+
sendOpenWindowSuccessResponse(walletIframe: HTMLIFrameElement, windowId: string, port: MessagePort): void;
|
|
54
|
+
sendOpenWindowErrorResponse(walletIframe: HTMLIFrameElement, windowId: string, error: Error): void;
|
|
55
|
+
sendWindowClosed(walletIframe: HTMLIFrameElement, windowId: string): void;
|
|
53
56
|
sendClaimIdRequest(walletIframe: HTMLIFrameElement, payload: AirClaimIdRequestMessage["payload"]): Promise<import("./common/realm/messaging/types").AirClaimIdResponseMessage>;
|
|
54
57
|
sendWalletProviderRequest(walletIframe: HTMLIFrameElement, payload: AirWalletProviderMessageRequest["payload"]): Promise<AirWalletProviderMessageResponse>;
|
|
55
58
|
closeAuthObservables(): void;
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -4,3 +4,4 @@ export declare const handleEvent: (handle: EventTarget, eventName: string, handl
|
|
|
4
4
|
export declare const htmlToElement: <T extends Element>(html: string) => T;
|
|
5
5
|
export declare const isElement: (element: unknown) => element is Document | Element;
|
|
6
6
|
export declare const randomId: () => string;
|
|
7
|
+
export declare const getWindowFeatures: (width: number, height: number) => string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Subscription } from "rxjs";
|
|
2
|
+
export declare class WindowController {
|
|
3
|
+
private _windowInstance;
|
|
4
|
+
private _messageHandler;
|
|
5
|
+
private windowUrl;
|
|
6
|
+
private windowOrigin;
|
|
7
|
+
private windowId;
|
|
8
|
+
private _messages$;
|
|
9
|
+
get messages$(): import("rxjs").Observable<MessageEvent<any>>;
|
|
10
|
+
constructor(windowUrl: string, windowId: string);
|
|
11
|
+
get windowInstance(): Window | null;
|
|
12
|
+
openWindow(): Window;
|
|
13
|
+
postMessage(message: unknown, transfer?: Transferable[]): void;
|
|
14
|
+
onMessage(callback: (event: MessageEvent) => void): {
|
|
15
|
+
close: () => void;
|
|
16
|
+
};
|
|
17
|
+
cleanup(): void;
|
|
18
|
+
onClose(callback: () => void): Subscription;
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { WindowController } from "./windowController";
|
|
2
|
+
declare class WindowService {
|
|
3
|
+
private static _instance;
|
|
4
|
+
static get instance(): WindowService;
|
|
5
|
+
private windowControllers;
|
|
6
|
+
private sendWindowInitializationRequest;
|
|
7
|
+
openAndInitializeWalletServiceWindow({ url, windowId, partnerId, enableLogging, port, }: {
|
|
8
|
+
url: string;
|
|
9
|
+
windowId: string;
|
|
10
|
+
partnerId: string;
|
|
11
|
+
enableLogging: boolean;
|
|
12
|
+
port: MessagePort;
|
|
13
|
+
}): Promise<WindowController>;
|
|
14
|
+
getWindowController(windowId: string): WindowController;
|
|
15
|
+
removeWindowController(windowId: string): void;
|
|
16
|
+
}
|
|
17
|
+
declare const _default: WindowService;
|
|
18
|
+
export default _default;
|