mirror of
https://github.com/CompassConnections/Compass.git
synced 2026-01-05 20:38:46 -05:00
74 lines
1.9 KiB
TypeScript
74 lines
1.9 KiB
TypeScript
import { type User } from 'common/user'
|
|
import dayjs from 'dayjs'
|
|
import utc from 'dayjs/plugin/utc'
|
|
import {
|
|
GoogleAuthProvider,
|
|
OAuthProvider,
|
|
getAuth,
|
|
signInWithPopup,
|
|
} from 'firebase/auth'
|
|
import { safeLocalStorage } from '../util/local'
|
|
import { app } from './init'
|
|
|
|
dayjs.extend(utc)
|
|
|
|
export type { User }
|
|
|
|
export const auth = getAuth(app)
|
|
|
|
export const CACHED_REFERRAL_USERNAME_KEY = 'CACHED_REFERRAL_KEY'
|
|
|
|
// Scenarios:
|
|
// 1. User is referred by another user to homepage, group page, market page etc. explicitly via referrer= query param
|
|
// 2. User lands on a market or group without a referrer, we attribute the market/group creator
|
|
// Explicit referrers take priority over the implicit ones, (e.g. they're overwritten)
|
|
export function writeReferralInfo(
|
|
defaultReferrerUsername: string,
|
|
otherOptions?: {
|
|
contractId?: string
|
|
explicitReferrer?: string
|
|
}
|
|
) {
|
|
const local = safeLocalStorage
|
|
const cachedReferralUser = local?.getItem(CACHED_REFERRAL_USERNAME_KEY)
|
|
const { explicitReferrer } = otherOptions || {}
|
|
|
|
// Write the first referral username we see.
|
|
if (!cachedReferralUser) {
|
|
local?.setItem(
|
|
CACHED_REFERRAL_USERNAME_KEY,
|
|
explicitReferrer || defaultReferrerUsername
|
|
)
|
|
}
|
|
|
|
// Overwrite all referral info if we see an explicit referrer.
|
|
if (explicitReferrer) {
|
|
local?.setItem(CACHED_REFERRAL_USERNAME_KEY, explicitReferrer)
|
|
}
|
|
}
|
|
|
|
export async function firebaseLogin() {
|
|
const provider = new GoogleAuthProvider()
|
|
return signInWithPopup(auth, provider).then(async (result) => {
|
|
return result
|
|
})
|
|
}
|
|
|
|
export async function loginWithApple() {
|
|
const provider = new OAuthProvider('apple.com')
|
|
provider.addScope('email')
|
|
provider.addScope('name')
|
|
|
|
return signInWithPopup(auth, provider)
|
|
.then((result) => {
|
|
return result
|
|
})
|
|
.catch((error) => {
|
|
console.error(error)
|
|
})
|
|
}
|
|
|
|
export async function firebaseLogout() {
|
|
await auth.signOut()
|
|
}
|