{"version":3,"sources":["jsdelivr-header.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/social-login.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/auth-connect.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/base.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/apple-provider.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/facebook-provider.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/google-provider.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/oauth2-provider.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/twitter-provider.js","/npm/@capgo/capacitor-social-login@8.3.8/dist/esm/web.js"],"names":[],"mappings":"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","file":"/npm/@capgo/capacitor-social-login@8.3.8/dist/plugin.cjs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@capgo/capacitor-social-login@8.3.8/dist/plugin.cjs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { registerPlugin } from '@capacitor/core';\nexport const SocialLoginBase = registerPlugin('SocialLogin', {\n    web: () => import('./web').then((m) => new m.SocialLoginWeb()),\n});\n//# sourceMappingURL=social-login.js.map","var __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport { SocialLoginBase } from './social-login';\nconst AUTH_CONNECT_PROVIDERS = ['auth0', 'azure', 'cognito', 'okta', 'onelogin'];\nconst DEFAULT_SCOPES = {\n    auth0: 'openid profile email offline_access',\n    azure: 'openid profile email',\n    cognito: 'openid profile email',\n    okta: 'openid profile email offline_access',\n    onelogin: 'openid profile email',\n};\nconst DEFAULT_RESOURCE_URLS = {\n    azure: 'https://graph.microsoft.com/v1.0/me',\n};\nconst DEFAULT_AUTHORITY_HOST = 'https://login.microsoftonline.com';\nconst ensureProtocol = (value) => {\n    if (value.startsWith('http://') || value.startsWith('https://')) {\n        return value;\n    }\n    return `https://${value}`;\n};\nconst trimTrailingSlash = (value) => value.replace(/\\/+$/, '');\nconst joinUrl = (base, path) => {\n    const sanitizedBase = trimTrailingSlash(base);\n    const sanitizedPath = path.replace(/^\\/+/, '');\n    return `${sanitizedBase}/${sanitizedPath}`;\n};\nconst mergeRecords = (base, overrides) => {\n    if (!base && !overrides) {\n        return undefined;\n    }\n    return Object.assign(Object.assign({}, (base !== null && base !== void 0 ? base : {})), (overrides !== null && overrides !== void 0 ? overrides : {}));\n};\nconst validatePreset = (providerId, preset) => {\n    if (!preset.clientId) {\n        throw new Error(`[authConnect] ${providerId} requires clientId.`);\n    }\n    if (!preset.redirectUrl) {\n        throw new Error(`[authConnect] ${providerId} requires redirectUrl.`);\n    }\n};\nconst buildAuth0Config = (preset) => {\n    validatePreset('auth0', preset);\n    if (!preset.domain) {\n        throw new Error('[authConnect] auth0 requires domain.');\n    }\n    const base = trimTrailingSlash(ensureProtocol(preset.domain));\n    return buildConfigFromPreset('auth0', preset, {\n        authorizationBaseUrl: joinUrl(base, 'authorize'),\n        accessTokenEndpoint: joinUrl(base, 'oauth/token'),\n        resourceUrl: joinUrl(base, 'userinfo'),\n        logoutUrl: joinUrl(base, 'v2/logout'),\n        additionalParameters: preset.audience ? { audience: preset.audience } : undefined,\n    });\n};\nconst buildAzureConfig = (preset) => {\n    var _a, _b;\n    validatePreset('azure', preset);\n    const tenantId = (_a = preset.tenantId) !== null && _a !== void 0 ? _a : 'common';\n    const authorityHost = trimTrailingSlash(ensureProtocol((_b = preset.authorityHost) !== null && _b !== void 0 ? _b : DEFAULT_AUTHORITY_HOST));\n    const base = joinUrl(authorityHost, `${tenantId}/oauth2/v2.0`);\n    return buildConfigFromPreset('azure', preset, {\n        authorizationBaseUrl: joinUrl(base, 'authorize'),\n        accessTokenEndpoint: joinUrl(base, 'token'),\n        resourceUrl: DEFAULT_RESOURCE_URLS.azure,\n    });\n};\nconst buildCognitoConfig = (preset) => {\n    validatePreset('cognito', preset);\n    if (!preset.domain) {\n        throw new Error('[authConnect] cognito requires domain.');\n    }\n    const base = trimTrailingSlash(ensureProtocol(preset.domain));\n    return buildConfigFromPreset('cognito', preset, {\n        authorizationBaseUrl: joinUrl(base, 'oauth2/authorize'),\n        accessTokenEndpoint: joinUrl(base, 'oauth2/token'),\n        resourceUrl: joinUrl(base, 'oauth2/userInfo'),\n        logoutUrl: joinUrl(base, 'logout'),\n    });\n};\nconst buildOktaConfig = (preset) => {\n    validatePreset('okta', preset);\n    if (!preset.issuer) {\n        throw new Error('[authConnect] okta requires issuer.');\n    }\n    const base = trimTrailingSlash(ensureProtocol(preset.issuer));\n    return buildConfigFromPreset('okta', preset, {\n        authorizationBaseUrl: joinUrl(base, 'v1/authorize'),\n        accessTokenEndpoint: joinUrl(base, 'v1/token'),\n        resourceUrl: joinUrl(base, 'v1/userinfo'),\n        logoutUrl: joinUrl(base, 'v1/logout'),\n    });\n};\nconst buildOneLoginConfig = (preset) => {\n    validatePreset('onelogin', preset);\n    if (!preset.issuer) {\n        throw new Error('[authConnect] onelogin requires issuer.');\n    }\n    const base = trimTrailingSlash(ensureProtocol(preset.issuer));\n    return buildConfigFromPreset('onelogin', preset, {\n        authorizationBaseUrl: joinUrl(base, 'auth'),\n        accessTokenEndpoint: joinUrl(base, 'token'),\n        resourceUrl: joinUrl(base, 'me'),\n        logoutUrl: joinUrl(base, 'logout'),\n    });\n};\nconst buildConfigFromPreset = (providerId, preset, defaults) => {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n    const additionalParameters = mergeRecords(defaults.additionalParameters, preset.additionalParameters);\n    const additionalResourceHeaders = mergeRecords(defaults.additionalResourceHeaders, preset.additionalResourceHeaders);\n    const config = {\n        appId: preset.clientId,\n        authorizationBaseUrl: (_b = (_a = preset.authorizationBaseUrl) !== null && _a !== void 0 ? _a : defaults.authorizationBaseUrl) !== null && _b !== void 0 ? _b : '',\n        accessTokenEndpoint: (_c = preset.accessTokenEndpoint) !== null && _c !== void 0 ? _c : defaults.accessTokenEndpoint,\n        redirectUrl: preset.redirectUrl,\n        resourceUrl: (_d = preset.resourceUrl) !== null && _d !== void 0 ? _d : defaults.resourceUrl,\n        responseType: (_f = (_e = preset.responseType) !== null && _e !== void 0 ? _e : defaults.responseType) !== null && _f !== void 0 ? _f : 'code',\n        pkceEnabled: (_h = (_g = preset.pkceEnabled) !== null && _g !== void 0 ? _g : defaults.pkceEnabled) !== null && _h !== void 0 ? _h : true,\n        scope: (_k = (_j = preset.scope) !== null && _j !== void 0 ? _j : defaults.scope) !== null && _k !== void 0 ? _k : DEFAULT_SCOPES[providerId],\n        additionalParameters,\n        additionalResourceHeaders,\n        logoutUrl: (_l = preset.logoutUrl) !== null && _l !== void 0 ? _l : defaults.logoutUrl,\n        logsEnabled: (_m = preset.logsEnabled) !== null && _m !== void 0 ? _m : defaults.logsEnabled,\n    };\n    if (!config.authorizationBaseUrl) {\n        throw new Error(`[authConnect] ${providerId} authorizationBaseUrl is required.`);\n    }\n    return config;\n};\nconst buildAuthConnectProviders = (presets) => {\n    if (!presets) {\n        return {};\n    }\n    const providers = {};\n    if (presets.auth0) {\n        providers.auth0 = buildAuth0Config(presets.auth0);\n    }\n    if (presets.azure) {\n        providers.azure = buildAzureConfig(presets.azure);\n    }\n    if (presets.cognito) {\n        providers.cognito = buildCognitoConfig(presets.cognito);\n    }\n    if (presets.okta) {\n        providers.okta = buildOktaConfig(presets.okta);\n    }\n    if (presets.onelogin) {\n        providers.onelogin = buildOneLoginConfig(presets.onelogin);\n    }\n    return providers;\n};\nconst isAuthConnectProvider = (provider) => AUTH_CONNECT_PROVIDERS.includes(provider);\nconst isAuthConnectProviderOptions = (options) => isAuthConnectProvider(options.provider);\nconst isAuthConnectLoginOptions = (options) => isAuthConnectProvider(options.provider);\nconst mapLoginOptions = (options) => {\n    var _a;\n    if (isAuthConnectLoginOptions(options)) {\n        return {\n            provider: 'oauth2',\n            options: Object.assign({ providerId: options.provider }, ((_a = options.options) !== null && _a !== void 0 ? _a : {})),\n        };\n    }\n    return options;\n};\nconst mapProviderOptions = (options) => {\n    if (isAuthConnectProviderOptions(options)) {\n        return {\n            provider: 'oauth2',\n            providerId: options.provider,\n        };\n    }\n    return options;\n};\nconst mapRefreshOptions = (options) => mapLoginOptions(options);\nconst mergeOAuth2Configs = (presets, oauth2) => {\n    if (!Object.keys(presets).length && !oauth2) {\n        return oauth2;\n    }\n    return Object.assign(Object.assign({}, presets), (oauth2 !== null && oauth2 !== void 0 ? oauth2 : {}));\n};\nconst createAuthConnectClient = (client) => ({\n    initialize: async (options) => {\n        const { authConnect, oauth2 } = options, rest = __rest(options, [\"authConnect\", \"oauth2\"]);\n        const presetProviders = buildAuthConnectProviders(authConnect);\n        const mergedOauth2 = mergeOAuth2Configs(presetProviders, oauth2);\n        const payload = Object.assign(Object.assign({}, rest), (mergedOauth2 ? { oauth2: mergedOauth2 } : {}));\n        return client.initialize(payload);\n    },\n    login: async (options) => {\n        if (isAuthConnectProvider(options.provider)) {\n            const mapped = mapLoginOptions(options);\n            const response = await client.login(mapped);\n            return {\n                provider: options.provider,\n                result: response.result,\n            };\n        }\n        return client.login(options);\n    },\n    logout: async (options) => client.logout(mapProviderOptions(options)),\n    isLoggedIn: async (options) => client.isLoggedIn(mapProviderOptions(options)),\n    getAuthorizationCode: async (options) => client.getAuthorizationCode(mapProviderOptions(options)),\n    refresh: async (options) => client.refresh(mapRefreshOptions(options)),\n    providerSpecificCall: async (options) => client.providerSpecificCall(options),\n    getPluginVersion: async () => client.getPluginVersion(),\n});\nconst SocialLoginAuthConnect = createAuthConnectClient(SocialLoginBase);\nexport { createAuthConnectClient, SocialLoginAuthConnect };\n//# sourceMappingURL=auth-connect.js.map","import { WebPlugin } from '@capacitor/core';\nexport class BaseSocialLogin extends WebPlugin {\n    constructor() {\n        super();\n    }\n    parseJwt(token) {\n        const base64Url = token.split('.')[1];\n        const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n        const jsonPayload = decodeURIComponent(atob(base64)\n            .split('')\n            .map((c) => {\n            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n        })\n            .join(''));\n        return JSON.parse(jsonPayload);\n    }\n    async loadScript(src) {\n        return new Promise((resolve, reject) => {\n            const script = document.createElement('script');\n            script.src = src;\n            script.async = true;\n            script.onload = () => {\n                resolve();\n            };\n            script.onerror = reject;\n            document.body.appendChild(script);\n        });\n    }\n}\nBaseSocialLogin.OAUTH_STATE_KEY = 'social_login_oauth_pending';\n//# sourceMappingURL=base.js.map","import { BaseSocialLogin } from './base';\nexport class AppleSocialLogin extends BaseSocialLogin {\n    constructor() {\n        super(...arguments);\n        this.clientId = null;\n        this.redirectUrl = null;\n        this.scriptLoaded = false;\n        this.scriptUrl = 'https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js';\n        this.useProperTokenExchange = false;\n    }\n    async initialize(clientId, redirectUrl, useProperTokenExchange = false) {\n        this.clientId = clientId;\n        this.redirectUrl = redirectUrl || null;\n        this.useProperTokenExchange = useProperTokenExchange;\n        if (clientId) {\n            await this.loadAppleScript();\n        }\n    }\n    async login(options) {\n        if (!this.clientId) {\n            throw new Error('Apple Client ID not set. Call initialize() first.');\n        }\n        if (!this.scriptLoaded) {\n            throw new Error('Apple Sign-In script not loaded.');\n        }\n        return new Promise((resolve, reject) => {\n            var _a, _b;\n            AppleID.auth.init({\n                clientId: (_a = this.clientId) !== null && _a !== void 0 ? _a : '',\n                scope: ((_b = options.scopes) === null || _b === void 0 ? void 0 : _b.join(' ')) || 'name email',\n                redirectURI: this.redirectUrl || window.location.href,\n                state: options.state,\n                nonce: options.nonce,\n                usePopup: true,\n            });\n            AppleID.auth\n                .signIn()\n                .then((res) => {\n                var _a, _b, _c, _d, _e;\n                let accessToken = null;\n                if (this.useProperTokenExchange) {\n                    // When using proper token exchange, the authorization code should be exchanged\n                    // for a proper access token on the backend. For now, we set accessToken to null\n                    // and provide the authorization code in a separate field for backend processing.\n                    accessToken = null;\n                }\n                else {\n                    // Legacy behavior: use authorization code as access token for backward compatibility\n                    accessToken = {\n                        token: res.authorization.code || '',\n                    };\n                }\n                const result = Object.assign({ profile: {\n                        user: res.user || '',\n                        email: ((_a = res.user) === null || _a === void 0 ? void 0 : _a.email) || null,\n                        givenName: ((_c = (_b = res.user) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.firstName) || null,\n                        familyName: ((_e = (_d = res.user) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.lastName) || null,\n                    }, accessToken: accessToken, idToken: res.authorization.id_token || null }, (this.useProperTokenExchange && { authorizationCode: res.authorization.code }));\n                resolve({ provider: 'apple', result });\n            })\n                .catch((error) => {\n                reject(error);\n            });\n        });\n    }\n    async logout() {\n        // Apple doesn't provide a logout method for web\n        console.log('Apple logout: Session should be managed on the client side');\n    }\n    async isLoggedIn() {\n        // Apple doesn't provide a method to check login status on web\n        console.log('Apple login status should be managed on the client side');\n        return { isLoggedIn: false };\n    }\n    async getAuthorizationCode() {\n        // Apple authorization code should be obtained during login\n        console.log('Apple authorization code should be stored during login');\n        throw new Error('Apple authorization code not available');\n    }\n    async refresh() {\n        // Apple doesn't provide a refresh method for web\n        console.log('Apple refresh not available on web');\n    }\n    async loadAppleScript() {\n        if (this.scriptLoaded)\n            return;\n        return this.loadScript(this.scriptUrl).then(() => {\n            this.scriptLoaded = true;\n        });\n    }\n}\n//# sourceMappingURL=apple-provider.js.map","import { BaseSocialLogin } from './base';\nexport class FacebookSocialLogin extends BaseSocialLogin {\n    constructor() {\n        super(...arguments);\n        this.appId = null;\n        this.scriptLoaded = false;\n        this.locale = 'en_US';\n    }\n    async initialize(appId, locale) {\n        this.appId = appId;\n        if (locale) {\n            this.locale = locale;\n        }\n        if (appId) {\n            // Load with the specified locale or default\n            await this.loadFacebookScript(this.locale);\n            FB.init({\n                appId: this.appId,\n                version: 'v17.0',\n                xfbml: true,\n                cookie: true,\n            });\n        }\n    }\n    async login(options) {\n        if (!this.appId) {\n            throw new Error('Facebook App ID not set. Call initialize() first.');\n        }\n        return new Promise((resolve, reject) => {\n            FB.login((response) => {\n                if (response.status === 'connected') {\n                    FB.api('/me', { fields: 'id,name,email,picture' }, (userInfo) => {\n                        var _a, _b;\n                        const result = {\n                            accessToken: {\n                                token: response.authResponse.accessToken,\n                                userId: response.authResponse.userID,\n                            },\n                            profile: {\n                                userID: userInfo.id,\n                                name: userInfo.name,\n                                email: userInfo.email || null,\n                                imageURL: ((_b = (_a = userInfo.picture) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.url) || null,\n                                friendIDs: [],\n                                birthday: null,\n                                ageRange: null,\n                                gender: null,\n                                location: null,\n                                hometown: null,\n                                profileURL: null,\n                            },\n                            idToken: null,\n                        };\n                        resolve({ provider: 'facebook', result });\n                    });\n                }\n                else {\n                    reject(new Error('Facebook login failed'));\n                }\n            }, { scope: options.permissions.join(',') });\n        });\n    }\n    async logout() {\n        return new Promise((resolve) => {\n            FB.logout(() => resolve());\n        });\n    }\n    async isLoggedIn() {\n        return new Promise((resolve) => {\n            FB.getLoginStatus((response) => {\n                resolve({ isLoggedIn: response.status === 'connected' });\n            });\n        });\n    }\n    async getAuthorizationCode() {\n        return new Promise((resolve, reject) => {\n            FB.getLoginStatus((response) => {\n                var _a;\n                if (response.status === 'connected') {\n                    resolve({ accessToken: ((_a = response.authResponse) === null || _a === void 0 ? void 0 : _a.accessToken) || '' });\n                }\n                else {\n                    reject(new Error('No Facebook authorization code available'));\n                }\n            });\n        });\n    }\n    async refresh(options) {\n        await this.login(options);\n    }\n    async loadFacebookScript(locale) {\n        if (this.scriptLoaded)\n            return;\n        // Remove any existing Facebook SDK script\n        const existingScript = document.querySelector('script[src*=\"connect.facebook.net\"]');\n        if (existingScript) {\n            existingScript.remove();\n        }\n        return this.loadScript(`https://connect.facebook.net/${locale}/sdk.js`).then(() => {\n            this.scriptLoaded = true;\n        });\n    }\n}\n//# sourceMappingURL=facebook-provider.js.map","import { BaseSocialLogin } from './base';\nexport class GoogleSocialLogin extends BaseSocialLogin {\n    constructor() {\n        super(...arguments);\n        this.clientId = null;\n        this.loginType = 'online';\n        this.GOOGLE_TOKEN_REQUEST_URL = 'https://www.googleapis.com/oauth2/v3/tokeninfo';\n        this.GOOGLE_STATE_KEY = 'capgo_social_login_google_state';\n    }\n    async initialize(clientId, mode, hostedDomain, redirectUrl) {\n        this.clientId = clientId;\n        if (mode) {\n            this.loginType = mode;\n        }\n        this.hostedDomain = hostedDomain;\n        this.redirectUrl = redirectUrl;\n    }\n    async login(options) {\n        if (!this.clientId) {\n            throw new Error('Google Client ID not set. Call initialize() first.');\n        }\n        let scopes = options.scopes || [];\n        if (scopes.length > 0) {\n            // If scopes are provided, directly use the traditional OAuth flow\n            if (!scopes.includes('https://www.googleapis.com/auth/userinfo.email')) {\n                scopes.push('https://www.googleapis.com/auth/userinfo.email');\n            }\n            if (!scopes.includes('https://www.googleapis.com/auth/userinfo.profile')) {\n                scopes.push('https://www.googleapis.com/auth/userinfo.profile');\n            }\n            if (!scopes.includes('openid')) {\n                scopes.push('openid');\n            }\n        }\n        else {\n            scopes = [\n                'https://www.googleapis.com/auth/userinfo.email',\n                'https://www.googleapis.com/auth/userinfo.profile',\n                'openid',\n            ];\n        }\n        const nonce = options.nonce || Math.random().toString(36).substring(2);\n        // If scopes are provided, directly use the traditional OAuth flow\n        return this.traditionalOAuth({\n            scopes,\n            nonce,\n            hostedDomain: this.hostedDomain,\n            prompt: options.prompt,\n        });\n    }\n    async logout() {\n        if (this.loginType === 'offline') {\n            return Promise.reject(\"Offline login doesn't store tokens. logout is not available\");\n        }\n        // eslint-disable-next-line\n        const state = this.getGoogleState();\n        if (!state)\n            return;\n        await this.rawLogoutGoogle(state.accessToken);\n    }\n    async isLoggedIn() {\n        if (this.loginType === 'offline') {\n            return Promise.reject(\"Offline login doesn't store tokens. isLoggedIn is not available\");\n        }\n        // eslint-disable-next-line\n        const state = this.getGoogleState();\n        if (!state)\n            return { isLoggedIn: false };\n        try {\n            const isValidAccessToken = await this.accessTokenIsValid(state.accessToken);\n            const isValidIdToken = this.idTokenValid(state.idToken);\n            if (isValidAccessToken && isValidIdToken) {\n                return { isLoggedIn: true };\n            }\n            else {\n                try {\n                    await this.rawLogoutGoogle(state.accessToken, false);\n                }\n                catch (e) {\n                    console.error('Access token is not valid, but cannot logout', e);\n                }\n                return { isLoggedIn: false };\n            }\n        }\n        catch (e) {\n            return Promise.reject(e);\n        }\n    }\n    async getAuthorizationCode() {\n        if (this.loginType === 'offline') {\n            return Promise.reject(\"Offline login doesn't store tokens. getAuthorizationCode is not available\");\n        }\n        // eslint-disable-next-line\n        const state = this.getGoogleState();\n        if (!state)\n            throw new Error('No Google authorization code available');\n        try {\n            const isValidAccessToken = await this.accessTokenIsValid(state.accessToken);\n            const isValidIdToken = this.idTokenValid(state.idToken);\n            if (isValidAccessToken && isValidIdToken) {\n                return { accessToken: state.accessToken, jwt: state.idToken };\n            }\n            else {\n                try {\n                    await this.rawLogoutGoogle(state.accessToken, false);\n                }\n                catch (e) {\n                    console.error('Access token is not valid, but cannot logout', e);\n                }\n                throw new Error('No Google authorization code available');\n            }\n        }\n        catch (e) {\n            return Promise.reject(e);\n        }\n    }\n    async refresh() {\n        // For Google, we can prompt for re-authentication\n        return Promise.reject('Not implemented');\n    }\n    handleOAuthRedirect(url) {\n        const paramsRaw = url.searchParams;\n        // Check for errors in search params first (for offline mode)\n        const errorInParams = paramsRaw.get('error');\n        if (errorInParams) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            const errorDescription = paramsRaw.get('error_description') || errorInParams;\n            return { error: errorDescription };\n        }\n        const code = paramsRaw.get('code');\n        if (code && paramsRaw.has('scope')) {\n            return {\n                provider: 'google',\n                result: {\n                    serverAuthCode: code,\n                    responseType: 'offline',\n                },\n            };\n        }\n        const hash = url.hash.substring(1);\n        console.log('handleOAuthRedirect', url.hash);\n        if (!hash)\n            return null;\n        const params = new URLSearchParams(hash);\n        // Check for error cases in hash (e.g., user cancelled)\n        const error = params.get('error');\n        if (error) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            const errorDescription = params.get('error_description') || error;\n            return { error: errorDescription };\n        }\n        console.log('handleOAuthRedirect ok');\n        const accessToken = params.get('access_token');\n        const idToken = params.get('id_token');\n        if (accessToken && idToken) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            const profile = this.parseJwt(idToken);\n            return {\n                provider: 'google',\n                result: {\n                    accessToken: {\n                        token: accessToken,\n                    },\n                    idToken,\n                    profile: {\n                        email: profile.email || null,\n                        familyName: profile.family_name || null,\n                        givenName: profile.given_name || null,\n                        id: profile.sub || null,\n                        name: profile.name || null,\n                        imageUrl: profile.picture || null,\n                    },\n                    responseType: 'online',\n                },\n            };\n        }\n        return null;\n    }\n    async accessTokenIsValid(accessToken) {\n        const url = `${this.GOOGLE_TOKEN_REQUEST_URL}?access_token=${encodeURIComponent(accessToken)}`;\n        try {\n            // Make the GET request using fetch\n            const response = await fetch(url);\n            // Check if the response is successful\n            if (!response.ok) {\n                console.log(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response not successful. Status code: ${response.status}. Assuming that the token is not valid`);\n                return false;\n            }\n            // Get the response body as text\n            const responseBody = await response.text();\n            if (!responseBody) {\n                console.error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`);\n                throw new Error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`);\n            }\n            // Parse the response body as JSON\n            let jsonObject;\n            try {\n                jsonObject = JSON.parse(responseBody);\n            }\n            catch (e) {\n                console.error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${e}`);\n                throw new Error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${e}`);\n            }\n            // Extract the 'expires_in' field\n            const expiresInStr = jsonObject['expires_in'];\n            if (expiresInStr === undefined || expiresInStr === null) {\n                console.error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`);\n                throw new Error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`);\n            }\n            // Parse 'expires_in' as an integer\n            let expiresInInt;\n            try {\n                expiresInInt = parseInt(expiresInStr, 10);\n                if (isNaN(expiresInInt)) {\n                    throw new Error(`'expires_in' is not a valid integer`);\n                }\n            }\n            catch (e) {\n                console.error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${expiresInStr} is not a valid integer. Error: ${e}`);\n                throw new Error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${expiresInStr} is not a valid integer. Error: ${e}`);\n            }\n            // Determine if the access token is valid based on 'expires_in'\n            return expiresInInt > 5;\n        }\n        catch (error) {\n            console.error(error);\n            throw error;\n        }\n    }\n    idTokenValid(idToken) {\n        try {\n            const parsed = this.parseJwt(idToken);\n            const currentTime = Math.ceil(Date.now() / 1000) + 5; // Convert current time to seconds since epoch\n            return parsed.exp && currentTime < parsed.exp;\n        }\n        catch (e) {\n            return false;\n        }\n    }\n    async rawLogoutGoogle(accessToken, tokenValid = null) {\n        if (tokenValid === null) {\n            tokenValid = await this.accessTokenIsValid(accessToken);\n        }\n        if (tokenValid === true) {\n            try {\n                await fetch(`https://accounts.google.com/o/oauth2/revoke?token=${encodeURIComponent(accessToken)}`);\n                this.clearStateGoogle();\n            }\n            catch (e) {\n                // ignore\n            }\n            return;\n        }\n        else {\n            this.clearStateGoogle();\n            return;\n        }\n    }\n    persistStateGoogle(accessToken, idToken) {\n        try {\n            window.localStorage.setItem(this.GOOGLE_STATE_KEY, JSON.stringify({ accessToken, idToken }));\n        }\n        catch (e) {\n            console.error('Cannot persist state google', e);\n        }\n    }\n    clearStateGoogle() {\n        try {\n            window.localStorage.removeItem(this.GOOGLE_STATE_KEY);\n        }\n        catch (e) {\n            console.error('Cannot clear state google', e);\n        }\n    }\n    getGoogleState() {\n        try {\n            const state = window.localStorage.getItem(this.GOOGLE_STATE_KEY);\n            if (!state)\n                return null;\n            const { accessToken, idToken } = JSON.parse(state);\n            return { accessToken, idToken };\n        }\n        catch (e) {\n            console.error('Cannot get state google', e);\n            return null;\n        }\n    }\n    async traditionalOAuth({ scopes, hostedDomain, nonce, prompt, }) {\n        var _a;\n        const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];\n        const params = new URLSearchParams(Object.assign(Object.assign({ client_id: (_a = this.clientId) !== null && _a !== void 0 ? _a : '', redirect_uri: this.redirectUrl || window.location.origin + window.location.pathname, response_type: this.loginType === 'offline' ? 'code' : 'token id_token', scope: uniqueScopes.join(' ') }, (nonce && { nonce })), { include_granted_scopes: 'true', state: 'popup' }));\n        if (hostedDomain !== undefined) {\n            params.append('hd', hostedDomain);\n        }\n        if (prompt !== undefined) {\n            params.append('prompt', prompt);\n        }\n        const url = `https://accounts.google.com/o/oauth2/v2/auth?${params.toString()}`;\n        const width = 500;\n        const height = 600;\n        const left = window.screenX + (window.outerWidth - width) / 2;\n        const top = window.screenY + (window.outerHeight - height) / 2;\n        localStorage.setItem(BaseSocialLogin.OAUTH_STATE_KEY, JSON.stringify({ provider: 'google', loginType: this.loginType, nonce }));\n        const popup = window.open(url, 'Google Sign In', `width=${width},height=${height},left=${left},top=${top},popup=1`);\n        let popupClosedInterval;\n        let timeoutHandle;\n        // Use BroadcastChannel for cross-origin communication (works when postMessage doesn't)\n        const channelName = `google_oauth_${nonce || Date.now()}`;\n        let broadcastChannel = null;\n        try {\n            broadcastChannel = new BroadcastChannel(channelName);\n        }\n        catch (_b) {\n            // BroadcastChannel not supported, fall back to postMessage only\n        }\n        // This may never return...\n        return new Promise((resolve, reject) => {\n            if (!popup) {\n                reject(new Error('Failed to open popup'));\n                return;\n            }\n            const cleanup = () => {\n                window.removeEventListener('message', handleMessage);\n                clearInterval(popupClosedInterval);\n                clearTimeout(timeoutHandle);\n                if (broadcastChannel) {\n                    broadcastChannel.close();\n                }\n            };\n            const processOAuthResponse = (data) => {\n                if (this.loginType === 'online') {\n                    const { accessToken, idToken } = data;\n                    if (accessToken && idToken) {\n                        const profile = this.parseJwt(idToken);\n                        this.persistStateGoogle(accessToken.token, idToken);\n                        resolve({\n                            provider: 'google',\n                            result: {\n                                accessToken: {\n                                    token: accessToken.token,\n                                },\n                                idToken,\n                                profile: {\n                                    email: profile.email || null,\n                                    familyName: profile.family_name || null,\n                                    givenName: profile.given_name || null,\n                                    id: profile.sub || null,\n                                    name: profile.name || null,\n                                    imageUrl: profile.picture || null,\n                                },\n                                responseType: 'online',\n                            },\n                        });\n                    }\n                    else {\n                        reject(new Error('Invalid OAuth response: missing accessToken or idToken'));\n                    }\n                }\n                else {\n                    const { serverAuthCode } = data;\n                    if (!serverAuthCode) {\n                        reject(new Error('Invalid OAuth response: missing serverAuthCode'));\n                        return;\n                    }\n                    resolve({\n                        provider: 'google',\n                        result: {\n                            responseType: 'offline',\n                            serverAuthCode,\n                        },\n                    });\n                }\n            };\n            const handleMessage = (event) => {\n                var _a, _b, _c, _d;\n                if (event.origin !== window.location.origin || ((_b = (_a = event.data) === null || _a === void 0 ? void 0 : _a.source) === null || _b === void 0 ? void 0 : _b.startsWith('angular')))\n                    return;\n                if (((_c = event.data) === null || _c === void 0 ? void 0 : _c.type) === 'oauth-response') {\n                    cleanup();\n                    processOAuthResponse(event.data);\n                }\n                else if (((_d = event.data) === null || _d === void 0 ? void 0 : _d.type) === 'oauth-error') {\n                    cleanup();\n                    const errorMessage = event.data.error || 'User cancelled the OAuth flow';\n                    reject(new Error(errorMessage));\n                }\n                // Don't reject for non-OAuth messages, just ignore them\n            };\n            // Listen for BroadcastChannel messages\n            if (broadcastChannel) {\n                broadcastChannel.onmessage = (event) => {\n                    var _a;\n                    const data = event.data;\n                    if ((_a = data === null || data === void 0 ? void 0 : data.source) === null || _a === void 0 ? void 0 : _a.toString().startsWith('angular'))\n                        return;\n                    if ((data === null || data === void 0 ? void 0 : data.type) === 'oauth-response') {\n                        cleanup();\n                        processOAuthResponse(data);\n                    }\n                    else if ((data === null || data === void 0 ? void 0 : data.type) === 'oauth-error') {\n                        cleanup();\n                        const errorMessage = data.error || 'User cancelled the OAuth flow';\n                        reject(new Error(errorMessage));\n                    }\n                };\n            }\n            window.addEventListener('message', handleMessage);\n            // Timeout after 5 minutes\n            timeoutHandle = setTimeout(() => {\n                cleanup();\n                try {\n                    popup.close();\n                }\n                catch (_a) {\n                    // Ignore cross-origin errors when closing\n                }\n                reject(new Error('OAuth timeout'));\n            }, 300000);\n            popupClosedInterval = setInterval(() => {\n                try {\n                    // Check if popup is closed - this may throw cross-origin errors for some providers\n                    if (popup.closed) {\n                        cleanup();\n                        reject(new Error('Popup closed'));\n                    }\n                }\n                catch (_a) {\n                    // Cross-origin error when checking popup.closed - this happens when the popup\n                    // navigates to a third-party OAuth provider with strict security settings.\n                    // We can't detect if the window was closed, so we rely on timeout and message handlers.\n                    clearInterval(popupClosedInterval);\n                }\n            }, 1000);\n        });\n    }\n}\n//# sourceMappingURL=google-provider.js.map","var __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport { BaseSocialLogin } from './base';\n/**\n * OAuth2 Social Login Manager\n * Supports multiple OAuth2 provider configurations\n */\nexport class OAuth2SocialLogin extends BaseSocialLogin {\n    constructor() {\n        super(...arguments);\n        this.providers = new Map();\n        this.TOKENS_KEY_PREFIX = 'capgo_social_login_oauth2_tokens_';\n        this.STATE_PREFIX = 'capgo_social_login_oauth2_state_';\n    }\n    normalizeScopeValue(scope) {\n        if (!scope)\n            return '';\n        if (typeof scope === 'string')\n            return scope;\n        if (Array.isArray(scope))\n            return scope.filter(Boolean).join(' ');\n        return '';\n    }\n    normalizeConfig(providerId, config) {\n        var _a, _b, _c, _d, _e, _f, _g, _h;\n        const appId = (_a = config.appId) !== null && _a !== void 0 ? _a : config.clientId;\n        const authorizationBaseUrl = (_b = config.authorizationBaseUrl) !== null && _b !== void 0 ? _b : config.authorizationEndpoint;\n        const accessTokenEndpoint = (_c = config.accessTokenEndpoint) !== null && _c !== void 0 ? _c : config.tokenEndpoint;\n        const logoutUrl = (_d = config.logoutUrl) !== null && _d !== void 0 ? _d : config.endSessionEndpoint;\n        const scopeSource = (_e = config.scope) !== null && _e !== void 0 ? _e : config.scopes;\n        if (!appId) {\n            throw new Error(`OAuth2 provider '${providerId}' requires appId (or clientId).`);\n        }\n        if (!config.redirectUrl) {\n            throw new Error(`OAuth2 provider '${providerId}' requires redirectUrl.`);\n        }\n        if (!authorizationBaseUrl && !config.issuerUrl) {\n            throw new Error(`OAuth2 provider '${providerId}' requires authorizationBaseUrl (or authorizationEndpoint) or issuerUrl.`);\n        }\n        return {\n            appId,\n            issuerUrl: config.issuerUrl,\n            authorizationBaseUrl,\n            accessTokenEndpoint,\n            redirectUrl: config.redirectUrl,\n            resourceUrl: config.resourceUrl,\n            responseType: ((_f = config.responseType) !== null && _f !== void 0 ? _f : 'code'),\n            pkceEnabled: (_g = config.pkceEnabled) !== null && _g !== void 0 ? _g : true,\n            scope: this.normalizeScopeValue(scopeSource),\n            additionalParameters: config.additionalParameters,\n            loginHint: config.loginHint,\n            prompt: config.prompt,\n            additionalTokenParameters: config.additionalTokenParameters,\n            additionalResourceHeaders: config.additionalResourceHeaders,\n            logoutUrl,\n            postLogoutRedirectUrl: config.postLogoutRedirectUrl,\n            additionalLogoutParameters: config.additionalLogoutParameters,\n            logsEnabled: (_h = config.logsEnabled) !== null && _h !== void 0 ? _h : false,\n        };\n    }\n    async ensureDiscovered(providerId) {\n        const config = this.providers.get(providerId);\n        if (!(config === null || config === void 0 ? void 0 : config.issuerUrl))\n            return;\n        // Resolve endpoints lazily.\n        if (config.authorizationBaseUrl && config.accessTokenEndpoint)\n            return;\n        const issuer = config.issuerUrl.replace(/\\/+$/, '');\n        const discoveryUrl = `${issuer}/.well-known/openid-configuration`;\n        const resp = await fetch(discoveryUrl);\n        if (!resp.ok) {\n            const text = await resp.text().catch(() => '');\n            throw new Error(`OAuth2 discovery failed (${resp.status}): ${text || discoveryUrl}`);\n        }\n        const payload = (await resp.json());\n        const authorizationEndpoint = payload['authorization_endpoint'];\n        const tokenEndpoint = payload['token_endpoint'];\n        const endSessionEndpoint = payload['end_session_endpoint'];\n        if (!config.authorizationBaseUrl && typeof authorizationEndpoint === 'string') {\n            config.authorizationBaseUrl = authorizationEndpoint;\n        }\n        if (!config.accessTokenEndpoint && typeof tokenEndpoint === 'string') {\n            config.accessTokenEndpoint = tokenEndpoint;\n        }\n        if (!config.logoutUrl && typeof endSessionEndpoint === 'string') {\n            config.logoutUrl = endSessionEndpoint;\n        }\n        if (config.logsEnabled) {\n            console.log(`[OAuth2:${providerId}] Discovery resolved`, {\n                authorizationBaseUrl: config.authorizationBaseUrl,\n                accessTokenEndpoint: config.accessTokenEndpoint,\n                logoutUrl: config.logoutUrl,\n            });\n        }\n    }\n    /**\n     * Initialize multiple OAuth2 providers\n     */\n    async initializeProviders(configs) {\n        for (const [providerId, config] of Object.entries(configs)) {\n            const internalConfig = this.normalizeConfig(providerId, config);\n            this.providers.set(providerId, internalConfig);\n            if (internalConfig.logsEnabled) {\n                console.log(`[OAuth2:${providerId}] Initialized with config:`, {\n                    appId: internalConfig.appId,\n                    issuerUrl: internalConfig.issuerUrl,\n                    authorizationBaseUrl: internalConfig.authorizationBaseUrl,\n                    redirectUrl: internalConfig.redirectUrl,\n                    responseType: internalConfig.responseType,\n                    pkceEnabled: internalConfig.pkceEnabled,\n                });\n            }\n            // Pre-resolve discovery on web if issuerUrl is provided.\n            await this.ensureDiscovered(providerId);\n        }\n    }\n    getProvider(providerId) {\n        const config = this.providers.get(providerId);\n        if (!config) {\n            throw new Error(`OAuth2 provider '${providerId}' not configured. Call initialize() first.`);\n        }\n        return config;\n    }\n    getTokensKey(providerId) {\n        return `${this.TOKENS_KEY_PREFIX}${providerId}`;\n    }\n    async login(options) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n        const { providerId } = options;\n        const config = this.getProvider(providerId);\n        await this.ensureDiscovered(providerId);\n        const redirectUri = (_a = options.redirectUrl) !== null && _a !== void 0 ? _a : config.redirectUrl;\n        const scope = this.normalizeScopeValue((_c = (_b = options.scope) !== null && _b !== void 0 ? _b : options.scopes) !== null && _c !== void 0 ? _c : config.scope);\n        const state = (_d = options.state) !== null && _d !== void 0 ? _d : this.generateState();\n        const codeVerifier = (_e = options.codeVerifier) !== null && _e !== void 0 ? _e : this.generateCodeVerifier();\n        // Build authorization URL\n        const params = new URLSearchParams({\n            response_type: config.responseType,\n            client_id: config.appId,\n            redirect_uri: redirectUri,\n            state,\n        });\n        if (scope) {\n            params.set('scope', scope);\n        }\n        // Convenience OIDC options\n        const mergedAdditionalParams = Object.assign(Object.assign({}, ((_f = config.additionalParameters) !== null && _f !== void 0 ? _f : {})), ((_g = options.additionalParameters) !== null && _g !== void 0 ? _g : {}));\n        const loginHint = (_h = options.loginHint) !== null && _h !== void 0 ? _h : config.loginHint;\n        const prompt = (_j = options.prompt) !== null && _j !== void 0 ? _j : config.prompt;\n        if (loginHint && !('login_hint' in mergedAdditionalParams)) {\n            mergedAdditionalParams.login_hint = loginHint;\n        }\n        if (prompt && !('prompt' in mergedAdditionalParams)) {\n            mergedAdditionalParams.prompt = prompt;\n        }\n        // Add PKCE for code flow\n        if (config.responseType === 'code' && config.pkceEnabled) {\n            const codeChallenge = await this.generateCodeChallenge(codeVerifier);\n            params.set('code_challenge', codeChallenge);\n            params.set('code_challenge_method', 'S256');\n        }\n        // Add merged additional parameters\n        for (const [key, value] of Object.entries(mergedAdditionalParams)) {\n            if (value !== undefined) {\n                params.set(key, value);\n            }\n        }\n        // Store pending login state\n        this.persistPendingLogin(state, {\n            providerId,\n            codeVerifier,\n            redirectUri,\n            scope,\n        });\n        localStorage.setItem(BaseSocialLogin.OAUTH_STATE_KEY, JSON.stringify({ provider: 'oauth2', providerId, state }));\n        if (!config.authorizationBaseUrl) {\n            throw new Error(`OAuth2 provider '${providerId}' is missing authorizationBaseUrl (discovery may have failed).`);\n        }\n        const authUrl = `${config.authorizationBaseUrl}?${params.toString()}`;\n        if (config.logsEnabled) {\n            console.log(`[OAuth2:${providerId}] Opening authorization URL:`, authUrl);\n        }\n        if (options.flow === 'redirect') {\n            // Trigger a full-page redirect. The promise will not resolve because the page navigates away.\n            window.location.assign(authUrl);\n            // eslint-disable-next-line @typescript-eslint/no-empty-function\n            return new Promise(() => { });\n        }\n        // Open popup window\n        const width = 500;\n        const height = 650;\n        const left = window.screenX + (window.outerWidth - width) / 2;\n        const top = window.screenY + (window.outerHeight - height) / 2;\n        const popup = window.open(authUrl, 'OAuth2Login', `width=${width},height=${height},left=${left},top=${top},popup=1`);\n        return new Promise((resolve, reject) => {\n            if (!popup) {\n                reject(new Error('Unable to open login window. Please allow popups.'));\n                return;\n            }\n            // Use BroadcastChannel for cross-origin communication (works when postMessage doesn't)\n            const channelName = `oauth2_${state}`;\n            let broadcastChannel = null;\n            try {\n                broadcastChannel = new BroadcastChannel(channelName);\n            }\n            catch (_a) {\n                // BroadcastChannel not supported, fall back to postMessage only\n                if (config.logsEnabled) {\n                    console.log(`[OAuth2:${providerId}] BroadcastChannel not supported, using postMessage only`);\n                }\n            }\n            const cleanup = (messageHandler, timeoutHandle, intervalHandle) => {\n                window.removeEventListener('message', messageHandler);\n                clearTimeout(timeoutHandle);\n                clearInterval(intervalHandle);\n                if (broadcastChannel) {\n                    broadcastChannel.close();\n                }\n            };\n            const handleOAuthMessage = (data) => {\n                if ((data === null || data === void 0 ? void 0 : data.type) === 'oauth-response') {\n                    if ((data === null || data === void 0 ? void 0 : data.provider) && data.provider !== 'oauth2') {\n                        return false;\n                    }\n                    // Check providerId matches if present\n                    if ((data === null || data === void 0 ? void 0 : data.providerId) && data.providerId !== providerId) {\n                        return false;\n                    }\n                    cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n                    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n                    const _a = data, { provider: _ignoredProvider, type: _ignoredType } = _a, payload = __rest(_a, [\"provider\", \"type\"]);\n                    resolve({\n                        provider: 'oauth2',\n                        result: payload,\n                    });\n                    return true;\n                }\n                else if ((data === null || data === void 0 ? void 0 : data.type) === 'oauth-error') {\n                    if ((data === null || data === void 0 ? void 0 : data.provider) && data.provider !== 'oauth2') {\n                        return false;\n                    }\n                    cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n                    reject(new Error(data.error || 'OAuth2 login was cancelled.'));\n                    return true;\n                }\n                return false;\n            };\n            // Listen for BroadcastChannel messages\n            if (broadcastChannel) {\n                broadcastChannel.onmessage = (event) => {\n                    handleOAuthMessage(event.data);\n                };\n            }\n            const messageHandler = (event) => {\n                if (event.origin !== window.location.origin) {\n                    return;\n                }\n                handleOAuthMessage(event.data);\n            };\n            window.addEventListener('message', messageHandler);\n            const timeoutHandle = window.setTimeout(() => {\n                cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n                try {\n                    popup.close();\n                }\n                catch (_a) {\n                    // Ignore cross-origin errors when closing\n                }\n                reject(new Error('OAuth2 login timed out.'));\n            }, 300000);\n            const popupClosedInterval = window.setInterval(() => {\n                try {\n                    // Check if popup is closed - this may throw cross-origin errors for some providers\n                    if (popup.closed) {\n                        cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n                        reject(new Error('OAuth2 login window was closed.'));\n                    }\n                }\n                catch (_a) {\n                    // Cross-origin error when checking popup.closed - this happens when the popup\n                    // navigates to a third-party OAuth provider with strict security settings.\n                    // We can't detect if the window was closed, so we just rely on the timeout\n                    // and message handlers. Clear the interval to avoid repeated errors.\n                    clearInterval(popupClosedInterval);\n                    if (config.logsEnabled) {\n                        console.log(`[OAuth2:${providerId}] Cannot check popup.closed due to cross-origin restrictions. ` +\n                            'Relying on message handlers and timeout.');\n                    }\n                }\n            }, 1000);\n        });\n    }\n    async logout(providerId) {\n        await this.ensureDiscovered(providerId);\n        const config = this.providers.get(providerId);\n        const stored = this.getStoredTokens(providerId);\n        localStorage.removeItem(this.getTokensKey(providerId));\n        // If logout URL is configured, build an end-session URL (OIDC) when possible.\n        if (config === null || config === void 0 ? void 0 : config.logoutUrl) {\n            try {\n                const url = new URL(config.logoutUrl);\n                if (stored === null || stored === void 0 ? void 0 : stored.idToken) {\n                    url.searchParams.set('id_token_hint', stored.idToken);\n                }\n                const postLogout = config.postLogoutRedirectUrl;\n                if (postLogout) {\n                    url.searchParams.set('post_logout_redirect_uri', postLogout);\n                }\n                if (config.additionalLogoutParameters) {\n                    for (const [k, v] of Object.entries(config.additionalLogoutParameters)) {\n                        url.searchParams.set(k, v);\n                    }\n                }\n                window.open(url.toString(), '_blank');\n            }\n            catch (_a) {\n                window.open(config.logoutUrl, '_blank');\n            }\n        }\n    }\n    async isLoggedIn(providerId) {\n        const tokens = this.getStoredTokens(providerId);\n        if (!tokens) {\n            return { isLoggedIn: false };\n        }\n        const isValid = tokens.expiresAt > Date.now();\n        if (!isValid) {\n            localStorage.removeItem(this.getTokensKey(providerId));\n        }\n        return { isLoggedIn: isValid };\n    }\n    async getAuthorizationCode(providerId) {\n        const tokens = this.getStoredTokens(providerId);\n        if (!tokens) {\n            throw new Error(`OAuth2 access token is not available for provider '${providerId}'.`);\n        }\n        return {\n            accessToken: tokens.accessToken,\n            jwt: tokens.idToken,\n        };\n    }\n    async refresh(providerId) {\n        await this.refreshToken(providerId);\n    }\n    async refreshToken(providerId, refreshToken, additionalParameters) {\n        var _a, _b, _c, _d, _e, _f;\n        await this.ensureDiscovered(providerId);\n        const config = this.getProvider(providerId);\n        const stored = this.getStoredTokens(providerId);\n        const effectiveRefreshToken = refreshToken !== null && refreshToken !== void 0 ? refreshToken : stored === null || stored === void 0 ? void 0 : stored.refreshToken;\n        if (!effectiveRefreshToken) {\n            throw new Error(`No OAuth2 refresh token is available for provider '${providerId}'. Include offline_access scope to receive one.`);\n        }\n        if (!config.accessTokenEndpoint) {\n            throw new Error(`No accessTokenEndpoint configured for provider '${providerId}'.`);\n        }\n        const tokenResponse = await this.refreshWithRefreshToken(providerId, effectiveRefreshToken, additionalParameters);\n        const expiresAt = tokenResponse.expires_in ? Date.now() + tokenResponse.expires_in * 1000 : Date.now() + 3600000;\n        const scopeArray = (_c = (_b = (_a = tokenResponse.scope) === null || _a === void 0 ? void 0 : _a.split(' ').filter(Boolean)) !== null && _b !== void 0 ? _b : stored === null || stored === void 0 ? void 0 : stored.scope) !== null && _c !== void 0 ? _c : [];\n        // Fetch resource data if configured\n        let resourceData = null;\n        if (config.resourceUrl) {\n            resourceData = await this.fetchResource(providerId, tokenResponse.access_token);\n        }\n        const nextRefreshToken = (_d = tokenResponse.refresh_token) !== null && _d !== void 0 ? _d : effectiveRefreshToken;\n        this.persistTokens(providerId, {\n            accessToken: tokenResponse.access_token,\n            refreshToken: nextRefreshToken,\n            idToken: tokenResponse.id_token,\n            expiresAt,\n            scope: scopeArray,\n            tokenType: tokenResponse.token_type,\n        });\n        return {\n            providerId,\n            accessToken: {\n                token: tokenResponse.access_token,\n                tokenType: tokenResponse.token_type,\n                expires: new Date(expiresAt).toISOString(),\n                refreshToken: nextRefreshToken,\n            },\n            idToken: (_e = tokenResponse.id_token) !== null && _e !== void 0 ? _e : null,\n            refreshToken: nextRefreshToken !== null && nextRefreshToken !== void 0 ? nextRefreshToken : null,\n            resourceData,\n            scope: scopeArray,\n            tokenType: tokenResponse.token_type,\n            expiresIn: (_f = tokenResponse.expires_in) !== null && _f !== void 0 ? _f : null,\n        };\n    }\n    async handleOAuthRedirect(url, expectedState) {\n        var _a, _b, _c, _d, _e;\n        // Check both query params and hash fragment\n        const params = new URLSearchParams(url.search);\n        const hashParams = new URLSearchParams(url.hash.slice(1));\n        // Merge params, hash takes priority (for implicit flow)\n        hashParams.forEach((value, key) => {\n            params.set(key, value);\n        });\n        const stateFromUrl = expectedState !== null && expectedState !== void 0 ? expectedState : params.get('state');\n        if (!stateFromUrl) {\n            return null;\n        }\n        const pending = this.consumePendingLogin(stateFromUrl);\n        if (!pending) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            return { error: 'OAuth2 login session expired or state mismatch.' };\n        }\n        const { providerId } = pending;\n        await this.ensureDiscovered(providerId);\n        const config = this.providers.get(providerId);\n        if (!config) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            return { error: `OAuth2 provider '${providerId}' configuration not found.` };\n        }\n        const error = params.get('error');\n        if (error) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            return { error: params.get('error_description') || error };\n        }\n        try {\n            let tokenResponse;\n            // Check response type\n            if (params.has('code')) {\n                // Authorization code flow\n                const code = params.get('code');\n                if (!code) {\n                    localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n                    return { error: 'OAuth2 authorization code missing from redirect.' };\n                }\n                tokenResponse = await this.exchangeAuthorizationCode(providerId, code, pending);\n            }\n            else if (params.has('access_token')) {\n                // Implicit flow\n                tokenResponse = {\n                    access_token: params.get('access_token'),\n                    token_type: params.get('token_type') || 'bearer',\n                    expires_in: params.has('expires_in') ? parseInt(params.get('expires_in'), 10) : undefined,\n                    scope: params.get('scope') || undefined,\n                    id_token: params.get('id_token') || undefined,\n                };\n            }\n            else {\n                localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n                return { error: 'No authorization code or access token in redirect.' };\n            }\n            const expiresAt = tokenResponse.expires_in ? Date.now() + tokenResponse.expires_in * 1000 : Date.now() + 3600000;\n            const scopeArray = (_b = (_a = tokenResponse.scope) === null || _a === void 0 ? void 0 : _a.split(' ').filter(Boolean)) !== null && _b !== void 0 ? _b : [];\n            // Fetch resource data if configured\n            let resourceData = null;\n            if (config.resourceUrl) {\n                resourceData = await this.fetchResource(providerId, tokenResponse.access_token);\n            }\n            this.persistTokens(providerId, {\n                accessToken: tokenResponse.access_token,\n                refreshToken: tokenResponse.refresh_token,\n                idToken: tokenResponse.id_token,\n                expiresAt,\n                scope: scopeArray,\n                tokenType: tokenResponse.token_type,\n            });\n            return {\n                provider: 'oauth2',\n                result: {\n                    providerId,\n                    accessToken: {\n                        token: tokenResponse.access_token,\n                        tokenType: tokenResponse.token_type,\n                        expires: new Date(expiresAt).toISOString(),\n                        refreshToken: tokenResponse.refresh_token,\n                    },\n                    idToken: (_c = tokenResponse.id_token) !== null && _c !== void 0 ? _c : null,\n                    refreshToken: (_d = tokenResponse.refresh_token) !== null && _d !== void 0 ? _d : null,\n                    resourceData,\n                    scope: scopeArray,\n                    tokenType: tokenResponse.token_type,\n                    expiresIn: (_e = tokenResponse.expires_in) !== null && _e !== void 0 ? _e : null,\n                },\n            };\n        }\n        catch (err) {\n            if (err instanceof Error) {\n                return { error: err.message };\n            }\n            return { error: 'OAuth2 login failed unexpectedly.' };\n        }\n        finally {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n        }\n    }\n    async exchangeAuthorizationCode(providerId, code, pending) {\n        const config = this.getProvider(providerId);\n        if (!config.accessTokenEndpoint) {\n            throw new Error(`No accessTokenEndpoint configured for provider '${providerId}'.`);\n        }\n        const params = new URLSearchParams({\n            grant_type: 'authorization_code',\n            client_id: config.appId,\n            code,\n            redirect_uri: pending.redirectUri,\n        });\n        if (config.pkceEnabled) {\n            params.set('code_verifier', pending.codeVerifier);\n        }\n        if (config.additionalTokenParameters) {\n            for (const [k, v] of Object.entries(config.additionalTokenParameters)) {\n                params.set(k, v);\n            }\n        }\n        if (config.logsEnabled) {\n            console.log(`[OAuth2:${providerId}] Exchanging code at:`, config.accessTokenEndpoint);\n        }\n        const response = await fetch(config.accessTokenEndpoint, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/x-www-form-urlencoded',\n            },\n            body: params.toString(),\n        });\n        if (!response.ok) {\n            const text = await response.text();\n            throw new Error(`OAuth2 token exchange failed (${response.status}): ${text}`);\n        }\n        return (await response.json());\n    }\n    async refreshWithRefreshToken(providerId, refreshToken, additionalParameters) {\n        const config = this.getProvider(providerId);\n        if (!config.accessTokenEndpoint) {\n            throw new Error(`No accessTokenEndpoint configured for provider '${providerId}'.`);\n        }\n        const params = new URLSearchParams({\n            grant_type: 'refresh_token',\n            refresh_token: refreshToken,\n            client_id: config.appId,\n        });\n        if (config.additionalTokenParameters) {\n            for (const [k, v] of Object.entries(config.additionalTokenParameters)) {\n                params.set(k, v);\n            }\n        }\n        if (additionalParameters) {\n            for (const [k, v] of Object.entries(additionalParameters)) {\n                params.set(k, v);\n            }\n        }\n        const response = await fetch(config.accessTokenEndpoint, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/x-www-form-urlencoded',\n            },\n            body: params.toString(),\n        });\n        if (!response.ok) {\n            const text = await response.text();\n            throw new Error(`OAuth2 refresh failed (${response.status}): ${text}`);\n        }\n        return (await response.json());\n    }\n    async fetchResource(providerId, accessToken) {\n        const config = this.getProvider(providerId);\n        if (!config.resourceUrl) {\n            throw new Error(`No resourceUrl configured for provider '${providerId}'.`);\n        }\n        const headers = {\n            Authorization: `Bearer ${accessToken}`,\n        };\n        if (config.additionalResourceHeaders) {\n            Object.assign(headers, config.additionalResourceHeaders);\n        }\n        const response = await fetch(config.resourceUrl, {\n            headers,\n        });\n        if (!response.ok) {\n            const text = await response.text();\n            throw new Error(`Unable to fetch OAuth2 resource (${response.status}): ${text}`);\n        }\n        return (await response.json());\n    }\n    persistTokens(providerId, tokens) {\n        localStorage.setItem(this.getTokensKey(providerId), JSON.stringify(tokens));\n    }\n    getStoredTokens(providerId) {\n        const raw = localStorage.getItem(this.getTokensKey(providerId));\n        if (!raw) {\n            return null;\n        }\n        try {\n            return JSON.parse(raw);\n        }\n        catch (err) {\n            console.warn(`Failed to parse stored OAuth2 tokens for provider '${providerId}'`, err);\n            return null;\n        }\n    }\n    persistPendingLogin(state, payload) {\n        localStorage.setItem(`${this.STATE_PREFIX}${state}`, JSON.stringify(payload));\n    }\n    consumePendingLogin(state) {\n        const key = `${this.STATE_PREFIX}${state}`;\n        const raw = localStorage.getItem(key);\n        localStorage.removeItem(key);\n        if (!raw) {\n            return null;\n        }\n        try {\n            return JSON.parse(raw);\n        }\n        catch (err) {\n            console.warn('Failed to parse pending OAuth2 login payload', err);\n            return null;\n        }\n    }\n    generateState() {\n        return [...crypto.getRandomValues(new Uint8Array(16))].map((b) => b.toString(16).padStart(2, '0')).join('');\n    }\n    generateCodeVerifier() {\n        const array = new Uint8Array(64);\n        crypto.getRandomValues(array);\n        return Array.from(array)\n            .map((b) => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~'[b % 66])\n            .join('');\n    }\n    async generateCodeChallenge(codeVerifier) {\n        const encoder = new TextEncoder();\n        const data = encoder.encode(codeVerifier);\n        const digest = await crypto.subtle.digest('SHA-256', data);\n        return this.base64UrlEncode(new Uint8Array(digest));\n    }\n    base64UrlEncode(buffer) {\n        let binary = '';\n        buffer.forEach((b) => (binary += String.fromCharCode(b)));\n        return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n    }\n    decodeIdToken(idToken) {\n        const parts = idToken.split('.');\n        if (parts.length < 2) {\n            throw new Error('Invalid JWT: missing parts');\n        }\n        const payload = parts[1];\n        const normalized = payload.replace(/-/g, '+').replace(/_/g, '/');\n        const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);\n        const json = atob(padded);\n        return JSON.parse(json);\n    }\n    getAccessTokenExpirationDate(providerId) {\n        const tokens = this.getStoredTokens(providerId);\n        if (!(tokens === null || tokens === void 0 ? void 0 : tokens.expiresAt))\n            return { expirationDate: null };\n        return { expirationDate: new Date(tokens.expiresAt).toISOString() };\n    }\n    isAccessTokenAvailable(providerId) {\n        const tokens = this.getStoredTokens(providerId);\n        return { isAvailable: !!(tokens === null || tokens === void 0 ? void 0 : tokens.accessToken) };\n    }\n    isAccessTokenExpired(providerId) {\n        const tokens = this.getStoredTokens(providerId);\n        if (!(tokens === null || tokens === void 0 ? void 0 : tokens.expiresAt))\n            return { isExpired: true };\n        return { isExpired: tokens.expiresAt <= Date.now() };\n    }\n    isRefreshTokenAvailable(providerId) {\n        const tokens = this.getStoredTokens(providerId);\n        return { isAvailable: !!(tokens === null || tokens === void 0 ? void 0 : tokens.refreshToken) };\n    }\n}\n//# sourceMappingURL=oauth2-provider.js.map","var __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nimport { BaseSocialLogin } from './base';\nexport class TwitterSocialLogin extends BaseSocialLogin {\n    constructor() {\n        super(...arguments);\n        this.clientId = null;\n        this.redirectUrl = null;\n        this.defaultScopes = ['tweet.read', 'users.read'];\n        this.forceLogin = false;\n        this.TOKENS_KEY = 'capgo_social_login_twitter_tokens_v1';\n        this.STATE_PREFIX = 'capgo_social_login_twitter_state_';\n    }\n    async initialize(clientId, redirectUrl, defaultScopes, forceLogin, audience) {\n        this.clientId = clientId;\n        this.redirectUrl = redirectUrl !== null && redirectUrl !== void 0 ? redirectUrl : null;\n        if (defaultScopes === null || defaultScopes === void 0 ? void 0 : defaultScopes.length) {\n            this.defaultScopes = defaultScopes;\n        }\n        this.forceLogin = forceLogin !== null && forceLogin !== void 0 ? forceLogin : false;\n        this.audience = audience !== null && audience !== void 0 ? audience : undefined;\n    }\n    async login(options) {\n        var _a, _b, _c, _d, _e, _f;\n        if (!this.clientId) {\n            throw new Error('Twitter Client ID not configured. Call initialize() first.');\n        }\n        const redirectUri = (_b = (_a = options.redirectUrl) !== null && _a !== void 0 ? _a : this.redirectUrl) !== null && _b !== void 0 ? _b : window.location.origin + window.location.pathname;\n        const scopes = ((_c = options.scopes) === null || _c === void 0 ? void 0 : _c.length) ? options.scopes : this.defaultScopes;\n        const state = (_d = options.state) !== null && _d !== void 0 ? _d : this.generateState();\n        const codeVerifier = (_e = options.codeVerifier) !== null && _e !== void 0 ? _e : this.generateCodeVerifier();\n        const codeChallenge = await this.generateCodeChallenge(codeVerifier);\n        this.persistPendingLogin(state, {\n            codeVerifier,\n            redirectUri,\n            scopes,\n        });\n        localStorage.setItem(BaseSocialLogin.OAUTH_STATE_KEY, JSON.stringify({ provider: 'twitter', state }));\n        const params = new URLSearchParams({\n            response_type: 'code',\n            client_id: this.clientId,\n            redirect_uri: redirectUri,\n            scope: scopes.join(' '),\n            state,\n            code_challenge: codeChallenge,\n            code_challenge_method: 'S256',\n        });\n        if (((_f = options.forceLogin) !== null && _f !== void 0 ? _f : this.forceLogin) === true) {\n            params.set('force_login', 'true');\n        }\n        if (this.audience) {\n            params.set('audience', this.audience);\n        }\n        const authUrl = `https://x.com/i/oauth2/authorize?${params.toString()}`;\n        const width = 500;\n        const height = 650;\n        const left = window.screenX + (window.outerWidth - width) / 2;\n        const top = window.screenY + (window.outerHeight - height) / 2;\n        const popup = window.open(authUrl, 'XLogin', `width=${width},height=${height},left=${left},top=${top},popup=1`);\n        return new Promise((resolve, reject) => {\n            if (!popup) {\n                reject(new Error('Unable to open login window. Please allow popups.'));\n                return;\n            }\n            // Use BroadcastChannel for cross-origin communication (works when postMessage doesn't)\n            const channelName = `twitter_oauth_${state}`;\n            let broadcastChannel = null;\n            try {\n                broadcastChannel = new BroadcastChannel(channelName);\n            }\n            catch (_a) {\n                // BroadcastChannel not supported, fall back to postMessage only\n            }\n            const cleanup = (messageHandler, timeoutHandle, intervalHandle) => {\n                window.removeEventListener('message', messageHandler);\n                clearTimeout(timeoutHandle);\n                clearInterval(intervalHandle);\n                if (broadcastChannel) {\n                    broadcastChannel.close();\n                }\n            };\n            const handleOAuthMessage = (data) => {\n                if ((data === null || data === void 0 ? void 0 : data.type) === 'oauth-response') {\n                    if ((data === null || data === void 0 ? void 0 : data.provider) && data.provider !== 'twitter') {\n                        return false;\n                    }\n                    cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n                    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n                    const _a = data, { provider: _ignoredProvider, type: _ignoredType } = _a, payload = __rest(_a, [\"provider\", \"type\"]);\n                    resolve({\n                        provider: 'twitter',\n                        result: payload,\n                    });\n                    return true;\n                }\n                else if ((data === null || data === void 0 ? void 0 : data.type) === 'oauth-error') {\n                    if ((data === null || data === void 0 ? void 0 : data.provider) && data.provider !== 'twitter') {\n                        return false;\n                    }\n                    cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n                    reject(new Error(data.error || 'Twitter login was cancelled.'));\n                    return true;\n                }\n                return false;\n            };\n            // Listen for BroadcastChannel messages\n            if (broadcastChannel) {\n                broadcastChannel.onmessage = (event) => {\n                    handleOAuthMessage(event.data);\n                };\n            }\n            const messageHandler = (event) => {\n                if (event.origin !== window.location.origin) {\n                    return;\n                }\n                handleOAuthMessage(event.data);\n            };\n            window.addEventListener('message', messageHandler);\n            const timeoutHandle = window.setTimeout(() => {\n                cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n                try {\n                    popup.close();\n                }\n                catch (_a) {\n                    // Ignore cross-origin errors when closing\n                }\n                reject(new Error('Twitter login timed out.'));\n            }, 300000);\n            const popupClosedInterval = window.setInterval(() => {\n                try {\n                    // Check if popup is closed - this may throw cross-origin errors for some providers\n                    if (popup.closed) {\n                        cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n                        reject(new Error('Twitter login window was closed.'));\n                    }\n                }\n                catch (_a) {\n                    // Cross-origin error when checking popup.closed - this happens when the popup\n                    // navigates to a third-party OAuth provider with strict security settings.\n                    // We can't detect if the window was closed, so we rely on timeout and message handlers.\n                    clearInterval(popupClosedInterval);\n                }\n            }, 1000);\n        });\n    }\n    async logout() {\n        localStorage.removeItem(this.TOKENS_KEY);\n    }\n    async isLoggedIn() {\n        const tokens = this.getStoredTokens();\n        if (!tokens) {\n            return { isLoggedIn: false };\n        }\n        const isValid = tokens.expiresAt > Date.now();\n        if (!isValid) {\n            localStorage.removeItem(this.TOKENS_KEY);\n        }\n        return { isLoggedIn: isValid };\n    }\n    async getAuthorizationCode() {\n        const tokens = this.getStoredTokens();\n        if (!tokens) {\n            throw new Error('Twitter access token is not available.');\n        }\n        return {\n            accessToken: tokens.accessToken,\n        };\n    }\n    async refresh() {\n        const tokens = this.getStoredTokens();\n        if (!(tokens === null || tokens === void 0 ? void 0 : tokens.refreshToken)) {\n            throw new Error('No Twitter refresh token is available. Include offline.access scope to receive one.');\n        }\n        await this.refreshWithRefreshToken(tokens.refreshToken);\n    }\n    async handleOAuthRedirect(url, expectedState) {\n        const params = url.searchParams;\n        const stateFromUrl = expectedState !== null && expectedState !== void 0 ? expectedState : params.get('state');\n        if (!stateFromUrl) {\n            return null;\n        }\n        const pending = this.consumePendingLogin(stateFromUrl);\n        if (!pending) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            return { error: 'Twitter login session expired or state mismatch.' };\n        }\n        const error = params.get('error');\n        if (error) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            return { error: params.get('error_description') || error };\n        }\n        const code = params.get('code');\n        if (!code) {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n            return { error: 'Twitter authorization code missing from redirect.' };\n        }\n        try {\n            const tokens = await this.exchangeAuthorizationCode(code, pending);\n            const profile = await this.fetchProfile(tokens.access_token);\n            const expiresAt = Date.now() + tokens.expires_in * 1000;\n            const scopeArray = tokens.scope.split(' ').filter(Boolean);\n            this.persistTokens({\n                accessToken: tokens.access_token,\n                refreshToken: tokens.refresh_token,\n                expiresAt,\n                scope: scopeArray,\n                tokenType: tokens.token_type,\n                userId: profile.id,\n                profile,\n            });\n            return {\n                provider: 'twitter',\n                result: {\n                    accessToken: {\n                        token: tokens.access_token,\n                        tokenType: tokens.token_type,\n                        expires: new Date(expiresAt).toISOString(),\n                        userId: profile.id,\n                    },\n                    refreshToken: tokens.refresh_token,\n                    scope: scopeArray,\n                    tokenType: tokens.token_type,\n                    expiresIn: tokens.expires_in,\n                    profile,\n                },\n            };\n        }\n        catch (err) {\n            if (err instanceof Error) {\n                return { error: err.message };\n            }\n            return { error: 'Twitter login failed unexpectedly.' };\n        }\n        finally {\n            localStorage.removeItem(BaseSocialLogin.OAUTH_STATE_KEY);\n        }\n    }\n    async exchangeAuthorizationCode(code, pending) {\n        var _a;\n        const params = new URLSearchParams({\n            grant_type: 'authorization_code',\n            client_id: (_a = this.clientId) !== null && _a !== void 0 ? _a : '',\n            code,\n            redirect_uri: pending.redirectUri,\n            code_verifier: pending.codeVerifier,\n        });\n        const response = await fetch('https://api.x.com/2/oauth2/token', {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/x-www-form-urlencoded',\n            },\n            body: params.toString(),\n        });\n        if (!response.ok) {\n            const text = await response.text();\n            throw new Error(`Twitter token exchange failed (${response.status}): ${text}`);\n        }\n        return (await response.json());\n    }\n    async refreshWithRefreshToken(refreshToken) {\n        var _a, _b;\n        const params = new URLSearchParams({\n            grant_type: 'refresh_token',\n            refresh_token: refreshToken,\n            client_id: (_a = this.clientId) !== null && _a !== void 0 ? _a : '',\n        });\n        const response = await fetch('https://api.x.com/2/oauth2/token', {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/x-www-form-urlencoded',\n            },\n            body: params.toString(),\n        });\n        if (!response.ok) {\n            const text = await response.text();\n            throw new Error(`Twitter refresh failed (${response.status}): ${text}`);\n        }\n        const tokens = (await response.json());\n        const profile = await this.fetchProfile(tokens.access_token);\n        const expiresAt = Date.now() + tokens.expires_in * 1000;\n        const scopeArray = tokens.scope.split(' ').filter(Boolean);\n        this.persistTokens({\n            accessToken: tokens.access_token,\n            refreshToken: (_b = tokens.refresh_token) !== null && _b !== void 0 ? _b : refreshToken,\n            expiresAt,\n            scope: scopeArray,\n            tokenType: tokens.token_type,\n            userId: profile.id,\n            profile,\n        });\n    }\n    async fetchProfile(accessToken) {\n        var _a, _b, _c, _d;\n        const fields = ['profile_image_url', 'verified', 'name', 'username'];\n        const response = await fetch(`https://api.x.com/2/users/me?user.fields=${fields.join(',')}`, {\n            headers: {\n                Authorization: `Bearer ${accessToken}`,\n            },\n        });\n        if (!response.ok) {\n            const text = await response.text();\n            throw new Error(`Unable to fetch Twitter profile (${response.status}): ${text}`);\n        }\n        const payload = (await response.json());\n        if (!payload.data) {\n            throw new Error('Twitter profile payload is missing data.');\n        }\n        return {\n            id: payload.data.id,\n            username: payload.data.username,\n            name: (_a = payload.data.name) !== null && _a !== void 0 ? _a : null,\n            profileImageUrl: (_b = payload.data.profile_image_url) !== null && _b !== void 0 ? _b : null,\n            verified: (_c = payload.data.verified) !== null && _c !== void 0 ? _c : false,\n            email: (_d = payload.data.email) !== null && _d !== void 0 ? _d : null,\n        };\n    }\n    persistTokens(tokens) {\n        localStorage.setItem(this.TOKENS_KEY, JSON.stringify(tokens));\n    }\n    getStoredTokens() {\n        const raw = localStorage.getItem(this.TOKENS_KEY);\n        if (!raw) {\n            return null;\n        }\n        try {\n            return JSON.parse(raw);\n        }\n        catch (err) {\n            console.warn('Failed to parse stored Twitter tokens', err);\n            return null;\n        }\n    }\n    persistPendingLogin(state, payload) {\n        localStorage.setItem(`${this.STATE_PREFIX}${state}`, JSON.stringify(payload));\n    }\n    consumePendingLogin(state) {\n        const key = `${this.STATE_PREFIX}${state}`;\n        const raw = localStorage.getItem(key);\n        localStorage.removeItem(key);\n        if (!raw) {\n            return null;\n        }\n        try {\n            return JSON.parse(raw);\n        }\n        catch (err) {\n            console.warn('Failed to parse pending Twitter login payload', err);\n            return null;\n        }\n    }\n    generateState() {\n        return [...crypto.getRandomValues(new Uint8Array(16))].map((b) => b.toString(16).padStart(2, '0')).join('');\n    }\n    generateCodeVerifier() {\n        const array = new Uint8Array(64);\n        crypto.getRandomValues(array);\n        return Array.from(array)\n            .map((b) => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~'[b % 66])\n            .join('');\n    }\n    async generateCodeChallenge(codeVerifier) {\n        const encoder = new TextEncoder();\n        const data = encoder.encode(codeVerifier);\n        const digest = await crypto.subtle.digest('SHA-256', data);\n        return this.base64UrlEncode(new Uint8Array(digest));\n    }\n    base64UrlEncode(buffer) {\n        let binary = '';\n        buffer.forEach((b) => (binary += String.fromCharCode(b)));\n        return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n    }\n}\n//# sourceMappingURL=twitter-provider.js.map","import { WebPlugin } from '@capacitor/core';\nimport { AppleSocialLogin } from './apple-provider';\nimport { FacebookSocialLogin } from './facebook-provider';\nimport { GoogleSocialLogin } from './google-provider';\nimport { OAuth2SocialLogin } from './oauth2-provider';\nimport { TwitterSocialLogin } from './twitter-provider';\nexport class SocialLoginWeb extends WebPlugin {\n    constructor() {\n        super();\n        this.googleProvider = new GoogleSocialLogin();\n        this.appleProvider = new AppleSocialLogin();\n        this.facebookProvider = new FacebookSocialLogin();\n        this.twitterProvider = new TwitterSocialLogin();\n        this.oauth2Provider = new OAuth2SocialLogin();\n        // Auto-finish OAuth redirects only when running inside a popup window.\n        // For redirect-based flows (full page navigation), the app should call `handleRedirectCallback()` explicitly.\n        const hasPending = !!localStorage.getItem(SocialLoginWeb.OAUTH_STATE_KEY);\n        const isPopup = !!window.opener || SocialLoginWeb.POPUP_WINDOW_NAMES.has(window.name);\n        if (hasPending && isPopup) {\n            this.finishOAuthRedirectInPopup().catch((error) => {\n                console.error('Failed to finish OAuth redirect', error);\n                try {\n                    window.close();\n                }\n                catch (_a) {\n                    // ignore\n                }\n            });\n        }\n    }\n    async parseRedirectResult() {\n        var _a;\n        const url = new URL(window.location.href);\n        const stateRaw = localStorage.getItem(SocialLoginWeb.OAUTH_STATE_KEY);\n        let provider = null;\n        let state;\n        let nonce;\n        if (stateRaw) {\n            try {\n                const parsed = JSON.parse(stateRaw);\n                provider = (_a = parsed.provider) !== null && _a !== void 0 ? _a : null;\n                state = parsed.state;\n                nonce = parsed.nonce;\n            }\n            catch (_b) {\n                provider = stateRaw === 'true' ? 'google' : null;\n            }\n        }\n        let result = null;\n        switch (provider) {\n            case 'twitter':\n                result = await this.twitterProvider.handleOAuthRedirect(url, state);\n                break;\n            case 'oauth2':\n                result = await this.oauth2Provider.handleOAuthRedirect(url, state);\n                break;\n            case 'google':\n            default:\n                result = this.googleProvider.handleOAuthRedirect(url);\n                break;\n        }\n        return { provider, state, nonce, result };\n    }\n    async finishOAuthRedirectInPopup() {\n        var _a;\n        const parsed = await this.parseRedirectResult();\n        const result = parsed.result;\n        if (!result)\n            return;\n        // Build the message to send\n        let message;\n        if ('error' in result) {\n            const resolvedProvider = (_a = parsed.provider) !== null && _a !== void 0 ? _a : null;\n            message = {\n                type: 'oauth-error',\n                provider: resolvedProvider,\n                error: result.error,\n            };\n        }\n        else {\n            message = Object.assign({ type: 'oauth-response', provider: result.provider }, result.result);\n        }\n        // Try postMessage first (works when window.opener is accessible)\n        try {\n            if (window.opener) {\n                window.opener.postMessage(message, window.location.origin);\n            }\n        }\n        catch (_b) {\n            // Cross-origin error - window.opener may not be accessible\n            console.log('postMessage to opener failed, using BroadcastChannel');\n        }\n        // Also use BroadcastChannel as a fallback (works across same-origin windows\n        // even when window.opener is not accessible due to cross-origin navigation)\n        try {\n            // Determine the channel name based on provider and state/nonce\n            let channelName = null;\n            if (parsed.provider === 'oauth2' && parsed.state) {\n                channelName = `oauth2_${parsed.state}`;\n            }\n            else if (parsed.provider === 'twitter' && parsed.state) {\n                channelName = `twitter_oauth_${parsed.state}`;\n            }\n            else if (parsed.provider === 'google' && parsed.nonce) {\n                channelName = `google_oauth_${parsed.nonce}`;\n            }\n            if (channelName) {\n                const channel = new BroadcastChannel(channelName);\n                channel.postMessage(message);\n                channel.close();\n            }\n        }\n        catch (_c) {\n            // BroadcastChannel not supported or other error\n            console.log('BroadcastChannel not available');\n        }\n        window.close();\n    }\n    async initialize(options) {\n        var _a, _b, _c, _d;\n        const initPromises = [];\n        if ((_a = options.google) === null || _a === void 0 ? void 0 : _a.webClientId) {\n            initPromises.push(this.googleProvider.initialize(options.google.webClientId, options.google.mode, options.google.hostedDomain, options.google.redirectUrl));\n        }\n        if ((_b = options.apple) === null || _b === void 0 ? void 0 : _b.clientId) {\n            initPromises.push(this.appleProvider.initialize(options.apple.clientId, options.apple.redirectUrl, options.apple.useProperTokenExchange));\n        }\n        if ((_c = options.facebook) === null || _c === void 0 ? void 0 : _c.appId) {\n            initPromises.push(this.facebookProvider.initialize(options.facebook.appId, options.facebook.locale));\n        }\n        if ((_d = options.twitter) === null || _d === void 0 ? void 0 : _d.clientId) {\n            initPromises.push(this.twitterProvider.initialize(options.twitter.clientId, options.twitter.redirectUrl, options.twitter.defaultScopes, options.twitter.forceLogin, options.twitter.audience));\n        }\n        if (options.oauth2 && Object.keys(options.oauth2).length > 0) {\n            initPromises.push(this.oauth2Provider.initializeProviders(options.oauth2));\n        }\n        await Promise.all(initPromises);\n    }\n    async login(options) {\n        switch (options.provider) {\n            case 'google':\n                return this.googleProvider.login(options.options);\n            case 'apple':\n                return this.appleProvider.login(options.options);\n            case 'facebook':\n                return this.facebookProvider.login(options.options);\n            case 'twitter':\n                return this.twitterProvider.login(options.options);\n            case 'oauth2':\n                return this.oauth2Provider.login(options.options);\n            default:\n                throw new Error(`Login for ${options.provider} is not implemented on web`);\n        }\n    }\n    async logout(options) {\n        switch (options.provider) {\n            case 'google':\n                return this.googleProvider.logout();\n            case 'apple':\n                return this.appleProvider.logout();\n            case 'facebook':\n                return this.facebookProvider.logout();\n            case 'twitter':\n                return this.twitterProvider.logout();\n            case 'oauth2':\n                if (!options.providerId) {\n                    throw new Error('providerId is required for oauth2 logout');\n                }\n                return this.oauth2Provider.logout(options.providerId);\n            default:\n                throw new Error(`Logout for ${options.provider} is not implemented`);\n        }\n    }\n    async isLoggedIn(options) {\n        switch (options.provider) {\n            case 'google':\n                return this.googleProvider.isLoggedIn();\n            case 'apple':\n                return this.appleProvider.isLoggedIn();\n            case 'facebook':\n                return this.facebookProvider.isLoggedIn();\n            case 'twitter':\n                return this.twitterProvider.isLoggedIn();\n            case 'oauth2':\n                if (!options.providerId) {\n                    throw new Error('providerId is required for oauth2 isLoggedIn');\n                }\n                return this.oauth2Provider.isLoggedIn(options.providerId);\n            default:\n                throw new Error(`isLoggedIn for ${options.provider} is not implemented`);\n        }\n    }\n    async getAuthorizationCode(options) {\n        switch (options.provider) {\n            case 'google':\n                return this.googleProvider.getAuthorizationCode();\n            case 'apple':\n                return this.appleProvider.getAuthorizationCode();\n            case 'facebook':\n                return this.facebookProvider.getAuthorizationCode();\n            case 'twitter':\n                return this.twitterProvider.getAuthorizationCode();\n            case 'oauth2':\n                if (!options.providerId) {\n                    throw new Error('providerId is required for oauth2 getAuthorizationCode');\n                }\n                return this.oauth2Provider.getAuthorizationCode(options.providerId);\n            default:\n                throw new Error(`getAuthorizationCode for ${options.provider} is not implemented`);\n        }\n    }\n    async refresh(options) {\n        switch (options.provider) {\n            case 'google':\n                return this.googleProvider.refresh();\n            case 'apple':\n                return this.appleProvider.refresh();\n            case 'facebook':\n                return this.facebookProvider.refresh(options.options);\n            case 'twitter':\n                return this.twitterProvider.refresh();\n            case 'oauth2': {\n                const oauth2Options = options.options;\n                if (!(oauth2Options === null || oauth2Options === void 0 ? void 0 : oauth2Options.providerId)) {\n                    throw new Error('providerId is required for oauth2 refresh');\n                }\n                return this.oauth2Provider.refresh(oauth2Options.providerId);\n            }\n            default:\n                throw new Error(`Refresh for ${options.provider} is not implemented`);\n        }\n    }\n    async providerSpecificCall(options) {\n        throw new Error(`Provider specific call for ${options.call} is not implemented`);\n    }\n    async refreshToken(options) {\n        if (options.provider !== 'oauth2') {\n            throw new Error('refreshToken is only implemented for oauth2 on web');\n        }\n        return this.oauth2Provider.refreshToken(options.providerId, options.refreshToken, options.additionalParameters);\n    }\n    async handleRedirectCallback() {\n        const parsed = await this.parseRedirectResult();\n        const result = parsed.result;\n        if (!result)\n            return null;\n        if ('error' in result) {\n            throw new Error(result.error);\n        }\n        return result;\n    }\n    async decodeIdToken(options) {\n        var _a;\n        const token = (_a = options === null || options === void 0 ? void 0 : options.idToken) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.token;\n        if (!token) {\n            throw new Error('idToken (or token) is required');\n        }\n        const claims = this.oauth2Provider.decodeIdToken(token);\n        return { claims };\n    }\n    async getAccessTokenExpirationDate(options) {\n        if (typeof (options === null || options === void 0 ? void 0 : options.accessTokenExpirationDate) !== 'number') {\n            throw new Error('accessTokenExpirationDate is required');\n        }\n        return { date: new Date(options.accessTokenExpirationDate).toISOString() };\n    }\n    async isAccessTokenAvailable(options) {\n        var _a;\n        const token = (_a = options === null || options === void 0 ? void 0 : options.accessToken) !== null && _a !== void 0 ? _a : null;\n        return { isAvailable: typeof token === 'string' && token.length > 0 };\n    }\n    async isAccessTokenExpired(options) {\n        if (typeof (options === null || options === void 0 ? void 0 : options.accessTokenExpirationDate) !== 'number') {\n            throw new Error('accessTokenExpirationDate is required');\n        }\n        return { isExpired: options.accessTokenExpirationDate <= Date.now() };\n    }\n    async isRefreshTokenAvailable(options) {\n        var _a;\n        const token = (_a = options === null || options === void 0 ? void 0 : options.refreshToken) !== null && _a !== void 0 ? _a : null;\n        return { isAvailable: typeof token === 'string' && token.length > 0 };\n    }\n    async getPluginVersion() {\n        return { version: 'web' };\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 (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}\nSocialLoginWeb.OAUTH_STATE_KEY = 'social_login_oauth_pending';\nSocialLoginWeb.POPUP_WINDOW_NAMES = new Set(['OAuth2Login', 'XLogin', 'Google Sign In', 'Authorization']);\n//# sourceMappingURL=web.js.map"]}