fix: resolve __dirname error by forcing Node.js runtime on all server routes
- Add serverExternalPackages for @supabase/ssr in next.config.ts - Add export const runtime = 'nodejs' to all pages/routes using Supabase - Replace createAdminClient to use @supabase/supabase-js directly (no SSR) - Prevents @supabase/ssr from running in Edge runtime on Vercel https://claude.ai/code/session_01H2aRGDaKgarPvhay2HxN6Y
This commit is contained in:
@@ -4,6 +4,8 @@ import ProgressBar from "@/components/dashboard/ProgressBar";
|
|||||||
import ModuleCard from "@/components/dashboard/ModuleCard";
|
import ModuleCard from "@/components/dashboard/ModuleCard";
|
||||||
import type { Module, UserProgress, Profile } from "@/types/database.types";
|
import type { Module, UserProgress, Profile } from "@/types/database.types";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
export default async function DashboardPage() {
|
export default async function DashboardPage() {
|
||||||
const supabase = await createClient();
|
const supabase = await createClient();
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import Card from "@/components/ui/Card";
|
|||||||
import MarkCompleteButton from "./MarkCompleteButton";
|
import MarkCompleteButton from "./MarkCompleteButton";
|
||||||
import type { Module, UserProgress } from "@/types/database.types";
|
import type { Module, UserProgress } from "@/types/database.types";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
interface ModulePageProps {
|
interface ModulePageProps {
|
||||||
params: Promise<{ moduleId: string }>;
|
params: Promise<{ moduleId: string }>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import ModuleCard from "@/components/dashboard/ModuleCard";
|
|||||||
import ProgressBar from "@/components/dashboard/ProgressBar";
|
import ProgressBar from "@/components/dashboard/ProgressBar";
|
||||||
import type { Module, UserProgress } from "@/types/database.types";
|
import type { Module, UserProgress } from "@/types/database.types";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
export default async function FormationsPage() {
|
export default async function FormationsPage() {
|
||||||
const supabase = await createClient();
|
const supabase = await createClient();
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ import { createClient } from "@/lib/supabase/server";
|
|||||||
import Sidebar from "@/components/dashboard/Sidebar";
|
import Sidebar from "@/components/dashboard/Sidebar";
|
||||||
import type { Profile } from "@/types/database.types";
|
import type { Profile } from "@/types/database.types";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
export default async function DashboardLayout({
|
export default async function DashboardLayout({
|
||||||
children,
|
children,
|
||||||
}: {
|
}: {
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import { NextResponse } from "next/server";
|
|||||||
import { createAdminClient } from "@/lib/supabase/server";
|
import { createAdminClient } from "@/lib/supabase/server";
|
||||||
import type { CandidatureInsert } from "@/types/database.types";
|
import type { CandidatureInsert } from "@/types/database.types";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
export async function POST(request: Request) {
|
export async function POST(request: Request) {
|
||||||
try {
|
try {
|
||||||
const body = await request.json();
|
const body = await request.json();
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import { NextResponse } from "next/server";
|
|||||||
import { createClient } from "@/lib/supabase/server";
|
import { createClient } from "@/lib/supabase/server";
|
||||||
import type { Module, UserProgress } from "@/types/database.types";
|
import type { Module, UserProgress } from "@/types/database.types";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
// GET /api/formations/[moduleId] - Récupérer un module
|
// GET /api/formations/[moduleId] - Récupérer un module
|
||||||
export async function GET(
|
export async function GET(
|
||||||
_request: Request,
|
_request: Request,
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import { NextResponse } from "next/server";
|
|||||||
import { stripe } from "@/lib/stripe/client";
|
import { stripe } from "@/lib/stripe/client";
|
||||||
import { getBaseUrl } from "@/lib/utils";
|
import { getBaseUrl } from "@/lib/utils";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
|
||||||
export async function POST(request: Request) {
|
export async function POST(request: Request) {
|
||||||
try {
|
try {
|
||||||
const body = await request.json();
|
const body = await request.json();
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { createServerClient } from "@supabase/ssr";
|
import { createServerClient } from "@supabase/ssr";
|
||||||
|
import { createClient as createSupabaseClient } from "@supabase/supabase-js";
|
||||||
import { cookies } from "next/headers";
|
import { cookies } from "next/headers";
|
||||||
import type { Database } from "@/types/database.types";
|
import type { Database } from "@/types/database.types";
|
||||||
|
|
||||||
@@ -29,17 +30,10 @@ export const createClient = async () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Client admin avec service role (webhooks, opérations admin)
|
// Client admin avec service role (webhooks, opérations admin)
|
||||||
|
// Utilise @supabase/supabase-js directement (pas besoin de cookies)
|
||||||
export const createAdminClient = () => {
|
export const createAdminClient = () => {
|
||||||
return createServerClient<Database>(
|
return createSupabaseClient<Database>(
|
||||||
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
process.env.NEXT_PUBLIC_SUPABASE_URL!,
|
||||||
process.env.SUPABASE_SERVICE_ROLE_KEY!,
|
process.env.SUPABASE_SERVICE_ROLE_KEY!
|
||||||
{
|
|
||||||
cookies: {
|
|
||||||
getAll() {
|
|
||||||
return [];
|
|
||||||
},
|
|
||||||
setAll() {},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { NextConfig } from "next";
|
import type { NextConfig } from "next";
|
||||||
|
|
||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
/* config options here */
|
serverExternalPackages: ["@supabase/ssr"],
|
||||||
};
|
};
|
||||||
|
|
||||||
export default nextConfig;
|
export default nextConfig;
|
||||||
|
|||||||
Reference in New Issue
Block a user