'use server'; import { CUSTOMER_API_CLIENT_ID, CUSTOMER_API_URL, ORIGIN_URL, generateCodeChallenge, generateCodeVerifier, generateRandomString, removeAllCookiesServerAction } from 'lib/shopify/auth'; import { cookies } from 'next/headers'; import { redirect } from 'next/navigation'; export async function doLogin() { const customerAccountApiUrl = CUSTOMER_API_URL; const clientId = CUSTOMER_API_CLIENT_ID; const origin = ORIGIN_URL; const loginUrl = new URL(`${customerAccountApiUrl}/auth/oauth/authorize`); try { loginUrl.searchParams.set('client_id', clientId); loginUrl.searchParams.append('response_type', 'code'); loginUrl.searchParams.append('redirect_uri', `${origin}/api/authorize`); loginUrl.searchParams.set( 'scope', 'openid email https://api.customers.com/auth/customer.graphql' ); const verifier = await generateCodeVerifier(); const challenge = await generateCodeChallenge(verifier); cookies().set('shop_verifier', verifier as string, {}); const state = await generateRandomString(); const nonce = await generateRandomString(); cookies().set('shop_state', state as string, {}); cookies().set('shop_nonce', nonce as string, {}); loginUrl.searchParams.append('state', state); loginUrl.searchParams.append('nonce', nonce); loginUrl.searchParams.append('code_challenge', challenge); loginUrl.searchParams.append('code_challenge_method', 'S256'); } catch (e) { console.log('Error', e); return 'Error logging in. Please try again'; } redirect(`${loginUrl}`); // Navigate to the new post page } export async function isLoggedIn() { const customerToken = cookies().get('shop_customer_token')?.value; const refreshToken = cookies().get('shop_refresh_token')?.value; if (!customerToken && !refreshToken) { return false; } else { return true; } } export const doLogout = async () => { const idToken = cookies().get('shop_id_token'); const idTokenValue = idToken?.value; await removeAllCookiesServerAction(); //if there is no idToken, then sending to logout url will redirect shopify, so just //redirect to login here and delete cookies (presumably they don't even exist) if (!idTokenValue) { redirect(ORIGIN_URL); } const logoutUrl = new URL( `${CUSTOMER_API_URL}/auth/logout?id_token_hint=${idTokenValue}&post_logout_redirect_uri=${ORIGIN_URL}` ); redirect(logoutUrl.toString()); };