-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathauth.ts
More file actions
105 lines (93 loc) · 3.38 KB
/
auth.ts
File metadata and controls
105 lines (93 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
"use server";
import { revalidatePath } from "next/cache";
import { createSupabaseClient } from "@/utils/supabase/server";
import { loginInitialState, requiredOnboardingProgress, signupInitialState } from "@/types/user";
import { createClient } from "@supabase/supabase-js";
import { getCompanyServerSide } from "@/api/company-server";
import { importQuickbooksDataServerSide } from "../api/quickbooks-server";
export async function login(prevState: loginInitialState, formData: FormData) {
const supabase = await createSupabaseClient();
const payload = {
email: formData.get("email") as string,
password: formData.get("password") as string,
};
const { error } = await supabase.auth.signInWithPassword(payload);
if (error) {
return {
success: false,
message: error.message || "Login failed",
};
}
const company = await getCompanyServerSide();
if (company?.externals) {
importQuickbooksDataServerSide();
}
revalidatePath("/", "layout");
return { success: true, message: "Login successful" };
}
export async function logoutUser() {
const supabase = await createSupabaseClient();
const { error } = await supabase.auth.signOut();
if (error) {
console.error("Error signing out:", error.message);
}
}
export async function signup(prevState: signupInitialState, formData: FormData) {
const supabase = await createSupabaseClient();
const payload = {
email: formData.get("email") as string,
password: formData.get("password") as string,
options: {
data: {
onboarding_step: requiredOnboardingProgress.USER,
},
},
};
const { error } = await supabase.auth.signUp(payload);
if (error) {
return {
success: false,
message: error.message || "Login failed",
};
}
return { success: true, message: "Form submitted successfully!", email: payload.email };
}
export async function setCompanyMetadata(companyID: string) {
const supabaseClient = await createSupabaseClient();
const supabaseService = createClient(
process.env.NODE_ENV === "production"
? process.env.NEXT_PUBLIC_SUPABASE_URL!
: process.env.NEXT_PUBLIC_DEV_SUPABASE_URL!,
process.env.NODE_ENV === "production"
? process.env.SUPABASE_SERVICE_ROLE_KEY!
: process.env.SUPABASE_DEV_SERVICE_ROLE_KEY!
);
const { data, error } = await supabaseClient.auth.getUser();
if (error) {
throw new Error("User not logged in");
}
const user = data.user!.id;
const response = await supabaseService.auth.admin.updateUserById(user, {
app_metadata: {
company_id: companyID,
},
});
await supabaseClient.auth.updateUser({
data: {
onboarding_step: requiredOnboardingProgress.FINISHED,
},
});
const { error: refreshError } = await supabaseClient.auth.refreshSession();
if (refreshError) {
throw new Error("Failed to refresh session");
}
return response;
}
export async function retrieveToken(): Promise<string> {
const supabase = await createSupabaseClient();
const { data } = await supabase.auth.getSession();
if (!data.session?.access_token) {
throw new Error("Authorization token is missing.");
}
return data.session.access_token;
}