diff --git a/lib/bigcommerce/api/cart/index.ts b/lib/bigcommerce/api/cart/index.ts index 8c307dda8..f2f174b84 100644 --- a/lib/bigcommerce/api/cart/index.ts +++ b/lib/bigcommerce/api/cart/index.ts @@ -109,4 +109,4 @@ const cartApi: BigcommerceApiHandler = async ( export const handlers = { getCart, addItem, updateItem, removeItem } -export default createApiHandler(cartApi, handlers) +export default createApiHandler(cartApi, handlers, {}) diff --git a/lib/bigcommerce/api/catalog/products.ts b/lib/bigcommerce/api/catalog/products.ts index eb53bea41..f3c01d934 100644 --- a/lib/bigcommerce/api/catalog/products.ts +++ b/lib/bigcommerce/api/catalog/products.ts @@ -45,4 +45,4 @@ const cartApi: BigcommerceApiHandler< export const handlers = { getProducts } -export default createApiHandler(cartApi, handlers) +export default createApiHandler(cartApi, handlers, {}) diff --git a/lib/bigcommerce/api/checkout.ts b/lib/bigcommerce/api/checkout.ts index 531f6d9e4..aab7c0d7a 100644 --- a/lib/bigcommerce/api/checkout.ts +++ b/lib/bigcommerce/api/checkout.ts @@ -73,4 +73,4 @@ const checkoutApi: BigcommerceApiHandler = async (req, res, config) => { } } -export default createApiHandler(checkoutApi, {}) +export default createApiHandler(checkoutApi, {}, {}) diff --git a/lib/bigcommerce/api/customers.ts b/lib/bigcommerce/api/customers.ts index a70f0a5b4..c4734c6e5 100644 --- a/lib/bigcommerce/api/customers.ts +++ b/lib/bigcommerce/api/customers.ts @@ -53,4 +53,4 @@ const handlers = { createCustomer, } -export default createApiHandler(customersApi, handlers) +export default createApiHandler(customersApi, handlers, {}) diff --git a/lib/bigcommerce/api/utils/create-api-handler.ts b/lib/bigcommerce/api/utils/create-api-handler.ts index 0e4a1b959..2cb91c534 100644 --- a/lib/bigcommerce/api/utils/create-api-handler.ts +++ b/lib/bigcommerce/api/utils/create-api-handler.ts @@ -3,12 +3,15 @@ import { BigcommerceConfig, getConfig } from '..' export type BigcommerceApiHandler< T = any, - H extends BigcommerceHandlers = {} + H extends BigcommerceHandlers = {}, + Options extends {} = {} > = ( req: NextApiRequest, res: NextApiResponse>, config: BigcommerceConfig, - handlers: H + handlers: H, + // Custom configs that may be used by a particular handler + options: Options ) => void | Promise export type BigcommerceHandler = (options: { @@ -27,21 +30,29 @@ export type BigcommerceApiResponse = { errors?: { message: string }[] } -export default function createApiHandler( - handler: BigcommerceApiHandler, - handlers: H +export default function createApiHandler< + T = any, + H extends BigcommerceHandlers = {}, + Options extends {} = {} +>( + handler: BigcommerceApiHandler, + handlers: H, + defaultOptions: Options ) { return function getApiHandler({ config, operations, + options, }: { config?: BigcommerceConfig operations?: Partial + options?: Options extends {} ? Partial : never } = {}): NextApiHandler { const ops = { ...operations, ...handlers } + const opts = { ...defaultOptions, ...options } return function apiHandler(req, res) { - return handler(req, res, getConfig(config), ops) + return handler(req, res, getConfig(config), ops, opts) } } }