@capgo/capacitor-social-login 0.0.77-alpha.0 → 0.0.77-alpha.2
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/Package.swift +2 -2
- package/README.md +9 -2
- package/android/build.gradle +2 -2
- package/android/src/main/AndroidManifest.xml +10 -1
- package/android/src/main/java/ee/forgr/capacitor/social/login/FacebookProvider.java +38 -1
- package/android/src/main/java/ee/forgr/capacitor/social/login/GoogleProvider.java +9 -1
- package/android/src/main/java/ee/forgr/capacitor/social/login/SocialLoginPlugin.java +12 -12
- package/dist/esm/web.js +3 -0
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +3 -0
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +3 -0
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/SocialLoginPlugin/FacebookProvider.swift +6 -5
- package/ios/Sources/SocialLoginPlugin/SocialLoginPlugin.swift +7 -5
- package/package.json +7 -7
package/Package.swift
CHANGED
|
@@ -12,11 +12,11 @@ let package = Package(
|
|
|
12
12
|
dependencies: [
|
|
13
13
|
.package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", branch: "main"),
|
|
14
14
|
// FBSDKCoreKit and FBSDKLoginKit
|
|
15
|
-
.package(url: "https://github.com/facebook/facebook-ios-sdk.git", .upToNextMajor(from: "17.
|
|
15
|
+
.package(url: "https://github.com/facebook/facebook-ios-sdk.git", .upToNextMajor(from: "17.4.0")),
|
|
16
16
|
// Add Google Sign-In dependency
|
|
17
17
|
.package(url: "https://github.com/google/GoogleSignIn-iOS.git", .upToNextMajor(from: "8.0.0")),
|
|
18
18
|
// Alamofire
|
|
19
|
-
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.
|
|
19
|
+
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.10.2"))
|
|
20
20
|
],
|
|
21
21
|
targets: [
|
|
22
22
|
.target(
|
package/README.md
CHANGED
|
@@ -15,6 +15,8 @@ This plugin implement social auth for:
|
|
|
15
15
|
|
|
16
16
|
We plan in the future to keep adding others social login and make this plugin the all in one solution.
|
|
17
17
|
|
|
18
|
+
This plugin is the only one who implement all 3 majors social login on WEB, IOS and Android
|
|
19
|
+
|
|
18
20
|
## Install
|
|
19
21
|
|
|
20
22
|
```bash
|
|
@@ -43,7 +45,7 @@ await SocialLogin.initialize({
|
|
|
43
45
|
const res = await SocialLogin.login({
|
|
44
46
|
provider: 'apple',
|
|
45
47
|
options: {
|
|
46
|
-
scopes: ['email', '
|
|
48
|
+
scopes: ['email', 'name'],
|
|
47
49
|
},
|
|
48
50
|
});
|
|
49
51
|
```
|
|
@@ -61,7 +63,7 @@ await SocialLogin.initialize({
|
|
|
61
63
|
const res = await SocialLogin.login({
|
|
62
64
|
provider: 'apple',
|
|
63
65
|
options: {
|
|
64
|
-
scopes: ['email', '
|
|
66
|
+
scopes: ['email', 'name'],
|
|
65
67
|
},
|
|
66
68
|
});
|
|
67
69
|
```
|
|
@@ -473,3 +475,8 @@ Refresh the access token
|
|
|
473
475
|
<code>T extends U ? T : never</code>
|
|
474
476
|
|
|
475
477
|
</docgen-api>
|
|
478
|
+
|
|
479
|
+
### Credits
|
|
480
|
+
|
|
481
|
+
This plugin implementation of google is based on [CapacitorGoogleAuth](https://github.com/CodetrixStudio/CapacitorGoogleAuth) with a lot of rework, the current maintainer is unreachable, we are thankful for his work and are now going forward on our own!
|
|
482
|
+
Thanks to [reslear](https://github.com/reslear) for helping to tranfer users to this plugin from the old one and all the work.
|
package/android/build.gradle
CHANGED
|
@@ -53,13 +53,13 @@ dependencies {
|
|
|
53
53
|
implementation project(':capacitor-android')
|
|
54
54
|
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
|
|
55
55
|
implementation 'com.facebook.android:facebook-login:17.0.2'
|
|
56
|
-
implementation 'com.squareup.okhttp3:okhttp:4.
|
|
56
|
+
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
|
|
57
57
|
implementation 'com.auth0.android:jwtdecode:2.0.2'
|
|
58
58
|
implementation "androidx.credentials:credentials:1.3.0"
|
|
59
59
|
implementation 'com.google.android.gms:play-services-auth:21.2.0'
|
|
60
60
|
implementation "androidx.credentials:credentials-play-services-auth:1.3.0"
|
|
61
61
|
implementation "com.google.android.libraries.identity.googleid:googleid:1.1.1"
|
|
62
|
-
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.
|
|
62
|
+
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.5.0'
|
|
63
63
|
testImplementation "junit:junit:$junitVersion"
|
|
64
64
|
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
|
|
65
65
|
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
1
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
xmlns:tools="http://schemas.android.com/tools">
|
|
2
3
|
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
|
|
3
4
|
<uses-permission android:name="android.permission.INTERNET"/>
|
|
5
|
+
|
|
6
|
+
<application>
|
|
7
|
+
<provider
|
|
8
|
+
android:name="com.facebook.internal.FacebookInitProvider"
|
|
9
|
+
android:authorities="${applicationId}.FacebookInitProvider"
|
|
10
|
+
android:exported="false"
|
|
11
|
+
tools:node="remove" />
|
|
12
|
+
</application>
|
|
4
13
|
</manifest>
|
|
@@ -5,6 +5,7 @@ import android.content.Intent;
|
|
|
5
5
|
import android.os.Bundle;
|
|
6
6
|
import android.util.Log;
|
|
7
7
|
import androidx.activity.result.ActivityResultRegistryOwner;
|
|
8
|
+
import androidx.annotation.Nullable;
|
|
8
9
|
import com.facebook.AccessToken;
|
|
9
10
|
import com.facebook.CallbackManager;
|
|
10
11
|
import com.facebook.FacebookCallback;
|
|
@@ -179,7 +180,43 @@ public class FacebookProvider implements SocialProvider {
|
|
|
179
180
|
@Override
|
|
180
181
|
public void refresh(PluginCall call) {
|
|
181
182
|
// Not implemented for Facebook
|
|
182
|
-
|
|
183
|
+
AccessToken accessToken = AccessToken.getCurrentAccessToken();
|
|
184
|
+
if (accessToken == null) {
|
|
185
|
+
call.reject("No access token?");
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (!accessToken.isDataAccessExpired() && !accessToken.isExpired()) {
|
|
189
|
+
JSObject ret = new JSObject();
|
|
190
|
+
ret.put("accessToken", accessToken.getToken());
|
|
191
|
+
call.resolve(ret);
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
AccessToken.refreshCurrentAccessTokenAsync(
|
|
195
|
+
new AccessToken.AccessTokenRefreshCallback() {
|
|
196
|
+
@Override
|
|
197
|
+
public void OnTokenRefreshed(@Nullable AccessToken accessToken) {
|
|
198
|
+
if (accessToken == null) {
|
|
199
|
+
call.reject("Success, but refresh token is null ???");
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
JSObject ret = new JSObject();
|
|
203
|
+
ret.put("accessToken", accessToken.getToken());
|
|
204
|
+
call.resolve(ret);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
@Override
|
|
208
|
+
public void OnTokenRefreshFailed(@Nullable FacebookException e) {
|
|
209
|
+
if (e != null) {
|
|
210
|
+
Log.e(SocialLoginPlugin.LOG_TAG, "Facebook token refresh error", e);
|
|
211
|
+
call.reject(
|
|
212
|
+
String.format("Cannot refresh token. %s", e.toString())
|
|
213
|
+
);
|
|
214
|
+
} else {
|
|
215
|
+
call.reject("Cannot refresh token");
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
);
|
|
183
220
|
}
|
|
184
221
|
|
|
185
222
|
public boolean handleOnActivityResult(
|
|
@@ -322,9 +322,17 @@ public class GoogleProvider implements SocialProvider {
|
|
|
322
322
|
|
|
323
323
|
String nonce = call.getString("nonce");
|
|
324
324
|
|
|
325
|
-
// Extract scopes from the config
|
|
326
325
|
// Extract scopes from the config
|
|
327
326
|
JSONArray scopesArray = config.optJSONArray("scopes");
|
|
327
|
+
|
|
328
|
+
// Remove duplicates from scopes array
|
|
329
|
+
if (scopesArray != null) {
|
|
330
|
+
Set<String> uniqueScopes = new HashSet<>();
|
|
331
|
+
for (int i = 0; i < scopesArray.length(); i++) {
|
|
332
|
+
uniqueScopes.add(scopesArray.optString(i));
|
|
333
|
+
}
|
|
334
|
+
scopesArray = new JSONArray(uniqueScopes);
|
|
335
|
+
}
|
|
328
336
|
if (scopesArray != null) {
|
|
329
337
|
if (
|
|
330
338
|
!(this.activity instanceof ModifiedMainActivityForSocialLoginPlugin)
|
|
@@ -177,18 +177,18 @@ public class SocialLoginPlugin extends Plugin {
|
|
|
177
177
|
|
|
178
178
|
@PluginMethod
|
|
179
179
|
public void refresh(PluginCall call) {
|
|
180
|
-
String
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
180
|
+
String providerStr = call.getString("provider", "");
|
|
181
|
+
if (providerStr == null || providerStr.isEmpty()) {
|
|
182
|
+
call.reject("provider not provided");
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
SocialProvider provider = this.socialProviderHashMap.get(providerStr);
|
|
186
|
+
if (provider == null) {
|
|
187
|
+
call.reject(String.format("Cannot find provider '%s'", providerStr));
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
provider.refresh(call);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
public void handleGoogleLoginIntent(int requestCode, Intent intent) {
|
package/dist/esm/web.js
CHANGED
|
@@ -113,6 +113,7 @@ export class SocialLoginWeb extends WebPlugin {
|
|
|
113
113
|
// Google doesn't have a specific logout method for web
|
|
114
114
|
// We can revoke the token if we have it stored
|
|
115
115
|
console.log("Google logout: Id token should be revoked on the client side if stored");
|
|
116
|
+
// eslint-disable-next-line
|
|
116
117
|
const state = this.getGoogleState();
|
|
117
118
|
if (!state)
|
|
118
119
|
return;
|
|
@@ -220,6 +221,7 @@ export class SocialLoginWeb extends WebPlugin {
|
|
|
220
221
|
return Promise.reject("Offline login doesn't store tokens. isLoggedIn is not available");
|
|
221
222
|
}
|
|
222
223
|
// For Google, we can check if there's a valid token
|
|
224
|
+
// eslint-disable-next-line
|
|
223
225
|
const state = this.getGoogleState();
|
|
224
226
|
if (!state)
|
|
225
227
|
return { isLoggedIn: false };
|
|
@@ -264,6 +266,7 @@ export class SocialLoginWeb extends WebPlugin {
|
|
|
264
266
|
return Promise.reject("Offline login doesn't store tokens. getAuthorizationCode is not available");
|
|
265
267
|
}
|
|
266
268
|
// For Google, we can use the id_token as the authorization code
|
|
269
|
+
// eslint-disable-next-line
|
|
267
270
|
const state = this.getGoogleState();
|
|
268
271
|
if (!state)
|
|
269
272
|
throw new Error("No Google authorization code available");
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from \"@capacitor/core\";\n\nimport type {\n SocialLoginPlugin,\n InitializeOptions,\n LoginOptions,\n LoginResult,\n AuthorizationCode,\n GoogleLoginResponse,\n AppleProviderResponse,\n isLoggedInOptions,\n AuthorizationCodeOptions,\n FacebookLoginOptions,\n FacebookLoginResponse,\n GoogleLoginOptions,\n ProviderResponseMap,\n} from \"./definitions\";\n\ndeclare const AppleID: any;\n\ndeclare const FB: {\n init(options: any): void;\n login(\n callback: (response: {\n status: string;\n authResponse: { accessToken: string; userID: string };\n }) => void,\n options?: { scope: string },\n ): void;\n logout(callback: () => void): void;\n api(\n path: string,\n params: { fields: string },\n callback: (response: any) => void,\n ): void;\n getLoginStatus(\n callback: (response: {\n status: string;\n authResponse?: { accessToken: string };\n }) => void,\n ): void;\n};\n\nexport class SocialLoginWeb extends WebPlugin implements SocialLoginPlugin {\n private static readonly OAUTH_STATE_KEY = \"social_login_oauth_pending\";\n\n private googleClientId: string | null = null;\n private appleClientId: string | null = null;\n private googleScriptLoaded = false;\n private googleLoginType: \"online\" | \"offline\" = \"online\";\n private appleScriptLoaded = false;\n private appleScriptUrl =\n \"https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js\";\n private GOOGLE_TOKEN_REQUEST_URL =\n \"https://www.googleapis.com/oauth2/v3/tokeninfo\";\n private facebookAppId: string | null = null;\n private facebookScriptLoaded = false;\n\n constructor() {\n super();\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 window.opener?.postMessage(\n {\n type: \"oauth-response\",\n ...result.result,\n },\n window.location.origin,\n );\n window.close();\n }\n }\n }\n\n private handleOAuthRedirect() {\n const paramsRaw = new URL(window.location.href).searchParams;\n const code = paramsRaw.get(\"code\");\n if (code && paramsRaw.has(\"scope\")) {\n return {\n provider: \"google\" as const,\n result: {\n provider: \"google\" as const,\n result: {\n serverAuthCode: code,\n },\n },\n };\n }\n\n const hash = window.location.hash.substring(1);\n console.log(\"handleOAuthRedirect\", window.location.hash);\n if (!hash) return;\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(SocialLoginWeb.OAUTH_STATE_KEY);\n const profile = this.parseJwt(idToken);\n return {\n provider: \"google\" as const,\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 },\n };\n }\n return null;\n }\n\n async initialize(options: InitializeOptions): Promise<void> {\n if (options.google?.webClientId) {\n this.googleClientId = options.google.webClientId;\n if (options.google.mode) {\n this.googleLoginType = options.google.mode;\n }\n\n await this.loadGoogleScript();\n }\n if (options.apple?.clientId) {\n this.appleClientId = options.apple.clientId;\n await this.loadAppleScript();\n }\n if (options.facebook?.appId) {\n this.facebookAppId = options.facebook.appId;\n await this.loadFacebookScript();\n FB.init({\n appId: this.facebookAppId,\n version: \"v17.0\",\n xfbml: true,\n cookie: true,\n });\n }\n // Implement initialization for other providers if needed\n }\n\n async login<T extends LoginOptions[\"provider\"]>(\n options: Extract<LoginOptions, { provider: T }>,\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n switch (options.provider) {\n case \"google\":\n return this.loginWithGoogle(options.options) as Promise<{\n provider: T;\n result: ProviderResponseMap[T];\n }>;\n case \"apple\":\n return this.loginWithApple(options.options) as Promise<{\n provider: T;\n result: ProviderResponseMap[T];\n }>;\n case \"facebook\":\n return this.loginWithFacebook(\n options.options as FacebookLoginOptions,\n ) as Promise<{ provider: T; result: ProviderResponseMap[T] }>;\n default:\n throw new Error(\n `Login for ${options.provider} is not implemented on web`,\n );\n }\n }\n\n async logout(options: {\n provider: \"apple\" | \"google\" | \"facebook\";\n }): Promise<void> {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\n \"Offline login doesn't store tokens. logout is not available\",\n );\n }\n // Google doesn't have a specific logout method for web\n // We can revoke the token if we have it stored\n console.log(\n \"Google logout: Id token should be revoked on the client side if stored\",\n );\n const state = this.getGoogleState();\n if (!state) return;\n await this.rawLogoutGoogle(state.accessToken);\n break;\n case \"apple\":\n // Apple doesn't provide a logout method for web\n console.log(\n \"Apple logout: Session should be managed on the client side\",\n );\n break;\n case \"facebook\":\n return new Promise<void>((resolve) => {\n FB.logout(() => resolve());\n });\n default:\n throw new Error(`Logout for ${options.provider} is not implemented`);\n }\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(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`,\n );\n throw new Error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`,\n );\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(\n accessToken: string,\n tokenValid: boolean | null = null,\n ) {\n if (tokenValid === null) {\n tokenValid = await this.accessTokenIsValid(accessToken);\n }\n\n if (tokenValid === true) {\n return new Promise<void>((resolve, reject) => {\n try {\n google.accounts.oauth2.revoke(accessToken, async () => {\n this.clearStateGoogle();\n resolve();\n });\n } catch (e) {\n reject(e);\n }\n });\n } else {\n this.clearStateGoogle();\n return;\n }\n }\n\n async isLoggedIn(\n options: isLoggedInOptions,\n ): Promise<{ isLoggedIn: boolean }> {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\n \"Offline login doesn't store tokens. isLoggedIn is not available\",\n );\n }\n // For Google, we can check if there's a valid token\n const state = this.getGoogleState();\n if (!state) return { isLoggedIn: false };\n\n try {\n // todo: cache accessTokenIsValid calls\n const isValidAccessToken = await this.accessTokenIsValid(\n state.accessToken,\n );\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 case \"apple\":\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 case \"facebook\":\n return new Promise((resolve) => {\n FB.getLoginStatus((response) => {\n resolve({ isLoggedIn: response.status === \"connected\" });\n });\n });\n default:\n throw new Error(\n `isLoggedIn for ${options.provider} is not implemented`,\n );\n }\n }\n\n async getAuthorizationCode(\n options: AuthorizationCodeOptions,\n ): Promise<AuthorizationCode> {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\n \"Offline login doesn't store tokens. getAuthorizationCode is not available\",\n );\n }\n // For Google, we can use the id_token as the authorization code\n const state = this.getGoogleState();\n if (!state) throw new Error(\"No Google authorization code available\");\n\n try {\n // todo: cache accessTokenIsValid calls\n const isValidAccessToken = await this.accessTokenIsValid(\n state.accessToken,\n );\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 case \"apple\":\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 case \"facebook\":\n return new Promise((resolve, reject) => {\n FB.getLoginStatus((response) => {\n if (response.status === \"connected\") {\n resolve({ jwt: response.authResponse?.accessToken || \"\" });\n } else {\n reject(new Error(\"No Facebook authorization code available\"));\n }\n });\n });\n default:\n throw new Error(\n `getAuthorizationCode for ${options.provider} is not implemented`,\n );\n }\n }\n\n async refresh(options: LoginOptions): Promise<void> {\n switch (options.provider) {\n case \"google\":\n // For Google, we can prompt for re-authentication\n return Promise.reject(\"Not implemented\");\n case \"apple\":\n // Apple doesn't provide a refresh method for web\n console.log(\"Apple refresh not available on web\");\n break;\n case \"facebook\":\n await this.loginWithFacebook(options.options as FacebookLoginOptions);\n break;\n default:\n throw new Error(\n `Refresh for ${(options as any).provider} is not implemented`,\n );\n }\n }\n\n private loginWithGoogle<T extends \"google\">(\n options: GoogleLoginOptions,\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n if (!this.googleClientId) {\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 (\n !scopes.includes(\"https://www.googleapis.com/auth/userinfo.profile\")\n ) {\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 if (scopes.length > 3 || this.googleLoginType === \"offline\") {\n // If scopes are provided, directly use the traditional OAuth flow\n return this.fallbackToTraditionalOAuth(scopes);\n }\n\n return new Promise((resolve, reject) => {\n google.accounts.id.initialize({\n client_id: this.googleClientId!,\n callback: (response) => {\n console.log(\"google.accounts.id.initialize callback\", response);\n if ((response as any).error) {\n // we use any because type fail but we need to double check if that works\n reject((response as any).error);\n } else {\n const payload = this.parseJwt(response.credential);\n const result: GoogleLoginResponse = {\n accessToken: null,\n responseType: \"online\",\n idToken: response.credential,\n profile: {\n email: payload.email || null,\n familyName: payload.family_name || null,\n givenName: payload.given_name || null,\n id: payload.sub || null,\n name: payload.name || null,\n imageUrl: payload.picture || null,\n },\n };\n resolve({ provider: \"google\" as T, result });\n }\n },\n auto_select: true,\n });\n\n google.accounts.id.prompt((notification) => {\n if (notification.isNotDisplayed() || notification.isSkippedMoment()) {\n console.log(\"OneTap is not displayed or skipped\");\n // Fallback to traditional OAuth if One Tap is not available\n this.fallbackToTraditionalOAuth(scopes)\n .then((r) => resolve({ provider: \"google\" as T, result: r.result }))\n .catch(reject);\n } else {\n console.log(\"OneTap is displayed\");\n }\n });\n });\n }\n\n private parseJwt(token: string) {\n const base64Url = token.split(\".\")[1];\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split(\"\")\n .map((c) => {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join(\"\"),\n );\n return JSON.parse(jsonPayload);\n }\n\n private async loadGoogleScript(): Promise<void> {\n if (this.googleScriptLoaded) return;\n\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://accounts.google.com/gsi/client\";\n script.async = true;\n script.onload = () => {\n this.googleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n\n private async loginWithApple(options: any): Promise<LoginResult> {\n if (!this.appleClientId) {\n throw new Error(\"Apple Client ID not set. Call initialize() first.\");\n }\n\n if (!this.appleScriptLoaded) {\n throw new Error(\"Apple Sign-In script not loaded.\");\n }\n\n return new Promise((resolve, reject) => {\n AppleID.auth.init({\n clientId: this.appleClientId!,\n scope: options.scopes?.join(\" \") || \"name email\",\n redirectURI: options.redirectUrl || window.location.href,\n state: options.state,\n nonce: options.nonce,\n usePopup: true,\n });\n\n AppleID.auth\n .signIn()\n .then((res: any) => {\n const result: AppleProviderResponse = {\n profile: {\n user: res.user?.name?.firstName\n ? `${res.user.name.firstName} ${res.user.name.lastName}`\n : \"\",\n email: res.user?.email || null,\n givenName: res.user?.name?.firstName || null,\n familyName: res.user?.name?.lastName || null,\n },\n accessToken: {\n token: res.authorization.code, // TODO: to fix and find the correct token\n },\n idToken: res.authorization.id_token || null,\n };\n resolve({ provider: \"apple\", result });\n })\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n private async loadAppleScript(): Promise<void> {\n if (this.appleScriptLoaded) return;\n\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = this.appleScriptUrl;\n script.async = true;\n script.onload = () => {\n this.appleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n\n private persistStateGoogle(accessToken: string, idToken: string) {\n try {\n window.localStorage.setItem(\n \"capgo_social_login_google_state\",\n JSON.stringify({ accessToken, idToken }),\n );\n } catch (e) {\n console.error(\"Cannot persist state google\", e);\n }\n }\n\n private clearStateGoogle() {\n try {\n window.localStorage.removeItem(\"capgo_social_login_google_state\");\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(\n \"capgo_social_login_google_state\",\n );\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 loadFacebookScript(): Promise<void> {\n if (this.facebookScriptLoaded) return;\n\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://connect.facebook.net/en_US/sdk.js\";\n script.async = true;\n script.defer = true;\n script.onload = () => {\n this.facebookScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n\n private async loginWithFacebook(\n options: FacebookLoginOptions,\n ): Promise<LoginResult> {\n if (!this.facebookAppId) {\n throw new Error(\"Facebook App ID not set. Call initialize() first.\");\n }\n\n return new Promise((resolve, reject) => {\n FB.login(\n (response) => {\n if (response.status === \"connected\") {\n FB.api(\n \"/me\",\n { fields: \"id,name,email,picture\" },\n (userInfo: any) => {\n const result: FacebookLoginResponse = {\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: userInfo.picture?.data?.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 },\n { scope: options.permissions.join(\",\") },\n );\n });\n }\n\n private async fallbackToTraditionalOAuth<T extends \"google\">(\n scopes: string[],\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n const uniqueScopes = [...new Set([...scopes, \"openid\"])];\n\n const params = new URLSearchParams({\n client_id: this.googleClientId!,\n redirect_uri: window.location.href,\n response_type:\n this.googleLoginType === \"offline\" ? \"code\" : \"token id_token\",\n scope: uniqueScopes.join(\" \"),\n nonce: Math.random().toString(36).substring(2),\n include_granted_scopes: \"true\",\n state: \"popup\",\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(SocialLoginWeb.OAUTH_STATE_KEY, \"true\");\n const popup = window.open(\n url,\n \"Google Sign In\",\n `width=${width},height=${height},left=${left},top=${top},popup=1`,\n );\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) return;\n\n if (event.data?.type === \"oauth-response\") {\n window.removeEventListener(\"message\", handleMessage);\n\n if (this.googleLoginType === \"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.result as {\n serverAuthCode: string;\n };\n resolve({\n provider: \"google\" as T,\n result: {\n responseType: \"offline\",\n serverAuthCode,\n },\n });\n }\n } else {\n reject(new Error(\"Login failed\"));\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n // Timeout after 5 minutes\n setTimeout(() => {\n window.removeEventListener(\"message\", handleMessage);\n popup.close();\n reject(new Error(\"OAuth timeout\"));\n }, 300000);\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from \"@capacitor/core\";\n\nimport type {\n SocialLoginPlugin,\n InitializeOptions,\n LoginOptions,\n LoginResult,\n AuthorizationCode,\n GoogleLoginResponse,\n AppleProviderResponse,\n isLoggedInOptions,\n AuthorizationCodeOptions,\n FacebookLoginOptions,\n FacebookLoginResponse,\n GoogleLoginOptions,\n ProviderResponseMap,\n} from \"./definitions\";\n\ndeclare const AppleID: any;\n\ndeclare const FB: {\n init(options: any): void;\n login(\n callback: (response: {\n status: string;\n authResponse: { accessToken: string; userID: string };\n }) => void,\n options?: { scope: string },\n ): void;\n logout(callback: () => void): void;\n api(\n path: string,\n params: { fields: string },\n callback: (response: any) => void,\n ): void;\n getLoginStatus(\n callback: (response: {\n status: string;\n authResponse?: { accessToken: string };\n }) => void,\n ): void;\n};\n\nexport class SocialLoginWeb extends WebPlugin implements SocialLoginPlugin {\n private static readonly OAUTH_STATE_KEY = \"social_login_oauth_pending\";\n\n private googleClientId: string | null = null;\n private appleClientId: string | null = null;\n private googleScriptLoaded = false;\n private googleLoginType: \"online\" | \"offline\" = \"online\";\n private appleScriptLoaded = false;\n private appleScriptUrl =\n \"https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js\";\n private GOOGLE_TOKEN_REQUEST_URL =\n \"https://www.googleapis.com/oauth2/v3/tokeninfo\";\n private facebookAppId: string | null = null;\n private facebookScriptLoaded = false;\n\n constructor() {\n super();\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 window.opener?.postMessage(\n {\n type: \"oauth-response\",\n ...result.result,\n },\n window.location.origin,\n );\n window.close();\n }\n }\n }\n\n private handleOAuthRedirect() {\n const paramsRaw = new URL(window.location.href).searchParams;\n const code = paramsRaw.get(\"code\");\n if (code && paramsRaw.has(\"scope\")) {\n return {\n provider: \"google\" as const,\n result: {\n provider: \"google\" as const,\n result: {\n serverAuthCode: code,\n },\n },\n };\n }\n\n const hash = window.location.hash.substring(1);\n console.log(\"handleOAuthRedirect\", window.location.hash);\n if (!hash) return;\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(SocialLoginWeb.OAUTH_STATE_KEY);\n const profile = this.parseJwt(idToken);\n return {\n provider: \"google\" as const,\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 },\n };\n }\n return null;\n }\n\n async initialize(options: InitializeOptions): Promise<void> {\n if (options.google?.webClientId) {\n this.googleClientId = options.google.webClientId;\n if (options.google.mode) {\n this.googleLoginType = options.google.mode;\n }\n\n await this.loadGoogleScript();\n }\n if (options.apple?.clientId) {\n this.appleClientId = options.apple.clientId;\n await this.loadAppleScript();\n }\n if (options.facebook?.appId) {\n this.facebookAppId = options.facebook.appId;\n await this.loadFacebookScript();\n FB.init({\n appId: this.facebookAppId,\n version: \"v17.0\",\n xfbml: true,\n cookie: true,\n });\n }\n // Implement initialization for other providers if needed\n }\n\n async login<T extends LoginOptions[\"provider\"]>(\n options: Extract<LoginOptions, { provider: T }>,\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n switch (options.provider) {\n case \"google\":\n return this.loginWithGoogle(options.options) as Promise<{\n provider: T;\n result: ProviderResponseMap[T];\n }>;\n case \"apple\":\n return this.loginWithApple(options.options) as Promise<{\n provider: T;\n result: ProviderResponseMap[T];\n }>;\n case \"facebook\":\n return this.loginWithFacebook(\n options.options as FacebookLoginOptions,\n ) as Promise<{ provider: T; result: ProviderResponseMap[T] }>;\n default:\n throw new Error(\n `Login for ${options.provider} is not implemented on web`,\n );\n }\n }\n\n async logout(options: {\n provider: \"apple\" | \"google\" | \"facebook\";\n }): Promise<void> {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\n \"Offline login doesn't store tokens. logout is not available\",\n );\n }\n // Google doesn't have a specific logout method for web\n // We can revoke the token if we have it stored\n console.log(\n \"Google logout: Id token should be revoked on the client side if stored\",\n );\n // eslint-disable-next-line\n const state = this.getGoogleState();\n if (!state) return;\n await this.rawLogoutGoogle(state.accessToken);\n break;\n case \"apple\":\n // Apple doesn't provide a logout method for web\n console.log(\n \"Apple logout: Session should be managed on the client side\",\n );\n break;\n case \"facebook\":\n return new Promise<void>((resolve) => {\n FB.logout(() => resolve());\n });\n default:\n throw new Error(`Logout for ${options.provider} is not implemented`);\n }\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(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`,\n );\n throw new Error(\n `Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`,\n );\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(\n accessToken: string,\n tokenValid: boolean | null = null,\n ) {\n if (tokenValid === null) {\n tokenValid = await this.accessTokenIsValid(accessToken);\n }\n\n if (tokenValid === true) {\n return new Promise<void>((resolve, reject) => {\n try {\n google.accounts.oauth2.revoke(accessToken, async () => {\n this.clearStateGoogle();\n resolve();\n });\n } catch (e) {\n reject(e);\n }\n });\n } else {\n this.clearStateGoogle();\n return;\n }\n }\n\n async isLoggedIn(\n options: isLoggedInOptions,\n ): Promise<{ isLoggedIn: boolean }> {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\n \"Offline login doesn't store tokens. isLoggedIn is not available\",\n );\n }\n // For Google, we can check if there's a valid token\n // eslint-disable-next-line\n const state = this.getGoogleState();\n if (!state) return { isLoggedIn: false };\n\n try {\n // todo: cache accessTokenIsValid calls\n const isValidAccessToken = await this.accessTokenIsValid(\n state.accessToken,\n );\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 case \"apple\":\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 case \"facebook\":\n return new Promise((resolve) => {\n FB.getLoginStatus((response) => {\n resolve({ isLoggedIn: response.status === \"connected\" });\n });\n });\n default:\n throw new Error(\n `isLoggedIn for ${options.provider} is not implemented`,\n );\n }\n }\n\n async getAuthorizationCode(\n options: AuthorizationCodeOptions,\n ): Promise<AuthorizationCode> {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\n \"Offline login doesn't store tokens. getAuthorizationCode is not available\",\n );\n }\n // For Google, we can use the id_token as the authorization code\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 // todo: cache accessTokenIsValid calls\n const isValidAccessToken = await this.accessTokenIsValid(\n state.accessToken,\n );\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 case \"apple\":\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 case \"facebook\":\n return new Promise((resolve, reject) => {\n FB.getLoginStatus((response) => {\n if (response.status === \"connected\") {\n resolve({ jwt: response.authResponse?.accessToken || \"\" });\n } else {\n reject(new Error(\"No Facebook authorization code available\"));\n }\n });\n });\n default:\n throw new Error(\n `getAuthorizationCode for ${options.provider} is not implemented`,\n );\n }\n }\n\n async refresh(options: LoginOptions): Promise<void> {\n switch (options.provider) {\n case \"google\":\n // For Google, we can prompt for re-authentication\n return Promise.reject(\"Not implemented\");\n case \"apple\":\n // Apple doesn't provide a refresh method for web\n console.log(\"Apple refresh not available on web\");\n break;\n case \"facebook\":\n await this.loginWithFacebook(options.options as FacebookLoginOptions);\n break;\n default:\n throw new Error(\n `Refresh for ${(options as any).provider} is not implemented`,\n );\n }\n }\n\n private loginWithGoogle<T extends \"google\">(\n options: GoogleLoginOptions,\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n if (!this.googleClientId) {\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 (\n !scopes.includes(\"https://www.googleapis.com/auth/userinfo.profile\")\n ) {\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 if (scopes.length > 3 || this.googleLoginType === \"offline\") {\n // If scopes are provided, directly use the traditional OAuth flow\n return this.fallbackToTraditionalOAuth(scopes);\n }\n\n return new Promise((resolve, reject) => {\n google.accounts.id.initialize({\n client_id: this.googleClientId!,\n callback: (response) => {\n console.log(\"google.accounts.id.initialize callback\", response);\n if ((response as any).error) {\n // we use any because type fail but we need to double check if that works\n reject((response as any).error);\n } else {\n const payload = this.parseJwt(response.credential);\n const result: GoogleLoginResponse = {\n accessToken: null,\n responseType: \"online\",\n idToken: response.credential,\n profile: {\n email: payload.email || null,\n familyName: payload.family_name || null,\n givenName: payload.given_name || null,\n id: payload.sub || null,\n name: payload.name || null,\n imageUrl: payload.picture || null,\n },\n };\n resolve({ provider: \"google\" as T, result });\n }\n },\n auto_select: true,\n });\n\n google.accounts.id.prompt((notification) => {\n if (notification.isNotDisplayed() || notification.isSkippedMoment()) {\n console.log(\"OneTap is not displayed or skipped\");\n // Fallback to traditional OAuth if One Tap is not available\n this.fallbackToTraditionalOAuth(scopes)\n .then((r) => resolve({ provider: \"google\" as T, result: r.result }))\n .catch(reject);\n } else {\n console.log(\"OneTap is displayed\");\n }\n });\n });\n }\n\n private parseJwt(token: string) {\n const base64Url = token.split(\".\")[1];\n const base64 = base64Url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const jsonPayload = decodeURIComponent(\n atob(base64)\n .split(\"\")\n .map((c) => {\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join(\"\"),\n );\n return JSON.parse(jsonPayload);\n }\n\n private async loadGoogleScript(): Promise<void> {\n if (this.googleScriptLoaded) return;\n\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://accounts.google.com/gsi/client\";\n script.async = true;\n script.onload = () => {\n this.googleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n\n private async loginWithApple(options: any): Promise<LoginResult> {\n if (!this.appleClientId) {\n throw new Error(\"Apple Client ID not set. Call initialize() first.\");\n }\n\n if (!this.appleScriptLoaded) {\n throw new Error(\"Apple Sign-In script not loaded.\");\n }\n\n return new Promise((resolve, reject) => {\n AppleID.auth.init({\n clientId: this.appleClientId!,\n scope: options.scopes?.join(\" \") || \"name email\",\n redirectURI: options.redirectUrl || window.location.href,\n state: options.state,\n nonce: options.nonce,\n usePopup: true,\n });\n\n AppleID.auth\n .signIn()\n .then((res: any) => {\n const result: AppleProviderResponse = {\n profile: {\n user: res.user?.name?.firstName\n ? `${res.user.name.firstName} ${res.user.name.lastName}`\n : \"\",\n email: res.user?.email || null,\n givenName: res.user?.name?.firstName || null,\n familyName: res.user?.name?.lastName || null,\n },\n accessToken: {\n token: res.authorization.code, // TODO: to fix and find the correct token\n },\n idToken: res.authorization.id_token || null,\n };\n resolve({ provider: \"apple\", result });\n })\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n private async loadAppleScript(): Promise<void> {\n if (this.appleScriptLoaded) return;\n\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = this.appleScriptUrl;\n script.async = true;\n script.onload = () => {\n this.appleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n\n private persistStateGoogle(accessToken: string, idToken: string) {\n try {\n window.localStorage.setItem(\n \"capgo_social_login_google_state\",\n JSON.stringify({ accessToken, idToken }),\n );\n } catch (e) {\n console.error(\"Cannot persist state google\", e);\n }\n }\n\n private clearStateGoogle() {\n try {\n window.localStorage.removeItem(\"capgo_social_login_google_state\");\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(\n \"capgo_social_login_google_state\",\n );\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 loadFacebookScript(): Promise<void> {\n if (this.facebookScriptLoaded) return;\n\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://connect.facebook.net/en_US/sdk.js\";\n script.async = true;\n script.defer = true;\n script.onload = () => {\n this.facebookScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n\n private async loginWithFacebook(\n options: FacebookLoginOptions,\n ): Promise<LoginResult> {\n if (!this.facebookAppId) {\n throw new Error(\"Facebook App ID not set. Call initialize() first.\");\n }\n\n return new Promise((resolve, reject) => {\n FB.login(\n (response) => {\n if (response.status === \"connected\") {\n FB.api(\n \"/me\",\n { fields: \"id,name,email,picture\" },\n (userInfo: any) => {\n const result: FacebookLoginResponse = {\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: userInfo.picture?.data?.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 },\n { scope: options.permissions.join(\",\") },\n );\n });\n }\n\n private async fallbackToTraditionalOAuth<T extends \"google\">(\n scopes: string[],\n ): Promise<{ provider: T; result: ProviderResponseMap[T] }> {\n const uniqueScopes = [...new Set([...scopes, \"openid\"])];\n\n const params = new URLSearchParams({\n client_id: this.googleClientId!,\n redirect_uri: window.location.href,\n response_type:\n this.googleLoginType === \"offline\" ? \"code\" : \"token id_token\",\n scope: uniqueScopes.join(\" \"),\n nonce: Math.random().toString(36).substring(2),\n include_granted_scopes: \"true\",\n state: \"popup\",\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(SocialLoginWeb.OAUTH_STATE_KEY, \"true\");\n const popup = window.open(\n url,\n \"Google Sign In\",\n `width=${width},height=${height},left=${left},top=${top},popup=1`,\n );\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) return;\n\n if (event.data?.type === \"oauth-response\") {\n window.removeEventListener(\"message\", handleMessage);\n\n if (this.googleLoginType === \"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.result as {\n serverAuthCode: string;\n };\n resolve({\n provider: \"google\" as T,\n result: {\n responseType: \"offline\",\n serverAuthCode,\n },\n });\n }\n } else {\n reject(new Error(\"Login failed\"));\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n // Timeout after 5 minutes\n setTimeout(() => {\n window.removeEventListener(\"message\", handleMessage);\n popup.close();\n reject(new Error(\"OAuth timeout\"));\n }, 300000);\n });\n }\n}\n"]}
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -120,6 +120,7 @@ class SocialLoginWeb extends core.WebPlugin {
|
|
|
120
120
|
// Google doesn't have a specific logout method for web
|
|
121
121
|
// We can revoke the token if we have it stored
|
|
122
122
|
console.log("Google logout: Id token should be revoked on the client side if stored");
|
|
123
|
+
// eslint-disable-next-line
|
|
123
124
|
const state = this.getGoogleState();
|
|
124
125
|
if (!state)
|
|
125
126
|
return;
|
|
@@ -227,6 +228,7 @@ class SocialLoginWeb extends core.WebPlugin {
|
|
|
227
228
|
return Promise.reject("Offline login doesn't store tokens. isLoggedIn is not available");
|
|
228
229
|
}
|
|
229
230
|
// For Google, we can check if there's a valid token
|
|
231
|
+
// eslint-disable-next-line
|
|
230
232
|
const state = this.getGoogleState();
|
|
231
233
|
if (!state)
|
|
232
234
|
return { isLoggedIn: false };
|
|
@@ -271,6 +273,7 @@ class SocialLoginWeb extends core.WebPlugin {
|
|
|
271
273
|
return Promise.reject("Offline login doesn't store tokens. getAuthorizationCode is not available");
|
|
272
274
|
}
|
|
273
275
|
// For Google, we can use the id_token as the authorization code
|
|
276
|
+
// eslint-disable-next-line
|
|
274
277
|
const state = this.getGoogleState();
|
|
275
278
|
if (!state)
|
|
276
279
|
throw new Error("No Google authorization code available");
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.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 SocialLoginWeb extends WebPlugin {\n constructor() {\n var _a;\n super();\n this.googleClientId = null;\n this.appleClientId = null;\n this.googleScriptLoaded = false;\n this.googleLoginType = \"online\";\n this.appleScriptLoaded = false;\n this.appleScriptUrl = \"https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js\";\n this.GOOGLE_TOKEN_REQUEST_URL = \"https://www.googleapis.com/oauth2/v3/tokeninfo\";\n this.facebookAppId = null;\n this.facebookScriptLoaded = false;\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 paramsRaw = new URL(window.location.href).searchParams;\n const code = paramsRaw.get(\"code\");\n if (code && paramsRaw.has(\"scope\")) {\n return {\n provider: \"google\",\n result: {\n provider: \"google\",\n result: {\n serverAuthCode: code,\n },\n },\n };\n }\n const hash = window.location.hash.substring(1);\n console.log(\"handleOAuthRedirect\", window.location.hash);\n if (!hash)\n return;\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(SocialLoginWeb.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 },\n };\n }\n return null;\n }\n async initialize(options) {\n var _a, _b, _c;\n if ((_a = options.google) === null || _a === void 0 ? void 0 : _a.webClientId) {\n this.googleClientId = options.google.webClientId;\n if (options.google.mode) {\n this.googleLoginType = options.google.mode;\n }\n await this.loadGoogleScript();\n }\n if ((_b = options.apple) === null || _b === void 0 ? void 0 : _b.clientId) {\n this.appleClientId = options.apple.clientId;\n await this.loadAppleScript();\n }\n if ((_c = options.facebook) === null || _c === void 0 ? void 0 : _c.appId) {\n this.facebookAppId = options.facebook.appId;\n await this.loadFacebookScript();\n FB.init({\n appId: this.facebookAppId,\n version: \"v17.0\",\n xfbml: true,\n cookie: true,\n });\n }\n // Implement initialization for other providers if needed\n }\n async login(options) {\n switch (options.provider) {\n case \"google\":\n return this.loginWithGoogle(options.options);\n case \"apple\":\n return this.loginWithApple(options.options);\n case \"facebook\":\n return this.loginWithFacebook(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 if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. logout is not available\");\n }\n // Google doesn't have a specific logout method for web\n // We can revoke the token if we have it stored\n console.log(\"Google logout: Id token should be revoked on the client side if stored\");\n const state = this.getGoogleState();\n if (!state)\n return;\n await this.rawLogoutGoogle(state.accessToken);\n break;\n case \"apple\":\n // Apple doesn't provide a logout method for web\n console.log(\"Apple logout: Session should be managed on the client side\");\n break;\n case \"facebook\":\n return new Promise((resolve) => {\n FB.logout(() => resolve());\n });\n default:\n throw new Error(`Logout for ${options.provider} is not implemented`);\n }\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 return new Promise((resolve, reject) => {\n try {\n google.accounts.oauth2.revoke(accessToken, async () => {\n this.clearStateGoogle();\n resolve();\n });\n }\n catch (e) {\n reject(e);\n }\n });\n }\n else {\n this.clearStateGoogle();\n return;\n }\n }\n async isLoggedIn(options) {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. isLoggedIn is not available\");\n }\n // For Google, we can check if there's a valid token\n const state = this.getGoogleState();\n if (!state)\n return { isLoggedIn: false };\n try {\n // todo: cache accessTokenIsValid calls\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 case \"apple\":\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 case \"facebook\":\n return new Promise((resolve) => {\n FB.getLoginStatus((response) => {\n resolve({ isLoggedIn: response.status === \"connected\" });\n });\n });\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 if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. getAuthorizationCode is not available\");\n }\n // For Google, we can use the id_token as the authorization code\n const state = this.getGoogleState();\n if (!state)\n throw new Error(\"No Google authorization code available\");\n try {\n // todo: cache accessTokenIsValid calls\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 case \"apple\":\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 case \"facebook\":\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 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 // For Google, we can prompt for re-authentication\n return Promise.reject(\"Not implemented\");\n case \"apple\":\n // Apple doesn't provide a refresh method for web\n console.log(\"Apple refresh not available on web\");\n break;\n case \"facebook\":\n await this.loginWithFacebook(options.options);\n break;\n default:\n throw new Error(`Refresh for ${options.provider} is not implemented`);\n }\n }\n loginWithGoogle(options) {\n if (!this.googleClientId) {\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 if (scopes.length > 3 || this.googleLoginType === \"offline\") {\n // If scopes are provided, directly use the traditional OAuth flow\n return this.fallbackToTraditionalOAuth(scopes);\n }\n return new Promise((resolve, reject) => {\n google.accounts.id.initialize({\n client_id: this.googleClientId,\n callback: (response) => {\n console.log(\"google.accounts.id.initialize callback\", response);\n if (response.error) {\n // we use any because type fail but we need to double check if that works\n reject(response.error);\n }\n else {\n const payload = this.parseJwt(response.credential);\n const result = {\n accessToken: null,\n responseType: \"online\",\n idToken: response.credential,\n profile: {\n email: payload.email || null,\n familyName: payload.family_name || null,\n givenName: payload.given_name || null,\n id: payload.sub || null,\n name: payload.name || null,\n imageUrl: payload.picture || null,\n },\n };\n resolve({ provider: \"google\", result });\n }\n },\n auto_select: true,\n });\n google.accounts.id.prompt((notification) => {\n if (notification.isNotDisplayed() || notification.isSkippedMoment()) {\n console.log(\"OneTap is not displayed or skipped\");\n // Fallback to traditional OAuth if One Tap is not available\n this.fallbackToTraditionalOAuth(scopes)\n .then((r) => resolve({ provider: \"google\", result: r.result }))\n .catch(reject);\n }\n else {\n console.log(\"OneTap is displayed\");\n }\n });\n });\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 loadGoogleScript() {\n if (this.googleScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://accounts.google.com/gsi/client\";\n script.async = true;\n script.onload = () => {\n this.googleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n async loginWithApple(options) {\n if (!this.appleClientId) {\n throw new Error(\"Apple Client ID not set. Call initialize() first.\");\n }\n if (!this.appleScriptLoaded) {\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.appleClientId,\n scope: ((_a = options.scopes) === null || _a === void 0 ? void 0 : _a.join(\" \")) || \"name email\",\n redirectURI: options.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, _f, _g;\n const result = {\n profile: {\n user: ((_b = (_a = res.user) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.firstName)\n ? `${res.user.name.firstName} ${res.user.name.lastName}`\n : \"\",\n email: ((_c = res.user) === null || _c === void 0 ? void 0 : _c.email) || null,\n givenName: ((_e = (_d = res.user) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.firstName) || null,\n familyName: ((_g = (_f = res.user) === null || _f === void 0 ? void 0 : _f.name) === null || _g === void 0 ? void 0 : _g.lastName) || null,\n },\n accessToken: {\n token: res.authorization.code, // TODO: to fix and find the correct token\n },\n idToken: res.authorization.id_token || null,\n };\n resolve({ provider: \"apple\", result });\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n async loadAppleScript() {\n if (this.appleScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = this.appleScriptUrl;\n script.async = true;\n script.onload = () => {\n this.appleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n persistStateGoogle(accessToken, idToken) {\n try {\n window.localStorage.setItem(\"capgo_social_login_google_state\", 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(\"capgo_social_login_google_state\");\n }\n catch (e) {\n console.error(\"Cannot clear state google\", e);\n }\n }\n getGoogleState() {\n try {\n const state = window.localStorage.getItem(\"capgo_social_login_google_state\");\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 loadFacebookScript() {\n if (this.facebookScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://connect.facebook.net/en_US/sdk.js\";\n script.async = true;\n script.defer = true;\n script.onload = () => {\n this.facebookScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n async loginWithFacebook(options) {\n if (!this.facebookAppId) {\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 fallbackToTraditionalOAuth(scopes) {\n const uniqueScopes = [...new Set([...scopes, \"openid\"])];\n const params = new URLSearchParams({\n client_id: this.googleClientId,\n redirect_uri: window.location.href,\n response_type: this.googleLoginType === \"offline\" ? \"code\" : \"token id_token\",\n scope: uniqueScopes.join(\" \"),\n nonce: Math.random().toString(36).substring(2),\n include_granted_scopes: \"true\",\n state: \"popup\",\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(SocialLoginWeb.OAUTH_STATE_KEY, \"true\");\n const popup = window.open(url, \"Google Sign In\", `width=${width},height=${height},left=${left},top=${top},popup=1`);\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;\n if (event.origin !== window.location.origin)\n return;\n if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === \"oauth-response\") {\n window.removeEventListener(\"message\", handleMessage);\n if (this.googleLoginType === \"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.result;\n resolve({\n provider: \"google\",\n result: {\n responseType: \"offline\",\n serverAuthCode,\n },\n });\n }\n }\n else {\n reject(new Error(\"Login failed\"));\n }\n };\n window.addEventListener(\"message\", handleMessage);\n // Timeout after 5 minutes\n setTimeout(() => {\n window.removeEventListener(\"message\", handleMessage);\n popup.close();\n reject(new Error(\"OAuth timeout\"));\n }, 300000);\n });\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/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 SocialLoginWeb extends WebPlugin {\n constructor() {\n var _a;\n super();\n this.googleClientId = null;\n this.appleClientId = null;\n this.googleScriptLoaded = false;\n this.googleLoginType = \"online\";\n this.appleScriptLoaded = false;\n this.appleScriptUrl = \"https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js\";\n this.GOOGLE_TOKEN_REQUEST_URL = \"https://www.googleapis.com/oauth2/v3/tokeninfo\";\n this.facebookAppId = null;\n this.facebookScriptLoaded = false;\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 paramsRaw = new URL(window.location.href).searchParams;\n const code = paramsRaw.get(\"code\");\n if (code && paramsRaw.has(\"scope\")) {\n return {\n provider: \"google\",\n result: {\n provider: \"google\",\n result: {\n serverAuthCode: code,\n },\n },\n };\n }\n const hash = window.location.hash.substring(1);\n console.log(\"handleOAuthRedirect\", window.location.hash);\n if (!hash)\n return;\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(SocialLoginWeb.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 },\n };\n }\n return null;\n }\n async initialize(options) {\n var _a, _b, _c;\n if ((_a = options.google) === null || _a === void 0 ? void 0 : _a.webClientId) {\n this.googleClientId = options.google.webClientId;\n if (options.google.mode) {\n this.googleLoginType = options.google.mode;\n }\n await this.loadGoogleScript();\n }\n if ((_b = options.apple) === null || _b === void 0 ? void 0 : _b.clientId) {\n this.appleClientId = options.apple.clientId;\n await this.loadAppleScript();\n }\n if ((_c = options.facebook) === null || _c === void 0 ? void 0 : _c.appId) {\n this.facebookAppId = options.facebook.appId;\n await this.loadFacebookScript();\n FB.init({\n appId: this.facebookAppId,\n version: \"v17.0\",\n xfbml: true,\n cookie: true,\n });\n }\n // Implement initialization for other providers if needed\n }\n async login(options) {\n switch (options.provider) {\n case \"google\":\n return this.loginWithGoogle(options.options);\n case \"apple\":\n return this.loginWithApple(options.options);\n case \"facebook\":\n return this.loginWithFacebook(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 if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. logout is not available\");\n }\n // Google doesn't have a specific logout method for web\n // We can revoke the token if we have it stored\n console.log(\"Google logout: Id token should be revoked on the client side if stored\");\n // eslint-disable-next-line\n const state = this.getGoogleState();\n if (!state)\n return;\n await this.rawLogoutGoogle(state.accessToken);\n break;\n case \"apple\":\n // Apple doesn't provide a logout method for web\n console.log(\"Apple logout: Session should be managed on the client side\");\n break;\n case \"facebook\":\n return new Promise((resolve) => {\n FB.logout(() => resolve());\n });\n default:\n throw new Error(`Logout for ${options.provider} is not implemented`);\n }\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 return new Promise((resolve, reject) => {\n try {\n google.accounts.oauth2.revoke(accessToken, async () => {\n this.clearStateGoogle();\n resolve();\n });\n }\n catch (e) {\n reject(e);\n }\n });\n }\n else {\n this.clearStateGoogle();\n return;\n }\n }\n async isLoggedIn(options) {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. isLoggedIn is not available\");\n }\n // For Google, we can check if there's a valid token\n // eslint-disable-next-line\n const state = this.getGoogleState();\n if (!state)\n return { isLoggedIn: false };\n try {\n // todo: cache accessTokenIsValid calls\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 case \"apple\":\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 case \"facebook\":\n return new Promise((resolve) => {\n FB.getLoginStatus((response) => {\n resolve({ isLoggedIn: response.status === \"connected\" });\n });\n });\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 if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. getAuthorizationCode is not available\");\n }\n // For Google, we can use the id_token as the authorization code\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 // todo: cache accessTokenIsValid calls\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 case \"apple\":\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 case \"facebook\":\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 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 // For Google, we can prompt for re-authentication\n return Promise.reject(\"Not implemented\");\n case \"apple\":\n // Apple doesn't provide a refresh method for web\n console.log(\"Apple refresh not available on web\");\n break;\n case \"facebook\":\n await this.loginWithFacebook(options.options);\n break;\n default:\n throw new Error(`Refresh for ${options.provider} is not implemented`);\n }\n }\n loginWithGoogle(options) {\n if (!this.googleClientId) {\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 if (scopes.length > 3 || this.googleLoginType === \"offline\") {\n // If scopes are provided, directly use the traditional OAuth flow\n return this.fallbackToTraditionalOAuth(scopes);\n }\n return new Promise((resolve, reject) => {\n google.accounts.id.initialize({\n client_id: this.googleClientId,\n callback: (response) => {\n console.log(\"google.accounts.id.initialize callback\", response);\n if (response.error) {\n // we use any because type fail but we need to double check if that works\n reject(response.error);\n }\n else {\n const payload = this.parseJwt(response.credential);\n const result = {\n accessToken: null,\n responseType: \"online\",\n idToken: response.credential,\n profile: {\n email: payload.email || null,\n familyName: payload.family_name || null,\n givenName: payload.given_name || null,\n id: payload.sub || null,\n name: payload.name || null,\n imageUrl: payload.picture || null,\n },\n };\n resolve({ provider: \"google\", result });\n }\n },\n auto_select: true,\n });\n google.accounts.id.prompt((notification) => {\n if (notification.isNotDisplayed() || notification.isSkippedMoment()) {\n console.log(\"OneTap is not displayed or skipped\");\n // Fallback to traditional OAuth if One Tap is not available\n this.fallbackToTraditionalOAuth(scopes)\n .then((r) => resolve({ provider: \"google\", result: r.result }))\n .catch(reject);\n }\n else {\n console.log(\"OneTap is displayed\");\n }\n });\n });\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 loadGoogleScript() {\n if (this.googleScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://accounts.google.com/gsi/client\";\n script.async = true;\n script.onload = () => {\n this.googleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n async loginWithApple(options) {\n if (!this.appleClientId) {\n throw new Error(\"Apple Client ID not set. Call initialize() first.\");\n }\n if (!this.appleScriptLoaded) {\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.appleClientId,\n scope: ((_a = options.scopes) === null || _a === void 0 ? void 0 : _a.join(\" \")) || \"name email\",\n redirectURI: options.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, _f, _g;\n const result = {\n profile: {\n user: ((_b = (_a = res.user) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.firstName)\n ? `${res.user.name.firstName} ${res.user.name.lastName}`\n : \"\",\n email: ((_c = res.user) === null || _c === void 0 ? void 0 : _c.email) || null,\n givenName: ((_e = (_d = res.user) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.firstName) || null,\n familyName: ((_g = (_f = res.user) === null || _f === void 0 ? void 0 : _f.name) === null || _g === void 0 ? void 0 : _g.lastName) || null,\n },\n accessToken: {\n token: res.authorization.code, // TODO: to fix and find the correct token\n },\n idToken: res.authorization.id_token || null,\n };\n resolve({ provider: \"apple\", result });\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n async loadAppleScript() {\n if (this.appleScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = this.appleScriptUrl;\n script.async = true;\n script.onload = () => {\n this.appleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n persistStateGoogle(accessToken, idToken) {\n try {\n window.localStorage.setItem(\"capgo_social_login_google_state\", 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(\"capgo_social_login_google_state\");\n }\n catch (e) {\n console.error(\"Cannot clear state google\", e);\n }\n }\n getGoogleState() {\n try {\n const state = window.localStorage.getItem(\"capgo_social_login_google_state\");\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 loadFacebookScript() {\n if (this.facebookScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://connect.facebook.net/en_US/sdk.js\";\n script.async = true;\n script.defer = true;\n script.onload = () => {\n this.facebookScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n async loginWithFacebook(options) {\n if (!this.facebookAppId) {\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 fallbackToTraditionalOAuth(scopes) {\n const uniqueScopes = [...new Set([...scopes, \"openid\"])];\n const params = new URLSearchParams({\n client_id: this.googleClientId,\n redirect_uri: window.location.href,\n response_type: this.googleLoginType === \"offline\" ? \"code\" : \"token id_token\",\n scope: uniqueScopes.join(\" \"),\n nonce: Math.random().toString(36).substring(2),\n include_granted_scopes: \"true\",\n state: \"popup\",\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(SocialLoginWeb.OAUTH_STATE_KEY, \"true\");\n const popup = window.open(url, \"Google Sign In\", `width=${width},height=${height},left=${left},top=${top},popup=1`);\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;\n if (event.origin !== window.location.origin)\n return;\n if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === \"oauth-response\") {\n window.removeEventListener(\"message\", handleMessage);\n if (this.googleLoginType === \"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.result;\n resolve({\n provider: \"google\",\n result: {\n responseType: \"offline\",\n serverAuthCode,\n },\n });\n }\n }\n else {\n reject(new Error(\"Login failed\"));\n }\n };\n window.addEventListener(\"message\", handleMessage);\n // Timeout after 5 minutes\n setTimeout(() => {\n window.removeEventListener(\"message\", handleMessage);\n popup.close();\n reject(new Error(\"OAuth timeout\"));\n }, 300000);\n });\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
|
@@ -119,6 +119,7 @@ var capacitorCapacitorUpdater = (function (exports, core) {
|
|
|
119
119
|
// Google doesn't have a specific logout method for web
|
|
120
120
|
// We can revoke the token if we have it stored
|
|
121
121
|
console.log("Google logout: Id token should be revoked on the client side if stored");
|
|
122
|
+
// eslint-disable-next-line
|
|
122
123
|
const state = this.getGoogleState();
|
|
123
124
|
if (!state)
|
|
124
125
|
return;
|
|
@@ -226,6 +227,7 @@ var capacitorCapacitorUpdater = (function (exports, core) {
|
|
|
226
227
|
return Promise.reject("Offline login doesn't store tokens. isLoggedIn is not available");
|
|
227
228
|
}
|
|
228
229
|
// For Google, we can check if there's a valid token
|
|
230
|
+
// eslint-disable-next-line
|
|
229
231
|
const state = this.getGoogleState();
|
|
230
232
|
if (!state)
|
|
231
233
|
return { isLoggedIn: false };
|
|
@@ -270,6 +272,7 @@ var capacitorCapacitorUpdater = (function (exports, core) {
|
|
|
270
272
|
return Promise.reject("Offline login doesn't store tokens. getAuthorizationCode is not available");
|
|
271
273
|
}
|
|
272
274
|
// For Google, we can use the id_token as the authorization code
|
|
275
|
+
// eslint-disable-next-line
|
|
273
276
|
const state = this.getGoogleState();
|
|
274
277
|
if (!state)
|
|
275
278
|
throw new Error("No Google authorization code available");
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/index.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 SocialLoginWeb extends WebPlugin {\n constructor() {\n var _a;\n super();\n this.googleClientId = null;\n this.appleClientId = null;\n this.googleScriptLoaded = false;\n this.googleLoginType = \"online\";\n this.appleScriptLoaded = false;\n this.appleScriptUrl = \"https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js\";\n this.GOOGLE_TOKEN_REQUEST_URL = \"https://www.googleapis.com/oauth2/v3/tokeninfo\";\n this.facebookAppId = null;\n this.facebookScriptLoaded = false;\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 paramsRaw = new URL(window.location.href).searchParams;\n const code = paramsRaw.get(\"code\");\n if (code && paramsRaw.has(\"scope\")) {\n return {\n provider: \"google\",\n result: {\n provider: \"google\",\n result: {\n serverAuthCode: code,\n },\n },\n };\n }\n const hash = window.location.hash.substring(1);\n console.log(\"handleOAuthRedirect\", window.location.hash);\n if (!hash)\n return;\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(SocialLoginWeb.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 },\n };\n }\n return null;\n }\n async initialize(options) {\n var _a, _b, _c;\n if ((_a = options.google) === null || _a === void 0 ? void 0 : _a.webClientId) {\n this.googleClientId = options.google.webClientId;\n if (options.google.mode) {\n this.googleLoginType = options.google.mode;\n }\n await this.loadGoogleScript();\n }\n if ((_b = options.apple) === null || _b === void 0 ? void 0 : _b.clientId) {\n this.appleClientId = options.apple.clientId;\n await this.loadAppleScript();\n }\n if ((_c = options.facebook) === null || _c === void 0 ? void 0 : _c.appId) {\n this.facebookAppId = options.facebook.appId;\n await this.loadFacebookScript();\n FB.init({\n appId: this.facebookAppId,\n version: \"v17.0\",\n xfbml: true,\n cookie: true,\n });\n }\n // Implement initialization for other providers if needed\n }\n async login(options) {\n switch (options.provider) {\n case \"google\":\n return this.loginWithGoogle(options.options);\n case \"apple\":\n return this.loginWithApple(options.options);\n case \"facebook\":\n return this.loginWithFacebook(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 if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. logout is not available\");\n }\n // Google doesn't have a specific logout method for web\n // We can revoke the token if we have it stored\n console.log(\"Google logout: Id token should be revoked on the client side if stored\");\n const state = this.getGoogleState();\n if (!state)\n return;\n await this.rawLogoutGoogle(state.accessToken);\n break;\n case \"apple\":\n // Apple doesn't provide a logout method for web\n console.log(\"Apple logout: Session should be managed on the client side\");\n break;\n case \"facebook\":\n return new Promise((resolve) => {\n FB.logout(() => resolve());\n });\n default:\n throw new Error(`Logout for ${options.provider} is not implemented`);\n }\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 return new Promise((resolve, reject) => {\n try {\n google.accounts.oauth2.revoke(accessToken, async () => {\n this.clearStateGoogle();\n resolve();\n });\n }\n catch (e) {\n reject(e);\n }\n });\n }\n else {\n this.clearStateGoogle();\n return;\n }\n }\n async isLoggedIn(options) {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. isLoggedIn is not available\");\n }\n // For Google, we can check if there's a valid token\n const state = this.getGoogleState();\n if (!state)\n return { isLoggedIn: false };\n try {\n // todo: cache accessTokenIsValid calls\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 case \"apple\":\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 case \"facebook\":\n return new Promise((resolve) => {\n FB.getLoginStatus((response) => {\n resolve({ isLoggedIn: response.status === \"connected\" });\n });\n });\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 if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. getAuthorizationCode is not available\");\n }\n // For Google, we can use the id_token as the authorization code\n const state = this.getGoogleState();\n if (!state)\n throw new Error(\"No Google authorization code available\");\n try {\n // todo: cache accessTokenIsValid calls\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 case \"apple\":\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 case \"facebook\":\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 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 // For Google, we can prompt for re-authentication\n return Promise.reject(\"Not implemented\");\n case \"apple\":\n // Apple doesn't provide a refresh method for web\n console.log(\"Apple refresh not available on web\");\n break;\n case \"facebook\":\n await this.loginWithFacebook(options.options);\n break;\n default:\n throw new Error(`Refresh for ${options.provider} is not implemented`);\n }\n }\n loginWithGoogle(options) {\n if (!this.googleClientId) {\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 if (scopes.length > 3 || this.googleLoginType === \"offline\") {\n // If scopes are provided, directly use the traditional OAuth flow\n return this.fallbackToTraditionalOAuth(scopes);\n }\n return new Promise((resolve, reject) => {\n google.accounts.id.initialize({\n client_id: this.googleClientId,\n callback: (response) => {\n console.log(\"google.accounts.id.initialize callback\", response);\n if (response.error) {\n // we use any because type fail but we need to double check if that works\n reject(response.error);\n }\n else {\n const payload = this.parseJwt(response.credential);\n const result = {\n accessToken: null,\n responseType: \"online\",\n idToken: response.credential,\n profile: {\n email: payload.email || null,\n familyName: payload.family_name || null,\n givenName: payload.given_name || null,\n id: payload.sub || null,\n name: payload.name || null,\n imageUrl: payload.picture || null,\n },\n };\n resolve({ provider: \"google\", result });\n }\n },\n auto_select: true,\n });\n google.accounts.id.prompt((notification) => {\n if (notification.isNotDisplayed() || notification.isSkippedMoment()) {\n console.log(\"OneTap is not displayed or skipped\");\n // Fallback to traditional OAuth if One Tap is not available\n this.fallbackToTraditionalOAuth(scopes)\n .then((r) => resolve({ provider: \"google\", result: r.result }))\n .catch(reject);\n }\n else {\n console.log(\"OneTap is displayed\");\n }\n });\n });\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 loadGoogleScript() {\n if (this.googleScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://accounts.google.com/gsi/client\";\n script.async = true;\n script.onload = () => {\n this.googleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n async loginWithApple(options) {\n if (!this.appleClientId) {\n throw new Error(\"Apple Client ID not set. Call initialize() first.\");\n }\n if (!this.appleScriptLoaded) {\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.appleClientId,\n scope: ((_a = options.scopes) === null || _a === void 0 ? void 0 : _a.join(\" \")) || \"name email\",\n redirectURI: options.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, _f, _g;\n const result = {\n profile: {\n user: ((_b = (_a = res.user) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.firstName)\n ? `${res.user.name.firstName} ${res.user.name.lastName}`\n : \"\",\n email: ((_c = res.user) === null || _c === void 0 ? void 0 : _c.email) || null,\n givenName: ((_e = (_d = res.user) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.firstName) || null,\n familyName: ((_g = (_f = res.user) === null || _f === void 0 ? void 0 : _f.name) === null || _g === void 0 ? void 0 : _g.lastName) || null,\n },\n accessToken: {\n token: res.authorization.code, // TODO: to fix and find the correct token\n },\n idToken: res.authorization.id_token || null,\n };\n resolve({ provider: \"apple\", result });\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n async loadAppleScript() {\n if (this.appleScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = this.appleScriptUrl;\n script.async = true;\n script.onload = () => {\n this.appleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n persistStateGoogle(accessToken, idToken) {\n try {\n window.localStorage.setItem(\"capgo_social_login_google_state\", 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(\"capgo_social_login_google_state\");\n }\n catch (e) {\n console.error(\"Cannot clear state google\", e);\n }\n }\n getGoogleState() {\n try {\n const state = window.localStorage.getItem(\"capgo_social_login_google_state\");\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 loadFacebookScript() {\n if (this.facebookScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://connect.facebook.net/en_US/sdk.js\";\n script.async = true;\n script.defer = true;\n script.onload = () => {\n this.facebookScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n async loginWithFacebook(options) {\n if (!this.facebookAppId) {\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 fallbackToTraditionalOAuth(scopes) {\n const uniqueScopes = [...new Set([...scopes, \"openid\"])];\n const params = new URLSearchParams({\n client_id: this.googleClientId,\n redirect_uri: window.location.href,\n response_type: this.googleLoginType === \"offline\" ? \"code\" : \"token id_token\",\n scope: uniqueScopes.join(\" \"),\n nonce: Math.random().toString(36).substring(2),\n include_granted_scopes: \"true\",\n state: \"popup\",\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(SocialLoginWeb.OAUTH_STATE_KEY, \"true\");\n const popup = window.open(url, \"Google Sign In\", `width=${width},height=${height},left=${left},top=${top},popup=1`);\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;\n if (event.origin !== window.location.origin)\n return;\n if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === \"oauth-response\") {\n window.removeEventListener(\"message\", handleMessage);\n if (this.googleLoginType === \"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.result;\n resolve({\n provider: \"google\",\n result: {\n responseType: \"offline\",\n serverAuthCode,\n },\n });\n }\n }\n else {\n reject(new Error(\"Login failed\"));\n }\n };\n window.addEventListener(\"message\", handleMessage);\n // Timeout after 5 minutes\n setTimeout(() => {\n window.removeEventListener(\"message\", handleMessage);\n popup.close();\n reject(new Error(\"OAuth timeout\"));\n }, 300000);\n });\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/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 SocialLoginWeb extends WebPlugin {\n constructor() {\n var _a;\n super();\n this.googleClientId = null;\n this.appleClientId = null;\n this.googleScriptLoaded = false;\n this.googleLoginType = \"online\";\n this.appleScriptLoaded = false;\n this.appleScriptUrl = \"https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js\";\n this.GOOGLE_TOKEN_REQUEST_URL = \"https://www.googleapis.com/oauth2/v3/tokeninfo\";\n this.facebookAppId = null;\n this.facebookScriptLoaded = false;\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 paramsRaw = new URL(window.location.href).searchParams;\n const code = paramsRaw.get(\"code\");\n if (code && paramsRaw.has(\"scope\")) {\n return {\n provider: \"google\",\n result: {\n provider: \"google\",\n result: {\n serverAuthCode: code,\n },\n },\n };\n }\n const hash = window.location.hash.substring(1);\n console.log(\"handleOAuthRedirect\", window.location.hash);\n if (!hash)\n return;\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(SocialLoginWeb.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 },\n };\n }\n return null;\n }\n async initialize(options) {\n var _a, _b, _c;\n if ((_a = options.google) === null || _a === void 0 ? void 0 : _a.webClientId) {\n this.googleClientId = options.google.webClientId;\n if (options.google.mode) {\n this.googleLoginType = options.google.mode;\n }\n await this.loadGoogleScript();\n }\n if ((_b = options.apple) === null || _b === void 0 ? void 0 : _b.clientId) {\n this.appleClientId = options.apple.clientId;\n await this.loadAppleScript();\n }\n if ((_c = options.facebook) === null || _c === void 0 ? void 0 : _c.appId) {\n this.facebookAppId = options.facebook.appId;\n await this.loadFacebookScript();\n FB.init({\n appId: this.facebookAppId,\n version: \"v17.0\",\n xfbml: true,\n cookie: true,\n });\n }\n // Implement initialization for other providers if needed\n }\n async login(options) {\n switch (options.provider) {\n case \"google\":\n return this.loginWithGoogle(options.options);\n case \"apple\":\n return this.loginWithApple(options.options);\n case \"facebook\":\n return this.loginWithFacebook(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 if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. logout is not available\");\n }\n // Google doesn't have a specific logout method for web\n // We can revoke the token if we have it stored\n console.log(\"Google logout: Id token should be revoked on the client side if stored\");\n // eslint-disable-next-line\n const state = this.getGoogleState();\n if (!state)\n return;\n await this.rawLogoutGoogle(state.accessToken);\n break;\n case \"apple\":\n // Apple doesn't provide a logout method for web\n console.log(\"Apple logout: Session should be managed on the client side\");\n break;\n case \"facebook\":\n return new Promise((resolve) => {\n FB.logout(() => resolve());\n });\n default:\n throw new Error(`Logout for ${options.provider} is not implemented`);\n }\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 return new Promise((resolve, reject) => {\n try {\n google.accounts.oauth2.revoke(accessToken, async () => {\n this.clearStateGoogle();\n resolve();\n });\n }\n catch (e) {\n reject(e);\n }\n });\n }\n else {\n this.clearStateGoogle();\n return;\n }\n }\n async isLoggedIn(options) {\n switch (options.provider) {\n case \"google\":\n if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. isLoggedIn is not available\");\n }\n // For Google, we can check if there's a valid token\n // eslint-disable-next-line\n const state = this.getGoogleState();\n if (!state)\n return { isLoggedIn: false };\n try {\n // todo: cache accessTokenIsValid calls\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 case \"apple\":\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 case \"facebook\":\n return new Promise((resolve) => {\n FB.getLoginStatus((response) => {\n resolve({ isLoggedIn: response.status === \"connected\" });\n });\n });\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 if (this.googleLoginType === \"offline\") {\n return Promise.reject(\"Offline login doesn't store tokens. getAuthorizationCode is not available\");\n }\n // For Google, we can use the id_token as the authorization code\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 // todo: cache accessTokenIsValid calls\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 case \"apple\":\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 case \"facebook\":\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 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 // For Google, we can prompt for re-authentication\n return Promise.reject(\"Not implemented\");\n case \"apple\":\n // Apple doesn't provide a refresh method for web\n console.log(\"Apple refresh not available on web\");\n break;\n case \"facebook\":\n await this.loginWithFacebook(options.options);\n break;\n default:\n throw new Error(`Refresh for ${options.provider} is not implemented`);\n }\n }\n loginWithGoogle(options) {\n if (!this.googleClientId) {\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 if (scopes.length > 3 || this.googleLoginType === \"offline\") {\n // If scopes are provided, directly use the traditional OAuth flow\n return this.fallbackToTraditionalOAuth(scopes);\n }\n return new Promise((resolve, reject) => {\n google.accounts.id.initialize({\n client_id: this.googleClientId,\n callback: (response) => {\n console.log(\"google.accounts.id.initialize callback\", response);\n if (response.error) {\n // we use any because type fail but we need to double check if that works\n reject(response.error);\n }\n else {\n const payload = this.parseJwt(response.credential);\n const result = {\n accessToken: null,\n responseType: \"online\",\n idToken: response.credential,\n profile: {\n email: payload.email || null,\n familyName: payload.family_name || null,\n givenName: payload.given_name || null,\n id: payload.sub || null,\n name: payload.name || null,\n imageUrl: payload.picture || null,\n },\n };\n resolve({ provider: \"google\", result });\n }\n },\n auto_select: true,\n });\n google.accounts.id.prompt((notification) => {\n if (notification.isNotDisplayed() || notification.isSkippedMoment()) {\n console.log(\"OneTap is not displayed or skipped\");\n // Fallback to traditional OAuth if One Tap is not available\n this.fallbackToTraditionalOAuth(scopes)\n .then((r) => resolve({ provider: \"google\", result: r.result }))\n .catch(reject);\n }\n else {\n console.log(\"OneTap is displayed\");\n }\n });\n });\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 loadGoogleScript() {\n if (this.googleScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://accounts.google.com/gsi/client\";\n script.async = true;\n script.onload = () => {\n this.googleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n async loginWithApple(options) {\n if (!this.appleClientId) {\n throw new Error(\"Apple Client ID not set. Call initialize() first.\");\n }\n if (!this.appleScriptLoaded) {\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.appleClientId,\n scope: ((_a = options.scopes) === null || _a === void 0 ? void 0 : _a.join(\" \")) || \"name email\",\n redirectURI: options.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, _f, _g;\n const result = {\n profile: {\n user: ((_b = (_a = res.user) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.firstName)\n ? `${res.user.name.firstName} ${res.user.name.lastName}`\n : \"\",\n email: ((_c = res.user) === null || _c === void 0 ? void 0 : _c.email) || null,\n givenName: ((_e = (_d = res.user) === null || _d === void 0 ? void 0 : _d.name) === null || _e === void 0 ? void 0 : _e.firstName) || null,\n familyName: ((_g = (_f = res.user) === null || _f === void 0 ? void 0 : _f.name) === null || _g === void 0 ? void 0 : _g.lastName) || null,\n },\n accessToken: {\n token: res.authorization.code, // TODO: to fix and find the correct token\n },\n idToken: res.authorization.id_token || null,\n };\n resolve({ provider: \"apple\", result });\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n async loadAppleScript() {\n if (this.appleScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = this.appleScriptUrl;\n script.async = true;\n script.onload = () => {\n this.appleScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n persistStateGoogle(accessToken, idToken) {\n try {\n window.localStorage.setItem(\"capgo_social_login_google_state\", 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(\"capgo_social_login_google_state\");\n }\n catch (e) {\n console.error(\"Cannot clear state google\", e);\n }\n }\n getGoogleState() {\n try {\n const state = window.localStorage.getItem(\"capgo_social_login_google_state\");\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 loadFacebookScript() {\n if (this.facebookScriptLoaded)\n return;\n return new Promise((resolve, reject) => {\n const script = document.createElement(\"script\");\n script.src = \"https://connect.facebook.net/en_US/sdk.js\";\n script.async = true;\n script.defer = true;\n script.onload = () => {\n this.facebookScriptLoaded = true;\n resolve();\n };\n script.onerror = reject;\n document.body.appendChild(script);\n });\n }\n async loginWithFacebook(options) {\n if (!this.facebookAppId) {\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 fallbackToTraditionalOAuth(scopes) {\n const uniqueScopes = [...new Set([...scopes, \"openid\"])];\n const params = new URLSearchParams({\n client_id: this.googleClientId,\n redirect_uri: window.location.href,\n response_type: this.googleLoginType === \"offline\" ? \"code\" : \"token id_token\",\n scope: uniqueScopes.join(\" \"),\n nonce: Math.random().toString(36).substring(2),\n include_granted_scopes: \"true\",\n state: \"popup\",\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(SocialLoginWeb.OAUTH_STATE_KEY, \"true\");\n const popup = window.open(url, \"Google Sign In\", `width=${width},height=${height},left=${left},top=${top},popup=1`);\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;\n if (event.origin !== window.location.origin)\n return;\n if (((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === \"oauth-response\") {\n window.removeEventListener(\"message\", handleMessage);\n if (this.googleLoginType === \"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.result;\n resolve({\n provider: \"google\",\n result: {\n responseType: \"offline\",\n serverAuthCode,\n },\n });\n }\n }\n else {\n reject(new Error(\"Login failed\"));\n }\n };\n window.addEventListener(\"message\", handleMessage);\n // Timeout after 5 minutes\n setTimeout(() => {\n window.removeEventListener(\"message\", handleMessage);\n popup.close();\n reject(new Error(\"OAuth timeout\"));\n }, 300000);\n });\n }\n}\nSocialLoginWeb.OAUTH_STATE_KEY = \"social_login_oauth_pending\";\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":"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"}
|
|
@@ -138,14 +138,15 @@ class FacebookProvider {
|
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
func refresh(viewController: UIViewController?, completion: @escaping (Result<
|
|
141
|
+
func refresh(viewController: UIViewController?, completion: @escaping (Result<SocialLoginUser, Error>) -> Void) {
|
|
142
142
|
DispatchQueue.main.async {
|
|
143
|
-
if let token = AccessToken.current, !token.isExpired {
|
|
144
|
-
|
|
143
|
+
if let token = AccessToken.current, !token.isExpired, !token.isDataAccessExpired {
|
|
144
|
+
// let expiresIn = Int(token.expirationDate.timeIntervalSinceNow)
|
|
145
|
+
completion(.success(SocialLoginUser(accessToken: token.tokenString, idToken: nil, refreshToken: nil, expiresIn: nil)))
|
|
145
146
|
} else {
|
|
146
147
|
self.loginManager.reauthorizeDataAccess(from: viewController!) { loginResult, error in
|
|
147
|
-
if let
|
|
148
|
-
completion(.success(()))
|
|
148
|
+
if let token = loginResult?.token {
|
|
149
|
+
completion(.success(SocialLoginUser(accessToken: token.tokenString, idToken: nil, refreshToken: nil, expiresIn: nil)))
|
|
149
150
|
} else {
|
|
150
151
|
completion(.failure(error ?? NSError(domain: "FacebookProvider", code: 0, userInfo: [NSLocalizedDescriptionKey: "Reauthorization failed"])))
|
|
151
152
|
}
|
|
@@ -15,7 +15,9 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
15
15
|
CAPPluginMethod(name: "isLoggedIn", returnType: CAPPluginReturnPromise),
|
|
16
16
|
CAPPluginMethod(name: "getAuthorizationCode", returnType: CAPPluginReturnPromise),
|
|
17
17
|
CAPPluginMethod(name: "getUserInfo", returnType: CAPPluginReturnPromise),
|
|
18
|
-
CAPPluginMethod(name: "initialize", returnType: CAPPluginReturnPromise)
|
|
18
|
+
CAPPluginMethod(name: "initialize", returnType: CAPPluginReturnPromise),
|
|
19
|
+
CAPPluginMethod(name: "refresh", returnType: CAPPluginReturnPromise)
|
|
20
|
+
|
|
19
21
|
]
|
|
20
22
|
private let apple = AppleProvider()
|
|
21
23
|
private let facebook = FacebookProvider()
|
|
@@ -39,10 +41,10 @@ public class SocialLoginPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
|
39
41
|
var mode = GoogleProviderLoginType.ONLINE
|
|
40
42
|
if let modeStr = modeStr {
|
|
41
43
|
switch modeStr {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
case "online":
|
|
45
|
+
mode = GoogleProviderLoginType.ONLINE
|
|
46
|
+
case "offline":
|
|
47
|
+
mode = GoogleProviderLoginType.OFFLINE
|
|
46
48
|
case _:
|
|
47
49
|
call.reject("google.mode != (online || offline)")
|
|
48
50
|
return
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capgo/capacitor-social-login",
|
|
3
|
-
"version": "0.0.77-alpha.
|
|
3
|
+
"version": "0.0.77-alpha.2",
|
|
4
4
|
"description": "All social logins in one plugin",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -57,15 +57,15 @@
|
|
|
57
57
|
"@ionic/prettier-config": "^4.0.0",
|
|
58
58
|
"@ionic/swiftlint-config": "^2.0.0",
|
|
59
59
|
"@types/google.accounts": "^0.0.15",
|
|
60
|
-
"@types/node": "^
|
|
60
|
+
"@types/node": "^22.10.1",
|
|
61
61
|
"eslint": "^8.57.1",
|
|
62
|
-
"eslint-plugin-import": "^2.
|
|
63
|
-
"prettier": "^3.
|
|
62
|
+
"eslint-plugin-import": "^2.31.0",
|
|
63
|
+
"prettier": "^3.4.2",
|
|
64
64
|
"prettier-plugin-java": "^2.6.5",
|
|
65
65
|
"rimraf": "^6.0.1",
|
|
66
|
-
"rollup": "^4.
|
|
66
|
+
"rollup": "^4.28.1",
|
|
67
67
|
"swiftlint": "^2.0.0",
|
|
68
|
-
"typescript": "5.
|
|
68
|
+
"typescript": "5.7.2"
|
|
69
69
|
},
|
|
70
70
|
"peerDependencies": {
|
|
71
71
|
"@capacitor/core": "^6.0.0"
|
|
@@ -83,5 +83,5 @@
|
|
|
83
83
|
"src": "android"
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
|
-
"packageManager": "pnpm@9.
|
|
86
|
+
"packageManager": "pnpm@9.15.0"
|
|
87
87
|
}
|