@capgo/capacitor-social-login 7.16.0 → 7.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/base.js","esm/apple-provider.js","esm/facebook-provider.js","esm/google-provider.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst SocialLogin = registerPlugin('SocialLogin', {\n web: () => import('./web').then((m) => new m.SocialLoginWeb()),\n});\nexport * from './definitions';\nexport { SocialLogin };\n//# sourceMappingURL=index.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 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 console.log('handleOAuthRedirect ok');\n const params = new URLSearchParams(hash);\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, 'true');\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 // 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 handleMessage = (event) => {\n var _a, _b, _c;\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 window.removeEventListener('message', handleMessage);\n clearInterval(popupClosedInterval);\n if (this.loginType === 'online') {\n const { accessToken, idToken } = event.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 }\n else {\n const { serverAuthCode } = event.data;\n resolve({\n provider: 'google',\n result: {\n responseType: 'offline',\n serverAuthCode,\n },\n });\n }\n }\n // Don't reject for non-OAuth messages, just ignore them\n };\n window.addEventListener('message', handleMessage);\n // Timeout after 5 minutes\n timeoutHandle = setTimeout(() => {\n clearTimeout(timeoutHandle);\n window.removeEventListener('message', handleMessage);\n popup.close();\n reject(new Error('OAuth timeout'));\n }, 300000);\n popupClosedInterval = setInterval(() => {\n if (popup.closed) {\n clearInterval(popupClosedInterval);\n reject(new Error('Popup closed'));\n }\n }, 1000);\n });\n }\n}\n//# sourceMappingURL=google-provider.js.map","import { WebPlugin } from '@capacitor/core';\nimport { AppleSocialLogin } from './apple-provider';\nimport { FacebookSocialLogin } from './facebook-provider';\nimport { GoogleSocialLogin } from './google-provider';\nexport class SocialLoginWeb extends WebPlugin {\n constructor() {\n var _a;\n super();\n this.googleProvider = new GoogleSocialLogin();\n this.appleProvider = new AppleSocialLogin();\n this.facebookProvider = new FacebookSocialLogin();\n // Set up listener for OAuth redirects if we have a pending OAuth flow\n if (localStorage.getItem(SocialLoginWeb.OAUTH_STATE_KEY)) {\n console.log('OAUTH_STATE_KEY found');\n const result = this.handleOAuthRedirect();\n if (result) {\n (_a = window.opener) === null || _a === void 0 ? void 0 : _a.postMessage(Object.assign({ type: 'oauth-response' }, result.result), window.location.origin);\n window.close();\n }\n }\n }\n handleOAuthRedirect() {\n const url = new URL(window.location.href);\n return this.googleProvider.handleOAuthRedirect(url);\n }\n async initialize(options) {\n var _a, _b, _c;\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 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 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 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 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 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 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 getPluginVersion() {\n return { version: 'web' };\n }\n}\nSocialLoginWeb.OAUTH_STATE_KEY = 'social_login_oauth_pending';\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["esm/index.js","esm/base.js","esm/apple-provider.js","esm/facebook-provider.js","esm/google-provider.js","esm/twitter-provider.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst SocialLogin = registerPlugin('SocialLogin', {\n web: () => import('./web').then((m) => new m.SocialLoginWeb()),\n});\nexport * from './definitions';\nexport { SocialLogin };\n//# sourceMappingURL=index.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 }));\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 // 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 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 window.removeEventListener('message', handleMessage);\n clearInterval(popupClosedInterval);\n clearTimeout(timeoutHandle);\n if (this.loginType === 'online') {\n const { accessToken, idToken } = event.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 }\n else {\n const { serverAuthCode } = event.data;\n resolve({\n provider: 'google',\n result: {\n responseType: 'offline',\n serverAuthCode,\n },\n });\n }\n }\n else if (((_d = event.data) === null || _d === void 0 ? void 0 : _d.type) === 'oauth-error') {\n window.removeEventListener('message', handleMessage);\n clearInterval(popupClosedInterval);\n clearTimeout(timeoutHandle);\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 window.addEventListener('message', handleMessage);\n // Timeout after 5 minutes\n timeoutHandle = setTimeout(() => {\n clearTimeout(timeoutHandle);\n window.removeEventListener('message', handleMessage);\n popup.close();\n reject(new Error('OAuth timeout'));\n }, 300000);\n popupClosedInterval = setInterval(() => {\n if (popup.closed) {\n clearInterval(popupClosedInterval);\n reject(new Error('Popup closed'));\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';\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 const cleanup = (messageHandler, timeoutHandle, intervalHandle) => {\n window.removeEventListener('message', messageHandler);\n clearTimeout(timeoutHandle);\n clearInterval(intervalHandle);\n };\n const messageHandler = (event) => {\n var _a, _b, _c, _d;\n if (event.origin !== window.location.origin) {\n return;\n }\n if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === 'oauth-response') {\n if (((_b = event.data) === null || _b === void 0 ? void 0 : _b.provider) && event.data.provider !== 'twitter') {\n return;\n }\n cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n const _e = event.data, { provider: _ignoredProvider } = _e, payload = __rest(_e, [\"provider\"]);\n resolve({\n provider: 'twitter',\n result: payload,\n });\n }\n else if (((_c = event.data) === null || _c === void 0 ? void 0 : _c.type) === 'oauth-error') {\n if (((_d = event.data) === null || _d === void 0 ? void 0 : _d.provider) && event.data.provider !== 'twitter') {\n return;\n }\n cleanup(messageHandler, timeoutHandle, popupClosedInterval);\n reject(new Error(event.data.error || 'Twitter login was cancelled.'));\n }\n };\n window.addEventListener('message', messageHandler);\n const timeoutHandle = window.setTimeout(() => {\n window.removeEventListener('message', messageHandler);\n popup.close();\n reject(new Error('Twitter login timed out.'));\n }, 300000);\n const popupClosedInterval = window.setInterval(() => {\n if (popup.closed) {\n window.removeEventListener('message', messageHandler);\n clearInterval(popupClosedInterval);\n clearTimeout(timeoutHandle);\n reject(new Error('Twitter login window was closed.'));\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 { 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 // Set up listener for OAuth redirects if we have a pending OAuth flow\n if (localStorage.getItem(SocialLoginWeb.OAUTH_STATE_KEY)) {\n console.log('OAUTH_STATE_KEY found');\n this.handleOAuthRedirect().catch((error) => {\n console.error('Failed to finish OAuth redirect', error);\n window.close();\n });\n }\n }\n async handleOAuthRedirect() {\n var _a, _b, _c;\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 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 }\n catch (_d) {\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 'google':\n default:\n result = this.googleProvider.handleOAuthRedirect(url);\n break;\n }\n if (!result) {\n return;\n }\n if ('error' in result) {\n const resolvedProvider = provider !== null && provider !== void 0 ? provider : null;\n (_b = window.opener) === null || _b === void 0 ? void 0 : _b.postMessage({\n type: 'oauth-error',\n provider: resolvedProvider,\n error: result.error,\n }, window.location.origin);\n }\n else {\n (_c = window.opener) === null || _c === void 0 ? void 0 : _c.postMessage(Object.assign({ type: 'oauth-response', provider: result.provider }, result.result), window.location.origin);\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 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 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 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 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 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 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 getPluginVersion() {\n return { version: 'web' };\n }\n}\nSocialLoginWeb.OAUTH_STATE_KEY = 'social_login_oauth_pending';\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin","this"],"mappings":"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"}
@@ -44,10 +44,14 @@ class GoogleProvider {
44
44
  scopes = Array(Set(scopes + ["offline_access"]))
45
45
  }
46
46
 
47
+ // Extract nonce from payload if provided
48
+ let nonce = payload["nonce"] as? String
49
+
47
50
  GIDSignIn.sharedInstance.signIn(
48
51
  withPresenting: presentingVc,
49
52
  hint: nil,
50
- additionalScopes: payload["scopes"] as? [String] ?? self.defaultGrantedScopes
53
+ additionalScopes: payload["scopes"] as? [String] ?? self.defaultGrantedScopes,
54
+ nonce: nonce
51
55
  ) { result, error in
52
56
  if let error = error {
53
57
  completion(.failure(error))
@@ -7,7 +7,7 @@ import Capacitor
7
7
  */
8
8
  @objc(SocialLoginPlugin)
9
9
  public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
10
- private let pluginVersion: String = "7.16.0"
10
+ private let pluginVersion: String = "7.18.0"
11
11
  public let identifier = "SocialLoginPlugin"
12
12
  public let jsName = "SocialLogin"
13
13
  public let pluginMethods: [CAPPluginMethod] = [
@@ -24,6 +24,7 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
24
24
  private let apple = AppleProvider()
25
25
  private let facebook = FacebookProvider()
26
26
  private let google = GoogleProvider()
27
+ private let twitter = TwitterProvider()
27
28
 
28
29
  @objc func getPluginVersion(_ call: CAPPluginCall) {
29
30
  call.resolve(["version": self.pluginVersion])
@@ -71,6 +72,22 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
71
72
  initialized = true
72
73
  }
73
74
 
75
+ if let twitterSettings = call.getObject("twitter") {
76
+ guard let clientId = twitterSettings["clientId"] as? String, !clientId.isEmpty else {
77
+ call.reject("twitter.clientId is required")
78
+ return
79
+ }
80
+ guard let redirectUrl = twitterSettings["redirectUrl"] as? String, !redirectUrl.isEmpty else {
81
+ call.reject("twitter.redirectUrl is required")
82
+ return
83
+ }
84
+ let defaultScopes = twitterSettings["defaultScopes"] as? [String]
85
+ let forceLogin = twitterSettings["forceLogin"] as? Bool ?? false
86
+ let audience = twitterSettings["audience"] as? String
87
+ twitter.initialize(clientId: clientId, redirectUri: redirectUrl, defaultScopes: defaultScopes, forceLogin: forceLogin, audience: audience)
88
+ initialized = true
89
+ }
90
+
74
91
  if initialized {
75
92
  call.resolve()
76
93
  } else {
@@ -123,6 +140,26 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
123
140
  }
124
141
  }
125
142
  }
143
+ case "twitter": do {
144
+ self.twitter.getAuthorizationCode { res in
145
+ do {
146
+ let token = try res.get()
147
+ var response: [String: Any] = [
148
+ "accessToken": token.token,
149
+ "tokenType": token.tokenType as Any
150
+ ]
151
+ if let expiresIn = token.expiresIn {
152
+ response["expiresIn"] = expiresIn
153
+ }
154
+ if let refreshToken = token.refreshToken {
155
+ response["refreshToken"] = refreshToken
156
+ }
157
+ call.resolve(response)
158
+ } catch {
159
+ call.reject(error.localizedDescription)
160
+ }
161
+ }
162
+ }
126
163
  default:
127
164
  call.reject("Invalid provider")
128
165
  }
@@ -160,6 +197,16 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
160
197
  call.resolve([ "isLoggedIn": self.facebook.isLoggedIn() ])
161
198
 
162
199
  }
200
+ case "twitter": do {
201
+ self.twitter.isLoggedIn { res in
202
+ do {
203
+ let status = try res.get()
204
+ call.resolve([ "isLoggedIn": status ])
205
+ } catch {
206
+ call.reject(error.localizedDescription)
207
+ }
208
+ }
209
+ }
163
210
  default:
164
211
  call.reject("Invalid provider")
165
212
  }
@@ -185,6 +232,10 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
185
232
  apple.login(payload: payload) { (result: Result<AppleProviderResponse, Error>) in
186
233
  self.handleLoginResult(result, call: call)
187
234
  }
235
+ case "twitter":
236
+ twitter.login(payload: payload) { (result: Result<TwitterProfileResponse, Error>) in
237
+ self.handleLoginResult(result, call: call)
238
+ }
188
239
  default:
189
240
  call.reject("Invalid provider")
190
241
  }
@@ -247,6 +298,10 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
247
298
  apple.logout { result in
248
299
  self.handleLogoutResult(result, call: call)
249
300
  }
301
+ case "twitter":
302
+ twitter.logout { result in
303
+ self.handleLogoutResult(result, call: call)
304
+ }
250
305
  default:
251
306
  call.reject("Invalid provider")
252
307
  }
@@ -271,6 +326,10 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
271
326
  apple.refresh { result in
272
327
  self.handleRefreshResult(result, call: call)
273
328
  }
329
+ case "twitter":
330
+ twitter.refresh { result in
331
+ self.handleRefreshResult(result, call: call)
332
+ }
274
333
 
275
334
  default:
276
335
  call.reject("Invalid provider")
@@ -296,6 +355,13 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
296
355
  "refreshToken": user.refreshToken,
297
356
  "expiresIn": user.expiresIn
298
357
  ])
358
+ } else if let twitterResponse = response as? TwitterProfileResponse {
359
+ call.resolve([
360
+ "accessToken": twitterResponse.accessToken.token,
361
+ "idToken": NSNull(),
362
+ "refreshToken": twitterResponse.accessToken.refreshToken ?? NSNull(),
363
+ "expiresIn": twitterResponse.accessToken.expiresIn ?? NSNull()
364
+ ])
299
365
  } else {
300
366
  call.reject("Invalid refresh response")
301
367
  }
@@ -395,6 +461,32 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
395
461
  "provider": "facebook",
396
462
  "result": facebookResult
397
463
  ])
464
+ } else if let twitterResponse = response as? TwitterProfileResponse {
465
+ let profile: [String: Any] = [
466
+ "id": twitterResponse.profile.id,
467
+ "username": twitterResponse.profile.username,
468
+ "name": twitterResponse.profile.name ?? "",
469
+ "profileImageUrl": twitterResponse.profile.profile_image_url ?? "",
470
+ "verified": twitterResponse.profile.verified ?? false,
471
+ "email": twitterResponse.profile.email ?? NSNull()
472
+ ]
473
+ let accessToken: [String: Any] = [
474
+ "token": twitterResponse.accessToken.token,
475
+ "expiresIn": twitterResponse.accessToken.expiresIn ?? NSNull(),
476
+ "refreshToken": twitterResponse.accessToken.refreshToken ?? NSNull(),
477
+ "tokenType": twitterResponse.accessToken.tokenType ?? NSNull()
478
+ ]
479
+ let twitterResult: [String: Any] = [
480
+ "accessToken": accessToken,
481
+ "profile": profile,
482
+ "scope": twitterResponse.scope,
483
+ "tokenType": twitterResponse.tokenType,
484
+ "expiresIn": twitterResponse.expiresIn
485
+ ]
486
+ call.resolve([
487
+ "provider": "twitter",
488
+ "result": twitterResult
489
+ ])
398
490
  } else {
399
491
  call.reject("Unsupported provider response")
400
492
  }