use app url
This commit is contained in:
parent
6962d2f3a1
commit
b02ee5f74b
1 changed files with 28 additions and 35 deletions
|
|
@ -1,26 +1,24 @@
|
||||||
import { cookies } from "next/headers";
|
import { cookies } from "next/headers";
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
import { NextRequest, NextResponse } from "next/server";
|
||||||
import { db } from "@/lib/db";
|
|
||||||
import { stripeAccounts } from "@/lib/schema/stripeAccounts";
|
|
||||||
import { eq } from "drizzle-orm";
|
|
||||||
|
|
||||||
type StripeOAuthResponse = {
|
type StripeOAuthResponse = {
|
||||||
stripe_user_id: string; // acct_...
|
access_token: string;
|
||||||
|
refresh_token: string;
|
||||||
|
stripe_user_id: string;
|
||||||
|
scope: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function GET(req: NextRequest) {
|
export async function GET(req: NextRequest) {
|
||||||
const cookieStore = await cookies();
|
const cookieStore = await cookies();
|
||||||
const session = cookieStore.get("session");
|
const session = cookieStore.get("session");
|
||||||
|
|
||||||
// 🔒 Must be logged in
|
// Safety: user must still be logged in
|
||||||
if (!session) {
|
if (!session) {
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(
|
||||||
new URL("/login", process.env.NEXT_PUBLIC_BASE_URL)
|
new URL("/login", process.env.NEXT_PUBLIC_BASE_URL)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const userId = session.value;
|
|
||||||
|
|
||||||
const { searchParams } = new URL(req.url);
|
const { searchParams } = new URL(req.url);
|
||||||
const code = searchParams.get("code");
|
const code = searchParams.get("code");
|
||||||
const error = searchParams.get("error");
|
const error = searchParams.get("error");
|
||||||
|
|
@ -28,10 +26,7 @@ export async function GET(req: NextRequest) {
|
||||||
if (error) {
|
if (error) {
|
||||||
console.error("Stripe OAuth error:", error);
|
console.error("Stripe OAuth error:", error);
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(
|
||||||
new URL(
|
new URL("/connect/stripe?error=oauth_failed", process.env.NEXT_PUBLIC_BASE_URL)
|
||||||
"/connect/stripe?error=oauth_failed",
|
|
||||||
process.env.NEXT_PUBLIC_BASE_URL
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -42,7 +37,7 @@ export async function GET(req: NextRequest) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🔁 Exchange OAuth code
|
// Exchange code for access token
|
||||||
const tokenRes = await fetch("https://connect.stripe.com/oauth/token", {
|
const tokenRes = await fetch("https://connect.stripe.com/oauth/token", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
|
|
@ -60,36 +55,34 @@ export async function GET(req: NextRequest) {
|
||||||
console.error("Stripe token exchange failed:", text);
|
console.error("Stripe token exchange failed:", text);
|
||||||
|
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(
|
||||||
new URL(
|
new URL("/connect/stripe?error=token_exchange_failed", process.env.NEXT_PUBLIC_BASE_URL)
|
||||||
"/connect/stripe?error=token_exchange_failed",
|
|
||||||
process.env.NEXT_PUBLIC_BASE_URL
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = (await tokenRes.json()) as StripeOAuthResponse;
|
const data = (await tokenRes.json()) as StripeOAuthResponse;
|
||||||
|
|
||||||
// ✅ Persist Stripe account → user (UPSERT)
|
/**
|
||||||
await db
|
* TODO (NEXT STEP):
|
||||||
.insert(stripeAccounts)
|
* - Encrypt tokens
|
||||||
.values({
|
* - Persist to DB against the current user
|
||||||
userId,
|
*
|
||||||
stripeAccountId: data.stripe_user_id,
|
* Required fields:
|
||||||
})
|
* - data.stripe_user_id (acct_...)
|
||||||
.onConflictDoUpdate({
|
* - data.access_token
|
||||||
target: stripeAccounts.userId,
|
* - data.refresh_token
|
||||||
set: {
|
* - mode: "test"
|
||||||
stripeAccountId: data.stripe_user_id,
|
*/
|
||||||
},
|
|
||||||
|
console.log("Stripe OAuth success", {
|
||||||
|
stripe_account_id: data.stripe_user_id,
|
||||||
|
scope: data.scope,
|
||||||
|
has_access_token: Boolean(data.access_token),
|
||||||
|
has_refresh_token: Boolean(data.refresh_token),
|
||||||
|
access_token_preview: data.access_token?.slice(0, 8) + "...",
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("Stripe connected", {
|
// MVP success redirect
|
||||||
userId,
|
|
||||||
stripeAccountId: data.stripe_user_id,
|
|
||||||
});
|
|
||||||
|
|
||||||
// ✅ Success redirect
|
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(
|
||||||
new URL("/connect/stripe/success", process.env.NEXT_PUBLIC_BASE_URL)
|
new URL("/connect/stripe/success", process.env.APP_URL)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue