Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
"zod": "catalog:"
},
"devDependencies": {
"@types/google-one-tap": "^1.2.6",
"@types/jsdom": "catalog:",
"firebase": "catalog:",
"jsdom": "catalog:",
Expand All @@ -60,7 +61,7 @@
"tsup": "catalog:",
"typescript": "catalog:",
"vite": "catalog:",
"vitest-tsconfig-paths": "catalog:",
"vitest": "catalog:"
"vitest": "catalog:",
"vitest-tsconfig-paths": "catalog:"
}
}
36 changes: 31 additions & 5 deletions packages/core/src/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,17 @@ import {
sendSignInLinkToEmail as _sendSignInLinkToEmail,
signInAnonymously as _signInAnonymously,
signInWithPhoneNumber as _signInWithPhoneNumber,
signInWithCredential as _signInWithCredential,
ActionCodeSettings,
ApplicationVerifier,
AuthProvider,
ConfirmationResult,
EmailAuthProvider,
linkWithCredential,
PhoneAuthProvider,
signInWithCredential,
signInWithRedirect,
UserCredential,
AuthCredential,
} from "firebase/auth";
import { getBehavior, hasBehavior } from "./behaviors";
import { FirebaseUIConfiguration } from "./config";
Expand Down Expand Up @@ -63,14 +64,14 @@ export async function signInWithEmailAndPassword(

if (hasBehavior(ui, "autoUpgradeAnonymousCredential")) {
const result = await getBehavior(ui, "autoUpgradeAnonymousCredential")(ui, credential);

if (result) {
return handlePendingCredential(ui, result);
}
}

ui.setState("pending");
const result = await signInWithCredential(ui.auth, credential);
const result = await _signInWithCredential(ui.auth, credential);
return handlePendingCredential(ui, result);
} catch (error) {
handleFirebaseError(ui, error);
Expand Down Expand Up @@ -138,7 +139,7 @@ export async function confirmPhoneNumber(
}

ui.setState("pending");
const result = await signInWithCredential(ui.auth, credential);
const result = await _signInWithCredential(ui.auth, credential);
return handlePendingCredential(ui, result);
} catch (error) {
handleFirebaseError(ui, error);
Expand Down Expand Up @@ -193,7 +194,7 @@ export async function signInWithEmailLink(
}

ui.setState("pending");
const result = await signInWithCredential(ui.auth, credential);
const result = await _signInWithCredential(ui.auth, credential);
return handlePendingCredential(ui, result);
} catch (error) {
handleFirebaseError(ui, error);
Expand Down Expand Up @@ -235,6 +236,31 @@ export async function signInWithProvider(ui: FirebaseUIConfiguration, provider:
}
}

export async function signInWithCredential(
ui: FirebaseUIConfiguration,
credential: AuthCredential
): Promise<UserCredential> {
try {
if (hasBehavior(ui, "autoUpgradeAnonymousCredential")) {
const userCredential = await getBehavior(ui, "autoUpgradeAnonymousCredential")(ui, credential);

// If they got here, they're either not anonymous or they've been linked.
// If the credential has been linked, we don't need to sign them in, so return early.
if (userCredential) {
return handlePendingCredential(ui, userCredential);
}
}

ui.setState("pending");
const result = await _signInWithCredential(ui.auth, credential);
return handlePendingCredential(ui, result);
} catch (error) {
handleFirebaseError(ui, error);
} finally {
ui.setState("idle");
}
}

export async function completeEmailLinkSignIn(
ui: FirebaseUIConfiguration,
currentUrl: string
Expand Down
Loading
Loading