@capgo/capacitor-social-login 7.11.24 → 7.13.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.
package/README.md CHANGED
@@ -83,7 +83,7 @@ const res = await SocialLogin.login({
83
83
 
84
84
  ## Facebook
85
85
 
86
- Docs: [How to setup facebook login](./docs/setup_facebook.md)
86
+ Docs: [How to setup facebook login](https://capgo.app/docs/plugins/social-login/facebook/)
87
87
 
88
88
  ### Android configuration
89
89
 
@@ -575,15 +575,16 @@ Execute provider-specific calls
575
575
 
576
576
  #### GoogleLoginOptions
577
577
 
578
- | Prop | Type | Description | Default |
579
- | -------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------- | ----------------------- |
580
- | **`scopes`** | <code>string[]</code> | Specifies the scopes required for accessing Google APIs The default is defined in the configuration. | |
581
- | **`nonce`** | <code>string</code> | Nonce | |
582
- | **`forceRefreshToken`** | <code>boolean</code> | Force refresh token (only for Android) | <code>false</code> |
583
- | **`forcePrompt`** | <code>boolean</code> | Force account selection prompt (iOS) | <code>false</code> |
584
- | **`style`** | <code>'bottom' \| 'standard'</code> | Style | <code>'standard'</code> |
585
- | **`filterByAuthorizedAccounts`** | <code>boolean</code> | Filter by authorized accounts (Android only) | <code>true</code> |
586
- | **`autoSelectEnabled`** | <code>boolean</code> | Auto select enabled (Android only) | <code>false</code> |
578
+ | Prop | Type | Description | Default | Since |
579
+ | -------------------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ----------------------- | ------ |
580
+ | **`scopes`** | <code>string[]</code> | Specifies the scopes required for accessing Google APIs The default is defined in the configuration. | | |
581
+ | **`nonce`** | <code>string</code> | Nonce | | |
582
+ | **`forceRefreshToken`** | <code>boolean</code> | Force refresh token (only for Android) | <code>false</code> | |
583
+ | **`forcePrompt`** | <code>boolean</code> | Force account selection prompt (iOS) | <code>false</code> | |
584
+ | **`style`** | <code>'bottom' \| 'standard'</code> | Style | <code>'standard'</code> | |
585
+ | **`filterByAuthorizedAccounts`** | <code>boolean</code> | Filter by authorized accounts (Android only) | <code>true</code> | |
586
+ | **`autoSelectEnabled`** | <code>boolean</code> | Auto select enabled (Android only) | <code>false</code> | |
587
+ | **`prompt`** | <code>'none' \| 'consent' \| 'select_account' \| 'consent select_account' \| 'select_account consent'</code> | Prompt parameter for Google OAuth (Web only) | | 7.12.0 |
587
588
 
588
589
 
589
590
  #### AppleProviderOptions
package/dist/docs.json CHANGED
@@ -597,6 +597,38 @@
597
597
  "docs": "Auto select enabled (Android only)",
598
598
  "complexTypes": [],
599
599
  "type": "boolean | undefined"
600
+ },
601
+ {
602
+ "name": "prompt",
603
+ "tags": [
604
+ {
605
+ "text": "A space-delimited, case-sensitive list of prompts to present the user.\nIf you don't specify this parameter, the user will be prompted only the first time your project requests access.\n\n**Possible values:**\n- `none`: Don't display any authentication or consent screens. Must not be specified with other values.\n- `consent`: Prompt the user for consent.\n- `select_account`: Prompt the user to select an account.\n\n**Examples:**\n- `prompt: 'consent'` - Always show consent screen\n- `prompt: 'select_account'` - Always show account selection\n- `prompt: 'consent select_account'` - Show both consent and account selection\n\n**Note:** This parameter only affects web platform behavior. Mobile platforms use their own native prompts.",
606
+ "name": "description"
607
+ },
608
+ {
609
+ "text": "'consent'",
610
+ "name": "example"
611
+ },
612
+ {
613
+ "text": "'select_account'",
614
+ "name": "example"
615
+ },
616
+ {
617
+ "text": "'consent select_account'",
618
+ "name": "example"
619
+ },
620
+ {
621
+ "text": " [Google OAuth2 Prompt Parameter](https://developers.google.com/identity/protocols/oauth2/openid-connect#prompt)",
622
+ "name": "see"
623
+ },
624
+ {
625
+ "text": "7.12.0",
626
+ "name": "since"
627
+ }
628
+ ],
629
+ "docs": "Prompt parameter for Google OAuth (Web only)",
630
+ "complexTypes": [],
631
+ "type": "'none' | 'consent' | 'select_account' | 'consent select_account' | 'select_account consent' | undefined"
600
632
  }
601
633
  ]
602
634
  },
@@ -198,6 +198,30 @@ export interface GoogleLoginOptions {
198
198
  * @default false
199
199
  */
200
200
  autoSelectEnabled?: boolean;
201
+ /**
202
+ * Prompt parameter for Google OAuth (Web only)
203
+ * @description A space-delimited, case-sensitive list of prompts to present the user.
204
+ * If you don't specify this parameter, the user will be prompted only the first time your project requests access.
205
+ *
206
+ * **Possible values:**
207
+ * - `none`: Don't display any authentication or consent screens. Must not be specified with other values.
208
+ * - `consent`: Prompt the user for consent.
209
+ * - `select_account`: Prompt the user to select an account.
210
+ *
211
+ * **Examples:**
212
+ * - `prompt: 'consent'` - Always show consent screen
213
+ * - `prompt: 'select_account'` - Always show account selection
214
+ * - `prompt: 'consent select_account'` - Show both consent and account selection
215
+ *
216
+ * **Note:** This parameter only affects web platform behavior. Mobile platforms use their own native prompts.
217
+ *
218
+ * @example 'consent'
219
+ * @example 'select_account'
220
+ * @example 'consent select_account'
221
+ * @see [Google OAuth2 Prompt Parameter](https://developers.google.com/identity/protocols/oauth2/openid-connect#prompt)
222
+ * @since 7.12.0
223
+ */
224
+ prompt?: 'none' | 'consent' | 'select_account' | 'consent select_account' | 'select_account consent';
201
225
  }
202
226
  export interface GoogleLoginResponseOnline {
203
227
  accessToken: AccessToken | null;
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export interface InitializeOptions {\n facebook?: {\n /**\n * Facebook App ID, provided by Facebook for web, in mobile it's set in the native files\n */\n appId: string;\n /**\n * Facebook Client Token, provided by Facebook for web, in mobile it's set in the native files\n */\n clientToken?: string;\n /**\n * Locale\n * @description The locale to use for the Facebook SDK (e.g., 'en_US', 'fr_FR', 'es_ES')\n * @default 'en_US'\n * @example 'fr_FR'\n */\n locale?: string;\n };\n\n google?: {\n /**\n * The app's client ID, found and created in the Google Developers Console.\n * Required for iOS platform.\n * @example xxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com\n * @since 3.1.0\n */\n iOSClientId?: string;\n /**\n * The app's server client ID, required for offline mode on iOS.\n * Should be the same value as webClientId.\n * Found and created in the Google Developers Console.\n * @example xxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com\n * @since 3.1.0\n */\n iOSServerClientId?: string;\n /**\n * The app's web client ID, found and created in the Google Developers Console.\n * Required for Android and Web platforms.\n * @example xxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com\n * @since 3.1.0\n */\n webClientId?: string;\n /**\n * The login mode, can be online or offline.\n * - online: Returns user profile data and access tokens (default)\n * - offline: Returns only serverAuthCode for backend authentication, no user profile data\n * Note: offline mode requires iOSServerClientId to be set on iOS\n * @example offline\n * @since 3.1.0\n */\n mode?: 'online' | 'offline';\n /**\n * Filter visible accounts by hosted domain\n * @description filter visible accounts by hosted domain\n */\n hostedDomain?: string;\n /**\n * Google Redirect URL, should be your backend url that is configured in your google app\n */\n redirectUrl?: string;\n };\n apple?: {\n /**\n * Apple Client ID, provided by Apple for web and Android\n */\n clientId?: string;\n /**\n * Apple Redirect URL, should be your backend url that is configured in your apple app\n *\n * **Note**: Use empty string `''` for iOS to prevent redirect.\n * **Note**: Not required when using Broadcast Channel mode on Android.\n */\n redirectUrl?: string;\n /**\n * Use proper token exchange for Apple Sign-In\n * @description Controls how Apple Sign-In tokens are handled and what gets returned:\n *\n * **When `true` (Recommended for new implementations):**\n * - Exchanges authorization code for proper access tokens via Apple's token endpoint\n * - `idToken`: JWT containing user identity information (email, name, user ID)\n * - `accessToken.token`: Proper access token from Apple (short-lived, ~1 hour)\n * - `authorizationCode`: Raw authorization code for backend token exchange\n *\n * **When `false` (Default - Legacy mode):**\n * - Uses authorization code directly as access token for backward compatibility\n * - `idToken`: JWT containing user identity information (email, name, user ID)\n * - `accessToken.token`: The authorization code itself (not a real access token)\n * - `authorizationCode`: undefined\n *\n * @default false\n * @example\n * // Enable proper token exchange (recommended)\n * useProperTokenExchange: true\n * // Result: idToken=JWT, accessToken=real_token, authorizationCode=present\n *\n * // Legacy mode (backward compatibility)\n * useProperTokenExchange: false\n * // Result: idToken=JWT, accessToken=auth_code, authorizationCode=undefined\n */\n useProperTokenExchange?: boolean;\n /**\n * Use Broadcast Channel for Android Apple Sign-In (Recommended)\n * @description When enabled, Android uses Broadcast Channel API instead of URL redirects.\n * This eliminates the need for redirect URL configuration and server-side setup.\n *\n * **Benefits:**\n * - No redirect URL configuration required\n * - No backend server needed for Android\n * - Simpler setup and more reliable communication\n * - Direct client-server communication via Broadcast Channel\n *\n * **When `true`:**\n * - Uses Broadcast Channel for authentication flow\n * - `redirectUrl` is ignored\n * - Requires Broadcast Channel compatible backend or direct token handling\n *\n * **When `false` (Default - Legacy mode):**\n * - Uses traditional URL redirect flow\n * - Requires `redirectUrl` configuration\n * - Requires backend server for token exchange\n *\n * @default false\n * @since 7.10.0\n * @example\n * // Enable Broadcast Channel mode (recommended for new Android implementations)\n * useBroadcastChannel: true\n * // Result: Simplified setup, no redirect URL needed\n *\n * // Legacy mode (backward compatibility)\n * useBroadcastChannel: false\n * // Result: Traditional URL redirect flow with server-side setup\n */\n useBroadcastChannel?: boolean;\n };\n}\n\nexport interface FacebookLoginOptions {\n /**\n * Permissions\n * @description select permissions to login with\n */\n permissions: string[];\n /**\n * Is Limited Login\n * @description use limited login for Facebook iOS only. Important: This is iOS-only and doesn't affect Android.\n * Even if set to false, Facebook will automatically force it to true if App Tracking Transparency (ATT) permission is not granted.\n * Developers should always be prepared to handle both limited and full login scenarios.\n * @default false\n */\n limitedLogin?: boolean;\n /**\n * Nonce\n * @description A custom nonce to use for the login request\n */\n nonce?: string;\n}\n\nexport interface GoogleLoginOptions {\n /**\n * Specifies the scopes required for accessing Google APIs\n * The default is defined in the configuration.\n * @example [\"profile\", \"email\"]\n * @see [Google OAuth2 Scopes](https://developers.google.com/identity/protocols/oauth2/scopes)\n */\n scopes?: string[];\n /**\n * Nonce\n * @description nonce\n */\n nonce?: string;\n /**\n * Force refresh token (only for Android)\n * @description force refresh token\n * @default false\n */\n forceRefreshToken?: boolean;\n /**\n * Force account selection prompt (iOS)\n * @description forces the account selection prompt to appear on iOS\n * @default false\n */\n forcePrompt?: boolean;\n /**\n * Style\n * @description style\n * @default 'standard'\n */\n style?: 'bottom' | 'standard';\n /**\n * Filter by authorized accounts (Android only)\n * @description Only show accounts that have previously been used to sign in to the app.\n * This option is only available for the 'bottom' style.\n * Note: For Family Link supervised accounts, this should be set to false.\n * @default true\n */\n filterByAuthorizedAccounts?: boolean;\n /**\n * Auto select enabled (Android only)\n * @description Automatically select the account if only one Google account is available.\n * This option is only available for the 'bottom' style.\n * @default false\n */\n autoSelectEnabled?: boolean;\n}\n\nexport interface GoogleLoginResponseOnline {\n accessToken: AccessToken | null;\n idToken: string | null;\n profile: {\n email: string | null;\n familyName: string | null;\n givenName: string | null;\n id: string | null;\n name: string | null;\n imageUrl: string | null;\n };\n responseType: 'online';\n}\n\nexport interface GoogleLoginResponseOffline {\n serverAuthCode: string;\n responseType: 'offline';\n}\n\nexport type GoogleLoginResponse = GoogleLoginResponseOnline | GoogleLoginResponseOffline;\n\nexport interface AppleProviderOptions {\n /**\n * Scopes\n * @description An array of scopes to request during login\n * @example [\"name\", \"email\"]\n * default: [\"name\", \"email\"]\n */\n scopes?: string[];\n /**\n * Nonce\n * @description nonce\n */\n nonce?: string;\n /**\n * State\n * @description state\n */\n state?: string;\n /**\n * Use Broadcast Channel for authentication flow\n * @description When enabled, uses Broadcast Channel API for communication instead of URL redirects.\n * Only applicable on platforms that support Broadcast Channel (Android).\n * @default false\n */\n useBroadcastChannel?: boolean;\n}\n\nexport interface AppleProviderResponse {\n /**\n * Access token from Apple\n * @description Content depends on `useProperTokenExchange` setting:\n * - When `useProperTokenExchange: true`: Real access token from Apple (~1 hour validity)\n * - When `useProperTokenExchange: false`: Contains authorization code as token (legacy mode)\n * Use `idToken` for user authentication, `accessToken` for API calls when properly exchanged.\n */\n accessToken: AccessToken | null;\n\n /**\n * Identity token (JWT) from Apple\n * @description Always contains the JWT with user identity information including:\n * - User ID (sub claim)\n * - Email (if user granted permission)\n * - Name components (if user granted permission)\n * - Email verification status\n * This is the primary token for user authentication and should be verified on your backend.\n */\n idToken: string | null;\n\n /**\n * User profile information\n * @description Basic user profile data extracted from the identity token and Apple response:\n * - `user`: Apple's user identifier (sub claim from idToken)\n * - `email`: User's email address (if permission granted)\n * - `givenName`: User's first name (if permission granted)\n * - `familyName`: User's last name (if permission granted)\n */\n profile: {\n user: string;\n email: string | null;\n givenName: string | null;\n familyName: string | null;\n };\n\n /**\n * Authorization code for proper token exchange (when useProperTokenExchange is enabled)\n * @description Only present when `useProperTokenExchange` is `true`. This code should be exchanged\n * for proper access tokens on your backend using Apple's token endpoint. Use this for secure\n * server-side token validation and to obtain refresh tokens.\n * @see https://developer.apple.com/documentation/sign_in_with_apple/tokenresponse\n */\n authorizationCode?: string;\n}\n\nexport type LoginOptions =\n | {\n provider: 'facebook';\n options: FacebookLoginOptions;\n }\n | {\n provider: 'google';\n options: GoogleLoginOptions;\n }\n | {\n provider: 'apple';\n options: AppleProviderOptions;\n };\n\nexport type LoginResult =\n | {\n provider: 'facebook';\n result: FacebookLoginResponse;\n }\n | {\n provider: 'google';\n result: GoogleLoginResponse;\n }\n | {\n provider: 'apple';\n result: AppleProviderResponse;\n };\n\nexport interface AccessToken {\n applicationId?: string;\n declinedPermissions?: string[];\n expires?: string;\n isExpired?: boolean;\n lastRefresh?: string;\n permissions?: string[];\n token: string;\n refreshToken?: string;\n userId?: string;\n}\n\nexport interface FacebookLoginResponse {\n accessToken: AccessToken | null;\n idToken: string | null;\n profile: {\n userID: string;\n email: string | null;\n friendIDs: string[];\n birthday: string | null;\n ageRange: { min?: number; max?: number } | null;\n gender: string | null;\n location: { id: string; name: string } | null;\n hometown: { id: string; name: string } | null;\n profileURL: string | null;\n name: string | null;\n imageURL: string | null;\n };\n}\n\nexport interface AuthorizationCode {\n /**\n * Jwt\n * @description A JSON web token\n */\n jwt?: string;\n /**\n * Access Token\n * @description An access token\n */\n accessToken?: string;\n}\n\nexport interface AuthorizationCodeOptions {\n /**\n * Provider\n * @description Provider for the authorization code\n */\n provider: 'apple' | 'google' | 'facebook';\n}\n\nexport interface isLoggedInOptions {\n /**\n * Provider\n * @description Provider for the isLoggedIn\n */\n provider: 'apple' | 'google' | 'facebook';\n}\n\n// Define the provider-specific call types\nexport type ProviderSpecificCall = 'facebook#getProfile' | 'facebook#requestTracking';\n\n// Define the options and response types for each specific call\nexport interface FacebookGetProfileOptions {\n /**\n * Fields to retrieve from Facebook profile\n * @example [\"id\", \"name\", \"email\", \"picture\"]\n */\n fields?: string[];\n}\n\nexport interface FacebookGetProfileResponse {\n /**\n * Facebook profile data\n */\n profile: {\n id: string | null;\n name: string | null;\n email: string | null;\n first_name: string | null;\n last_name: string | null;\n picture?: {\n data: {\n height: number | null;\n is_silhouette: boolean | null;\n url: string | null;\n width: number | null;\n };\n } | null;\n [key: string]: any; // For additional fields that might be requested\n };\n}\n\nexport type FacebookRequestTrackingOptions = Record<string, never>;\n\nexport interface FacebookRequestTrackingResponse {\n /**\n * App tracking authorization status\n */\n status: 'authorized' | 'denied' | 'notDetermined' | 'restricted';\n}\n\n// Map call strings to their options and response types\nexport type ProviderSpecificCallOptionsMap = {\n 'facebook#getProfile': FacebookGetProfileOptions;\n 'facebook#requestTracking': FacebookRequestTrackingOptions;\n};\n\nexport type ProviderSpecificCallResponseMap = {\n 'facebook#getProfile': FacebookGetProfileResponse;\n 'facebook#requestTracking': FacebookRequestTrackingResponse;\n};\n\n// Add a helper type to map providers to their response types\nexport type ProviderResponseMap = {\n facebook: FacebookLoginResponse;\n google: GoogleLoginResponse;\n apple: AppleProviderResponse;\n};\n\nexport interface SocialLoginPlugin {\n /**\n * Initialize the plugin\n * @description initialize the plugin with the required options\n */\n initialize(options: InitializeOptions): Promise<void>;\n /**\n * Login with the selected provider\n * @description login with the selected provider\n */\n login<T extends LoginOptions['provider']>(\n options: Extract<LoginOptions, { provider: T }>,\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }>;\n /**\n * Logout\n * @description logout the user\n */\n logout(options: { provider: 'apple' | 'google' | 'facebook' }): Promise<void>;\n /**\n * IsLoggedIn\n * @description logout the user\n */\n isLoggedIn(options: isLoggedInOptions): Promise<{ isLoggedIn: boolean }>;\n\n /**\n * Get the current access token\n * @description get the current access token\n */\n getAuthorizationCode(options: AuthorizationCodeOptions): Promise<AuthorizationCode>;\n /**\n * Refresh the access token\n * @description refresh the access token\n */\n refresh(options: LoginOptions): Promise<void>;\n\n /**\n * Execute provider-specific calls\n * @description Execute a provider-specific functionality\n */\n providerSpecificCall<T extends ProviderSpecificCall>(options: {\n call: T;\n options: ProviderSpecificCallOptionsMap[T];\n }): Promise<ProviderSpecificCallResponseMap[T]>;\n}\n"]}
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export interface InitializeOptions {\n facebook?: {\n /**\n * Facebook App ID, provided by Facebook for web, in mobile it's set in the native files\n */\n appId: string;\n /**\n * Facebook Client Token, provided by Facebook for web, in mobile it's set in the native files\n */\n clientToken?: string;\n /**\n * Locale\n * @description The locale to use for the Facebook SDK (e.g., 'en_US', 'fr_FR', 'es_ES')\n * @default 'en_US'\n * @example 'fr_FR'\n */\n locale?: string;\n };\n\n google?: {\n /**\n * The app's client ID, found and created in the Google Developers Console.\n * Required for iOS platform.\n * @example xxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com\n * @since 3.1.0\n */\n iOSClientId?: string;\n /**\n * The app's server client ID, required for offline mode on iOS.\n * Should be the same value as webClientId.\n * Found and created in the Google Developers Console.\n * @example xxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com\n * @since 3.1.0\n */\n iOSServerClientId?: string;\n /**\n * The app's web client ID, found and created in the Google Developers Console.\n * Required for Android and Web platforms.\n * @example xxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com\n * @since 3.1.0\n */\n webClientId?: string;\n /**\n * The login mode, can be online or offline.\n * - online: Returns user profile data and access tokens (default)\n * - offline: Returns only serverAuthCode for backend authentication, no user profile data\n * Note: offline mode requires iOSServerClientId to be set on iOS\n * @example offline\n * @since 3.1.0\n */\n mode?: 'online' | 'offline';\n /**\n * Filter visible accounts by hosted domain\n * @description filter visible accounts by hosted domain\n */\n hostedDomain?: string;\n /**\n * Google Redirect URL, should be your backend url that is configured in your google app\n */\n redirectUrl?: string;\n };\n apple?: {\n /**\n * Apple Client ID, provided by Apple for web and Android\n */\n clientId?: string;\n /**\n * Apple Redirect URL, should be your backend url that is configured in your apple app\n *\n * **Note**: Use empty string `''` for iOS to prevent redirect.\n * **Note**: Not required when using Broadcast Channel mode on Android.\n */\n redirectUrl?: string;\n /**\n * Use proper token exchange for Apple Sign-In\n * @description Controls how Apple Sign-In tokens are handled and what gets returned:\n *\n * **When `true` (Recommended for new implementations):**\n * - Exchanges authorization code for proper access tokens via Apple's token endpoint\n * - `idToken`: JWT containing user identity information (email, name, user ID)\n * - `accessToken.token`: Proper access token from Apple (short-lived, ~1 hour)\n * - `authorizationCode`: Raw authorization code for backend token exchange\n *\n * **When `false` (Default - Legacy mode):**\n * - Uses authorization code directly as access token for backward compatibility\n * - `idToken`: JWT containing user identity information (email, name, user ID)\n * - `accessToken.token`: The authorization code itself (not a real access token)\n * - `authorizationCode`: undefined\n *\n * @default false\n * @example\n * // Enable proper token exchange (recommended)\n * useProperTokenExchange: true\n * // Result: idToken=JWT, accessToken=real_token, authorizationCode=present\n *\n * // Legacy mode (backward compatibility)\n * useProperTokenExchange: false\n * // Result: idToken=JWT, accessToken=auth_code, authorizationCode=undefined\n */\n useProperTokenExchange?: boolean;\n /**\n * Use Broadcast Channel for Android Apple Sign-In (Recommended)\n * @description When enabled, Android uses Broadcast Channel API instead of URL redirects.\n * This eliminates the need for redirect URL configuration and server-side setup.\n *\n * **Benefits:**\n * - No redirect URL configuration required\n * - No backend server needed for Android\n * - Simpler setup and more reliable communication\n * - Direct client-server communication via Broadcast Channel\n *\n * **When `true`:**\n * - Uses Broadcast Channel for authentication flow\n * - `redirectUrl` is ignored\n * - Requires Broadcast Channel compatible backend or direct token handling\n *\n * **When `false` (Default - Legacy mode):**\n * - Uses traditional URL redirect flow\n * - Requires `redirectUrl` configuration\n * - Requires backend server for token exchange\n *\n * @default false\n * @since 7.10.0\n * @example\n * // Enable Broadcast Channel mode (recommended for new Android implementations)\n * useBroadcastChannel: true\n * // Result: Simplified setup, no redirect URL needed\n *\n * // Legacy mode (backward compatibility)\n * useBroadcastChannel: false\n * // Result: Traditional URL redirect flow with server-side setup\n */\n useBroadcastChannel?: boolean;\n };\n}\n\nexport interface FacebookLoginOptions {\n /**\n * Permissions\n * @description select permissions to login with\n */\n permissions: string[];\n /**\n * Is Limited Login\n * @description use limited login for Facebook iOS only. Important: This is iOS-only and doesn't affect Android.\n * Even if set to false, Facebook will automatically force it to true if App Tracking Transparency (ATT) permission is not granted.\n * Developers should always be prepared to handle both limited and full login scenarios.\n * @default false\n */\n limitedLogin?: boolean;\n /**\n * Nonce\n * @description A custom nonce to use for the login request\n */\n nonce?: string;\n}\n\nexport interface GoogleLoginOptions {\n /**\n * Specifies the scopes required for accessing Google APIs\n * The default is defined in the configuration.\n * @example [\"profile\", \"email\"]\n * @see [Google OAuth2 Scopes](https://developers.google.com/identity/protocols/oauth2/scopes)\n */\n scopes?: string[];\n /**\n * Nonce\n * @description nonce\n */\n nonce?: string;\n /**\n * Force refresh token (only for Android)\n * @description force refresh token\n * @default false\n */\n forceRefreshToken?: boolean;\n /**\n * Force account selection prompt (iOS)\n * @description forces the account selection prompt to appear on iOS\n * @default false\n */\n forcePrompt?: boolean;\n /**\n * Style\n * @description style\n * @default 'standard'\n */\n style?: 'bottom' | 'standard';\n /**\n * Filter by authorized accounts (Android only)\n * @description Only show accounts that have previously been used to sign in to the app.\n * This option is only available for the 'bottom' style.\n * Note: For Family Link supervised accounts, this should be set to false.\n * @default true\n */\n filterByAuthorizedAccounts?: boolean;\n /**\n * Auto select enabled (Android only)\n * @description Automatically select the account if only one Google account is available.\n * This option is only available for the 'bottom' style.\n * @default false\n */\n autoSelectEnabled?: boolean;\n /**\n * Prompt parameter for Google OAuth (Web only)\n * @description A space-delimited, case-sensitive list of prompts to present the user.\n * If you don't specify this parameter, the user will be prompted only the first time your project requests access.\n *\n * **Possible values:**\n * - `none`: Don't display any authentication or consent screens. Must not be specified with other values.\n * - `consent`: Prompt the user for consent.\n * - `select_account`: Prompt the user to select an account.\n *\n * **Examples:**\n * - `prompt: 'consent'` - Always show consent screen\n * - `prompt: 'select_account'` - Always show account selection\n * - `prompt: 'consent select_account'` - Show both consent and account selection\n *\n * **Note:** This parameter only affects web platform behavior. Mobile platforms use their own native prompts.\n *\n * @example 'consent'\n * @example 'select_account'\n * @example 'consent select_account'\n * @see [Google OAuth2 Prompt Parameter](https://developers.google.com/identity/protocols/oauth2/openid-connect#prompt)\n * @since 7.12.0\n */\n prompt?: 'none' | 'consent' | 'select_account' | 'consent select_account' | 'select_account consent';\n}\n\nexport interface GoogleLoginResponseOnline {\n accessToken: AccessToken | null;\n idToken: string | null;\n profile: {\n email: string | null;\n familyName: string | null;\n givenName: string | null;\n id: string | null;\n name: string | null;\n imageUrl: string | null;\n };\n responseType: 'online';\n}\n\nexport interface GoogleLoginResponseOffline {\n serverAuthCode: string;\n responseType: 'offline';\n}\n\nexport type GoogleLoginResponse = GoogleLoginResponseOnline | GoogleLoginResponseOffline;\n\nexport interface AppleProviderOptions {\n /**\n * Scopes\n * @description An array of scopes to request during login\n * @example [\"name\", \"email\"]\n * default: [\"name\", \"email\"]\n */\n scopes?: string[];\n /**\n * Nonce\n * @description nonce\n */\n nonce?: string;\n /**\n * State\n * @description state\n */\n state?: string;\n /**\n * Use Broadcast Channel for authentication flow\n * @description When enabled, uses Broadcast Channel API for communication instead of URL redirects.\n * Only applicable on platforms that support Broadcast Channel (Android).\n * @default false\n */\n useBroadcastChannel?: boolean;\n}\n\nexport interface AppleProviderResponse {\n /**\n * Access token from Apple\n * @description Content depends on `useProperTokenExchange` setting:\n * - When `useProperTokenExchange: true`: Real access token from Apple (~1 hour validity)\n * - When `useProperTokenExchange: false`: Contains authorization code as token (legacy mode)\n * Use `idToken` for user authentication, `accessToken` for API calls when properly exchanged.\n */\n accessToken: AccessToken | null;\n\n /**\n * Identity token (JWT) from Apple\n * @description Always contains the JWT with user identity information including:\n * - User ID (sub claim)\n * - Email (if user granted permission)\n * - Name components (if user granted permission)\n * - Email verification status\n * This is the primary token for user authentication and should be verified on your backend.\n */\n idToken: string | null;\n\n /**\n * User profile information\n * @description Basic user profile data extracted from the identity token and Apple response:\n * - `user`: Apple's user identifier (sub claim from idToken)\n * - `email`: User's email address (if permission granted)\n * - `givenName`: User's first name (if permission granted)\n * - `familyName`: User's last name (if permission granted)\n */\n profile: {\n user: string;\n email: string | null;\n givenName: string | null;\n familyName: string | null;\n };\n\n /**\n * Authorization code for proper token exchange (when useProperTokenExchange is enabled)\n * @description Only present when `useProperTokenExchange` is `true`. This code should be exchanged\n * for proper access tokens on your backend using Apple's token endpoint. Use this for secure\n * server-side token validation and to obtain refresh tokens.\n * @see https://developer.apple.com/documentation/sign_in_with_apple/tokenresponse\n */\n authorizationCode?: string;\n}\n\nexport type LoginOptions =\n | {\n provider: 'facebook';\n options: FacebookLoginOptions;\n }\n | {\n provider: 'google';\n options: GoogleLoginOptions;\n }\n | {\n provider: 'apple';\n options: AppleProviderOptions;\n };\n\nexport type LoginResult =\n | {\n provider: 'facebook';\n result: FacebookLoginResponse;\n }\n | {\n provider: 'google';\n result: GoogleLoginResponse;\n }\n | {\n provider: 'apple';\n result: AppleProviderResponse;\n };\n\nexport interface AccessToken {\n applicationId?: string;\n declinedPermissions?: string[];\n expires?: string;\n isExpired?: boolean;\n lastRefresh?: string;\n permissions?: string[];\n token: string;\n refreshToken?: string;\n userId?: string;\n}\n\nexport interface FacebookLoginResponse {\n accessToken: AccessToken | null;\n idToken: string | null;\n profile: {\n userID: string;\n email: string | null;\n friendIDs: string[];\n birthday: string | null;\n ageRange: { min?: number; max?: number } | null;\n gender: string | null;\n location: { id: string; name: string } | null;\n hometown: { id: string; name: string } | null;\n profileURL: string | null;\n name: string | null;\n imageURL: string | null;\n };\n}\n\nexport interface AuthorizationCode {\n /**\n * Jwt\n * @description A JSON web token\n */\n jwt?: string;\n /**\n * Access Token\n * @description An access token\n */\n accessToken?: string;\n}\n\nexport interface AuthorizationCodeOptions {\n /**\n * Provider\n * @description Provider for the authorization code\n */\n provider: 'apple' | 'google' | 'facebook';\n}\n\nexport interface isLoggedInOptions {\n /**\n * Provider\n * @description Provider for the isLoggedIn\n */\n provider: 'apple' | 'google' | 'facebook';\n}\n\n// Define the provider-specific call types\nexport type ProviderSpecificCall = 'facebook#getProfile' | 'facebook#requestTracking';\n\n// Define the options and response types for each specific call\nexport interface FacebookGetProfileOptions {\n /**\n * Fields to retrieve from Facebook profile\n * @example [\"id\", \"name\", \"email\", \"picture\"]\n */\n fields?: string[];\n}\n\nexport interface FacebookGetProfileResponse {\n /**\n * Facebook profile data\n */\n profile: {\n id: string | null;\n name: string | null;\n email: string | null;\n first_name: string | null;\n last_name: string | null;\n picture?: {\n data: {\n height: number | null;\n is_silhouette: boolean | null;\n url: string | null;\n width: number | null;\n };\n } | null;\n [key: string]: any; // For additional fields that might be requested\n };\n}\n\nexport type FacebookRequestTrackingOptions = Record<string, never>;\n\nexport interface FacebookRequestTrackingResponse {\n /**\n * App tracking authorization status\n */\n status: 'authorized' | 'denied' | 'notDetermined' | 'restricted';\n}\n\n// Map call strings to their options and response types\nexport type ProviderSpecificCallOptionsMap = {\n 'facebook#getProfile': FacebookGetProfileOptions;\n 'facebook#requestTracking': FacebookRequestTrackingOptions;\n};\n\nexport type ProviderSpecificCallResponseMap = {\n 'facebook#getProfile': FacebookGetProfileResponse;\n 'facebook#requestTracking': FacebookRequestTrackingResponse;\n};\n\n// Add a helper type to map providers to their response types\nexport type ProviderResponseMap = {\n facebook: FacebookLoginResponse;\n google: GoogleLoginResponse;\n apple: AppleProviderResponse;\n};\n\nexport interface SocialLoginPlugin {\n /**\n * Initialize the plugin\n * @description initialize the plugin with the required options\n */\n initialize(options: InitializeOptions): Promise<void>;\n /**\n * Login with the selected provider\n * @description login with the selected provider\n */\n login<T extends LoginOptions['provider']>(\n options: Extract<LoginOptions, { provider: T }>,\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }>;\n /**\n * Logout\n * @description logout the user\n */\n logout(options: { provider: 'apple' | 'google' | 'facebook' }): Promise<void>;\n /**\n * IsLoggedIn\n * @description logout the user\n */\n isLoggedIn(options: isLoggedInOptions): Promise<{ isLoggedIn: boolean }>;\n\n /**\n * Get the current access token\n * @description get the current access token\n */\n getAuthorizationCode(options: AuthorizationCodeOptions): Promise<AuthorizationCode>;\n /**\n * Refresh the access token\n * @description refresh the access token\n */\n refresh(options: LoginOptions): Promise<void>;\n\n /**\n * Execute provider-specific calls\n * @description Execute a provider-specific functionality\n */\n providerSpecificCall<T extends ProviderSpecificCall>(options: {\n call: T;\n options: ProviderSpecificCallOptionsMap[T];\n }): Promise<ProviderSpecificCallResponseMap[T]>;\n}\n"]}
@@ -45,6 +45,7 @@ export class GoogleSocialLogin extends BaseSocialLogin {
45
45
  scopes,
46
46
  nonce,
47
47
  hostedDomain: this.hostedDomain,
48
+ prompt: options.prompt,
48
49
  });
49
50
  }
50
51
  async logout() {
@@ -270,12 +271,15 @@ export class GoogleSocialLogin extends BaseSocialLogin {
270
271
  return null;
271
272
  }
272
273
  }
273
- async traditionalOAuth({ scopes, hostedDomain, nonce, }) {
274
+ async traditionalOAuth({ scopes, hostedDomain, nonce, prompt, }) {
274
275
  const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];
275
276
  const params = new URLSearchParams(Object.assign(Object.assign({ client_id: this.clientId, 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' }));
276
277
  if (hostedDomain !== undefined) {
277
278
  params.append('hd', hostedDomain);
278
279
  }
280
+ if (prompt !== undefined) {
281
+ params.append('prompt', prompt);
282
+ }
279
283
  const url = `https://accounts.google.com/o/oauth2/v2/auth?${params.toString()}`;
280
284
  const width = 500;
281
285
  const height = 600;
@@ -1 +1 @@
1
- {"version":3,"file":"google-provider.js","sourceRoot":"","sources":["../../src/google-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseSocialLogin } from './base';\nimport type { GoogleLoginOptions, LoginResult, ProviderResponseMap, AuthorizationCode } from './definitions';\n\nexport class GoogleSocialLogin extends BaseSocialLogin {\n private clientId: string | null = null;\n private hostedDomain?: string;\n private loginType: 'online' | 'offline' = 'online';\n private redirectUrl?: string;\n private GOOGLE_TOKEN_REQUEST_URL = 'https://www.googleapis.com/oauth2/v3/tokeninfo';\n private readonly GOOGLE_STATE_KEY = 'capgo_social_login_google_state';\n\n async initialize(\n clientId: string | null,\n mode?: 'online' | 'offline',\n hostedDomain?: string | null,\n redirectUrl?: string,\n ): Promise<void> {\n this.clientId = clientId;\n if (mode) {\n this.loginType = mode;\n }\n this.hostedDomain = hostedDomain as string | undefined;\n this.redirectUrl = redirectUrl;\n }\n\n async login<T extends 'google'>(\n options: GoogleLoginOptions,\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n if (!this.clientId) {\n throw new Error('Google Client ID not set. Call initialize() first.');\n }\n\n let scopes = options.scopes || [];\n\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 } else {\n scopes = [\n 'https://www.googleapis.com/auth/userinfo.email',\n 'https://www.googleapis.com/auth/userinfo.profile',\n 'openid',\n ];\n }\n\n const nonce = options.nonce || Math.random().toString(36).substring(2);\n\n // If scopes are provided, directly use the traditional OAuth flow\n return this.traditionalOAuth({\n scopes,\n nonce,\n hostedDomain: this.hostedDomain,\n });\n }\n\n async logout(): Promise<void> {\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) return;\n await this.rawLogoutGoogle(state.accessToken);\n }\n\n async isLoggedIn(): Promise<{ isLoggedIn: boolean }> {\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) return { isLoggedIn: false };\n\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 } else {\n try {\n await this.rawLogoutGoogle(state.accessToken, false);\n } catch (e) {\n console.error('Access token is not valid, but cannot logout', e);\n }\n return { isLoggedIn: false };\n }\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n async getAuthorizationCode(): Promise<AuthorizationCode> {\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) throw new Error('No Google authorization code available');\n\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 } else {\n try {\n await this.rawLogoutGoogle(state.accessToken, false);\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 } catch (e) {\n return Promise.reject(e);\n }\n }\n\n async refresh(): Promise<void> {\n // For Google, we can prompt for re-authentication\n return Promise.reject('Not implemented');\n }\n\n handleOAuthRedirect(url: URL): LoginResult | null {\n const paramsRaw = url.searchParams;\n const code = paramsRaw.get('code');\n\n if (code && paramsRaw.has('scope')) {\n return {\n provider: 'google',\n result: {\n serverAuthCode: code,\n responseType: 'offline',\n },\n };\n }\n\n const hash = url.hash.substring(1);\n console.log('handleOAuthRedirect', url.hash);\n if (!hash) return null;\n console.log('handleOAuthRedirect ok');\n\n const params = new URLSearchParams(hash);\n const accessToken = params.get('access_token');\n const idToken = params.get('id_token');\n\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\n private async accessTokenIsValid(accessToken: string): Promise<boolean> {\n const url = `${this.GOOGLE_TOKEN_REQUEST_URL}?access_token=${encodeURIComponent(accessToken)}`;\n\n try {\n // Make the GET request using fetch\n const response = await fetch(url);\n\n // Check if the response is successful\n if (!response.ok) {\n console.log(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response not successful. Status code: ${response.status}. Assuming that the token is not valid`,\n );\n return false;\n }\n\n // Get the response body as text\n const responseBody = await response.text();\n\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\n // Parse the response body as JSON\n let jsonObject: any;\n try {\n jsonObject = JSON.parse(responseBody);\n } catch (e) {\n console.error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${e}`,\n );\n throw new Error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${e}`,\n );\n }\n\n // Extract the 'expires_in' field\n const expiresInStr = jsonObject['expires_in'];\n\n if (expiresInStr === undefined || expiresInStr === null) {\n console.error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`,\n );\n throw new Error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`,\n );\n }\n\n // Parse 'expires_in' as an integer\n let expiresInInt: number;\n try {\n expiresInInt = parseInt(expiresInStr, 10);\n if (isNaN(expiresInInt)) {\n throw new Error(`'expires_in' is not a valid integer`);\n }\n } catch (e) {\n console.error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${expiresInStr} is not a valid integer. Error: ${e}`,\n );\n throw new Error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${expiresInStr} is not a valid integer. Error: ${e}`,\n );\n }\n\n // Determine if the access token is valid based on 'expires_in'\n return expiresInInt > 5;\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n private idTokenValid(idToken: string): boolean {\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 } catch (e) {\n return false;\n }\n }\n\n private async rawLogoutGoogle(accessToken: string, tokenValid: boolean | null = null) {\n if (tokenValid === null) {\n tokenValid = await this.accessTokenIsValid(accessToken);\n }\n\n if (tokenValid === true) {\n try {\n await fetch(`https://accounts.google.com/o/oauth2/revoke?token=${encodeURIComponent(accessToken)}`);\n this.clearStateGoogle();\n } catch (e) {\n // ignore\n }\n return;\n } else {\n this.clearStateGoogle();\n return;\n }\n }\n\n private persistStateGoogle(accessToken: string, idToken: string) {\n try {\n window.localStorage.setItem(this.GOOGLE_STATE_KEY, JSON.stringify({ accessToken, idToken }));\n } catch (e) {\n console.error('Cannot persist state google', e);\n }\n }\n\n private clearStateGoogle() {\n try {\n window.localStorage.removeItem(this.GOOGLE_STATE_KEY);\n } catch (e) {\n console.error('Cannot clear state google', e);\n }\n }\n\n private getGoogleState(): { accessToken: string; idToken: string } | null {\n try {\n const state = window.localStorage.getItem(this.GOOGLE_STATE_KEY);\n if (!state) return null;\n const { accessToken, idToken } = JSON.parse(state);\n return { accessToken, idToken };\n } catch (e) {\n console.error('Cannot get state google', e);\n return null;\n }\n }\n\n private async traditionalOAuth<T extends 'google'>({\n scopes,\n hostedDomain,\n nonce,\n }: GoogleLoginOptions & { hostedDomain?: string }): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];\n\n const params = new URLSearchParams({\n client_id: this.clientId!,\n redirect_uri: this.redirectUrl || window.location.origin + window.location.pathname,\n response_type: this.loginType === 'offline' ? 'code' : 'token id_token',\n scope: uniqueScopes.join(' '),\n ...(nonce && { nonce }),\n include_granted_scopes: 'true',\n state: 'popup',\n });\n if (hostedDomain !== undefined) {\n params.append('hd', hostedDomain);\n }\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\n let popupClosedInterval: number;\n let timeoutHandle: number;\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\n const handleMessage = (event: MessageEvent) => {\n if (event.origin !== window.location.origin || event.data?.source?.startsWith('angular')) return;\n\n if (event.data?.type === 'oauth-response') {\n window.removeEventListener('message', handleMessage);\n clearInterval(popupClosedInterval);\n\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' as T,\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 const { serverAuthCode } = event.data as {\n serverAuthCode: string;\n };\n resolve({\n provider: 'google' as T,\n result: {\n responseType: 'offline',\n serverAuthCode,\n },\n });\n }\n }\n // Don't reject for non-OAuth messages, just ignore them\n };\n\n window.addEventListener('message', handleMessage);\n\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\n popupClosedInterval = setInterval(() => {\n if (popup.closed) {\n clearInterval(popupClosedInterval);\n reject(new Error('Popup closed'));\n }\n }, 1000);\n });\n }\n}\n"]}
1
+ {"version":3,"file":"google-provider.js","sourceRoot":"","sources":["../../src/google-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseSocialLogin } from './base';\nimport type { GoogleLoginOptions, LoginResult, ProviderResponseMap, AuthorizationCode } from './definitions';\n\nexport class GoogleSocialLogin extends BaseSocialLogin {\n private clientId: string | null = null;\n private hostedDomain?: string;\n private loginType: 'online' | 'offline' = 'online';\n private redirectUrl?: string;\n private GOOGLE_TOKEN_REQUEST_URL = 'https://www.googleapis.com/oauth2/v3/tokeninfo';\n private readonly GOOGLE_STATE_KEY = 'capgo_social_login_google_state';\n\n async initialize(\n clientId: string | null,\n mode?: 'online' | 'offline',\n hostedDomain?: string | null,\n redirectUrl?: string,\n ): Promise<void> {\n this.clientId = clientId;\n if (mode) {\n this.loginType = mode;\n }\n this.hostedDomain = hostedDomain as string | undefined;\n this.redirectUrl = redirectUrl;\n }\n\n async login<T extends 'google'>(\n options: GoogleLoginOptions,\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n if (!this.clientId) {\n throw new Error('Google Client ID not set. Call initialize() first.');\n }\n\n let scopes = options.scopes || [];\n\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 } else {\n scopes = [\n 'https://www.googleapis.com/auth/userinfo.email',\n 'https://www.googleapis.com/auth/userinfo.profile',\n 'openid',\n ];\n }\n\n const nonce = options.nonce || Math.random().toString(36).substring(2);\n\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\n async logout(): Promise<void> {\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) return;\n await this.rawLogoutGoogle(state.accessToken);\n }\n\n async isLoggedIn(): Promise<{ isLoggedIn: boolean }> {\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) return { isLoggedIn: false };\n\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 } else {\n try {\n await this.rawLogoutGoogle(state.accessToken, false);\n } catch (e) {\n console.error('Access token is not valid, but cannot logout', e);\n }\n return { isLoggedIn: false };\n }\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n async getAuthorizationCode(): Promise<AuthorizationCode> {\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) throw new Error('No Google authorization code available');\n\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 } else {\n try {\n await this.rawLogoutGoogle(state.accessToken, false);\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 } catch (e) {\n return Promise.reject(e);\n }\n }\n\n async refresh(): Promise<void> {\n // For Google, we can prompt for re-authentication\n return Promise.reject('Not implemented');\n }\n\n handleOAuthRedirect(url: URL): LoginResult | null {\n const paramsRaw = url.searchParams;\n const code = paramsRaw.get('code');\n\n if (code && paramsRaw.has('scope')) {\n return {\n provider: 'google',\n result: {\n serverAuthCode: code,\n responseType: 'offline',\n },\n };\n }\n\n const hash = url.hash.substring(1);\n console.log('handleOAuthRedirect', url.hash);\n if (!hash) return null;\n console.log('handleOAuthRedirect ok');\n\n const params = new URLSearchParams(hash);\n const accessToken = params.get('access_token');\n const idToken = params.get('id_token');\n\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\n private async accessTokenIsValid(accessToken: string): Promise<boolean> {\n const url = `${this.GOOGLE_TOKEN_REQUEST_URL}?access_token=${encodeURIComponent(accessToken)}`;\n\n try {\n // Make the GET request using fetch\n const response = await fetch(url);\n\n // Check if the response is successful\n if (!response.ok) {\n console.log(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response not successful. Status code: ${response.status}. Assuming that the token is not valid`,\n );\n return false;\n }\n\n // Get the response body as text\n const responseBody = await response.text();\n\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\n // Parse the response body as JSON\n let jsonObject: any;\n try {\n jsonObject = JSON.parse(responseBody);\n } catch (e) {\n console.error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${e}`,\n );\n throw new Error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${e}`,\n );\n }\n\n // Extract the 'expires_in' field\n const expiresInStr = jsonObject['expires_in'];\n\n if (expiresInStr === undefined || expiresInStr === null) {\n console.error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`,\n );\n throw new Error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`,\n );\n }\n\n // Parse 'expires_in' as an integer\n let expiresInInt: number;\n try {\n expiresInInt = parseInt(expiresInStr, 10);\n if (isNaN(expiresInInt)) {\n throw new Error(`'expires_in' is not a valid integer`);\n }\n } catch (e) {\n console.error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${expiresInStr} is not a valid integer. Error: ${e}`,\n );\n throw new Error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${expiresInStr} is not a valid integer. Error: ${e}`,\n );\n }\n\n // Determine if the access token is valid based on 'expires_in'\n return expiresInInt > 5;\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n private idTokenValid(idToken: string): boolean {\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 } catch (e) {\n return false;\n }\n }\n\n private async rawLogoutGoogle(accessToken: string, tokenValid: boolean | null = null) {\n if (tokenValid === null) {\n tokenValid = await this.accessTokenIsValid(accessToken);\n }\n\n if (tokenValid === true) {\n try {\n await fetch(`https://accounts.google.com/o/oauth2/revoke?token=${encodeURIComponent(accessToken)}`);\n this.clearStateGoogle();\n } catch (e) {\n // ignore\n }\n return;\n } else {\n this.clearStateGoogle();\n return;\n }\n }\n\n private persistStateGoogle(accessToken: string, idToken: string) {\n try {\n window.localStorage.setItem(this.GOOGLE_STATE_KEY, JSON.stringify({ accessToken, idToken }));\n } catch (e) {\n console.error('Cannot persist state google', e);\n }\n }\n\n private clearStateGoogle() {\n try {\n window.localStorage.removeItem(this.GOOGLE_STATE_KEY);\n } catch (e) {\n console.error('Cannot clear state google', e);\n }\n }\n\n private getGoogleState(): { accessToken: string; idToken: string } | null {\n try {\n const state = window.localStorage.getItem(this.GOOGLE_STATE_KEY);\n if (!state) return null;\n const { accessToken, idToken } = JSON.parse(state);\n return { accessToken, idToken };\n } catch (e) {\n console.error('Cannot get state google', e);\n return null;\n }\n }\n\n private async traditionalOAuth<T extends 'google'>({\n scopes,\n hostedDomain,\n nonce,\n prompt,\n }: GoogleLoginOptions & { hostedDomain?: string }): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];\n\n const params = new URLSearchParams({\n client_id: this.clientId!,\n redirect_uri: this.redirectUrl || window.location.origin + window.location.pathname,\n response_type: this.loginType === 'offline' ? 'code' : 'token id_token',\n scope: uniqueScopes.join(' '),\n ...(nonce && { nonce }),\n include_granted_scopes: 'true',\n state: 'popup',\n });\n if (hostedDomain !== undefined) {\n params.append('hd', hostedDomain);\n }\n if (prompt !== undefined) {\n params.append('prompt', prompt);\n }\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\n let popupClosedInterval: number;\n let timeoutHandle: number;\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\n const handleMessage = (event: MessageEvent) => {\n if (event.origin !== window.location.origin || event.data?.source?.startsWith('angular')) return;\n\n if (event.data?.type === 'oauth-response') {\n window.removeEventListener('message', handleMessage);\n clearInterval(popupClosedInterval);\n\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' as T,\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 const { serverAuthCode } = event.data as {\n serverAuthCode: string;\n };\n resolve({\n provider: 'google' as T,\n result: {\n responseType: 'offline',\n serverAuthCode,\n },\n });\n }\n }\n // Don't reject for non-OAuth messages, just ignore them\n };\n\n window.addEventListener('message', handleMessage);\n\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\n popupClosedInterval = setInterval(() => {\n if (popup.closed) {\n clearInterval(popupClosedInterval);\n reject(new Error('Popup closed'));\n }\n }, 1000);\n });\n }\n}\n"]}
@@ -276,6 +276,7 @@ class GoogleSocialLogin extends BaseSocialLogin {
276
276
  scopes,
277
277
  nonce,
278
278
  hostedDomain: this.hostedDomain,
279
+ prompt: options.prompt,
279
280
  });
280
281
  }
281
282
  async logout() {
@@ -501,12 +502,15 @@ class GoogleSocialLogin extends BaseSocialLogin {
501
502
  return null;
502
503
  }
503
504
  }
504
- async traditionalOAuth({ scopes, hostedDomain, nonce, }) {
505
+ async traditionalOAuth({ scopes, hostedDomain, nonce, prompt, }) {
505
506
  const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];
506
507
  const params = new URLSearchParams(Object.assign(Object.assign({ client_id: this.clientId, 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' }));
507
508
  if (hostedDomain !== undefined) {
508
509
  params.append('hd', hostedDomain);
509
510
  }
511
+ if (prompt !== undefined) {
512
+ params.append('prompt', prompt);
513
+ }
510
514
  const url = `https://accounts.google.com/o/oauth2/v2/auth?${params.toString()}`;
511
515
  const width = 500;
512
516
  const height = 600;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs.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;\n AppleID.auth.init({\n clientId: this.clientId,\n scope: ((_a = options.scopes) === null || _a === void 0 ? void 0 : _a.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({ jwt: ((_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 });\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, }) {\n const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];\n const params = new URLSearchParams(Object.assign(Object.assign({ client_id: this.clientId, 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 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}\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.cjs.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;\n AppleID.auth.init({\n clientId: this.clientId,\n scope: ((_a = options.scopes) === null || _a === void 0 ? void 0 : _a.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({ jwt: ((_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 const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];\n const params = new URLSearchParams(Object.assign(Object.assign({ client_id: this.clientId, 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}\nSocialLoginWeb.OAUTH_STATE_KEY = 'social_login_oauth_pending';\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/dist/plugin.js CHANGED
@@ -275,6 +275,7 @@ var capacitorCapacitorUpdater = (function (exports, core) {
275
275
  scopes,
276
276
  nonce,
277
277
  hostedDomain: this.hostedDomain,
278
+ prompt: options.prompt,
278
279
  });
279
280
  }
280
281
  async logout() {
@@ -500,12 +501,15 @@ var capacitorCapacitorUpdater = (function (exports, core) {
500
501
  return null;
501
502
  }
502
503
  }
503
- async traditionalOAuth({ scopes, hostedDomain, nonce, }) {
504
+ async traditionalOAuth({ scopes, hostedDomain, nonce, prompt, }) {
504
505
  const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];
505
506
  const params = new URLSearchParams(Object.assign(Object.assign({ client_id: this.clientId, 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' }));
506
507
  if (hostedDomain !== undefined) {
507
508
  params.append('hd', hostedDomain);
508
509
  }
510
+ if (prompt !== undefined) {
511
+ params.append('prompt', prompt);
512
+ }
509
513
  const url = `https://accounts.google.com/o/oauth2/v2/auth?${params.toString()}`;
510
514
  const width = 500;
511
515
  const height = 600;
@@ -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;\n AppleID.auth.init({\n clientId: this.clientId,\n scope: ((_a = options.scopes) === null || _a === void 0 ? void 0 : _a.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({ jwt: ((_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 });\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, }) {\n const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];\n const params = new URLSearchParams(Object.assign(Object.assign({ client_id: this.clientId, 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 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}\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/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;\n AppleID.auth.init({\n clientId: this.clientId,\n scope: ((_a = options.scopes) === null || _a === void 0 ? void 0 : _a.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({ jwt: ((_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 const uniqueScopes = [...new Set([...(scopes || []), 'openid'])];\n const params = new URLSearchParams(Object.assign(Object.assign({ client_id: this.clientId, 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}\nSocialLoginWeb.OAUTH_STATE_KEY = 'social_login_oauth_pending';\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capgo/capacitor-social-login",
3
- "version": "7.11.24",
3
+ "version": "7.13.0",
4
4
  "description": "All social logins in one plugin",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",