Implement company provisioning codes and session tweaks

This commit is contained in:
Esdras Renan 2025-10-15 20:45:25 -03:00
parent 0fb9bf59b2
commit 2cba553efa
28 changed files with 1407 additions and 534 deletions

View file

@ -1,3 +1,4 @@
import { randomBytes } from "@noble/hashes/utils"
import { ConvexError, v } from "convex/values"
import { mutation, query } from "./_generated/server"
@ -13,6 +14,10 @@ function normalizeEmail(value: string) {
return value.trim().toLowerCase()
}
function generateProvisioningCode() {
return Array.from(randomBytes(32), (b) => b.toString(16).padStart(2, "0")).join("")
}
type ImportedUser = {
email: string
name: string
@ -30,6 +35,7 @@ type ImportedQueue = {
type ImportedCompany = {
slug: string
name: string
provisioningCode?: string | null
isAvulso?: boolean | null
cnpj?: string | null
domain?: string | null
@ -185,6 +191,7 @@ async function ensureCompany(
tenantId,
name: data.name,
slug,
provisioningCode: data.provisioningCode ?? existing?.provisioningCode ?? generateProvisioningCode(),
isAvulso: data.isAvulso ?? undefined,
cnpj: data.cnpj ?? undefined,
domain: data.domain ?? undefined,
@ -204,7 +211,8 @@ async function ensureCompany(
existing.domain !== (payload.domain ?? undefined) ||
existing.phone !== (payload.phone ?? undefined) ||
existing.description !== (payload.description ?? undefined) ||
existing.address !== (payload.address ?? undefined)
existing.address !== (payload.address ?? undefined) ||
existing.provisioningCode !== payload.provisioningCode
if (needsPatch) {
await ctx.db.patch(existing._id, {
name: payload.name,
@ -214,6 +222,7 @@ async function ensureCompany(
phone: payload.phone,
description: payload.description,
address: payload.address,
provisioningCode: payload.provisioningCode,
updatedAt: Date.now(),
})
}