diff --git a/packages/sylius/src/api/endpoints/cart/index.ts b/packages/sylius/src/api/endpoints/cart/index.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/cart/index.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/catalog/index.ts b/packages/sylius/src/api/endpoints/catalog/index.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/catalog/index.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/catalog/products.ts b/packages/sylius/src/api/endpoints/catalog/products.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/catalog/products.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/checkout/index.ts b/packages/sylius/src/api/endpoints/checkout/index.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/checkout/index.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/customer/address.ts b/packages/sylius/src/api/endpoints/customer/address.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/customer/address.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/customer/card.ts b/packages/sylius/src/api/endpoints/customer/card.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/customer/card.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/customer/index.ts b/packages/sylius/src/api/endpoints/customer/index.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/customer/index.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/login/index.ts b/packages/sylius/src/api/endpoints/login/index.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/login/index.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/logout/index.ts b/packages/sylius/src/api/endpoints/logout/index.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/logout/index.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/signup/index.ts b/packages/sylius/src/api/endpoints/signup/index.ts
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/signup/index.ts
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/endpoints/wishlist/index.tsx b/packages/sylius/src/api/endpoints/wishlist/index.tsx
new file mode 100644
index 000000000..491bf0ac9
--- /dev/null
+++ b/packages/sylius/src/api/endpoints/wishlist/index.tsx
@@ -0,0 +1 @@
+export default function noopApi(...args: any[]): void {}
diff --git a/packages/sylius/src/api/index.ts b/packages/sylius/src/api/index.ts
new file mode 100644
index 000000000..3b24a3045
--- /dev/null
+++ b/packages/sylius/src/api/index.ts
@@ -0,0 +1,42 @@
+import type { CommerceAPI, CommerceAPIConfig } from '@vercel/commerce/api'
+import { getCommerceApi as commerceApi } from '@vercel/commerce/api'
+import createFetcher from './utils/fetch-local'
+
+import getAllPages from './operations/get-all-pages'
+import getPage from './operations/get-page'
+import getSiteInfo from './operations/get-site-info'
+import getCustomerWishlist from './operations/get-customer-wishlist'
+import getAllProductPaths from './operations/get-all-product-paths'
+import getAllProducts from './operations/get-all-products'
+import getProduct from './operations/get-product'
+
+export interface LocalConfig extends CommerceAPIConfig {}
+const config: LocalConfig = {
+ commerceUrl: '',
+ apiToken: '',
+ cartCookie: '',
+ customerCookie: '',
+ cartCookieMaxAge: 2592000,
+ fetch: createFetcher(() => getCommerceApi().getConfig()),
+}
+
+const operations = {
+ getAllPages,
+ getPage,
+ getSiteInfo,
+ getCustomerWishlist,
+ getAllProductPaths,
+ getAllProducts,
+ getProduct,
+}
+
+export const provider = { config, operations }
+
+export type Provider = typeof provider
+export type LocalAPI
= CommerceAPI
+
+export function getCommerceApi
(
+ customProvider: P = provider as any
+): LocalAPI
{
+ return commerceApi(customProvider as any)
+}
diff --git a/packages/sylius/src/api/operations/get-all-pages.ts b/packages/sylius/src/api/operations/get-all-pages.ts
new file mode 100644
index 000000000..b258fe70a
--- /dev/null
+++ b/packages/sylius/src/api/operations/get-all-pages.ts
@@ -0,0 +1,19 @@
+export type Page = { url: string }
+export type GetAllPagesResult = { pages: Page[] }
+import type { LocalConfig } from '../index'
+
+export default function getAllPagesOperation() {
+ function getAllPages({
+ config,
+ preview,
+ }: {
+ url?: string
+ config?: Partial
+ preview?: boolean
+ }): Promise {
+ return Promise.resolve({
+ pages: [],
+ })
+ }
+ return getAllPages
+}
diff --git a/packages/sylius/src/api/operations/get-all-product-paths.ts b/packages/sylius/src/api/operations/get-all-product-paths.ts
new file mode 100644
index 000000000..d8c56cd83
--- /dev/null
+++ b/packages/sylius/src/api/operations/get-all-product-paths.ts
@@ -0,0 +1,13 @@
+export type GetAllProductPathsResult = {
+ products: Array<{ path: string }>
+}
+
+export default function getAllProductPathsOperation() {
+ function getAllProductPaths(): Promise {
+ return Promise.resolve({
+ products: [],
+ })
+ }
+
+ return getAllProductPaths
+}
diff --git a/packages/sylius/src/api/operations/get-all-products.ts b/packages/sylius/src/api/operations/get-all-products.ts
new file mode 100644
index 000000000..57893dea6
--- /dev/null
+++ b/packages/sylius/src/api/operations/get-all-products.ts
@@ -0,0 +1,24 @@
+import { Product } from '@vercel/commerce/types/product'
+import { GetAllProductsOperation } from '@vercel/commerce/types/product'
+import type { OperationContext } from '@vercel/commerce/api/operations'
+import type { LocalConfig, Provider } from '../index'
+
+export default function getAllProductsOperation({
+ commerce,
+}: OperationContext) {
+ async function getAllProducts({
+ query = '',
+ variables,
+ config,
+ }: {
+ query?: string
+ variables?: T['variables']
+ config?: Partial
+ preview?: boolean
+ } = {}): Promise<{ products: Product[] | any[] }> {
+ return {
+ products: [],
+ }
+ }
+ return getAllProducts
+}
diff --git a/packages/sylius/src/api/operations/get-customer-wishlist.ts b/packages/sylius/src/api/operations/get-customer-wishlist.ts
new file mode 100644
index 000000000..8c34b9e87
--- /dev/null
+++ b/packages/sylius/src/api/operations/get-customer-wishlist.ts
@@ -0,0 +1,6 @@
+export default function getCustomerWishlistOperation() {
+ function getCustomerWishlist(): any {
+ return { wishlist: {} }
+ }
+ return getCustomerWishlist
+}
diff --git a/packages/sylius/src/api/operations/get-page.ts b/packages/sylius/src/api/operations/get-page.ts
new file mode 100644
index 000000000..b0cfdf58f
--- /dev/null
+++ b/packages/sylius/src/api/operations/get-page.ts
@@ -0,0 +1,13 @@
+export type Page = any
+export type GetPageResult = { page?: Page }
+
+export type PageVariables = {
+ id: number
+}
+
+export default function getPageOperation() {
+ function getPage(): Promise {
+ return Promise.resolve({})
+ }
+ return getPage
+}
diff --git a/packages/sylius/src/api/operations/get-product.ts b/packages/sylius/src/api/operations/get-product.ts
new file mode 100644
index 000000000..309d48ed5
--- /dev/null
+++ b/packages/sylius/src/api/operations/get-product.ts
@@ -0,0 +1,25 @@
+import type { LocalConfig } from '../index'
+import { Product } from '@vercel/commerce/types/product'
+import { GetProductOperation } from '@vercel/commerce/types/product'
+import type { OperationContext } from '@vercel/commerce/api/operations'
+
+export default function getProductOperation({
+ commerce,
+}: OperationContext) {
+ async function getProduct({
+ query = '',
+ variables,
+ config,
+ }: {
+ query?: string
+ variables?: T['variables']
+ config?: Partial
+ preview?: boolean
+ } = {}): Promise {
+ return {
+ product: {},
+ }
+ }
+
+ return getProduct
+}
diff --git a/packages/sylius/src/api/operations/get-site-info.ts b/packages/sylius/src/api/operations/get-site-info.ts
new file mode 100644
index 000000000..c07a479cb
--- /dev/null
+++ b/packages/sylius/src/api/operations/get-site-info.ts
@@ -0,0 +1,43 @@
+import { OperationContext } from '@vercel/commerce/api/operations'
+import { Category } from '@vercel/commerce/types/site'
+import { LocalConfig } from '../index'
+
+export type GetSiteInfoResult<
+ T extends { categories: any[]; brands: any[] } = {
+ categories: Category[]
+ brands: any[]
+ }
+> = T
+
+export default function getSiteInfoOperation({}: OperationContext) {
+ function getSiteInfo({
+ query,
+ variables,
+ config: cfg,
+ }: {
+ query?: string
+ variables?: any
+ config?: Partial
+ preview?: boolean
+ } = {}): Promise {
+ return Promise.resolve({
+ categories: [
+ {
+ id: 'new-arrivals',
+ name: 'New Arrivals',
+ slug: 'new-arrivals',
+ path: '/new-arrivals',
+ },
+ {
+ id: 'featured',
+ name: 'Featured',
+ slug: 'featured',
+ path: '/featured',
+ },
+ ],
+ brands: [],
+ })
+ }
+
+ return getSiteInfo
+}
diff --git a/packages/sylius/src/api/operations/index.ts b/packages/sylius/src/api/operations/index.ts
new file mode 100644
index 000000000..086fdf83a
--- /dev/null
+++ b/packages/sylius/src/api/operations/index.ts
@@ -0,0 +1,6 @@
+export { default as getPage } from './get-page'
+export { default as getSiteInfo } from './get-site-info'
+export { default as getAllPages } from './get-all-pages'
+export { default as getProduct } from './get-product'
+export { default as getAllProducts } from './get-all-products'
+export { default as getAllProductPaths } from './get-all-product-paths'
diff --git a/packages/sylius/src/api/utils/fetch-local.ts b/packages/sylius/src/api/utils/fetch-local.ts
new file mode 100644
index 000000000..ae84fff8b
--- /dev/null
+++ b/packages/sylius/src/api/utils/fetch-local.ts
@@ -0,0 +1,34 @@
+import { FetcherError } from '@vercel/commerce/utils/errors'
+import type { GraphQLFetcher } from '@vercel/commerce/api'
+import type { LocalConfig } from '../index'
+import fetch from './fetch'
+
+const fetchGraphqlApi: (getConfig: () => LocalConfig) => GraphQLFetcher =
+ (getConfig) =>
+ async (query: string, { variables, preview } = {}, fetchOptions) => {
+ const config = getConfig()
+ const res = await fetch(config.commerceUrl, {
+ ...fetchOptions,
+ method: 'POST',
+ headers: {
+ ...fetchOptions?.headers,
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ query,
+ variables,
+ }),
+ })
+
+ const json = await res.json()
+ if (json.errors) {
+ throw new FetcherError({
+ errors: json.errors ?? [{ message: 'Failed to fetch for API' }],
+ status: res.status,
+ })
+ }
+
+ return { data: json.data, res }
+ }
+
+export default fetchGraphqlApi
diff --git a/packages/sylius/src/api/utils/fetch.ts b/packages/sylius/src/api/utils/fetch.ts
new file mode 100644
index 000000000..9d9fff3ed
--- /dev/null
+++ b/packages/sylius/src/api/utils/fetch.ts
@@ -0,0 +1,3 @@
+import zeitFetch from '@vercel/fetch'
+
+export default zeitFetch()
diff --git a/site/tsconfig.json b/site/tsconfig.json
index 7ed3983f0..7c91afd6f 100644
--- a/site/tsconfig.json
+++ b/site/tsconfig.json
@@ -23,8 +23,8 @@
"@components/*": ["components/*"],
"@commerce": ["../packages/commerce/src"],
"@commerce/*": ["../packages/commerce/src/*"],
- "@framework": ["../packages/sylius/src"],
- "@framework/*": ["../packages/sylius/src/*"]
+ "@framework": ["../packages/local/src"],
+ "@framework/*": ["../packages/local/src/*"]
}
},
"include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"],