@capgo/capacitor-inappbrowser 8.18.0 → 8.19.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/bundled-asset-support.js","esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["/** Default Capacitor local URL settings used when no runtime config is available. */\nexport const BUNDLED_ASSET_DEFAULTS = {\n ios: { scheme: 'capacitor', host: 'localhost' },\n android: { scheme: 'https', host: 'localhost' },\n};\nconst ABSOLUTE_URL_PATTERN = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/;\nconst RESERVED_WEB_SCHEMES = ['http', 'https'];\n/** Returns true when the input looks like an absolute URL (including protocol-relative URLs). */\nexport function isAbsoluteUrl(url) {\n return ABSOLUTE_URL_PATTERN.test(url) || url.startsWith('//');\n}\n/** Returns true when any path segment is `..`. */\nexport function containsPathTraversal(path) {\n return path.split('/').includes('..');\n}\n/**\n * Normalizes a relative bundled asset path to a leading-slash form.\n * Returns null when the path contains traversal segments.\n */\nexport function normalizeBundledPath(path) {\n const trimmed = path.trim();\n if (!trimmed || trimmed === '/') {\n return '/';\n }\n if (containsPathTraversal(trimmed)) {\n return null;\n }\n return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n}\n/** Parses a Capacitor local URL into scheme and host components. */\nexport function parseBundledLocalConfig(localUrl) {\n if (!localUrl) {\n return null;\n }\n try {\n const parsed = new URL(localUrl.endsWith('/') ? localUrl : `${localUrl}/`);\n if (!parsed.protocol || !parsed.hostname) {\n return null;\n }\n return {\n scheme: parsed.protocol.replace(/:$/, '').toLowerCase(),\n host: parsed.hostname.toLowerCase(),\n };\n }\n catch (_a) {\n return null;\n }\n}\n/** Returns the scheme WebView navigation should use for bundled assets on a platform. */\nexport function handlerSchemeForPlatform(platform, localConfig) {\n if (platform === 'ios' && RESERVED_WEB_SCHEMES.includes(localConfig.scheme)) {\n return BUNDLED_ASSET_DEFAULTS.ios.scheme;\n }\n if (platform === 'android') {\n if (localConfig.scheme === 'http' || localConfig.scheme === 'https') {\n return localConfig.scheme;\n }\n return BUNDLED_ASSET_DEFAULTS.android.scheme;\n }\n return localConfig.scheme;\n}\n/**\n * Returns true when the URL targets the configured Capacitor local host/scheme\n * (including the platform handler scheme rewrite).\n */\nexport function isBundledLocalUrl(url, platform, localConfig) {\n if (!isAbsoluteUrl(url)) {\n return false;\n }\n try {\n const parsed = new URL(url);\n const scheme = parsed.protocol.replace(/:$/, '').toLowerCase();\n const host = parsed.hostname.toLowerCase();\n const config = localConfig !== null && localConfig !== void 0 ? localConfig : BUNDLED_ASSET_DEFAULTS[platform];\n if (host !== config.host) {\n return false;\n }\n if (parsed.port !== '') {\n return false;\n }\n if (scheme === config.scheme || scheme === handlerSchemeForPlatform(platform, config)) {\n return true;\n }\n return RESERVED_WEB_SCHEMES.includes(scheme) && RESERVED_WEB_SCHEMES.includes(config.scheme);\n }\n catch (_a) {\n return false;\n }\n}\n/** Returns true when the input is a non-empty relative bundled asset path. */\nexport function isRelativeBundledPath(url) {\n const trimmed = url.trim();\n if (!trimmed) {\n return false;\n }\n return !isAbsoluteUrl(trimmed);\n}\nfunction rewriteBundledLocalUrl(url, localConfig, navigationScheme) {\n try {\n const parsed = new URL(url);\n const host = parsed.hostname.toLowerCase();\n const scheme = parsed.protocol.replace(/:$/, '').toLowerCase();\n if (host !== localConfig.host || scheme === navigationScheme) {\n return null;\n }\n const pathname = parsed.pathname || '/';\n const search = parsed.search;\n const hash = parsed.hash;\n const userinfo = parsed.username.length > 0 ? `${parsed.username}${parsed.password.length > 0 ? `:${parsed.password}` : ''}@` : '';\n return `${navigationScheme}://${userinfo}${host}${pathname}${search}${hash}`;\n }\n catch (_a) {\n return null;\n }\n}\n/**\n * Resolves a bundled asset URL for the given platform.\n * Relative paths become platform-local URLs; bundled local URLs may be rewritten to the handler scheme.\n */\nexport function resolveBundledAssetUrl(url, platform, localConfig) {\n const trimmed = url.trim();\n const config = localConfig !== null && localConfig !== void 0 ? localConfig : BUNDLED_ASSET_DEFAULTS[platform];\n const navigationScheme = handlerSchemeForPlatform(platform, config);\n if (isRelativeBundledPath(trimmed)) {\n const path = normalizeBundledPath(trimmed);\n if (path === null) {\n return null;\n }\n return {\n url: `${navigationScheme}://${config.host}${path}`,\n };\n }\n if (isBundledLocalUrl(trimmed, platform, config)) {\n const rewritten = rewriteBundledLocalUrl(trimmed, config, navigationScheme);\n return {\n url: rewritten !== null && rewritten !== void 0 ? rewritten : trimmed,\n };\n }\n return {\n url: trimmed,\n };\n}\n/**\n * Resolves relative bundled paths for legacy native plugins that do not perform native resolution.\n * Throws when the path is invalid.\n */\nexport function resolveLegacyNativeWebViewUrl(url, platform, localConfig) {\n if (!isRelativeBundledPath(url)) {\n return url;\n }\n const resolution = resolveBundledAssetUrl(url, platform, localConfig);\n if (resolution === null) {\n throw new Error('Invalid bundled asset path');\n }\n return resolution.url;\n}\n//# sourceMappingURL=bundled-asset-support.js.map","export var BackgroundColor;\n(function (BackgroundColor) {\n BackgroundColor[\"WHITE\"] = \"white\";\n BackgroundColor[\"BLACK\"] = \"black\";\n})(BackgroundColor || (BackgroundColor = {}));\nexport var ToolBarType;\n(function (ToolBarType) {\n /**\n * Shows a simple toolbar with just a close button and share button\n * @since 0.1.0\n */\n ToolBarType[\"ACTIVITY\"] = \"activity\";\n /**\n * Shows a simple toolbar with just a close button\n * @since 7.6.8\n */\n ToolBarType[\"COMPACT\"] = \"compact\";\n /**\n * Shows a full navigation toolbar with back/forward buttons\n * @since 0.1.0\n */\n ToolBarType[\"NAVIGATION\"] = \"navigation\";\n /**\n * Shows no toolbar\n * @since 0.1.0\n */\n ToolBarType[\"BLANK\"] = \"blank\";\n})(ToolBarType || (ToolBarType = {}));\nexport var InvisibilityMode;\n(function (InvisibilityMode) {\n /**\n * WebView is aware it is hidden (dimensions may be zero).\n */\n InvisibilityMode[\"AWARE\"] = \"AWARE\";\n /**\n * WebView is hidden but reports fullscreen dimensions (uses alpha=0 to remain invisible).\n */\n InvisibilityMode[\"FAKE_VISIBLE\"] = \"FAKE_VISIBLE\";\n})(InvisibilityMode || (InvisibilityMode = {}));\nexport var CloseAction;\n(function (CloseAction) {\n /**\n * The toolbar close button closes and destroys the webview.\n */\n CloseAction[\"CLOSE\"] = \"close\";\n /**\n * The toolbar close button hides the webview so it can be shown again.\n */\n CloseAction[\"HIDE\"] = \"hide\";\n})(CloseAction || (CloseAction = {}));\nexport var CloseButtonPosition;\n(function (CloseButtonPosition) {\n /**\n * Leading edge of the toolbar (left in left-to-right layouts).\n */\n CloseButtonPosition[\"START\"] = \"start\";\n /**\n * Trailing edge of the toolbar (right in left-to-right layouts).\n */\n CloseButtonPosition[\"END\"] = \"end\";\n})(CloseButtonPosition || (CloseButtonPosition = {}));\n//# sourceMappingURL=definitions.js.map","import { Capacitor, registerPlugin } from '@capacitor/core';\nimport { containsPathTraversal, isRelativeBundledPath, parseBundledLocalConfig, resolveLegacyNativeWebViewUrl, } from './bundled-asset-support';\nconst CAPGO_PLUGIN_NAME = 'CapgoInAppBrowser';\nconst PREVIOUS_PLUGIN_NAME = 'InAppBrowser';\nfunction resolvePluginName() {\n if (!Capacitor.isNativePlatform()) {\n return CAPGO_PLUGIN_NAME;\n }\n if (Capacitor.isPluginAvailable(CAPGO_PLUGIN_NAME)) {\n return CAPGO_PLUGIN_NAME;\n }\n if (Capacitor.isPluginAvailable(PREVIOUS_PLUGIN_NAME)) {\n return PREVIOUS_PLUGIN_NAME;\n }\n console.warn(`[InAppBrowser] Neither '${CAPGO_PLUGIN_NAME}' nor '${PREVIOUS_PLUGIN_NAME}' native plugin detected. ` +\n 'Ensure @capgo/capacitor-inappbrowser native code is installed.');\n return CAPGO_PLUGIN_NAME;\n}\nconst inAppBrowserImplementations = {\n web: () => import('./web').then((m) => new m.InAppBrowserWeb()),\n};\nfunction assertValidBundledAssetPath(url) {\n if (isRelativeBundledPath(url) && containsPathTraversal(url)) {\n throw new Error('Invalid bundled asset path');\n }\n}\nconst activePluginName = resolvePluginName();\nfunction bundledAssetPlatform() {\n return Capacitor.getPlatform() === 'ios' ? 'ios' : 'android';\n}\nfunction getConfiguredLocalConfig() {\n if (!Capacitor.isNativePlatform()) {\n return null;\n }\n const getServerUrl = Capacitor.getServerUrl;\n if (typeof getServerUrl !== 'function') {\n return null;\n }\n return parseBundledLocalConfig(getServerUrl());\n}\nfunction prepareUrlOptions(options) {\n assertValidBundledAssetPath(options.url);\n if (!Capacitor.isNativePlatform() || activePluginName !== PREVIOUS_PLUGIN_NAME) {\n return options;\n }\n return Object.assign(Object.assign({}, options), { url: resolveLegacyNativeWebViewUrl(options.url, bundledAssetPlatform(), getConfiguredLocalConfig()) });\n}\nconst baseInAppBrowser = registerPlugin(activePluginName, inAppBrowserImplementations);\nconst InAppBrowser = new Proxy(baseInAppBrowser, {\n get(target, prop, receiver) {\n if (prop === 'openWebView') {\n return (options) => target.openWebView(prepareUrlOptions(options));\n }\n if (prop === 'setUrl') {\n return (options) => target.setUrl(prepareUrlOptions(options));\n }\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n },\n});\nfunction arrayBufferToBase64(buffer) {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\nfunction headersToRecord(headers) {\n const result = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\nfunction errorMessage(error) {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error && typeof error === 'object' && 'message' in error && typeof error.message === 'string') {\n return error.message;\n }\n return String(error);\n}\nfunction isStaleProxyResponseError(error) {\n const message = errorMessage(error);\n return message.includes('No proxy handler found') || message.includes('Target WebView not found for proxy request');\n}\nfunction isProxyResponse(value) {\n return (value !== null &&\n typeof value === 'object' &&\n 'status' in value &&\n 'headers' in value &&\n !(value instanceof Response));\n}\nfunction isProxyRequestOverride(value) {\n return value !== null && typeof value === 'object' && 'url' in value && !(value instanceof Response);\n}\nfunction isProxyDecision(value) {\n return (value !== null && typeof value === 'object' && ('request' in value || 'response' in value || 'cancel' in value));\n}\nasync function sendProxyDecision(requestId, webviewId, decision, phase) {\n try {\n await InAppBrowser.handleProxyRequest({\n requestId,\n webviewId,\n decision,\n phase,\n });\n }\n catch (error) {\n if (isStaleProxyResponseError(error)) {\n return;\n }\n throw error;\n }\n}\nasync function resolveProxyHandlerDecision(callback, event) {\n try {\n const result = await callback(event);\n if (result === null) {\n return null;\n }\n if (isProxyDecision(result)) {\n return result;\n }\n if (isProxyRequestOverride(result)) {\n return { request: result };\n }\n if (isProxyResponse(result)) {\n return { response: result };\n }\n const cloned = result.clone();\n const buffer = await cloned.arrayBuffer();\n return {\n response: {\n body: arrayBufferToBase64(buffer),\n status: result.status,\n headers: headersToRecord(result.headers),\n },\n };\n }\n catch (_error) {\n return null;\n }\n}\nconst addProxyHandler = (callback) => {\n return InAppBrowser.addListener('proxyRequest', (event) => {\n void (async () => {\n const decision = await resolveProxyHandlerDecision(callback, event);\n await sendProxyDecision(event.requestId, event.webviewId, decision, event.phase);\n })();\n });\n};\nexport * from './definitions';\nexport { InAppBrowser, addProxyHandler };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class InAppBrowserWeb extends WebPlugin {\n clearAllCookies() {\n console.log('clearAllCookies');\n return Promise.resolve();\n }\n clearCache() {\n console.log('clearCache');\n return Promise.resolve();\n }\n clearAllBrowsingData() {\n console.log('clearAllBrowsingData');\n return Promise.resolve();\n }\n async open(options) {\n console.log('open', options);\n return options;\n }\n async clearCookies(options) {\n console.log('cleanCookies', options);\n return;\n }\n async getCookies(options) {\n // Web implementation to get cookies\n return options;\n }\n async openWebView(options) {\n console.log('openWebView', options);\n return options;\n }\n async executeScript({ code }) {\n console.log('code', code);\n return code;\n }\n async close(options) {\n console.log('close', options);\n return;\n }\n async hide(options) {\n console.log('hide', options);\n return;\n }\n async show(options) {\n console.log('show', options);\n return;\n }\n async sendToBack(options) {\n console.log('sendToBack not supported on web', options);\n return;\n }\n async bringToFront(options) {\n console.log('bringToFront not supported on web', options);\n return;\n }\n async dispatchInputEvent(options) {\n console.log('dispatchInputEvent not supported on web', options);\n return;\n }\n async setUrl(options) {\n console.log('setUrl', options.url);\n return;\n }\n async reload(options) {\n console.log('reload', options);\n return;\n }\n async postMessage(options) {\n console.log('postMessage', options);\n return options;\n }\n async takeScreenshot(options) {\n console.log('takeScreenshot not supported on web', options);\n throw this.unimplemented('Screenshots are not supported on web.');\n }\n async goBack() {\n console.log('goBack');\n return;\n }\n async getPluginVersion() {\n return { version: 'web' };\n }\n async updateDimensions(options) {\n console.log('updateDimensions', options);\n // Web platform doesn't support dimension control\n return;\n }\n async handleProxyRequest(options) {\n console.log('handleProxyRequest not supported on web', options);\n return;\n }\n async setEnabledSafeTopMargin(options) {\n console.log('setEnabledSafeTopMargin not supported on web', options);\n return;\n }\n async setEnabledSafeBottomMargin(options) {\n console.log('setEnabledSafeBottomMargin not supported on web', options);\n return;\n }\n async openSecureWindow(options) {\n const w = 600;\n const h = 550;\n const settings = [\n ['width', w],\n ['height', h],\n ['left', screen.width / 2 - w / 2],\n ['top', screen.height / 2 - h / 2],\n ]\n .map((x) => x.join('='))\n .join(',');\n const popup = window.open(options.authEndpoint, 'Authorization', settings);\n if (!popup) {\n throw new Error('Failed to open secure window');\n }\n if (typeof popup.focus === 'function') {\n popup.focus();\n }\n return new Promise((resolve, reject) => {\n const bc = new BroadcastChannel(options.broadcastChannelName || 'oauth-channel');\n bc.addEventListener('message', (event) => {\n if (event.data.startsWith(options.redirectUri)) {\n bc.close();\n resolve({ redirectedUri: event.data });\n }\n else {\n bc.close();\n reject(new Error('Redirect URI does not match, expected ' + options.redirectUri + ' but got ' + event.data));\n }\n });\n setTimeout(() => {\n bc.close();\n reject(new Error('The sign-in flow timed out'));\n }, 5 * 60000);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["BackgroundColor","ToolBarType","InvisibilityMode","CloseAction","CloseButtonPosition","Capacitor","registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/bundled-asset-support.js","esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["/** Default Capacitor local URL settings used when no runtime config is available. */\nexport const BUNDLED_ASSET_DEFAULTS = {\n ios: { scheme: 'capacitor', host: 'localhost' },\n android: { scheme: 'https', host: 'localhost' },\n};\nconst ABSOLUTE_URL_PATTERN = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/;\nconst RESERVED_WEB_SCHEMES = ['http', 'https'];\n/** Returns true when the input looks like an absolute URL (including protocol-relative URLs). */\nexport function isAbsoluteUrl(url) {\n return ABSOLUTE_URL_PATTERN.test(url) || url.startsWith('//');\n}\n/** Returns true when any path segment is `..`. */\nexport function containsPathTraversal(path) {\n return path.split('/').includes('..');\n}\n/**\n * Normalizes a relative bundled asset path to a leading-slash form.\n * Returns null when the path contains traversal segments.\n */\nexport function normalizeBundledPath(path) {\n const trimmed = path.trim();\n if (!trimmed || trimmed === '/') {\n return '/';\n }\n if (containsPathTraversal(trimmed)) {\n return null;\n }\n return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n}\n/** Parses a Capacitor local URL into scheme and host components. */\nexport function parseBundledLocalConfig(localUrl) {\n if (!localUrl) {\n return null;\n }\n try {\n const parsed = new URL(localUrl.endsWith('/') ? localUrl : `${localUrl}/`);\n if (!parsed.protocol || !parsed.hostname) {\n return null;\n }\n return {\n scheme: parsed.protocol.replace(/:$/, '').toLowerCase(),\n host: parsed.hostname.toLowerCase(),\n };\n }\n catch (_a) {\n return null;\n }\n}\n/** Returns the scheme WebView navigation should use for bundled assets on a platform. */\nexport function handlerSchemeForPlatform(platform, localConfig) {\n if (platform === 'ios' && RESERVED_WEB_SCHEMES.includes(localConfig.scheme)) {\n return BUNDLED_ASSET_DEFAULTS.ios.scheme;\n }\n if (platform === 'android') {\n if (localConfig.scheme === 'http' || localConfig.scheme === 'https') {\n return localConfig.scheme;\n }\n return BUNDLED_ASSET_DEFAULTS.android.scheme;\n }\n return localConfig.scheme;\n}\n/**\n * Returns true when the URL targets the configured Capacitor local host/scheme\n * (including the platform handler scheme rewrite).\n */\nexport function isBundledLocalUrl(url, platform, localConfig) {\n if (!isAbsoluteUrl(url)) {\n return false;\n }\n try {\n const parsed = new URL(url);\n const scheme = parsed.protocol.replace(/:$/, '').toLowerCase();\n const host = parsed.hostname.toLowerCase();\n const config = localConfig !== null && localConfig !== void 0 ? localConfig : BUNDLED_ASSET_DEFAULTS[platform];\n if (host !== config.host) {\n return false;\n }\n if (parsed.port !== '') {\n return false;\n }\n if (scheme === config.scheme || scheme === handlerSchemeForPlatform(platform, config)) {\n return true;\n }\n return RESERVED_WEB_SCHEMES.includes(scheme) && RESERVED_WEB_SCHEMES.includes(config.scheme);\n }\n catch (_a) {\n return false;\n }\n}\n/** Returns true when the input is a non-empty relative bundled asset path. */\nexport function isRelativeBundledPath(url) {\n const trimmed = url.trim();\n if (!trimmed) {\n return false;\n }\n return !isAbsoluteUrl(trimmed);\n}\nfunction rewriteBundledLocalUrl(url, localConfig, navigationScheme) {\n try {\n const parsed = new URL(url);\n const host = parsed.hostname.toLowerCase();\n const scheme = parsed.protocol.replace(/:$/, '').toLowerCase();\n if (host !== localConfig.host || scheme === navigationScheme) {\n return null;\n }\n const pathname = parsed.pathname || '/';\n const search = parsed.search;\n const hash = parsed.hash;\n const userinfo = parsed.username.length > 0 ? `${parsed.username}${parsed.password.length > 0 ? `:${parsed.password}` : ''}@` : '';\n return `${navigationScheme}://${userinfo}${host}${pathname}${search}${hash}`;\n }\n catch (_a) {\n return null;\n }\n}\n/**\n * Resolves a bundled asset URL for the given platform.\n * Relative paths become platform-local URLs; bundled local URLs may be rewritten to the handler scheme.\n */\nexport function resolveBundledAssetUrl(url, platform, localConfig) {\n const trimmed = url.trim();\n const config = localConfig !== null && localConfig !== void 0 ? localConfig : BUNDLED_ASSET_DEFAULTS[platform];\n const navigationScheme = handlerSchemeForPlatform(platform, config);\n if (isRelativeBundledPath(trimmed)) {\n const path = normalizeBundledPath(trimmed);\n if (path === null) {\n return null;\n }\n return {\n url: `${navigationScheme}://${config.host}${path}`,\n };\n }\n if (isBundledLocalUrl(trimmed, platform, config)) {\n const rewritten = rewriteBundledLocalUrl(trimmed, config, navigationScheme);\n return {\n url: rewritten !== null && rewritten !== void 0 ? rewritten : trimmed,\n };\n }\n return {\n url: trimmed,\n };\n}\n/**\n * Resolves relative bundled paths for legacy native plugins that do not perform native resolution.\n * Throws when the path is invalid.\n */\nexport function resolveLegacyNativeWebViewUrl(url, platform, localConfig) {\n if (!isRelativeBundledPath(url)) {\n return url;\n }\n const resolution = resolveBundledAssetUrl(url, platform, localConfig);\n if (resolution === null) {\n throw new Error('Invalid bundled asset path');\n }\n return resolution.url;\n}\n//# sourceMappingURL=bundled-asset-support.js.map","export var BackgroundColor;\n(function (BackgroundColor) {\n BackgroundColor[\"WHITE\"] = \"white\";\n BackgroundColor[\"BLACK\"] = \"black\";\n})(BackgroundColor || (BackgroundColor = {}));\nexport var ToolBarType;\n(function (ToolBarType) {\n /**\n * Shows a simple toolbar with just a close button and share button\n * @since 0.1.0\n */\n ToolBarType[\"ACTIVITY\"] = \"activity\";\n /**\n * Shows a simple toolbar with just a close button\n * @since 7.6.8\n */\n ToolBarType[\"COMPACT\"] = \"compact\";\n /**\n * Shows a full navigation toolbar with back/forward buttons\n * @since 0.1.0\n */\n ToolBarType[\"NAVIGATION\"] = \"navigation\";\n /**\n * Shows no toolbar\n * @since 0.1.0\n */\n ToolBarType[\"BLANK\"] = \"blank\";\n})(ToolBarType || (ToolBarType = {}));\nexport var InvisibilityMode;\n(function (InvisibilityMode) {\n /**\n * WebView is aware it is hidden (dimensions may be zero).\n */\n InvisibilityMode[\"AWARE\"] = \"AWARE\";\n /**\n * WebView is hidden but reports fullscreen dimensions (uses alpha=0 to remain invisible).\n */\n InvisibilityMode[\"FAKE_VISIBLE\"] = \"FAKE_VISIBLE\";\n})(InvisibilityMode || (InvisibilityMode = {}));\nexport var CloseAction;\n(function (CloseAction) {\n /**\n * The toolbar close button closes and destroys the webview.\n */\n CloseAction[\"CLOSE\"] = \"close\";\n /**\n * The toolbar close button hides the webview so it can be shown again.\n */\n CloseAction[\"HIDE\"] = \"hide\";\n})(CloseAction || (CloseAction = {}));\nexport var CloseButtonPosition;\n(function (CloseButtonPosition) {\n /**\n * Leading edge of the toolbar (left in left-to-right layouts).\n */\n CloseButtonPosition[\"START\"] = \"start\";\n /**\n * Trailing edge of the toolbar (right in left-to-right layouts).\n */\n CloseButtonPosition[\"END\"] = \"end\";\n})(CloseButtonPosition || (CloseButtonPosition = {}));\n//# sourceMappingURL=definitions.js.map","import { Capacitor, registerPlugin } from '@capacitor/core';\nimport { containsPathTraversal, isRelativeBundledPath, parseBundledLocalConfig, resolveLegacyNativeWebViewUrl, } from './bundled-asset-support';\nconst CAPGO_PLUGIN_NAME = 'CapgoInAppBrowser';\nconst PREVIOUS_PLUGIN_NAME = 'InAppBrowser';\nfunction resolvePluginName() {\n if (!Capacitor.isNativePlatform()) {\n return CAPGO_PLUGIN_NAME;\n }\n if (Capacitor.isPluginAvailable(CAPGO_PLUGIN_NAME)) {\n return CAPGO_PLUGIN_NAME;\n }\n if (Capacitor.isPluginAvailable(PREVIOUS_PLUGIN_NAME)) {\n return PREVIOUS_PLUGIN_NAME;\n }\n console.warn(`[InAppBrowser] Neither '${CAPGO_PLUGIN_NAME}' nor '${PREVIOUS_PLUGIN_NAME}' native plugin detected. ` +\n 'Ensure @capgo/capacitor-inappbrowser native code is installed.');\n return CAPGO_PLUGIN_NAME;\n}\nconst inAppBrowserImplementations = {\n web: () => import('./web').then((m) => new m.InAppBrowserWeb()),\n};\nfunction assertValidBundledAssetPath(url) {\n if (isRelativeBundledPath(url) && containsPathTraversal(url)) {\n throw new Error('Invalid bundled asset path');\n }\n}\nconst activePluginName = resolvePluginName();\nfunction bundledAssetPlatform() {\n return Capacitor.getPlatform() === 'ios' ? 'ios' : 'android';\n}\nfunction getConfiguredLocalConfig() {\n if (!Capacitor.isNativePlatform()) {\n return null;\n }\n const getServerUrl = Capacitor.getServerUrl;\n if (typeof getServerUrl !== 'function') {\n return null;\n }\n return parseBundledLocalConfig(getServerUrl());\n}\nfunction prepareUrlOptions(options) {\n assertValidBundledAssetPath(options.url);\n if (!Capacitor.isNativePlatform() || activePluginName !== PREVIOUS_PLUGIN_NAME) {\n return options;\n }\n return Object.assign(Object.assign({}, options), { url: resolveLegacyNativeWebViewUrl(options.url, bundledAssetPlatform(), getConfiguredLocalConfig()) });\n}\nconst baseInAppBrowser = registerPlugin(activePluginName, inAppBrowserImplementations);\nconst InAppBrowser = new Proxy(baseInAppBrowser, {\n get(target, prop, receiver) {\n if (prop === 'openWebView') {\n return (options) => target.openWebView(prepareUrlOptions(options));\n }\n if (prop === 'setUrl') {\n return (options) => target.setUrl(prepareUrlOptions(options));\n }\n const value = Reflect.get(target, prop, receiver);\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n },\n});\nfunction arrayBufferToBase64(buffer) {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\nfunction headersToRecord(headers) {\n const result = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\nfunction errorMessage(error) {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === 'string') {\n return error;\n }\n if (error && typeof error === 'object' && 'message' in error && typeof error.message === 'string') {\n return error.message;\n }\n return String(error);\n}\nfunction isStaleProxyResponseError(error) {\n const message = errorMessage(error);\n return message.includes('No proxy handler found') || message.includes('Target WebView not found for proxy request');\n}\nfunction isProxyResponse(value) {\n return (value !== null &&\n typeof value === 'object' &&\n 'status' in value &&\n 'headers' in value &&\n !(value instanceof Response));\n}\nfunction isProxyRequestOverride(value) {\n return value !== null && typeof value === 'object' && 'url' in value && !(value instanceof Response);\n}\nfunction isProxyDecision(value) {\n return (value !== null && typeof value === 'object' && ('request' in value || 'response' in value || 'cancel' in value));\n}\nasync function sendProxyDecision(requestId, webviewId, decision, phase) {\n try {\n await InAppBrowser.handleProxyRequest({\n requestId,\n webviewId,\n decision,\n phase,\n });\n }\n catch (error) {\n if (isStaleProxyResponseError(error)) {\n return;\n }\n throw error;\n }\n}\nasync function resolveProxyHandlerDecision(callback, event) {\n try {\n const result = await callback(event);\n if (result === null) {\n return null;\n }\n if (isProxyDecision(result)) {\n return result;\n }\n if (isProxyRequestOverride(result)) {\n return { request: result };\n }\n if (isProxyResponse(result)) {\n return { response: result };\n }\n const cloned = result.clone();\n const buffer = await cloned.arrayBuffer();\n return {\n response: {\n body: arrayBufferToBase64(buffer),\n status: result.status,\n headers: headersToRecord(result.headers),\n },\n };\n }\n catch (_a) {\n return null;\n }\n}\nconst addProxyHandler = (callback) => {\n return InAppBrowser.addListener('proxyRequest', (event) => {\n void (async () => {\n const decision = await resolveProxyHandlerDecision(callback, event);\n await sendProxyDecision(event.requestId, event.webviewId, decision, event.phase);\n })();\n });\n};\nexport * from './definitions';\nexport { InAppBrowser, addProxyHandler };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class InAppBrowserWeb extends WebPlugin {\n clearAllCookies() {\n console.log('clearAllCookies');\n return Promise.resolve();\n }\n clearCache() {\n console.log('clearCache');\n return Promise.resolve();\n }\n clearAllBrowsingData() {\n console.log('clearAllBrowsingData');\n return Promise.resolve();\n }\n async open(options) {\n console.log('open', options);\n return options;\n }\n async clearCookies(options) {\n console.log('cleanCookies', options);\n return;\n }\n async getCookies(options) {\n // Web implementation to get cookies\n return options;\n }\n async openWebView(options) {\n console.log('openWebView', options);\n return options;\n }\n async executeScript({ code }) {\n console.log('code', code);\n return code;\n }\n async close(options) {\n console.log('close', options);\n return;\n }\n async hide(options) {\n console.log('hide', options);\n return;\n }\n async show(options) {\n console.log('show', options);\n return;\n }\n async sendToBack(options) {\n console.log('sendToBack not supported on web', options);\n return;\n }\n async bringToFront(options) {\n console.log('bringToFront not supported on web', options);\n return;\n }\n async dispatchInputEvent(options) {\n console.log('dispatchInputEvent not supported on web', options);\n return;\n }\n async setUrl(options) {\n console.log('setUrl', options.url);\n return;\n }\n async reload(options) {\n console.log('reload', options);\n return;\n }\n async postMessage(options) {\n console.log('postMessage', options);\n return options;\n }\n async takeScreenshot(options) {\n console.log('takeScreenshot not supported on web', options);\n throw this.unimplemented('Screenshots are not supported on web.');\n }\n async goBack() {\n console.log('goBack');\n return;\n }\n async getPluginVersion() {\n return { version: 'web' };\n }\n async updateDimensions(options) {\n console.log('updateDimensions', options);\n // Web platform doesn't support dimension control\n return;\n }\n async handleProxyRequest(options) {\n console.log('handleProxyRequest not supported on web', options);\n return;\n }\n async setEnabledSafeTopMargin(options) {\n console.log('setEnabledSafeTopMargin not supported on web', options);\n return;\n }\n async setEnabledSafeBottomMargin(options) {\n console.log('setEnabledSafeBottomMargin not supported on web', options);\n return;\n }\n async openSecureWindow(options) {\n const w = 600;\n const h = 550;\n const settings = [\n ['width', w],\n ['height', h],\n ['left', screen.width / 2 - w / 2],\n ['top', screen.height / 2 - h / 2],\n ]\n .map((x) => x.join('='))\n .join(',');\n const popup = window.open(options.authEndpoint, 'Authorization', settings);\n if (!popup) {\n throw new Error('Failed to open secure window');\n }\n if (typeof popup.focus === 'function') {\n popup.focus();\n }\n return new Promise((resolve, reject) => {\n const bc = new BroadcastChannel(options.broadcastChannelName || 'oauth-channel');\n bc.addEventListener('message', (event) => {\n if (event.data.startsWith(options.redirectUri)) {\n bc.close();\n resolve({ redirectedUri: event.data });\n }\n else {\n bc.close();\n reject(new Error('Redirect URI does not match, expected ' + options.redirectUri + ' but got ' + event.data));\n }\n });\n setTimeout(() => {\n bc.close();\n reject(new Error('The sign-in flow timed out'));\n }, 5 * 60000);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["BackgroundColor","ToolBarType","InvisibilityMode","CloseAction","CloseButtonPosition","Capacitor","registerPlugin","WebPlugin"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import Foundation
2
+
3
+ /// Maps `downloadPreview` openWebView option values for managed download handling.
4
+ enum DownloadPreviewSupport {
5
+ static let defaultMode = "inAppBrowser"
6
+
7
+ static func normalizedMode(_ value: String) -> String? {
8
+ switch value.lowercased() {
9
+ case "inappbrowser":
10
+ return "inAppBrowser"
11
+ case "systempreview":
12
+ return "systemPreview"
13
+ default:
14
+ return nil
15
+ }
16
+ }
17
+
18
+ static func resolve(perOpenValue: String?) -> String {
19
+ if let perOpenValue, let normalized = normalizedMode(perOpenValue) {
20
+ return normalized
21
+ }
22
+ return defaultMode
23
+ }
24
+
25
+ static func usesInAppBrowserPreview(_ mode: String) -> Bool {
26
+ mode == "inAppBrowser"
27
+ }
28
+ }
@@ -446,7 +446,7 @@ public class CapgoInAppBrowserPlugin: CAPPlugin, CAPBridgedPlugin {
446
446
  case aware = "AWARE"
447
447
  case fakeVisible = "FAKE_VISIBLE"
448
448
  }
449
- private let pluginVersion: String = "8.18.0"
449
+ private let pluginVersion: String = "8.19.0"
450
450
  public let identifier = "CapgoInAppBrowserPlugin"
451
451
  public let jsName = "CapgoInAppBrowser"
452
452
  public let pluginMethods: [CAPPluginMethod] = [
@@ -1384,6 +1384,12 @@ public class CapgoInAppBrowserPlugin: CAPPlugin, CAPBridgedPlugin {
1384
1384
  let screenshotOnHide = call.getBool("screenshotOnHide", false)
1385
1385
  let captureConsoleLogs = call.getBool("captureConsoleLogs", false)
1386
1386
  let handleDownloads = call.getBool("handleDownloads", false)
1387
+ if let rawDownloadPreview = call.getString("downloadPreview"),
1388
+ DownloadPreviewSupport.normalizedMode(rawDownloadPreview) == nil {
1389
+ call.reject("downloadPreview must be 'inAppBrowser' or 'systemPreview'")
1390
+ return
1391
+ }
1392
+ let downloadPreview = DownloadPreviewSupport.resolve(perOpenValue: call.getString("downloadPreview"))
1387
1393
  let persistWebViewData = call.getBool("persistWebViewData", true)
1388
1394
  let useSharedDataStore = call.getBool("useSharedDataStore", false)
1389
1395
  let clearCookiesOnOpen = call.getBool("clearCookiesOnOpen", false)
@@ -1595,6 +1601,7 @@ public class CapgoInAppBrowserPlugin: CAPPlugin, CAPBridgedPlugin {
1595
1601
  }
1596
1602
 
1597
1603
  webViewController.handleDownloads = handleDownloads
1604
+ webViewController.downloadPreview = downloadPreview
1598
1605
 
1599
1606
  // Set native navigation gestures before view loads
1600
1607
  webViewController.activeNativeNavigationForWebview = activeNativeNavigationForWebview
@@ -81,7 +81,7 @@
81
81
  function resolveProxyBridgeUrl(rawUrl, baseUrl) {
82
82
  try {
83
83
  return new URL(rawUrl, baseUrl).href;
84
- } catch (_error) {
84
+ } catch (e) {
85
85
  return null;
86
86
  }
87
87
  }
@@ -130,7 +130,7 @@
130
130
  form.requestSubmit();
131
131
  }
132
132
  return;
133
- } catch (_error) {
133
+ } catch (e) {
134
134
  delete form.__capgoSkipNextProxySubmit;
135
135
  }
136
136
  }
@@ -168,7 +168,7 @@
168
168
  if (proxyRegexSource) {
169
169
  try {
170
170
  proxyRequestPattern = new RegExp(proxyRegexSource);
171
- } catch (_error) {
171
+ } catch (e) {
172
172
  proxyRequestPattern = null;
173
173
  }
174
174
  }
@@ -209,7 +209,7 @@
209
209
  if (url && !url.match(/^[a-zA-Z][a-zA-Z0-9+\-.]*:\/\//)) {
210
210
  try {
211
211
  return new URL(url, getDocumentBaseUrl()).href;
212
- } catch (_error) {
212
+ } catch (e) {
213
213
  return url;
214
214
  }
215
215
  }
@@ -289,7 +289,7 @@
289
289
  if (submitter instanceof HTMLElement) {
290
290
  try {
291
291
  return new FormData(form, submitter);
292
- } catch (_error) {
292
+ } catch (e) {
293
293
  }
294
294
  }
295
295
  return new FormData(form);
@@ -450,7 +450,7 @@
450
450
  let proxyUrl;
451
451
  try {
452
452
  proxyUrl = yield storeInterceptedRequest(url, method, headers, body, credentialsMode);
453
- } catch (_error) {
453
+ } catch (e) {
454
454
  return originalFetch.call(window, input, init);
455
455
  }
456
456
  const proxyResponse = yield originalFetch.call(globalThis, proxyUrl, {
@@ -427,6 +427,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
427
427
  open internal(set) var url: URL?
428
428
  open var tintColor: UIColor?
429
429
  open var allowsFileURL = true
430
+ open var downloadPreview = DownloadPreviewSupport.defaultMode
430
431
  open var allowWebViewJsVisibilityControl = false
431
432
  open var allowScreenshotsFromWebPage = false
432
433
  open var captureConsoleLogs = false
@@ -769,7 +770,8 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
769
770
 
770
771
  private func previewDownloadedFile(_ fileURL: URL, mimeType: String?, sourceURL: String?) {
771
772
  DispatchQueue.main.async {
772
- if self.allowsFileURL && self.shouldPreviewDownloadedFile(fileURL, mimeType: mimeType) {
773
+ if DownloadPreviewSupport.usesInAppBrowserPreview(self.downloadPreview) &&
774
+ self.shouldPreviewDownloadedFile(fileURL, mimeType: mimeType) {
773
775
  let accessURL = fileURL.deletingLastPathComponent()
774
776
  self.source = .file(fileURL, access: accessURL)
775
777
  self.load(file: fileURL, access: accessURL)
@@ -2346,6 +2348,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
2346
2348
  self.allowScreenshotsFromWebPage = parent.allowScreenshotsFromWebPage
2347
2349
  self.preferredContentMode = parent.preferredContentMode
2348
2350
  self.handleDownloads = parent.handleDownloads
2351
+ self.downloadPreview = parent.downloadPreview
2349
2352
  self.websiteTitleInNavigationBar = parent.websiteTitleInNavigationBar
2350
2353
  self.doneBarButtonItemPosition = parent.doneBarButtonItemPosition
2351
2354
  self.showArrowAsClose = parent.showArrowAsClose
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capgo/capacitor-inappbrowser",
3
- "version": "8.18.0",
3
+ "version": "8.19.0",
4
4
  "description": "Capacitor plugin in app browser",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",
@@ -65,28 +65,27 @@
65
65
  "@capacitor/core": "^8.0.0",
66
66
  "@capacitor/docgen": "^0.3.1",
67
67
  "@capacitor/ios": "^8.0.0",
68
- "@ionic/eslint-config": "^0.4.0",
68
+ "@ionic/eslint-config": "^0.5.0",
69
69
  "@ionic/prettier-config": "^4.0.0",
70
70
  "@ionic/swiftlint-config": "^2.0.0",
71
71
  "@types/node": "^24.10.1",
72
+ "@typescript-eslint/eslint-plugin": "^8.70.0",
73
+ "@typescript-eslint/parser": "^8.70.0",
74
+ "@typescript/typescript6": "^6.0.2",
72
75
  "esbuild": "^0.28.0",
73
- "eslint": "^8.57.1",
74
- "eslint-plugin-import": "^2.31.0",
76
+ "eslint": "^10.0.0",
75
77
  "husky": "^9.1.7",
76
- "prettier": "^3.6.2",
77
- "prettier-plugin-java": "^2.7.7",
78
+ "prettier": "3.8.4",
79
+ "prettier-plugin-java": "2.9.7",
78
80
  "rimraf": "^6.1.0",
79
81
  "rollup": "^4.53.2",
80
82
  "swiftlint": "^2.0.0",
81
- "typescript": "^5.9.3",
83
+ "typescript": "^7.0.0",
82
84
  "prettier-pretty-check": "^0.2.0"
83
85
  },
84
86
  "peerDependencies": {
85
87
  "@capacitor/core": ">=8.0.0"
86
88
  },
87
- "eslintConfig": {
88
- "extends": "@ionic/eslint-config/recommended"
89
- },
90
89
  "prettier": "@ionic/prettier-config",
91
90
  "swiftlint": {
92
91
  "excluded": [