diff --git a/framework/bigcommerce/api/index.ts b/framework/bigcommerce/api/index.ts index 4f00613c3..840645459 100644 --- a/framework/bigcommerce/api/index.ts +++ b/framework/bigcommerce/api/index.ts @@ -1,8 +1,7 @@ import type { RequestInit } from '@vercel/fetch' import { - CommerceAPI, + CommerceAPI as CoreCommerceAPI, CommerceAPIConfig, - createAPIProvider, } from '@commerce/api' import fetchGraphqlApi from './utils/fetch-graphql-api' import fetchStoreApi from './utils/fetch-store-api' @@ -99,13 +98,17 @@ const config2: BigcommerceConfig = { storeApiFetch: fetchStoreApi, } -const provider = { +export const provider = { config: config2, - // endpoints } -export const commerce2 = createAPIProvider(provider) -export const commerce = new CommerceAPI(provider) +export type Provider = typeof provider + +export class CommerceAPI
extends CoreCommerceAPI
{
+ constructor(readonly provider: P = provider) {
+ super(provider)
+ }
+}
export function getConfig(userConfig?: Partial = P & {
@@ -23,7 +30,10 @@ export type APIProvider = P & {
setConfig(newConfig: Partial ): void
}
-export class CommerceAPI {
+export class CommerceAPI<
+ P extends CoreAPIProvider = CoreAPIProvider,
+ E extends Endpoints = Endpoints
+> {
constructor(readonly provider: P) {
this.provider = provider
}
@@ -38,6 +48,27 @@ export class CommerceAPI {
setConfig(newConfig: Partial ) {
Object.assign(this.provider.config, newConfig)
}
+
+ endpoint(context: {
+ handler: E
+ config?: P['config']
+ operations: EndpointHandlers (
diff --git a/lib/api/commerce.ts b/lib/api/commerce.ts
new file mode 100644
index 000000000..35b659a79
--- /dev/null
+++ b/lib/api/commerce.ts
@@ -0,0 +1,3 @@
+import { CommerceAPI } from '@framework/api'
+
+export default new CommerceAPI()
diff --git a/pages/api/bigcommerce/cart.ts b/pages/api/bigcommerce/cart.ts
index 68ffc3b15..ff2e1c981 100644
--- a/pages/api/bigcommerce/cart.ts
+++ b/pages/api/bigcommerce/cart.ts
@@ -1,3 +1,7 @@
import cartApi from '@framework/api/cart'
+import cart from '@commerce/api/endpoints/cart'
+import commerce from '@lib/api/commerce'
+
+const x = commerce.endpoint({ handler: cart, operations: {} as any })
export default cartApi()