@chainwayxyz/phase2cli
Version:
All-in-one interactive command-line for interfacing with zkSNARK Phase 2 Trusted Setup ceremonies
70 lines (58 loc) • 2.55 kB
text/typescript
import { getAuth, signOut } from "firebase/auth"
import { bootstrapCommandExecutionAndServices, checkAuth } from "../lib/services.js"
import { showError } from "../lib/errors.js"
import { askForConfirmation } from "../lib/prompts.js"
import { customSpinner, sleep, terminate } from "../lib/utils.js"
import theme from "../lib/theme.js"
import { deleteLocalAccessToken, deleteLocalAuthMethod, deleteLocalBandadaIdentity } from "../lib/localConfigs.js"
/**
* Logout command.
*/
const logout = async () => {
try {
// Initialize services.
const { firebaseApp } = await bootstrapCommandExecutionAndServices()
// Check for authentication.
const { providerUserId } = await checkAuth(firebaseApp)
// Inform the user about deassociation in Github and re run auth
console.log(
`${
theme.symbols.warning
} The logout could sign you out from Firebase and will delete the access token saved locally on this machine. Therefore, you have to run ${theme.text.bold(
"phase2cli auth"
)} to authenticate again.\n${
theme.symbols.info
} Remember, we cannot revoke the authorization from your Github account from this CLI! You can do this manually as reported in the official Github documentation ${
theme.emojis.pointDown
}\n\n${theme.text.bold(
theme.text.underlined(
`https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/reviewing-your-authorized-applications-oauth`
)
)}\n`
)
// Ask for confirmation.
const { confirmation } = await askForConfirmation(
"Are you sure you want to log out from this machine?",
"Yes",
"No"
)
if (confirmation) {
const spinner = customSpinner(`Logging out...`, "clock")
spinner.start()
// Sign out.
const auth = getAuth()
await signOut(auth)
// Delete local token.
deleteLocalAuthMethod()
deleteLocalAccessToken()
deleteLocalBandadaIdentity()
await sleep(3000) // ~3s.
spinner.stop()
console.log(`${theme.symbols.success} Logout successfully completed`)
} else terminate(providerUserId)
} catch (err: any) {
showError(`Something went wrong: ${err.toString()}`, true)
}
}
export default logout