@wavemaker/app-rn-runtime 11.14.1-3.6306 → 11.14.1-32.647748
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/components/advanced/webview/webview.component.js +1 -1
- package/components/advanced/webview/webview.component.js.map +1 -1
- package/components/basic/label/label.component.js +2 -2
- package/components/basic/label/label.component.js.map +1 -1
- package/components/container/wizard/wizard.component.js +5 -3
- package/components/container/wizard/wizard.component.js.map +1 -1
- package/components/container/wizard/wizard.props.js +1 -0
- package/components/container/wizard/wizard.props.js.map +1 -1
- package/components/container/wizard/wizard.styles.js +1 -3
- package/components/container/wizard/wizard.styles.js.map +1 -1
- package/components/container/wizard/wizardstep/wizardstep.component.js +23 -4
- package/components/container/wizard/wizardstep/wizardstep.component.js.map +1 -1
- package/components/container/wizard/wizardstep/wizardstep.props.js +2 -0
- package/components/container/wizard/wizardstep/wizardstep.props.js.map +1 -1
- package/components/dialogs/dialogcontent/dialogcontent.component.js +2 -1
- package/components/dialogs/dialogcontent/dialogcontent.component.js.map +1 -1
- package/components/input/checkboxset/checkboxset.component.js +1 -1
- package/components/input/checkboxset/checkboxset.component.js.map +1 -1
- package/components/input/radioset/radioset.component.js +8 -3
- package/components/input/radioset/radioset.component.js.map +1 -1
- package/components/input/text/text.component.js +2 -2
- package/components/input/text/text.component.js.map +1 -1
- package/components/input/textarea/textarea.component.js +2 -2
- package/components/input/textarea/textarea.component.js.map +1 -1
- package/components/navigation/popover/popover.component.js +3 -3
- package/components/navigation/popover/popover.component.js.map +1 -1
- package/core/AppConfig.js.map +1 -1
- package/core/advanced-promise-rejection-tracker.js +207 -0
- package/core/advanced-promise-rejection-tracker.js.map +1 -0
- package/core/base.component.js +5 -0
- package/core/base.component.js.map +1 -1
- package/core/components/error-fallback/error-fallback.component.js +50 -18
- package/core/components/error-fallback/error-fallback.component.js.map +1 -1
- package/core/components/error-fallback/error-fallback.styles.js +4 -1
- package/core/components/error-fallback/error-fallback.styles.js.map +1 -1
- package/core/components/textinput.component.js +3 -0
- package/core/components/textinput.component.js.map +1 -1
- package/core/error-boundary.component.js +46 -2
- package/core/error-boundary.component.js.map +1 -1
- package/core/global-error-handler.service.js +177 -0
- package/core/global-error-handler.service.js.map +1 -0
- package/core/tappable.component.js +1 -1
- package/core/tappable.component.js.map +1 -1
- package/npm-shrinkwrap.json +4080 -2795
- package/package-lock.json +4080 -2795
- package/package.json +8 -3
- package/runtime/App.js +181 -30
- package/runtime/App.js.map +1 -1
- package/runtime/App.navigator.js +4 -1
- package/runtime/App.navigator.js.map +1 -1
- package/runtime/base-page.component.js +11 -2
- package/runtime/base-page.component.js.map +1 -1
- package/runtime/navigator/stack.navigator.js +6 -0
- package/runtime/navigator/stack.navigator.js.map +1 -1
- package/runtime/services/app-security.service.js +40 -19
- package/runtime/services/app-security.service.js.map +1 -1
- package/runtime/services/browser.constants.js +3 -0
- package/runtime/services/browser.constants.js.map +1 -0
- package/runtime/services/browser.service.js +321 -0
- package/runtime/services/browser.service.js.map +1 -0
- package/runtime/services/external-auth-callback.service.js +44 -0
- package/runtime/services/external-auth-callback.service.js.map +1 -0
- package/runtime/services/webprocess.service.js +8 -3
- package/runtime/services/webprocess.service.js.map +1 -1
|
@@ -8,6 +8,7 @@ import networkService from '@wavemaker/app-rn-runtime/core/network.service';
|
|
|
8
8
|
import injector from '@wavemaker/app-rn-runtime/core/injector';
|
|
9
9
|
import StorageService from '@wavemaker/app-rn-runtime/core/storage.service';
|
|
10
10
|
import WebProcessService from './webprocess.service';
|
|
11
|
+
import { getBrowserConfig, getSsoBrowserFlags } from './browser.service';
|
|
11
12
|
import { isWebPreviewMode } from '@wavemaker/app-rn-runtime/core/utils';
|
|
12
13
|
var USER_ROLE = /*#__PURE__*/function (USER_ROLE) {
|
|
13
14
|
USER_ROLE["EVERYONE"] = "Everyone";
|
|
@@ -18,6 +19,11 @@ var USER_ROLE = /*#__PURE__*/function (USER_ROLE) {
|
|
|
18
19
|
const authCookieStr = 'AUTH_COOKIE';
|
|
19
20
|
const XSRF_COOKIE_NAME = 'wm_xsrf_token';
|
|
20
21
|
const xsrf_header_name = 'X-WM-XSRF-TOKEN';
|
|
22
|
+
|
|
23
|
+
/** True when a 401 on an app page (not /services/) should run redirectToLogin. */
|
|
24
|
+
export function shouldRedirectToLoginOn401(url, status, appUrl, pageName) {
|
|
25
|
+
return !!url && !!appUrl && status === 401 && url.startsWith(appUrl) && !url.includes('/services/') && pageName !== 'Login';
|
|
26
|
+
}
|
|
21
27
|
class AppSecurityService {
|
|
22
28
|
constructor() {
|
|
23
29
|
_defineProperty(this, "securityConfig", void 0);
|
|
@@ -28,6 +34,8 @@ class AppSecurityService {
|
|
|
28
34
|
_defineProperty(this, "baseUrl", '');
|
|
29
35
|
_defineProperty(this, "defaultSecurityConfig", void 0);
|
|
30
36
|
_defineProperty(this, "landingPage", '');
|
|
37
|
+
// Prevents overlapping redirectToLogin() calls, which would race each other's WM_WEB_PROCESS cookie/key.
|
|
38
|
+
_defineProperty(this, "ssoLoginPromise", null);
|
|
31
39
|
_defineProperty(this, "getRegex", str => {
|
|
32
40
|
const wm_xsrf_token_index = str.indexOf('wm_xsrf_token') + 13; // 13 is the length of 'wm_xsrf_token' string
|
|
33
41
|
let index = wm_xsrf_token_index;
|
|
@@ -160,26 +168,39 @@ class AppSecurityService {
|
|
|
160
168
|
const authUrl = this.appConfig.url + '/services/security/ssologin';
|
|
161
169
|
if (Platform.OS === 'web') {
|
|
162
170
|
(window.parent || window).location.href = authUrl;
|
|
163
|
-
} else {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
171
|
+
} else if (!this.ssoLoginPromise) {
|
|
172
|
+
this.ssoLoginPromise = new Promise(resolve => {
|
|
173
|
+
setTimeout(() => {
|
|
174
|
+
const {
|
|
175
|
+
useSystemBrowser,
|
|
176
|
+
incognito
|
|
177
|
+
} = getSsoBrowserFlags(getBrowserConfig(this.appConfig));
|
|
178
|
+
WebProcessService.execute('LOGIN', '/services/security/ssologin', useSystemBrowser, incognito).then(output => {
|
|
179
|
+
if (output) {
|
|
180
|
+
if (output.data) {
|
|
181
|
+
return this.formateData(`${output.data}`);
|
|
182
|
+
}
|
|
169
183
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
this.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
184
|
+
return Promise.reject();
|
|
185
|
+
}).then(output => {
|
|
186
|
+
if (output[XSRF_COOKIE_NAME]) {
|
|
187
|
+
this.token = output[XSRF_COOKIE_NAME];
|
|
188
|
+
StorageService.setItem(XSRF_COOKIE_NAME, output[XSRF_COOKIE_NAME]);
|
|
189
|
+
}
|
|
190
|
+
}).then(() => {
|
|
191
|
+
this.appConfig.refresh(true);
|
|
192
|
+
}).then(() => this.load(this.baseUrl)).then(() => {
|
|
193
|
+
return this.getLoggedInUserDetails(this.baseUrl);
|
|
194
|
+
}).catch(error => {
|
|
195
|
+
var _this$appConfig$app, _this$appConfig$app$o;
|
|
196
|
+
console.error('[AppSecurityService] SSO login failed:', (error === null || error === void 0 ? void 0 : error.message) || error);
|
|
197
|
+
(_this$appConfig$app = this.appConfig.app) === null || _this$appConfig$app === void 0 || (_this$appConfig$app$o = _this$appConfig$app.onServiceError) === null || _this$appConfig$app$o === void 0 || _this$appConfig$app$o.call(_this$appConfig$app, (error === null || error === void 0 ? void 0 : error.message) || 'SSO login failed', error);
|
|
198
|
+
}).then(() => {
|
|
199
|
+
this.ssoLoginPromise = null;
|
|
200
|
+
resolve(undefined);
|
|
201
|
+
});
|
|
202
|
+
}, 1000);
|
|
203
|
+
});
|
|
183
204
|
}
|
|
184
205
|
} else {
|
|
185
206
|
var _this$securityConfig$, _this$appConfig$curre3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","axios","each","includes","networkService","injector","StorageService","WebProcessService","isWebPreviewMode","USER_ROLE","authCookieStr","XSRF_COOKIE_NAME","xsrf_header_name","AppSecurityService","constructor","_defineProperty","str","wm_xsrf_token_index","indexOf","index","regExp","substring","RegExp","data","regex","getRegex","JSON","parse","replace","interceptors","request","use","config","onBeforeServiceCall","appConfig","getAppConfig","baseUrl","url","getXsrfToken","then","token","_config$url","startsWith","headers","Promise","resolve","getItem","xsrf_token","get","navigateToLandingPage","_this$appConfig$curre","_this$appConfig$logge","currentPage","goToPage","loggedInUser","landingPage","setTimeout","_this$appConfig$curre2","openUrl","appLogin","options","payload","formData","value","name","encodeURIComponent","defaults","withCredentials","post","baseURL","response","xsrfCookieValue","setItem","isLoggedIn","load","userData","getLoggedInUserDetails","useDefaultSuccessHandler","app","triggerStartUpVariables","_document","document","cookie","split","filter","item","length","wm_xsrf_token","isConnected","getServiceDefinitions","defaultSecurityConfig","details","securityConfig","isSecurityEnabled","securityEnabled","authenticated","_appConfig$appPropert","isAuthenticated","roles","userInfo","userRoles","userName","id","userId","tenantId","userAttributes","dataSet","appProperties","homePage","redirectToLogin","redirectTo","_this$securityConfig","loginConfig","type","authUrl","OS","window","parent","location","href","execute","output","formateData","reject","refresh","_this$securityConfig$","_this$appConfig$curre3","loginPage","pageName","appLogout","catch","_response$data","result","r","_response$data2","e","console","error","canUserAccessPage","_this$securityConfig2","res","status","matchRoles","widgetRoles","some","hasAccessToWidget","_this$loggedInUser$da","_this$loggedInUser$da2","_this$loggedInUser$da3","_this$loggedInUser$da4","widgetRolesArr","EVERYONE","ANONYMOUS","AUTHENTICATED","appSecurityService"],"sources":["app-security.service.tsx"],"sourcesContent":["import { Platform } from 'react-native';\nimport axios, { InternalAxiosRequestConfig, AxiosResponse } from 'axios';\nimport { each, includes } from 'lodash';\n\nimport networkService from '@wavemaker/app-rn-runtime/core/network.service';\nimport injector from '@wavemaker/app-rn-runtime/core/injector';\nimport AppConfig from '@wavemaker/app-rn-runtime/core/AppConfig';\nimport StorageService from '@wavemaker/app-rn-runtime/core/storage.service';\nimport { SecurityService } from '@wavemaker/app-rn-runtime/core/security.service';\n\nimport WebProcessService from './webprocess.service';\nimport { isWebPreviewMode } from '@wavemaker/app-rn-runtime/core/utils';\n\ndeclare const window: any;\n\ninterface LoggedInUserConfig {\n isAuthenticated: Boolean;\n isSecurityEnabled: Boolean;\n roles: Array<string>;\n name: String;\n id: String;\n tenantId: String;\n userAttributes: any;\n landingPage: string;\n}\n\nenum USER_ROLE {\n EVERYONE = 'Everyone',\n ANONYMOUS = 'Anonymous',\n AUTHENTICATED = 'Authenticated'\n}\n\nconst authCookieStr = 'AUTH_COOKIE';\nconst XSRF_COOKIE_NAME = 'wm_xsrf_token';\nconst xsrf_header_name = 'X-WM-XSRF-TOKEN';\n\nclass AppSecurityService implements SecurityService {\n\n securityConfig: any;\n isLoggedIn = false;\n loggedInUser: any = {};\n token: any;\n appConfig: any;\n baseUrl: string = '';\n defaultSecurityConfig: any;\n landingPage = '';\n\n constructor() {\n axios.interceptors.request.use((config: InternalAxiosRequestConfig) => this.onBeforeServiceCall(config));\n }\n\n getRegex = (str: string) =>{\n const wm_xsrf_token_index = str.indexOf('wm_xsrf_token') + 13; // 13 is the length of 'wm_xsrf_token' string\n let index = wm_xsrf_token_index;\n\n while(str[index] !== ':'){\n index++;\n }\n \n const regExp = str.substring(wm_xsrf_token_index, index);\n return new RegExp(regExp, \"g\");\n }\n \n formateData = (data: string) => {\n const regex = this.getRegex(data)\n return JSON.parse(data.replace(regex, \"\\\"\"));\n }\n\n onBeforeServiceCall(config: InternalAxiosRequestConfig) {\n if (!this.appConfig) {\n this.appConfig = this.getAppConfig();\n this.baseUrl = this.appConfig.url;\n }\n return this.getXsrfToken().then((token: string) => {\n if (config.url?.startsWith(this.baseUrl) && token) {\n if(config.headers) config.headers[xsrf_header_name] = token;\n }\n return config\n });\n }\n\n private getXsrfToken(): Promise<string> {\n if (this.token) {\n return Promise.resolve(this.token);\n }\n return StorageService.getItem(XSRF_COOKIE_NAME).then(xsrf_token => {\n this.token = xsrf_token;\n return this.token;\n });\n }\n\n private getAppConfig() {\n return injector.get<AppConfig>('APP_CONFIG');\n }\n\n public navigateToLandingPage() {\n this.appConfig.currentPage?.goToPage(\n this.appConfig.loggedInUser?.landingPage \n || this.appConfig.landingPage \n || 'Main', null, true);\n if (this.landingPage) {\n const landingPage = this.landingPage;\n this.landingPage = '';\n setTimeout(() => {\n this.appConfig.currentPage?.openUrl(landingPage);\n }, 100);\n }\n }\n\n public appLogin(options: any) {\n // encode all parameters\n let payload = '';\n each(options.formData, function (value, name) {\n payload += (payload ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value);\n });\n axios.defaults.withCredentials = true;\n return axios.post(options.baseURL + '/j_spring_security_check', payload, {\n withCredentials: true,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }}).then((response: AxiosResponse) => {\n const xsrfCookieValue = response.data ? response.data[XSRF_COOKIE_NAME] : '';\n this.token = xsrfCookieValue;\n StorageService.setItem(XSRF_COOKIE_NAME, xsrfCookieValue);\n this.isLoggedIn = true;\n }).then(() => this.load(options.baseURL))\n .then(async () => {\n const userData = await this.getLoggedInUserDetails(options.baseURL, options.useDefaultSuccessHandler);\n await this.appConfig.app.triggerStartUpVariables();\n return userData;\n });\n }\n\n public load(baseURL: string) {\n if (isWebPreviewMode()) {\n const token = document?.cookie?.split(';').filter(item => item.includes('wm_xsrf_token'))\n if (token && token.length > 0) {\n const wm_xsrf_token = token[0].split('=')[1];\n wm_xsrf_token && StorageService.setItem(XSRF_COOKIE_NAME, wm_xsrf_token);\n }\n }\n\n return Promise.resolve().then(() => {\n if (networkService.isConnected()) {\n return axios.get(baseURL + '/services/security/info')\n .then((response: AxiosResponse) => response.data);\n }\n return this.appConfig.getServiceDefinitions(this.appConfig.url)\n .then(() => Promise.resolve(this.defaultSecurityConfig));\n }).then((details: any) => {\n const loggedInUser = {} as LoggedInUserConfig;\n this.securityConfig = details || {};\n this.securityConfig.isSecurityEnabled = !!details?.securityEnabled;\n const appConfig = this.appConfig;\n if (typeof details !== 'string' && (!details.securityEnabled || details.authenticated)) {\n if (details.authenticated) {\n loggedInUser.isAuthenticated = details.authenticated;\n loggedInUser.isSecurityEnabled = details.authenticated;\n loggedInUser.roles = details.userInfo.userRoles;\n loggedInUser.name = details.userInfo.userName;\n loggedInUser.id = details.userInfo.userId;\n loggedInUser.tenantId = details.userInfo.tenantId;\n loggedInUser.userAttributes = details.userInfo.userAttributes;\n loggedInUser.landingPage = details.userInfo.landingPage;\n appConfig.loggedInUser = loggedInUser;\n this.loggedInUser.dataSet = loggedInUser;\n appConfig.landingPage = appConfig.appProperties?.homePage;\n }\n return appConfig.getServiceDefinitions(appConfig.url)\n .then(() => {\n return details;\n });\n } else {\n return appConfig.getServiceDefinitions(appConfig.url)\n .then(() => {\n this.redirectToLogin();\n });\n }\n });\n }\n\n private getLoggedInUserDetails(baseURL: string, useDefaultSuccessHandler: boolean = true) {\n if (!baseURL) {\n this.loggedInUser = {};\n return Promise.resolve({});\n }\n return this.load(baseURL);\n }\n\n \n public redirectToLogin(redirectTo?: string) {\n if (this.securityConfig?.loginConfig?.type === 'SSO') {\n const authUrl = this.appConfig.url + '/services/security/ssologin';\n if (Platform.OS === 'web') {\n (window.parent || window).location.href = authUrl;\n } else {\n setTimeout(() => {\n WebProcessService.execute('LOGIN', '/services/security/ssologin', false, true)\n .then((output: any) => {\n if (output) {\n if(output.data){\n return this.formateData(`${output.data}`);\n }\n }\n return Promise.reject();\n }).then((output: any) => {\n if (output[XSRF_COOKIE_NAME]) {\n this.token = output[XSRF_COOKIE_NAME];\n StorageService.setItem(XSRF_COOKIE_NAME, output[XSRF_COOKIE_NAME]);\n }\n }).then(() => {\n this.appConfig.refresh(true);\n }).then(() => this.load(this.baseUrl)).then(() => {\n return this.getLoggedInUserDetails(this.baseUrl);\n });\n }, 1000);\n }\n } else {\n const loginPage = this.securityConfig.loginConfig?.pageName || 'Login';\n if (redirectTo && !redirectTo.startsWith('#/'+ loginPage)) {\n this.landingPage = redirectTo;\n }\n injector.get<AppConfig>('APP_CONFIG').landingPage = loginPage;\n this.appConfig.currentPage?.goToPage(loginPage, null, true);\n }\n this.appConfig.refresh();\n }\n\n public appLogout(options: any) {\n return axios.post(options.baseURL + '/j_spring_security_logout', null, {\n withCredentials: true\n })\n .catch(() => {})\n .then((response) => {\n if(response?.data?.result){\n if (isWebPreviewMode()) {\n location.href = response.data.result;\n return new Promise(r => setTimeout(r, 5000));\n } else {\n return axios.get(`${response?.data?.result}`, {\n withCredentials: true,\n });\n }\n }\n return Promise.reject();\n })\n .catch((e) => {\n console.error(e);\n })\n .then(()=>{\n this.isLoggedIn = false;\n this.redirectToLogin();\n });\n }\n\n public canUserAccessPage(pageName: string) {\n if (this.baseUrl && this.securityConfig?.isSecurityEnabled) {\n return axios.get(this.baseUrl + `/pages/${pageName}/${pageName}.html`)\n .catch((res) => res)\n .then((res) => res.status === 200 || res.status === 304); \n } else {\n return Promise.resolve(true);\n }\n }\n\n private matchRoles(widgetRoles: Array<String>, userRoles: Array<String>) {\n return widgetRoles.some(function (item) {\n return includes(userRoles, item);\n });\n }\n\n public hasAccessToWidget(widgetRoles: String) {\n const widgetRolesArr = widgetRoles.split(',');\n // access the widget when 'Everyone' is chosen\n if (includes(widgetRolesArr, USER_ROLE.EVERYONE)) {\n return true;\n }\n\n // access the widget when 'Anonymous' is chosen and user is not authenticated\n if (includes(widgetRolesArr, USER_ROLE.ANONYMOUS) && !this.loggedInUser.dataSet?.isAuthenticated) {\n return true;\n }\n\n // access the widget when 'Only Authenticated Users' is chosen and user is authenticated\n if (includes(widgetRolesArr, USER_ROLE.AUTHENTICATED) && this.loggedInUser.dataSet?.isAuthenticated) {\n return true;\n }\n\n // access the widget when widget role and logged in user role matches\n return this.loggedInUser.dataSet?.isAuthenticated && this.matchRoles(widgetRolesArr, this.loggedInUser.dataSet?.roles);\n }\n}\n\nconst appSecurityService = new AppSecurityService();\n\nexport default appSecurityService;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Platform","axios","each","includes","networkService","injector","StorageService","WebProcessService","getBrowserConfig","getSsoBrowserFlags","isWebPreviewMode","USER_ROLE","authCookieStr","XSRF_COOKIE_NAME","xsrf_header_name","shouldRedirectToLoginOn401","url","status","appUrl","pageName","startsWith","AppSecurityService","constructor","_defineProperty","str","wm_xsrf_token_index","indexOf","index","regExp","substring","RegExp","data","regex","getRegex","JSON","parse","replace","interceptors","request","use","config","onBeforeServiceCall","appConfig","getAppConfig","baseUrl","getXsrfToken","then","token","_config$url","headers","Promise","resolve","getItem","xsrf_token","get","navigateToLandingPage","_this$appConfig$curre","_this$appConfig$logge","currentPage","goToPage","loggedInUser","landingPage","setTimeout","_this$appConfig$curre2","openUrl","appLogin","options","payload","formData","value","name","encodeURIComponent","defaults","withCredentials","post","baseURL","response","xsrfCookieValue","setItem","isLoggedIn","load","userData","getLoggedInUserDetails","useDefaultSuccessHandler","app","triggerStartUpVariables","_document","document","cookie","split","filter","item","length","wm_xsrf_token","isConnected","getServiceDefinitions","defaultSecurityConfig","details","securityConfig","isSecurityEnabled","securityEnabled","authenticated","_appConfig$appPropert","isAuthenticated","roles","userInfo","userRoles","userName","id","userId","tenantId","userAttributes","dataSet","appProperties","homePage","redirectToLogin","redirectTo","_this$securityConfig","loginConfig","type","authUrl","OS","window","parent","location","href","ssoLoginPromise","useSystemBrowser","incognito","execute","output","formateData","reject","refresh","catch","error","_this$appConfig$app","_this$appConfig$app$o","console","message","onServiceError","call","undefined","_this$securityConfig$","_this$appConfig$curre3","loginPage","appLogout","_response$data","result","r","_response$data2","e","canUserAccessPage","_this$securityConfig2","res","matchRoles","widgetRoles","some","hasAccessToWidget","_this$loggedInUser$da","_this$loggedInUser$da2","_this$loggedInUser$da3","_this$loggedInUser$da4","widgetRolesArr","EVERYONE","ANONYMOUS","AUTHENTICATED","appSecurityService"],"sources":["app-security.service.tsx"],"sourcesContent":["import { Platform } from 'react-native';\nimport axios, { InternalAxiosRequestConfig, AxiosResponse } from 'axios';\nimport { each, includes } from 'lodash';\n\nimport networkService from '@wavemaker/app-rn-runtime/core/network.service';\nimport injector from '@wavemaker/app-rn-runtime/core/injector';\nimport AppConfig from '@wavemaker/app-rn-runtime/core/AppConfig';\nimport StorageService from '@wavemaker/app-rn-runtime/core/storage.service';\nimport { SecurityService } from '@wavemaker/app-rn-runtime/core/security.service';\n\nimport WebProcessService from './webprocess.service';\nimport { getBrowserConfig, getSsoBrowserFlags } from './browser.service';\nimport { isWebPreviewMode } from '@wavemaker/app-rn-runtime/core/utils';\n\ndeclare const window: any;\n\ninterface LoggedInUserConfig {\n isAuthenticated: Boolean;\n isSecurityEnabled: Boolean;\n roles: Array<string>;\n name: String;\n id: String;\n tenantId: String;\n userAttributes: any;\n landingPage: string;\n}\n\nenum USER_ROLE {\n EVERYONE = 'Everyone',\n ANONYMOUS = 'Anonymous',\n AUTHENTICATED = 'Authenticated'\n}\n\nconst authCookieStr = 'AUTH_COOKIE';\nconst XSRF_COOKIE_NAME = 'wm_xsrf_token';\nconst xsrf_header_name = 'X-WM-XSRF-TOKEN';\n\n/** True when a 401 on an app page (not /services/) should run redirectToLogin. */\nexport function shouldRedirectToLoginOn401(\n url: string | undefined,\n status: number | undefined,\n appUrl: string | undefined,\n pageName: string | undefined\n): boolean {\n return !!url\n && !!appUrl\n && status === 401\n && url.startsWith(appUrl)\n && !url.includes('/services/')\n && pageName !== 'Login';\n}\n\nclass AppSecurityService implements SecurityService {\n\n securityConfig: any;\n isLoggedIn = false;\n loggedInUser: any = {};\n token: any;\n appConfig: any;\n baseUrl: string = '';\n defaultSecurityConfig: any;\n landingPage = '';\n // Prevents overlapping redirectToLogin() calls, which would race each other's WM_WEB_PROCESS cookie/key.\n private ssoLoginPromise: Promise<any> | null = null;\n\n constructor() {\n axios.interceptors.request.use((config: InternalAxiosRequestConfig) => this.onBeforeServiceCall(config));\n }\n\n getRegex = (str: string) =>{\n const wm_xsrf_token_index = str.indexOf('wm_xsrf_token') + 13; // 13 is the length of 'wm_xsrf_token' string\n let index = wm_xsrf_token_index;\n\n while(str[index] !== ':'){\n index++;\n }\n \n const regExp = str.substring(wm_xsrf_token_index, index);\n return new RegExp(regExp, \"g\");\n }\n \n formateData = (data: string) => {\n const regex = this.getRegex(data)\n return JSON.parse(data.replace(regex, \"\\\"\"));\n }\n\n onBeforeServiceCall(config: InternalAxiosRequestConfig) {\n if (!this.appConfig) {\n this.appConfig = this.getAppConfig();\n this.baseUrl = this.appConfig.url;\n }\n return this.getXsrfToken().then((token: string) => {\n if (config.url?.startsWith(this.baseUrl) && token) {\n if(config.headers) config.headers[xsrf_header_name] = token;\n }\n return config\n });\n }\n\n private getXsrfToken(): Promise<string> {\n if (this.token) {\n return Promise.resolve(this.token);\n }\n return StorageService.getItem(XSRF_COOKIE_NAME).then(xsrf_token => {\n this.token = xsrf_token;\n return this.token;\n });\n }\n\n private getAppConfig() {\n return injector.get<AppConfig>('APP_CONFIG');\n }\n\n public navigateToLandingPage() {\n this.appConfig.currentPage?.goToPage(\n this.appConfig.loggedInUser?.landingPage \n || this.appConfig.landingPage \n || 'Main', null, true);\n if (this.landingPage) {\n const landingPage = this.landingPage;\n this.landingPage = '';\n setTimeout(() => {\n this.appConfig.currentPage?.openUrl(landingPage);\n }, 100);\n }\n }\n\n public appLogin(options: any) {\n // encode all parameters\n let payload = '';\n each(options.formData, function (value, name) {\n payload += (payload ? '&' : '') + encodeURIComponent(name) + '=' + encodeURIComponent(value);\n });\n axios.defaults.withCredentials = true;\n return axios.post(options.baseURL + '/j_spring_security_check', payload, {\n withCredentials: true,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }}).then((response: AxiosResponse) => {\n const xsrfCookieValue = response.data ? response.data[XSRF_COOKIE_NAME] : '';\n this.token = xsrfCookieValue;\n StorageService.setItem(XSRF_COOKIE_NAME, xsrfCookieValue);\n this.isLoggedIn = true;\n }).then(() => this.load(options.baseURL))\n .then(async () => {\n const userData = await this.getLoggedInUserDetails(options.baseURL, options.useDefaultSuccessHandler);\n await this.appConfig.app.triggerStartUpVariables();\n return userData;\n });\n }\n\n public load(baseURL: string) {\n if (isWebPreviewMode()) {\n const token = document?.cookie?.split(';').filter(item => item.includes('wm_xsrf_token'))\n if (token && token.length > 0) {\n const wm_xsrf_token = token[0].split('=')[1];\n wm_xsrf_token && StorageService.setItem(XSRF_COOKIE_NAME, wm_xsrf_token);\n }\n }\n\n return Promise.resolve().then(() => {\n if (networkService.isConnected()) {\n return axios.get(baseURL + '/services/security/info')\n .then((response: AxiosResponse) => response.data);\n }\n return this.appConfig.getServiceDefinitions(this.appConfig.url)\n .then(() => Promise.resolve(this.defaultSecurityConfig));\n }).then((details: any) => {\n const loggedInUser = {} as LoggedInUserConfig;\n this.securityConfig = details || {};\n this.securityConfig.isSecurityEnabled = !!details?.securityEnabled;\n const appConfig = this.appConfig;\n if (typeof details !== 'string' && (!details.securityEnabled || details.authenticated)) {\n if (details.authenticated) {\n loggedInUser.isAuthenticated = details.authenticated;\n loggedInUser.isSecurityEnabled = details.authenticated;\n loggedInUser.roles = details.userInfo.userRoles;\n loggedInUser.name = details.userInfo.userName;\n loggedInUser.id = details.userInfo.userId;\n loggedInUser.tenantId = details.userInfo.tenantId;\n loggedInUser.userAttributes = details.userInfo.userAttributes;\n loggedInUser.landingPage = details.userInfo.landingPage;\n appConfig.loggedInUser = loggedInUser;\n this.loggedInUser.dataSet = loggedInUser;\n appConfig.landingPage = appConfig.appProperties?.homePage;\n }\n return appConfig.getServiceDefinitions(appConfig.url)\n .then(() => {\n return details;\n });\n } else {\n return appConfig.getServiceDefinitions(appConfig.url)\n .then(() => {\n this.redirectToLogin();\n });\n }\n });\n }\n\n private getLoggedInUserDetails(baseURL: string, useDefaultSuccessHandler: boolean = true) {\n if (!baseURL) {\n this.loggedInUser = {};\n return Promise.resolve({});\n }\n return this.load(baseURL);\n }\n\n \n public redirectToLogin(redirectTo?: string) {\n if (this.securityConfig?.loginConfig?.type === 'SSO') {\n const authUrl = this.appConfig.url + '/services/security/ssologin';\n if (Platform.OS === 'web') {\n (window.parent || window).location.href = authUrl;\n } else if (!this.ssoLoginPromise) {\n this.ssoLoginPromise = new Promise((resolve) => {\n setTimeout(() => {\n const { useSystemBrowser, incognito } = getSsoBrowserFlags(getBrowserConfig(this.appConfig));\n WebProcessService.execute('LOGIN', '/services/security/ssologin', useSystemBrowser, incognito)\n .then((output: any) => {\n if (output) {\n if(output.data){\n return this.formateData(`${output.data}`);\n }\n }\n return Promise.reject();\n }).then((output: any) => {\n if (output[XSRF_COOKIE_NAME]) {\n this.token = output[XSRF_COOKIE_NAME];\n StorageService.setItem(XSRF_COOKIE_NAME, output[XSRF_COOKIE_NAME]);\n }\n }).then(() => {\n this.appConfig.refresh(true);\n }).then(() => this.load(this.baseUrl)).then(() => {\n return this.getLoggedInUserDetails(this.baseUrl);\n }).catch((error: any) => {\n console.error('[AppSecurityService] SSO login failed:', error?.message || error);\n this.appConfig.app?.onServiceError?.(error?.message || 'SSO login failed', error);\n }).then(() => {\n this.ssoLoginPromise = null;\n resolve(undefined);\n });\n }, 1000);\n });\n }\n } else {\n const loginPage = this.securityConfig.loginConfig?.pageName || 'Login';\n if (redirectTo && !redirectTo.startsWith('#/'+ loginPage)) {\n this.landingPage = redirectTo;\n }\n injector.get<AppConfig>('APP_CONFIG').landingPage = loginPage;\n this.appConfig.currentPage?.goToPage(loginPage, null, true);\n }\n this.appConfig.refresh();\n }\n\n public appLogout(options: any) {\n return axios.post(options.baseURL + '/j_spring_security_logout', null, {\n withCredentials: true\n })\n .catch(() => {})\n .then((response) => {\n if(response?.data?.result){\n if (isWebPreviewMode()) {\n location.href = response.data.result;\n return new Promise(r => setTimeout(r, 5000));\n } else {\n return axios.get(`${response?.data?.result}`, {\n withCredentials: true,\n });\n }\n }\n return Promise.reject();\n })\n .catch((e) => {\n console.error(e);\n })\n .then(()=>{\n this.isLoggedIn = false;\n this.redirectToLogin();\n });\n }\n\n public canUserAccessPage(pageName: string) {\n if (this.baseUrl && this.securityConfig?.isSecurityEnabled) {\n return axios.get(this.baseUrl + `/pages/${pageName}/${pageName}.html`)\n .catch((res) => res)\n .then((res) => res.status === 200 || res.status === 304); \n } else {\n return Promise.resolve(true);\n }\n }\n\n private matchRoles(widgetRoles: Array<String>, userRoles: Array<String>) {\n return widgetRoles.some(function (item) {\n return includes(userRoles, item);\n });\n }\n\n public hasAccessToWidget(widgetRoles: String) {\n const widgetRolesArr = widgetRoles.split(',');\n // access the widget when 'Everyone' is chosen\n if (includes(widgetRolesArr, USER_ROLE.EVERYONE)) {\n return true;\n }\n\n // access the widget when 'Anonymous' is chosen and user is not authenticated\n if (includes(widgetRolesArr, USER_ROLE.ANONYMOUS) && !this.loggedInUser.dataSet?.isAuthenticated) {\n return true;\n }\n\n // access the widget when 'Only Authenticated Users' is chosen and user is authenticated\n if (includes(widgetRolesArr, USER_ROLE.AUTHENTICATED) && this.loggedInUser.dataSet?.isAuthenticated) {\n return true;\n }\n\n // access the widget when widget role and logged in user role matches\n return this.loggedInUser.dataSet?.isAuthenticated && this.matchRoles(widgetRolesArr, this.loggedInUser.dataSet?.roles);\n }\n}\n\nconst appSecurityService = new AppSecurityService();\n\nexport default appSecurityService;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AUTH_CALLBACK_PATH"],"sources":["browser.constants.ts"],"sourcesContent":["/** Prefix of the callback path: `${appId}://${AUTH_CALLBACK_PATH}${process}` — the only shape WM Server produces. */\nexport const AUTH_CALLBACK_PATH = 'services/webprocess/';\n"],"mappings":"AAAA;AACA,OAAO,MAAMA,kBAAkB,GAAG,sBAAsB","ignoreList":[]}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Dimensions, Linking, Text, TouchableOpacity, View } from 'react-native';
|
|
3
|
+
import * as WebBrowser from 'expo-web-browser';
|
|
4
|
+
import WmWebview from '@wavemaker/app-rn-runtime/components/advanced/webview/webview.component';
|
|
5
|
+
import injector from '@wavemaker/app-rn-runtime/core/injector';
|
|
6
|
+
import { isWebPreviewMode } from '@wavemaker/app-rn-runtime/core/utils';
|
|
7
|
+
import AppDisplayManagerService from './app-display-manager.service';
|
|
8
|
+
import { AUTH_CALLBACK_PATH } from './browser.constants';
|
|
9
|
+
import ExternalAuthCallbackService from './external-auth-callback.service';
|
|
10
|
+
|
|
11
|
+
/** Where native SSO login runs: private/persistent in-app WebView, or auth_session (system browser, needed to share login with other apps). */
|
|
12
|
+
|
|
13
|
+
/** Friendly keys for the widget's Target property (_blank/_self/_top/_parent) — see TARGET_LABELS. */
|
|
14
|
+
|
|
15
|
+
/** Maps the widget's raw Target property value to targetMapping's friendly key. */
|
|
16
|
+
export const TARGET_LABELS = {
|
|
17
|
+
'_blank': 'newWindow',
|
|
18
|
+
'_self': 'sameWindow',
|
|
19
|
+
'_top': 'topWindow',
|
|
20
|
+
'_parent': 'parentWindow'
|
|
21
|
+
};
|
|
22
|
+
// Default auth_session timeout. Plain JS setTimeout — doesn't tick while the app is
|
|
23
|
+
// backgrounded, so it only "expires" once the user returns to the app.
|
|
24
|
+
export const EXTERNAL_AUTH_TIMEOUT_MS = 120000;
|
|
25
|
+
|
|
26
|
+
// Matches pre-existing behavior: only newWindow (_blank) used custom_tabs; everything else defaulted to external.
|
|
27
|
+
export const DEFAULT_BROWSER_CONFIG = {
|
|
28
|
+
defaultLinkMode: 'external',
|
|
29
|
+
authMode: 'in_app_webview_private',
|
|
30
|
+
shareAuthSessionWithLinks: false,
|
|
31
|
+
targetMapping: {
|
|
32
|
+
newWindow: 'custom_tabs',
|
|
33
|
+
sameWindow: 'external',
|
|
34
|
+
topWindow: 'external',
|
|
35
|
+
parentWindow: 'external'
|
|
36
|
+
},
|
|
37
|
+
authTimeoutMs: EXTERNAL_AUTH_TIMEOUT_MS
|
|
38
|
+
};
|
|
39
|
+
try {
|
|
40
|
+
var _WebBrowser$maybeComp;
|
|
41
|
+
(_WebBrowser$maybeComp = WebBrowser.maybeCompleteAuthSession) === null || _WebBrowser$maybeComp === void 0 || _WebBrowser$maybeComp.call(WebBrowser);
|
|
42
|
+
} catch (e) {
|
|
43
|
+
// Native builds do not need this; web auth-session completion is best-effort.
|
|
44
|
+
}
|
|
45
|
+
export function normalizeOpenOptions(params = {}) {
|
|
46
|
+
if (typeof params === 'string') {
|
|
47
|
+
return {
|
|
48
|
+
target: params
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
return params || {};
|
|
52
|
+
}
|
|
53
|
+
export function getBrowserConfig(appConfig) {
|
|
54
|
+
var _preferences, _raw$shareAuthSession;
|
|
55
|
+
const raw = (appConfig === null || appConfig === void 0 ? void 0 : appConfig.browserConfig) || (appConfig === null || appConfig === void 0 || (_preferences = appConfig.preferences) === null || _preferences === void 0 ? void 0 : _preferences.browserConfig) || {};
|
|
56
|
+
return {
|
|
57
|
+
defaultLinkMode: raw.defaultLinkMode || DEFAULT_BROWSER_CONFIG.defaultLinkMode,
|
|
58
|
+
authMode: raw.authMode || DEFAULT_BROWSER_CONFIG.authMode,
|
|
59
|
+
shareAuthSessionWithLinks: (_raw$shareAuthSession = raw.shareAuthSessionWithLinks) !== null && _raw$shareAuthSession !== void 0 ? _raw$shareAuthSession : raw.authMode === 'auth_session',
|
|
60
|
+
targetMapping: {
|
|
61
|
+
...DEFAULT_BROWSER_CONFIG.targetMapping,
|
|
62
|
+
...(raw.targetMapping || {})
|
|
63
|
+
},
|
|
64
|
+
authTimeoutMs: raw.authTimeoutMs || DEFAULT_BROWSER_CONFIG.authTimeoutMs
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Flags passed to WebProcessService.execute for native SSO. */
|
|
69
|
+
export function getSsoBrowserFlags(config = DEFAULT_BROWSER_CONFIG) {
|
|
70
|
+
return {
|
|
71
|
+
useSystemBrowser: config.authMode === 'auth_session',
|
|
72
|
+
incognito: config.authMode === 'in_app_webview_private'
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** True when SSO should leave the app (Safari/Chrome) instead of Custom Tabs. */
|
|
77
|
+
export function shouldOpenAuthInExternalBrowser(config = DEFAULT_BROWSER_CONFIG) {
|
|
78
|
+
return config.authMode === 'auth_session' && config.defaultLinkMode === 'external';
|
|
79
|
+
}
|
|
80
|
+
export function resolveLinkMode(options = {}, config = DEFAULT_BROWSER_CONFIG) {
|
|
81
|
+
if (options.mode && options.mode !== 'auth_session') {
|
|
82
|
+
return coerceSharedJar(options.mode, config);
|
|
83
|
+
}
|
|
84
|
+
const target = options.target;
|
|
85
|
+
const label = target && TARGET_LABELS[target];
|
|
86
|
+
if (label) {
|
|
87
|
+
const mapped = config.targetMapping[label];
|
|
88
|
+
if (mapped) {
|
|
89
|
+
return coerceSharedJar(mapped, config);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return coerceSharedJar(config.defaultLinkMode, config);
|
|
93
|
+
}
|
|
94
|
+
function coerceSharedJar(mode, config) {
|
|
95
|
+
if (config.shareAuthSessionWithLinks && config.authMode === 'auth_session' && mode === 'in_app_webview') {
|
|
96
|
+
return 'custom_tabs';
|
|
97
|
+
}
|
|
98
|
+
return mode;
|
|
99
|
+
}
|
|
100
|
+
export function extractProcessOutput(callbackUrl) {
|
|
101
|
+
if (!callbackUrl) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const readParam = name => {
|
|
105
|
+
const match = callbackUrl.match(new RegExp('[?&#]' + name + '=([^&#]*)', 'i'));
|
|
106
|
+
if (!match) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return decodeURIComponent(match[1].replace(/\+/g, ' '));
|
|
110
|
+
};
|
|
111
|
+
return readParam('process_output') || readParam('encodedProcessdata') || readParam('encodedProcessData');
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Builds `{appId}://services/webprocess/{process}` — the only callback shape WM Server produces. */
|
|
115
|
+
export function getAuthReturnUrl(appConfig, override, process) {
|
|
116
|
+
if (override) {
|
|
117
|
+
return override;
|
|
118
|
+
}
|
|
119
|
+
if (!(appConfig !== null && appConfig !== void 0 && appConfig.appId)) {
|
|
120
|
+
console.warn('[BrowserService] appConfig.appId is missing; the SSO callback scheme will not match this app. Check bootstrap ordering or project config.');
|
|
121
|
+
}
|
|
122
|
+
const appId = (appConfig === null || appConfig === void 0 ? void 0 : appConfig.appId) || 'app';
|
|
123
|
+
return `${appId}://${AUTH_CALLBACK_PATH}${process || ''}`;
|
|
124
|
+
}
|
|
125
|
+
export function matchesAuthCallbackUrl(callbackUrl, returnUrl) {
|
|
126
|
+
if (!callbackUrl) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
if (!returnUrl) {
|
|
130
|
+
// No specific attempt to compare against; recognize any webprocess callback by prefix.
|
|
131
|
+
const path = callbackUrl.split(/[?#]/)[0].replace(/^[^:]+:\/\//, '');
|
|
132
|
+
return path.startsWith(AUTH_CALLBACK_PATH);
|
|
133
|
+
}
|
|
134
|
+
// Exact path match (ignoring query/fragment) so a similar-prefixed URL isn't mismatched.
|
|
135
|
+
const normalizedReturnUrl = returnUrl.split(/[?#]/)[0];
|
|
136
|
+
const normalizedCallbackUrl = callbackUrl.split(/[?#]/)[0];
|
|
137
|
+
return normalizedCallbackUrl === normalizedReturnUrl;
|
|
138
|
+
}
|
|
139
|
+
/** Classify a root Linking URL so the app entry can decide how to use it. */
|
|
140
|
+
export function classifyExternalLaunchUrl(url, appConfig) {
|
|
141
|
+
if (!url || /^https?:/i.test(url)) {
|
|
142
|
+
return {
|
|
143
|
+
type: 'none'
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
// No process known yet (cold-boot launch); recognize any webprocess callback by prefix.
|
|
147
|
+
if (matchesAuthCallbackUrl(url)) {
|
|
148
|
+
return {
|
|
149
|
+
type: 'auth-callback',
|
|
150
|
+
url,
|
|
151
|
+
processOutput: extractProcessOutput(url)
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
type: 'deep-link',
|
|
156
|
+
url
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** Forward a root launch URL into the shared auth callback store. */
|
|
161
|
+
export function captureExternalLaunchUrl(url, appConfig) {
|
|
162
|
+
const launch = classifyExternalLaunchUrl(url, appConfig);
|
|
163
|
+
if (launch.type !== 'none') {
|
|
164
|
+
ExternalAuthCallbackService.capture(url);
|
|
165
|
+
}
|
|
166
|
+
return launch;
|
|
167
|
+
}
|
|
168
|
+
class BrowserService {
|
|
169
|
+
getAppConfig() {
|
|
170
|
+
try {
|
|
171
|
+
return injector.get('APP_CONFIG');
|
|
172
|
+
} catch (e) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
getConfig() {
|
|
177
|
+
return getBrowserConfig(this.getAppConfig());
|
|
178
|
+
}
|
|
179
|
+
open(url, params = {}) {
|
|
180
|
+
if (!url) {
|
|
181
|
+
return Promise.resolve();
|
|
182
|
+
}
|
|
183
|
+
const options = normalizeOpenOptions(params);
|
|
184
|
+
if (isWebPreviewMode()) {
|
|
185
|
+
if (typeof window !== 'undefined') {
|
|
186
|
+
window.open(url, '_blank');
|
|
187
|
+
}
|
|
188
|
+
return Promise.resolve();
|
|
189
|
+
}
|
|
190
|
+
if (options.mode === 'auth_session') {
|
|
191
|
+
return this.openAuthSession(url, options.returnUrl);
|
|
192
|
+
}
|
|
193
|
+
if (!/^https?:/i.test(url)) {
|
|
194
|
+
return Linking.openURL(url);
|
|
195
|
+
}
|
|
196
|
+
const mode = resolveLinkMode(options, this.getConfig());
|
|
197
|
+
switch (mode) {
|
|
198
|
+
case 'external':
|
|
199
|
+
return Linking.openURL(url);
|
|
200
|
+
case 'in_app_webview':
|
|
201
|
+
return this.openInAppWebView(url, !!options.incognito);
|
|
202
|
+
case 'custom_tabs':
|
|
203
|
+
default:
|
|
204
|
+
return WebBrowser.openBrowserAsync(url);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
openAuthSession(startUrl, returnUrl, process) {
|
|
208
|
+
const appConfig = this.getAppConfig();
|
|
209
|
+
const redirectUrl = getAuthReturnUrl(appConfig, returnUrl, process);
|
|
210
|
+
const config = this.getConfig();
|
|
211
|
+
if (shouldOpenAuthInExternalBrowser(config)) {
|
|
212
|
+
return this.openAuthSessionInExternalBrowser(startUrl, redirectUrl, config.authTimeoutMs);
|
|
213
|
+
}
|
|
214
|
+
return WebBrowser.openAuthSessionAsync(startUrl, redirectUrl, {
|
|
215
|
+
preferEphemeralSession: false
|
|
216
|
+
}).then(result => {
|
|
217
|
+
if ((result === null || result === void 0 ? void 0 : result.type) === 'success' && result.url) {
|
|
218
|
+
const output = extractProcessOutput(result.url);
|
|
219
|
+
if (!output) {
|
|
220
|
+
return Promise.reject(new Error('Authentication completed without process output'));
|
|
221
|
+
}
|
|
222
|
+
return output;
|
|
223
|
+
}
|
|
224
|
+
return Promise.reject(new Error('Authentication session cancelled'));
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/** Full Safari/Chrome via Linking.openURL, completes via redirectUrl (already resolved to this attempt's specific process). */
|
|
229
|
+
openAuthSessionInExternalBrowser(startUrl, redirectUrl, timeoutMs = EXTERNAL_AUTH_TIMEOUT_MS) {
|
|
230
|
+
// Only accept callbacks captured after this attempt started, so a stale callback from an abandoned attempt isn't reused.
|
|
231
|
+
const attemptStartedAt = Date.now();
|
|
232
|
+
const cachedUrl = ExternalAuthCallbackService.takeUrl((url, capturedAt) => matchesAuthCallbackUrl(url, redirectUrl) && capturedAt >= attemptStartedAt, timeoutMs);
|
|
233
|
+
if (cachedUrl) {
|
|
234
|
+
const cachedOutput = extractProcessOutput(cachedUrl);
|
|
235
|
+
if (cachedOutput) {
|
|
236
|
+
return Promise.resolve(cachedOutput);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return new Promise((resolve, reject) => {
|
|
240
|
+
let settled = false;
|
|
241
|
+
const timeoutId = setTimeout(() => {
|
|
242
|
+
finish(new Error(`Authentication session timed out after ${timeoutMs}ms`));
|
|
243
|
+
}, timeoutMs);
|
|
244
|
+
const finish = (error, output) => {
|
|
245
|
+
if (settled) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
settled = true;
|
|
249
|
+
clearTimeout(timeoutId);
|
|
250
|
+
subscription.remove();
|
|
251
|
+
externalSubscription();
|
|
252
|
+
if (error) {
|
|
253
|
+
reject(error);
|
|
254
|
+
} else {
|
|
255
|
+
resolve(output);
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
const handleUrl = url => {
|
|
259
|
+
if (!matchesAuthCallbackUrl(url, redirectUrl)) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
const output = extractProcessOutput(url);
|
|
263
|
+
if (!output) {
|
|
264
|
+
finish(new Error('Authentication completed without process output'));
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
finish(undefined, output);
|
|
268
|
+
};
|
|
269
|
+
const subscription = Linking.addEventListener('url', ({
|
|
270
|
+
url
|
|
271
|
+
}) => handleUrl(url));
|
|
272
|
+
const externalSubscription = ExternalAuthCallbackService.subscribe(url => handleUrl(url));
|
|
273
|
+
Linking.openURL(startUrl).catch(e => finish(e instanceof Error ? e : new Error(String(e))));
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
openInAppWebView(url, incognito) {
|
|
277
|
+
const {
|
|
278
|
+
width,
|
|
279
|
+
height
|
|
280
|
+
} = Dimensions.get('window');
|
|
281
|
+
return new Promise(resolve => {
|
|
282
|
+
let destroyFn = () => {};
|
|
283
|
+
destroyFn = AppDisplayManagerService.show({
|
|
284
|
+
content: /*#__PURE__*/React.createElement(View, {
|
|
285
|
+
style: {
|
|
286
|
+
width,
|
|
287
|
+
height,
|
|
288
|
+
backgroundColor: '#000'
|
|
289
|
+
}
|
|
290
|
+
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
291
|
+
onPress: () => {
|
|
292
|
+
destroyFn.call(AppDisplayManagerService);
|
|
293
|
+
resolve();
|
|
294
|
+
},
|
|
295
|
+
style: {
|
|
296
|
+
paddingHorizontal: 16,
|
|
297
|
+
paddingVertical: 12
|
|
298
|
+
},
|
|
299
|
+
accessibilityRole: "button",
|
|
300
|
+
accessibilityLabel: "Close"
|
|
301
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
302
|
+
style: {
|
|
303
|
+
color: '#fff',
|
|
304
|
+
fontSize: 16
|
|
305
|
+
}
|
|
306
|
+
}, "Done")), /*#__PURE__*/React.createElement(WmWebview, {
|
|
307
|
+
src: url,
|
|
308
|
+
incognito: incognito,
|
|
309
|
+
styles: {
|
|
310
|
+
root: {
|
|
311
|
+
width: '100%',
|
|
312
|
+
flex: 1
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}))
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
export default new BrowserService();
|
|
321
|
+
//# sourceMappingURL=browser.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Dimensions","Linking","Text","TouchableOpacity","View","WebBrowser","WmWebview","injector","isWebPreviewMode","AppDisplayManagerService","AUTH_CALLBACK_PATH","ExternalAuthCallbackService","TARGET_LABELS","EXTERNAL_AUTH_TIMEOUT_MS","DEFAULT_BROWSER_CONFIG","defaultLinkMode","authMode","shareAuthSessionWithLinks","targetMapping","newWindow","sameWindow","topWindow","parentWindow","authTimeoutMs","_WebBrowser$maybeComp","maybeCompleteAuthSession","call","e","normalizeOpenOptions","params","target","getBrowserConfig","appConfig","_preferences","_raw$shareAuthSession","raw","browserConfig","preferences","getSsoBrowserFlags","config","useSystemBrowser","incognito","shouldOpenAuthInExternalBrowser","resolveLinkMode","options","mode","coerceSharedJar","label","mapped","extractProcessOutput","callbackUrl","readParam","name","match","RegExp","decodeURIComponent","replace","getAuthReturnUrl","override","process","appId","console","warn","matchesAuthCallbackUrl","returnUrl","path","split","startsWith","normalizedReturnUrl","normalizedCallbackUrl","classifyExternalLaunchUrl","url","test","type","processOutput","captureExternalLaunchUrl","launch","capture","BrowserService","getAppConfig","get","getConfig","open","Promise","resolve","window","openAuthSession","openURL","openInAppWebView","openBrowserAsync","startUrl","redirectUrl","openAuthSessionInExternalBrowser","openAuthSessionAsync","preferEphemeralSession","then","result","output","reject","Error","timeoutMs","attemptStartedAt","Date","now","cachedUrl","takeUrl","capturedAt","cachedOutput","settled","timeoutId","setTimeout","finish","error","clearTimeout","subscription","remove","externalSubscription","handleUrl","undefined","addEventListener","subscribe","catch","String","width","height","destroyFn","show","content","createElement","style","backgroundColor","onPress","paddingHorizontal","paddingVertical","accessibilityRole","accessibilityLabel","color","fontSize","src","styles","root","flex"],"sources":["browser.service.tsx"],"sourcesContent":["import React from 'react';\nimport { Dimensions, Linking, Text, TouchableOpacity, View } from 'react-native';\nimport * as WebBrowser from 'expo-web-browser';\n\nimport WmWebview from '@wavemaker/app-rn-runtime/components/advanced/webview/webview.component';\nimport AppConfig from '@wavemaker/app-rn-runtime/core/AppConfig';\nimport injector from '@wavemaker/app-rn-runtime/core/injector';\nimport { isWebPreviewMode } from '@wavemaker/app-rn-runtime/core/utils';\n\nimport AppDisplayManagerService from './app-display-manager.service';\nimport { AUTH_CALLBACK_PATH } from './browser.constants';\nimport ExternalAuthCallbackService from './external-auth-callback.service';\n\nexport type LinkBrowserMode = 'custom_tabs' | 'external' | 'in_app_webview';\n/** Where native SSO login runs: private/persistent in-app WebView, or auth_session (system browser, needed to share login with other apps). */\nexport type AuthBrowserMode = 'in_app_webview_private' | 'in_app_webview_persistent' | 'auth_session';\nexport type BrowserMode = LinkBrowserMode | 'auth_session';\n\n/** Friendly keys for the widget's Target property (_blank/_self/_top/_parent) — see TARGET_LABELS. */\nexport type LinkTarget = 'newWindow' | 'sameWindow' | 'topWindow' | 'parentWindow';\n\nexport interface BrowserConfig {\n defaultLinkMode?: LinkBrowserMode;\n authMode?: AuthBrowserMode;\n shareAuthSessionWithLinks?: boolean;\n targetMapping?: Partial<Record<LinkTarget, LinkBrowserMode>>;\n /** How long the external-browser auth_session flow waits for its callback before giving up. Defaults to EXTERNAL_AUTH_TIMEOUT_MS (2 minutes). */\n authTimeoutMs?: number;\n}\n\n/** Maps the widget's raw Target property value to targetMapping's friendly key. */\nexport const TARGET_LABELS: Record<string, LinkTarget> = {\n '_blank': 'newWindow',\n '_self': 'sameWindow',\n '_top': 'topWindow',\n '_parent': 'parentWindow',\n};\n\nexport interface BrowserOpenOptions {\n mode?: BrowserMode;\n target?: string;\n incognito?: boolean;\n reason?: 'link' | 'sso' | 'webprocess' | 'logout';\n returnUrl?: string;\n}\n\n// Default auth_session timeout. Plain JS setTimeout — doesn't tick while the app is\n// backgrounded, so it only \"expires\" once the user returns to the app.\nexport const EXTERNAL_AUTH_TIMEOUT_MS = 120000;\n\n// Matches pre-existing behavior: only newWindow (_blank) used custom_tabs; everything else defaulted to external.\nexport const DEFAULT_BROWSER_CONFIG: Required<BrowserConfig> = {\n defaultLinkMode: 'external',\n authMode: 'in_app_webview_private',\n shareAuthSessionWithLinks: false,\n targetMapping: {\n newWindow: 'custom_tabs',\n sameWindow: 'external',\n topWindow: 'external',\n parentWindow: 'external',\n },\n authTimeoutMs: EXTERNAL_AUTH_TIMEOUT_MS,\n};\n\ntry {\n WebBrowser.maybeCompleteAuthSession?.();\n} catch (e) {\n // Native builds do not need this; web auth-session completion is best-effort.\n}\n\nexport function normalizeOpenOptions(params: BrowserOpenOptions | string = {}): BrowserOpenOptions {\n if (typeof params === 'string') {\n return { target: params };\n }\n return params || {};\n}\n\nexport function getBrowserConfig(appConfig?: Partial<AppConfig> | null): Required<BrowserConfig> {\n const raw = (appConfig as any)?.browserConfig\n || (appConfig as any)?.preferences?.browserConfig\n || {};\n return {\n defaultLinkMode: raw.defaultLinkMode || DEFAULT_BROWSER_CONFIG.defaultLinkMode,\n authMode: raw.authMode || DEFAULT_BROWSER_CONFIG.authMode,\n shareAuthSessionWithLinks: raw.shareAuthSessionWithLinks\n ?? (raw.authMode === 'auth_session'),\n targetMapping: {\n ...DEFAULT_BROWSER_CONFIG.targetMapping,\n ...(raw.targetMapping || {}),\n },\n authTimeoutMs: raw.authTimeoutMs || DEFAULT_BROWSER_CONFIG.authTimeoutMs,\n };\n}\n\n/** Flags passed to WebProcessService.execute for native SSO. */\nexport function getSsoBrowserFlags(config: Required<BrowserConfig> = DEFAULT_BROWSER_CONFIG): {\n useSystemBrowser: boolean;\n incognito: boolean;\n} {\n return {\n useSystemBrowser: config.authMode === 'auth_session',\n incognito: config.authMode === 'in_app_webview_private',\n };\n}\n\n/** True when SSO should leave the app (Safari/Chrome) instead of Custom Tabs. */\nexport function shouldOpenAuthInExternalBrowser(\n config: Required<BrowserConfig> = DEFAULT_BROWSER_CONFIG\n): boolean {\n return config.authMode === 'auth_session' && config.defaultLinkMode === 'external';\n}\n\nexport function resolveLinkMode(\n options: BrowserOpenOptions = {},\n config: Required<BrowserConfig> = DEFAULT_BROWSER_CONFIG\n): LinkBrowserMode {\n if (options.mode && options.mode !== 'auth_session') {\n return coerceSharedJar(options.mode, config);\n }\n const target = options.target;\n const label = target && TARGET_LABELS[target];\n if (label) {\n const mapped = config.targetMapping[label];\n if (mapped) {\n return coerceSharedJar(mapped, config);\n }\n }\n return coerceSharedJar(config.defaultLinkMode, config);\n}\n\nfunction coerceSharedJar(mode: LinkBrowserMode, config: Required<BrowserConfig>): LinkBrowserMode {\n if (config.shareAuthSessionWithLinks\n && config.authMode === 'auth_session'\n && mode === 'in_app_webview') {\n return 'custom_tabs';\n }\n return mode;\n}\n\nexport function extractProcessOutput(callbackUrl: string): string | null {\n if (!callbackUrl) {\n return null;\n }\n const readParam = (name: string) => {\n const match = callbackUrl.match(new RegExp('[?&#]' + name + '=([^&#]*)', 'i'));\n if (!match) {\n return null;\n }\n return decodeURIComponent(match[1].replace(/\\+/g, ' '));\n };\n return readParam('process_output')\n || readParam('encodedProcessdata')\n || readParam('encodedProcessData');\n}\n\n/** Builds `{appId}://services/webprocess/{process}` — the only callback shape WM Server produces. */\nexport function getAuthReturnUrl(appConfig?: Partial<AppConfig> | null, override?: string, process?: string): string {\n if (override) {\n return override;\n }\n if (!appConfig?.appId) {\n console.warn('[BrowserService] appConfig.appId is missing; the SSO callback scheme will not match this app. Check bootstrap ordering or project config.');\n }\n const appId = appConfig?.appId || 'app';\n return `${appId}://${AUTH_CALLBACK_PATH}${process || ''}`;\n}\n\nexport function matchesAuthCallbackUrl(callbackUrl: string | null | undefined, returnUrl?: string): boolean {\n if (!callbackUrl) {\n return false;\n }\n if (!returnUrl) {\n // No specific attempt to compare against; recognize any webprocess callback by prefix.\n const path = callbackUrl.split(/[?#]/)[0].replace(/^[^:]+:\\/\\//, '');\n return path.startsWith(AUTH_CALLBACK_PATH);\n }\n // Exact path match (ignoring query/fragment) so a similar-prefixed URL isn't mismatched.\n const normalizedReturnUrl = returnUrl.split(/[?#]/)[0];\n const normalizedCallbackUrl = callbackUrl.split(/[?#]/)[0];\n return normalizedCallbackUrl === normalizedReturnUrl;\n}\n\nexport type ExternalLaunchInfo =\n | { type: 'none' }\n | { type: 'auth-callback'; url: string; processOutput: string | null }\n | { type: 'deep-link'; url: string };\n\n/** Classify a root Linking URL so the app entry can decide how to use it. */\nexport function classifyExternalLaunchUrl(\n url: string | null | undefined,\n appConfig?: Partial<AppConfig> | null\n): ExternalLaunchInfo {\n if (!url || /^https?:/i.test(url)) {\n return { type: 'none' };\n }\n // No process known yet (cold-boot launch); recognize any webprocess callback by prefix.\n if (matchesAuthCallbackUrl(url)) {\n return {\n type: 'auth-callback',\n url,\n processOutput: extractProcessOutput(url),\n };\n }\n return { type: 'deep-link', url };\n}\n\n/** Forward a root launch URL into the shared auth callback store. */\nexport function captureExternalLaunchUrl(\n url: string | null | undefined,\n appConfig?: Partial<AppConfig> | null\n): ExternalLaunchInfo {\n const launch = classifyExternalLaunchUrl(url, appConfig);\n if (launch.type !== 'none') {\n ExternalAuthCallbackService.capture(url);\n }\n return launch;\n}\n\nclass BrowserService {\n private getAppConfig(): AppConfig | null {\n try {\n return injector.get<AppConfig>('APP_CONFIG');\n } catch (e) {\n return null;\n }\n }\n\n public getConfig(): Required<BrowserConfig> {\n return getBrowserConfig(this.getAppConfig());\n }\n\n public open(url: string, params: BrowserOpenOptions | string = {}): Promise<any> {\n if (!url) {\n return Promise.resolve();\n }\n const options = normalizeOpenOptions(params);\n\n if (isWebPreviewMode()) {\n if (typeof window !== 'undefined') {\n window.open(url, '_blank');\n }\n return Promise.resolve();\n }\n\n if (options.mode === 'auth_session') {\n return this.openAuthSession(url, options.returnUrl);\n }\n\n if (!/^https?:/i.test(url)) {\n return Linking.openURL(url);\n }\n\n const mode = resolveLinkMode(options, this.getConfig());\n switch (mode) {\n case 'external':\n return Linking.openURL(url);\n case 'in_app_webview':\n return this.openInAppWebView(url, !!options.incognito);\n case 'custom_tabs':\n default:\n return WebBrowser.openBrowserAsync(url);\n }\n }\n\n public openAuthSession(startUrl: string, returnUrl?: string, process?: string): Promise<string> {\n const appConfig = this.getAppConfig();\n const redirectUrl = getAuthReturnUrl(appConfig, returnUrl, process);\n const config = this.getConfig();\n if (shouldOpenAuthInExternalBrowser(config)) {\n return this.openAuthSessionInExternalBrowser(startUrl, redirectUrl, config.authTimeoutMs);\n }\n return WebBrowser.openAuthSessionAsync(startUrl, redirectUrl, {\n preferEphemeralSession: false,\n }).then((result: any) => {\n if (result?.type === 'success' && result.url) {\n const output = extractProcessOutput(result.url);\n if (!output) {\n return Promise.reject(new Error('Authentication completed without process output'));\n }\n return output;\n }\n return Promise.reject(new Error('Authentication session cancelled'));\n });\n }\n\n /** Full Safari/Chrome via Linking.openURL, completes via redirectUrl (already resolved to this attempt's specific process). */\n private openAuthSessionInExternalBrowser(startUrl: string, redirectUrl: string, timeoutMs: number = EXTERNAL_AUTH_TIMEOUT_MS): Promise<string> {\n // Only accept callbacks captured after this attempt started, so a stale callback from an abandoned attempt isn't reused.\n const attemptStartedAt = Date.now();\n const cachedUrl = ExternalAuthCallbackService.takeUrl(\n (url, capturedAt) => matchesAuthCallbackUrl(url, redirectUrl) && capturedAt >= attemptStartedAt,\n timeoutMs\n );\n if (cachedUrl) {\n const cachedOutput = extractProcessOutput(cachedUrl);\n if (cachedOutput) {\n return Promise.resolve(cachedOutput);\n }\n }\n\n return new Promise((resolve, reject) => {\n let settled = false;\n const timeoutId = setTimeout(() => {\n finish(new Error(`Authentication session timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n const finish = (error?: Error, output?: string) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timeoutId);\n subscription.remove();\n externalSubscription();\n if (error) {\n reject(error);\n } else {\n resolve(output as string);\n }\n };\n\n const handleUrl = (url?: string | null) => {\n if (!matchesAuthCallbackUrl(url, redirectUrl)) {\n return;\n }\n const output = extractProcessOutput(url as string);\n if (!output) {\n finish(new Error('Authentication completed without process output'));\n return;\n }\n finish(undefined, output);\n };\n\n const subscription = Linking.addEventListener('url', ({ url }) => handleUrl(url));\n const externalSubscription = ExternalAuthCallbackService.subscribe((url) => handleUrl(url));\n Linking.openURL(startUrl).catch((e) => finish(e instanceof Error ? e : new Error(String(e))));\n });\n }\n\n private openInAppWebView(url: string, incognito: boolean): Promise<void> {\n const { width, height } = Dimensions.get('window');\n return new Promise((resolve) => {\n let destroyFn = () => {};\n destroyFn = AppDisplayManagerService.show({\n content: (\n <View style={{ width, height, backgroundColor: '#000' }}>\n <TouchableOpacity\n onPress={() => {\n destroyFn.call(AppDisplayManagerService);\n resolve();\n }}\n style={{ paddingHorizontal: 16, paddingVertical: 12 }}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close\">\n <Text style={{ color: '#fff', fontSize: 16 }}>Done</Text>\n </TouchableOpacity>\n <WmWebview\n src={url}\n incognito={incognito}\n styles={{\n root: {\n width: '100%',\n flex: 1,\n },\n }}\n />\n </View>\n ),\n });\n });\n }\n}\n\nexport default new BrowserService();\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,OAAO,EAAEC,IAAI,EAAEC,gBAAgB,EAAEC,IAAI,QAAQ,cAAc;AAChF,OAAO,KAAKC,UAAU,MAAM,kBAAkB;AAE9C,OAAOC,SAAS,MAAM,yEAAyE;AAE/F,OAAOC,QAAQ,MAAM,yCAAyC;AAC9D,SAASC,gBAAgB,QAAQ,sCAAsC;AAEvE,OAAOC,wBAAwB,MAAM,+BAA+B;AACpE,SAASC,kBAAkB,QAAQ,qBAAqB;AACxD,OAAOC,2BAA2B,MAAM,kCAAkC;;AAG1E;;AAIA;;AAYA;AACA,OAAO,MAAMC,aAAyC,GAAG;EACvD,QAAQ,EAAE,WAAW;EACrB,OAAO,EAAE,YAAY;EACrB,MAAM,EAAE,WAAW;EACnB,SAAS,EAAE;AACb,CAAC;AAUD;AACA;AACA,OAAO,MAAMC,wBAAwB,GAAG,MAAM;;AAE9C;AACA,OAAO,MAAMC,sBAA+C,GAAG;EAC7DC,eAAe,EAAE,UAAU;EAC3BC,QAAQ,EAAE,wBAAwB;EAClCC,yBAAyB,EAAE,KAAK;EAChCC,aAAa,EAAE;IACbC,SAAS,EAAE,aAAa;IACxBC,UAAU,EAAE,UAAU;IACtBC,SAAS,EAAE,UAAU;IACrBC,YAAY,EAAE;EAChB,CAAC;EACDC,aAAa,EAAEV;AACjB,CAAC;AAED,IAAI;EAAA,IAAAW,qBAAA;EACF,CAAAA,qBAAA,GAAAnB,UAAU,CAACoB,wBAAwB,cAAAD,qBAAA,eAAnCA,qBAAA,CAAAE,IAAA,CAAArB,UAAsC,CAAC;AACzC,CAAC,CAAC,OAAOsB,CAAC,EAAE;EACV;AAAA;AAGF,OAAO,SAASC,oBAAoBA,CAACC,MAAmC,GAAG,CAAC,CAAC,EAAsB;EACjG,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;IAC9B,OAAO;MAAEC,MAAM,EAAED;IAAO,CAAC;EAC3B;EACA,OAAOA,MAAM,IAAI,CAAC,CAAC;AACrB;AAEA,OAAO,SAASE,gBAAgBA,CAACC,SAAqC,EAA2B;EAAA,IAAAC,YAAA,EAAAC,qBAAA;EAC/F,MAAMC,GAAG,GAAG,CAACH,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAUI,aAAa,MACvCJ,SAAS,aAATA,SAAS,gBAAAC,YAAA,GAATD,SAAS,CAAUK,WAAW,cAAAJ,YAAA,uBAA/BA,YAAA,CAAiCG,aAAa,KAC9C,CAAC,CAAC;EACP,OAAO;IACLrB,eAAe,EAAEoB,GAAG,CAACpB,eAAe,IAAID,sBAAsB,CAACC,eAAe;IAC9EC,QAAQ,EAAEmB,GAAG,CAACnB,QAAQ,IAAIF,sBAAsB,CAACE,QAAQ;IACzDC,yBAAyB,GAAAiB,qBAAA,GAAEC,GAAG,CAAClB,yBAAyB,cAAAiB,qBAAA,cAAAA,qBAAA,GAClDC,GAAG,CAACnB,QAAQ,KAAK,cAAe;IACtCE,aAAa,EAAE;MACb,GAAGJ,sBAAsB,CAACI,aAAa;MACvC,IAAIiB,GAAG,CAACjB,aAAa,IAAI,CAAC,CAAC;IAC7B,CAAC;IACDK,aAAa,EAAEY,GAAG,CAACZ,aAAa,IAAIT,sBAAsB,CAACS;EAC7D,CAAC;AACH;;AAEA;AACA,OAAO,SAASe,kBAAkBA,CAACC,MAA+B,GAAGzB,sBAAsB,EAGzF;EACA,OAAO;IACL0B,gBAAgB,EAAED,MAAM,CAACvB,QAAQ,KAAK,cAAc;IACpDyB,SAAS,EAAEF,MAAM,CAACvB,QAAQ,KAAK;EACjC,CAAC;AACH;;AAEA;AACA,OAAO,SAAS0B,+BAA+BA,CAC7CH,MAA+B,GAAGzB,sBAAsB,EAC/C;EACT,OAAOyB,MAAM,CAACvB,QAAQ,KAAK,cAAc,IAAIuB,MAAM,CAACxB,eAAe,KAAK,UAAU;AACpF;AAEA,OAAO,SAAS4B,eAAeA,CAC7BC,OAA2B,GAAG,CAAC,CAAC,EAChCL,MAA+B,GAAGzB,sBAAsB,EACvC;EACjB,IAAI8B,OAAO,CAACC,IAAI,IAAID,OAAO,CAACC,IAAI,KAAK,cAAc,EAAE;IACnD,OAAOC,eAAe,CAACF,OAAO,CAACC,IAAI,EAAEN,MAAM,CAAC;EAC9C;EACA,MAAMT,MAAM,GAAGc,OAAO,CAACd,MAAM;EAC7B,MAAMiB,KAAK,GAAGjB,MAAM,IAAIlB,aAAa,CAACkB,MAAM,CAAC;EAC7C,IAAIiB,KAAK,EAAE;IACT,MAAMC,MAAM,GAAGT,MAAM,CAACrB,aAAa,CAAC6B,KAAK,CAAC;IAC1C,IAAIC,MAAM,EAAE;MACV,OAAOF,eAAe,CAACE,MAAM,EAAET,MAAM,CAAC;IACxC;EACF;EACA,OAAOO,eAAe,CAACP,MAAM,CAACxB,eAAe,EAAEwB,MAAM,CAAC;AACxD;AAEA,SAASO,eAAeA,CAACD,IAAqB,EAAEN,MAA+B,EAAmB;EAChG,IAAIA,MAAM,CAACtB,yBAAyB,IAC/BsB,MAAM,CAACvB,QAAQ,KAAK,cAAc,IAClC6B,IAAI,KAAK,gBAAgB,EAAE;IAC9B,OAAO,aAAa;EACtB;EACA,OAAOA,IAAI;AACb;AAEA,OAAO,SAASI,oBAAoBA,CAACC,WAAmB,EAAiB;EACvE,IAAI,CAACA,WAAW,EAAE;IAChB,OAAO,IAAI;EACb;EACA,MAAMC,SAAS,GAAIC,IAAY,IAAK;IAClC,MAAMC,KAAK,GAAGH,WAAW,CAACG,KAAK,CAAC,IAAIC,MAAM,CAAC,OAAO,GAAGF,IAAI,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC;IAC9E,IAAI,CAACC,KAAK,EAAE;MACV,OAAO,IAAI;IACb;IACA,OAAOE,kBAAkB,CAACF,KAAK,CAAC,CAAC,CAAC,CAACG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EACzD,CAAC;EACD,OAAOL,SAAS,CAAC,gBAAgB,CAAC,IAC7BA,SAAS,CAAC,oBAAoB,CAAC,IAC/BA,SAAS,CAAC,oBAAoB,CAAC;AACtC;;AAEA;AACA,OAAO,SAASM,gBAAgBA,CAACzB,SAAqC,EAAE0B,QAAiB,EAAEC,OAAgB,EAAU;EACnH,IAAID,QAAQ,EAAE;IACZ,OAAOA,QAAQ;EACjB;EACA,IAAI,EAAC1B,SAAS,aAATA,SAAS,eAATA,SAAS,CAAE4B,KAAK,GAAE;IACrBC,OAAO,CAACC,IAAI,CAAC,2IAA2I,CAAC;EAC3J;EACA,MAAMF,KAAK,GAAG,CAAA5B,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAE4B,KAAK,KAAI,KAAK;EACvC,OAAO,GAAGA,KAAK,MAAMlD,kBAAkB,GAAGiD,OAAO,IAAI,EAAE,EAAE;AAC3D;AAEA,OAAO,SAASI,sBAAsBA,CAACb,WAAsC,EAAEc,SAAkB,EAAW;EAC1G,IAAI,CAACd,WAAW,EAAE;IAChB,OAAO,KAAK;EACd;EACA,IAAI,CAACc,SAAS,EAAE;IACd;IACA,MAAMC,IAAI,GAAGf,WAAW,CAACgB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAACV,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;IACpE,OAAOS,IAAI,CAACE,UAAU,CAACzD,kBAAkB,CAAC;EAC5C;EACA;EACA,MAAM0D,mBAAmB,GAAGJ,SAAS,CAACE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACtD,MAAMG,qBAAqB,GAAGnB,WAAW,CAACgB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1D,OAAOG,qBAAqB,KAAKD,mBAAmB;AACtD;AAOA;AACA,OAAO,SAASE,yBAAyBA,CACvCC,GAA8B,EAC9BvC,SAAqC,EACjB;EACpB,IAAI,CAACuC,GAAG,IAAI,WAAW,CAACC,IAAI,CAACD,GAAG,CAAC,EAAE;IACjC,OAAO;MAAEE,IAAI,EAAE;IAAO,CAAC;EACzB;EACA;EACA,IAAIV,sBAAsB,CAACQ,GAAG,CAAC,EAAE;IAC/B,OAAO;MACLE,IAAI,EAAE,eAAe;MACrBF,GAAG;MACHG,aAAa,EAAEzB,oBAAoB,CAACsB,GAAG;IACzC,CAAC;EACH;EACA,OAAO;IAAEE,IAAI,EAAE,WAAW;IAAEF;EAAI,CAAC;AACnC;;AAEA;AACA,OAAO,SAASI,wBAAwBA,CACtCJ,GAA8B,EAC9BvC,SAAqC,EACjB;EACpB,MAAM4C,MAAM,GAAGN,yBAAyB,CAACC,GAAG,EAAEvC,SAAS,CAAC;EACxD,IAAI4C,MAAM,CAACH,IAAI,KAAK,MAAM,EAAE;IAC1B9D,2BAA2B,CAACkE,OAAO,CAACN,GAAG,CAAC;EAC1C;EACA,OAAOK,MAAM;AACf;AAEA,MAAME,cAAc,CAAC;EACXC,YAAYA,CAAA,EAAqB;IACvC,IAAI;MACF,OAAOxE,QAAQ,CAACyE,GAAG,CAAY,YAAY,CAAC;IAC9C,CAAC,CAAC,OAAOrD,CAAC,EAAE;MACV,OAAO,IAAI;IACb;EACF;EAEOsD,SAASA,CAAA,EAA4B;IAC1C,OAAOlD,gBAAgB,CAAC,IAAI,CAACgD,YAAY,CAAC,CAAC,CAAC;EAC9C;EAEOG,IAAIA,CAACX,GAAW,EAAE1C,MAAmC,GAAG,CAAC,CAAC,EAAgB;IAC/E,IAAI,CAAC0C,GAAG,EAAE;MACR,OAAOY,OAAO,CAACC,OAAO,CAAC,CAAC;IAC1B;IACA,MAAMxC,OAAO,GAAGhB,oBAAoB,CAACC,MAAM,CAAC;IAE5C,IAAIrB,gBAAgB,CAAC,CAAC,EAAE;MACtB,IAAI,OAAO6E,MAAM,KAAK,WAAW,EAAE;QACjCA,MAAM,CAACH,IAAI,CAACX,GAAG,EAAE,QAAQ,CAAC;MAC5B;MACA,OAAOY,OAAO,CAACC,OAAO,CAAC,CAAC;IAC1B;IAEA,IAAIxC,OAAO,CAACC,IAAI,KAAK,cAAc,EAAE;MACnC,OAAO,IAAI,CAACyC,eAAe,CAACf,GAAG,EAAE3B,OAAO,CAACoB,SAAS,CAAC;IACrD;IAEA,IAAI,CAAC,WAAW,CAACQ,IAAI,CAACD,GAAG,CAAC,EAAE;MAC1B,OAAOtE,OAAO,CAACsF,OAAO,CAAChB,GAAG,CAAC;IAC7B;IAEA,MAAM1B,IAAI,GAAGF,eAAe,CAACC,OAAO,EAAE,IAAI,CAACqC,SAAS,CAAC,CAAC,CAAC;IACvD,QAAQpC,IAAI;MACV,KAAK,UAAU;QACb,OAAO5C,OAAO,CAACsF,OAAO,CAAChB,GAAG,CAAC;MAC7B,KAAK,gBAAgB;QACnB,OAAO,IAAI,CAACiB,gBAAgB,CAACjB,GAAG,EAAE,CAAC,CAAC3B,OAAO,CAACH,SAAS,CAAC;MACxD,KAAK,aAAa;MAClB;QACE,OAAOpC,UAAU,CAACoF,gBAAgB,CAAClB,GAAG,CAAC;IAC3C;EACF;EAEOe,eAAeA,CAACI,QAAgB,EAAE1B,SAAkB,EAAEL,OAAgB,EAAmB;IAC9F,MAAM3B,SAAS,GAAG,IAAI,CAAC+C,YAAY,CAAC,CAAC;IACrC,MAAMY,WAAW,GAAGlC,gBAAgB,CAACzB,SAAS,EAAEgC,SAAS,EAAEL,OAAO,CAAC;IACnE,MAAMpB,MAAM,GAAG,IAAI,CAAC0C,SAAS,CAAC,CAAC;IAC/B,IAAIvC,+BAA+B,CAACH,MAAM,CAAC,EAAE;MAC3C,OAAO,IAAI,CAACqD,gCAAgC,CAACF,QAAQ,EAAEC,WAAW,EAAEpD,MAAM,CAAChB,aAAa,CAAC;IAC3F;IACA,OAAOlB,UAAU,CAACwF,oBAAoB,CAACH,QAAQ,EAAEC,WAAW,EAAE;MAC5DG,sBAAsB,EAAE;IAC1B,CAAC,CAAC,CAACC,IAAI,CAAEC,MAAW,IAAK;MACvB,IAAI,CAAAA,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEvB,IAAI,MAAK,SAAS,IAAIuB,MAAM,CAACzB,GAAG,EAAE;QAC5C,MAAM0B,MAAM,GAAGhD,oBAAoB,CAAC+C,MAAM,CAACzB,GAAG,CAAC;QAC/C,IAAI,CAAC0B,MAAM,EAAE;UACX,OAAOd,OAAO,CAACe,MAAM,CAAC,IAAIC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrF;QACA,OAAOF,MAAM;MACf;MACA,OAAOd,OAAO,CAACe,MAAM,CAAC,IAAIC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtE,CAAC,CAAC;EACJ;;EAEA;EACQP,gCAAgCA,CAACF,QAAgB,EAAEC,WAAmB,EAAES,SAAiB,GAAGvF,wBAAwB,EAAmB;IAC7I;IACA,MAAMwF,gBAAgB,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IACnC,MAAMC,SAAS,GAAG7F,2BAA2B,CAAC8F,OAAO,CACnD,CAAClC,GAAG,EAAEmC,UAAU,KAAK3C,sBAAsB,CAACQ,GAAG,EAAEoB,WAAW,CAAC,IAAIe,UAAU,IAAIL,gBAAgB,EAC/FD,SACF,CAAC;IACD,IAAII,SAAS,EAAE;MACb,MAAMG,YAAY,GAAG1D,oBAAoB,CAACuD,SAAS,CAAC;MACpD,IAAIG,YAAY,EAAE;QAChB,OAAOxB,OAAO,CAACC,OAAO,CAACuB,YAAY,CAAC;MACtC;IACF;IAEA,OAAO,IAAIxB,OAAO,CAAC,CAACC,OAAO,EAAEc,MAAM,KAAK;MACtC,IAAIU,OAAO,GAAG,KAAK;MACnB,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAM;QACjCC,MAAM,CAAC,IAAIZ,KAAK,CAAC,0CAA0CC,SAAS,IAAI,CAAC,CAAC;MAC5E,CAAC,EAAEA,SAAS,CAAC;MACb,MAAMW,MAAM,GAAGA,CAACC,KAAa,EAAEf,MAAe,KAAK;QACjD,IAAIW,OAAO,EAAE;UACX;QACF;QACAA,OAAO,GAAG,IAAI;QACdK,YAAY,CAACJ,SAAS,CAAC;QACvBK,YAAY,CAACC,MAAM,CAAC,CAAC;QACrBC,oBAAoB,CAAC,CAAC;QACtB,IAAIJ,KAAK,EAAE;UACTd,MAAM,CAACc,KAAK,CAAC;QACf,CAAC,MAAM;UACL5B,OAAO,CAACa,MAAgB,CAAC;QAC3B;MACF,CAAC;MAED,MAAMoB,SAAS,GAAI9C,GAAmB,IAAK;QACzC,IAAI,CAACR,sBAAsB,CAACQ,GAAG,EAAEoB,WAAW,CAAC,EAAE;UAC7C;QACF;QACA,MAAMM,MAAM,GAAGhD,oBAAoB,CAACsB,GAAa,CAAC;QAClD,IAAI,CAAC0B,MAAM,EAAE;UACXc,MAAM,CAAC,IAAIZ,KAAK,CAAC,iDAAiD,CAAC,CAAC;UACpE;QACF;QACAY,MAAM,CAACO,SAAS,EAAErB,MAAM,CAAC;MAC3B,CAAC;MAED,MAAMiB,YAAY,GAAGjH,OAAO,CAACsH,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAAEhD;MAAI,CAAC,KAAK8C,SAAS,CAAC9C,GAAG,CAAC,CAAC;MACjF,MAAM6C,oBAAoB,GAAGzG,2BAA2B,CAAC6G,SAAS,CAAEjD,GAAG,IAAK8C,SAAS,CAAC9C,GAAG,CAAC,CAAC;MAC3FtE,OAAO,CAACsF,OAAO,CAACG,QAAQ,CAAC,CAAC+B,KAAK,CAAE9F,CAAC,IAAKoF,MAAM,CAACpF,CAAC,YAAYwE,KAAK,GAAGxE,CAAC,GAAG,IAAIwE,KAAK,CAACuB,MAAM,CAAC/F,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC;EACJ;EAEQ6D,gBAAgBA,CAACjB,GAAW,EAAE9B,SAAkB,EAAiB;IACvE,MAAM;MAAEkF,KAAK;MAAEC;IAAO,CAAC,GAAG5H,UAAU,CAACgF,GAAG,CAAC,QAAQ,CAAC;IAClD,OAAO,IAAIG,OAAO,CAAEC,OAAO,IAAK;MAC9B,IAAIyC,SAAS,GAAGA,CAAA,KAAM,CAAC,CAAC;MACxBA,SAAS,GAAGpH,wBAAwB,CAACqH,IAAI,CAAC;QACxCC,OAAO,eACLhI,KAAA,CAAAiI,aAAA,CAAC5H,IAAI;UAAC6H,KAAK,EAAE;YAAEN,KAAK;YAAEC,MAAM;YAAEM,eAAe,EAAE;UAAO;QAAE,gBACtDnI,KAAA,CAAAiI,aAAA,CAAC7H,gBAAgB;UACfgI,OAAO,EAAEA,CAAA,KAAM;YACbN,SAAS,CAACnG,IAAI,CAACjB,wBAAwB,CAAC;YACxC2E,OAAO,CAAC,CAAC;UACX,CAAE;UACF6C,KAAK,EAAE;YAAEG,iBAAiB,EAAE,EAAE;YAAEC,eAAe,EAAE;UAAG,CAAE;UACtDC,iBAAiB,EAAC,QAAQ;UAC1BC,kBAAkB,EAAC;QAAO,gBAC1BxI,KAAA,CAAAiI,aAAA,CAAC9H,IAAI;UAAC+H,KAAK,EAAE;YAAEO,KAAK,EAAE,MAAM;YAAEC,QAAQ,EAAE;UAAG;QAAE,GAAC,MAAU,CACxC,CAAC,eACnB1I,KAAA,CAAAiI,aAAA,CAAC1H,SAAS;UACRoI,GAAG,EAAEnE,GAAI;UACT9B,SAAS,EAAEA,SAAU;UACrBkG,MAAM,EAAE;YACNC,IAAI,EAAE;cACJjB,KAAK,EAAE,MAAM;cACbkB,IAAI,EAAE;YACR;UACF;QAAE,CACH,CACG;MAEV,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;AACF;AAEA,eAAe,IAAI/D,cAAc,CAAC,CAAC","ignoreList":[]}
|