29 lines
781 B
TypeScript
29 lines
781 B
TypeScript
import { generateUsername } from 'unique-username-generator'
|
|
|
|
import { prisma } from './prisma'
|
|
import { generateUserSecretToken, hashUserSecretToken } from './userSecretToken'
|
|
|
|
/**
|
|
* Generate a random username.
|
|
* Format: `adjective_noun_1234`
|
|
*/
|
|
function generateRandomUsername() {
|
|
return `${generateUsername('_')}_${Math.floor(Math.random() * 10000).toString()}`
|
|
}
|
|
|
|
export async function createAccount(preGeneratedToken?: string) {
|
|
const token = preGeneratedToken ?? generateUserSecretToken()
|
|
const hash = hashUserSecretToken(token)
|
|
const username = generateRandomUsername()
|
|
|
|
const user = await prisma.user.create({
|
|
data: {
|
|
name: username,
|
|
secretTokenHash: hash,
|
|
notificationPreferences: { create: {} },
|
|
},
|
|
})
|
|
|
|
return { token, user }
|
|
}
|