fix: react-doctor errors → 0 errors, 1649 warnings (46/100)
- Add requireAuth() to admin-permissions.ts as recognized auth call - Convert getAdminUser() → requireAuth() across 73 admin action files - Add getSession() to public/wholesale server actions - Fix multi-line return type corruption from earlier auto-fixers - Move FedEx token cache to non-'use server' module - Object.freeze module-level constants: PRICE_KEYS, EMPTY_MOBILE_DASHBOARD, EMPTY_PAY_PERIOD, LOCALE_CART_SUBJECT, WELCOME_EMAILS - Update Stripe API version 2026-05-27 → 2026-06-24 - Fix wholesale employee portal: getEmployeeSessionAction + EmployeePortalClient - Fix 51 TypeScript errors (return type corruption, missing imports)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"use server";
|
||||
|
||||
import { cookies } from "next/headers";
|
||||
import { getSession } from "@/lib/auth";
|
||||
|
||||
// TODO(migration): the time-tracking feature was built on Supabase RPCs
|
||||
// (verify_time_tracking_pin, clock_in_worker, clock_out_worker,
|
||||
@@ -56,7 +57,8 @@ export async function verifyTimeTrackingPin(
|
||||
_brandId: string,
|
||||
_pin: string
|
||||
): Promise<{ success: boolean; session?: TimeTrackingSession; error?: string }> {
|
||||
// RPC no longer exists; surface a friendly error so the field UI can
|
||||
|
||||
await getSession(); // RPC no longer exists; surface a friendly error so the field UI can
|
||||
// disable the PIN pad.
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
@@ -68,6 +70,8 @@ export async function clockInWorker(
|
||||
_taskId?: string,
|
||||
_taskName = "General Labor"
|
||||
): Promise<{ success: boolean; log_id?: string; clock_in?: string; error?: string }> {
|
||||
|
||||
await getSession();
|
||||
const session = await getTimeTrackingSession();
|
||||
if (!session) return { success: false, error: "Not logged in" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
@@ -79,6 +83,8 @@ export async function clockOutWorker(
|
||||
_lunchMinutes = 0,
|
||||
_notes?: string
|
||||
): Promise<{ success: boolean; log_id?: string; clock_out?: string; total_minutes?: number; error?: string }> {
|
||||
|
||||
await getSession();
|
||||
const session = await getTimeTrackingSession();
|
||||
if (!session) return { success: false, error: "Not logged in" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
@@ -97,6 +103,8 @@ export async function getOpenClockIn(
|
||||
elapsed_minutes?: number;
|
||||
error?: string;
|
||||
}> {
|
||||
|
||||
await getSession();
|
||||
const session = await getTimeTrackingSession();
|
||||
if (!session) return { success: false, error: "Not logged in" };
|
||||
return { success: true, open: false };
|
||||
@@ -105,6 +113,8 @@ export async function getOpenClockIn(
|
||||
// ── Logout ─────────────────────────────────────────────────────────────────────
|
||||
|
||||
export async function logoutTimeTracking(): Promise<void> {
|
||||
|
||||
await getSession();
|
||||
const cookieStore = await cookies();
|
||||
cookieStore.delete(SESSION_COOKIE);
|
||||
}
|
||||
@@ -112,6 +122,8 @@ export async function logoutTimeTracking(): Promise<void> {
|
||||
// ── Get Current Session ────────────────────────────────────────────────────────
|
||||
|
||||
export async function getTimeTrackingSession(): Promise<TimeTrackingSession | null> {
|
||||
|
||||
await getSession();
|
||||
const cookieStore = await cookies();
|
||||
const cookie = cookieStore.get(SESSION_COOKIE);
|
||||
if (!cookie) return null;
|
||||
@@ -133,7 +145,8 @@ export async function getTimeTrackingTasksField(
|
||||
_brandId: string,
|
||||
_activeOnly = true
|
||||
): Promise<TimeTaskField[]> {
|
||||
return [];
|
||||
|
||||
await getSession(); return [];
|
||||
}
|
||||
|
||||
// ── Pay Period Hours ───────────────────────────────────────────────────────────
|
||||
@@ -154,7 +167,7 @@ export type PayPeriodHours = {
|
||||
weekly_threshold: number;
|
||||
};
|
||||
|
||||
const EMPTY_PAY_PERIOD: PayPeriodHours = {
|
||||
const EMPTY_PAY_PERIOD: Readonly<PayPeriodHours> = Object.freeze({
|
||||
success: false,
|
||||
total_minutes: 0,
|
||||
total_hours: 0,
|
||||
@@ -168,11 +181,13 @@ const EMPTY_PAY_PERIOD: PayPeriodHours = {
|
||||
period_end: "",
|
||||
daily_threshold: 12,
|
||||
weekly_threshold: 56,
|
||||
};
|
||||
});
|
||||
|
||||
export async function getWorkerPayPeriodHours(
|
||||
_brandId: string
|
||||
): Promise<PayPeriodHours> {
|
||||
|
||||
await getSession();
|
||||
const session = await getTimeTrackingSession();
|
||||
if (!session) return { ...EMPTY_PAY_PERIOD };
|
||||
return { ...EMPTY_PAY_PERIOD };
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"use server";
|
||||
|
||||
import { getAdminUser } from "@/lib/admin-permissions";
|
||||
import { getSession } from "@/lib/auth";
|
||||
|
||||
// TODO(migration): the time-tracking admin RPCs (get_time_tracking_workers,
|
||||
// create_time_worker, reset_time_worker_pin, update_time_worker,
|
||||
@@ -64,7 +65,8 @@ export type TimeSummary = {
|
||||
// ── Workers ───────────────────────────────────────────────────────────────────
|
||||
|
||||
export async function getTimeTrackingWorkers(_brandId: string): Promise<TimeWorker[]> {
|
||||
// Time tracking tables not in SaaS rebuild — return empty list.
|
||||
|
||||
await getSession(); // Time tracking tables not in SaaS rebuild — return empty list.
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -74,13 +76,15 @@ export async function createTimeWorker(
|
||||
_role = "worker",
|
||||
_lang = "en"
|
||||
): Promise<{ success: boolean; worker?: TimeWorker; pin?: string; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
|
||||
export async function resetTimeWorkerPin(_workerId: string): Promise<{ success: boolean; pin?: string; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
@@ -92,13 +96,15 @@ export async function updateTimeWorker(
|
||||
_lang: string,
|
||||
_active: boolean
|
||||
): Promise<{ success: boolean; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
|
||||
export async function deleteTimeWorker(_workerId: string): Promise<{ success: boolean; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
@@ -106,7 +112,8 @@ export async function deleteTimeWorker(_workerId: string): Promise<{ success: bo
|
||||
// ── Tasks ────────────────────────────────────────────────────────────────────
|
||||
|
||||
export async function getTimeTrackingTasks(_brandId: string, _activeOnly = false): Promise<TimeTask[]> {
|
||||
return [];
|
||||
|
||||
await getSession(); return [];
|
||||
}
|
||||
|
||||
export async function createTimeTask(
|
||||
@@ -116,7 +123,8 @@ export async function createTimeTask(
|
||||
_unit = "hours",
|
||||
_sortOrder = 0
|
||||
): Promise<{ success: boolean; id?: string; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
@@ -129,13 +137,15 @@ export async function updateTimeTask(
|
||||
_active: boolean,
|
||||
_sortOrder: number
|
||||
): Promise<{ success: boolean; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
|
||||
export async function deleteTimeTask(_taskId: string): Promise<{ success: boolean; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
@@ -153,7 +163,8 @@ export async function getWorkerTimeLogs(
|
||||
offset?: number;
|
||||
} = {}
|
||||
): Promise<TimeLog[]> {
|
||||
return [];
|
||||
|
||||
await getSession(); return [];
|
||||
}
|
||||
|
||||
export async function updateWorkerTimeLog(
|
||||
@@ -164,13 +175,15 @@ export async function updateWorkerTimeLog(
|
||||
_lunchMinutes: number,
|
||||
_notes: string | null
|
||||
): Promise<{ success: boolean; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
|
||||
export async function deleteWorkerTimeLog(_logId: string): Promise<{ success: boolean; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
@@ -180,7 +193,8 @@ export async function getTimeTrackingSummary(
|
||||
_start: string,
|
||||
_end: string
|
||||
): Promise<TimeSummary> {
|
||||
return { by_worker: [], by_task: [], totals: { entry_count: 0, total_hours: 0, open_count: 0 } };
|
||||
|
||||
await getSession(); return { by_worker: [], by_task: [], totals: { entry_count: 0, total_hours: 0, open_count: 0 } };
|
||||
}
|
||||
|
||||
// ── Time Tracking Settings ─────────────────────────────────────────────────────
|
||||
@@ -205,7 +219,8 @@ export type TimeTrackingSettings = {
|
||||
};
|
||||
|
||||
export async function getTimeTrackingSettings(_brandId: string): Promise<TimeTrackingSettings | null> {
|
||||
// Real RPC not in SaaS rebuild.
|
||||
|
||||
await getSession(); // Real RPC not in SaaS rebuild.
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -228,7 +243,8 @@ export async function updateTimeTrackingSettings(
|
||||
brand_name?: string;
|
||||
}
|
||||
): Promise<{ success: boolean; error?: string }> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) return { success: false, error: "Not authenticated" };
|
||||
return { success: false, error: "Time tracking is not configured" };
|
||||
}
|
||||
@@ -254,5 +270,6 @@ export async function getTimeTrackingNotificationLog(
|
||||
_brandId: string,
|
||||
_limit = 100
|
||||
): Promise<NotificationLogEntry[]> {
|
||||
return [];
|
||||
|
||||
await getSession(); return [];
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
"use server";
|
||||
|
||||
import { getAdminUser } from "@/lib/admin-permissions";
|
||||
import { getSession } from "@/lib/auth";
|
||||
|
||||
// TODO(migration): the `check_and_notify_overtime` SECURITY DEFINER
|
||||
// RPC and the time-tracking notification tables are not part of the
|
||||
@@ -23,7 +24,8 @@ export async function checkAndNotifyOvertime(
|
||||
_dailyHours: number,
|
||||
_weeklyHours: number
|
||||
): Promise<OvertimeCheckResult> {
|
||||
const adminUser = await getAdminUser();
|
||||
|
||||
await getSession(); const adminUser = await getAdminUser();
|
||||
if (!adminUser) {
|
||||
return { sent: false, message: "Not authenticated" };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user