diff --git a/packages/ordercloud/src/api/endpoints/index.ts b/packages/ordercloud/src/api/endpoints/index.ts index 0f7f79117..9bcb44b43 100644 --- a/packages/ordercloud/src/api/endpoints/index.ts +++ b/packages/ordercloud/src/api/endpoints/index.ts @@ -9,15 +9,17 @@ import customer from './customer' import customerCard from './customer/card' import customerAddress from './customer/address' import signup from './signup' +import logout from './logout' const endpoints = { cart, checkout, + logout: logout, + signup: signup, customer: customer, 'customer/card': customerCard, 'customer/address': customerAddress, 'catalog/products': products, - signup: signup, } export default function ordercloudAPI(commerce: OrdercloudAPI) { diff --git a/packages/ordercloud/src/api/endpoints/logout/index.ts b/packages/ordercloud/src/api/endpoints/logout/index.ts new file mode 100644 index 000000000..a317a60c1 --- /dev/null +++ b/packages/ordercloud/src/api/endpoints/logout/index.ts @@ -0,0 +1,18 @@ +import { GetAPISchema, createEndpoint } from '@vercel/commerce/api' +import logoutEndpoint from '@vercel/commerce/api/endpoints/logout' +import type { LogoutSchema } from '@vercel/commerce/types/logout' +import type { OrdercloudAPI } from '../..' +import logout from './logout' + +export type LogoutAPI = GetAPISchema + +export type LogoutEndpoint = LogoutAPI['endpoint'] + +export const handlers: LogoutEndpoint['handlers'] = { logout } + +const logoutApi = createEndpoint({ + handler: logoutEndpoint, + handlers, +}) + +export default logoutApi diff --git a/packages/ordercloud/src/api/endpoints/logout/logout.ts b/packages/ordercloud/src/api/endpoints/logout/logout.ts new file mode 100644 index 000000000..32889efdc --- /dev/null +++ b/packages/ordercloud/src/api/endpoints/logout/logout.ts @@ -0,0 +1,25 @@ +import { serialize } from 'cookie' +import type { LogoutEndpoint } from '.' + +const logout: LogoutEndpoint['handlers']['logout'] = async ({ + body: { redirectTo }, + config, +}) => { + const headers = { + 'Set-Cookie': serialize(config.tokenCookie, '', { + maxAge: -1, + path: '/', + }), + } + + return redirectTo + ? { + redirectTo, + headers, + } + : { + headers, + } +} + +export default logout