@ecomiq/core 0.1.2 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.cjs +19 -5
- package/dist/api.cjs.map +1 -1
- package/dist/api.js +19 -5
- package/dist/api.js.map +1 -1
- package/dist/client-4ZTG2RZ3.d.ts +195 -0
- package/dist/client-BpX4yR6S.d.cts +195 -0
- package/dist/client.cjs +324 -10
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +13 -83
- package/dist/client.d.ts +13 -83
- package/dist/client.js +324 -10
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +475 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +444 -11
- package/dist/index.js.map +1 -1
- package/dist/models/customer-address.cjs +41 -0
- package/dist/models/customer-address.cjs.map +1 -0
- package/dist/models/customer-address.d.cts +160 -0
- package/dist/models/customer-address.d.ts +160 -0
- package/dist/models/customer-address.js +36 -0
- package/dist/models/customer-address.js.map +1 -0
- package/dist/models/customer-order.cjs +161 -0
- package/dist/models/customer-order.cjs.map +1 -0
- package/dist/models/customer-order.d.cts +896 -0
- package/dist/models/customer-order.d.ts +896 -0
- package/dist/models/customer-order.js +149 -0
- package/dist/models/customer-order.js.map +1 -0
- package/dist/models/customer-profile.cjs +126 -0
- package/dist/models/customer-profile.cjs.map +1 -0
- package/dist/models/customer-profile.d.cts +178 -0
- package/dist/models/customer-profile.d.ts +178 -0
- package/dist/models/customer-profile.js +118 -0
- package/dist/models/customer-profile.js.map +1 -0
- package/dist/models/settings.d.cts +284 -284
- package/dist/models/settings.d.ts +284 -284
- package/package.json +16 -1
package/dist/api.cjs
CHANGED
|
@@ -18,6 +18,7 @@ var ApiError = class extends Error {
|
|
|
18
18
|
function resolveApiBaseUrl(baseUrl = DEFAULT_API_BASE_URL, version = DEFAULT_API_VERSION) {
|
|
19
19
|
const root = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
|
|
20
20
|
const segment = version.replace(/^\/+|\/+$/g, "");
|
|
21
|
+
if (!segment) return root;
|
|
21
22
|
return new URL(`${segment}/`, root).toString();
|
|
22
23
|
}
|
|
23
24
|
function createApi(options = {}) {
|
|
@@ -60,17 +61,30 @@ function createApi(options = {}) {
|
|
|
60
61
|
clearTimeout(timeout);
|
|
61
62
|
}
|
|
62
63
|
if (!response.ok) {
|
|
63
|
-
const
|
|
64
|
-
let body =
|
|
65
|
-
if (
|
|
64
|
+
const bodyText2 = await response.text().catch(() => void 0);
|
|
65
|
+
let body = bodyText2;
|
|
66
|
+
if (bodyText2) {
|
|
66
67
|
try {
|
|
67
|
-
body = JSON.parse(
|
|
68
|
+
body = JSON.parse(bodyText2);
|
|
68
69
|
} catch {
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
throw new ApiError(`${method} ${url} \u2192 ${response.status}`, response.status, url.toString(), body);
|
|
72
73
|
}
|
|
73
|
-
const
|
|
74
|
+
const bodyText = await response.text();
|
|
75
|
+
let json = null;
|
|
76
|
+
if (bodyText.trim()) {
|
|
77
|
+
try {
|
|
78
|
+
json = JSON.parse(bodyText);
|
|
79
|
+
} catch {
|
|
80
|
+
throw new ApiError(
|
|
81
|
+
`Respuesta no JSON de ${url}`,
|
|
82
|
+
response.status,
|
|
83
|
+
url.toString(),
|
|
84
|
+
bodyText
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
74
88
|
const parsed = schema.safeParse(json);
|
|
75
89
|
if (!parsed.success) {
|
|
76
90
|
throw new ApiError(
|
package/dist/api.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/libs/api.ts"],"names":[],"mappings":";;;AAOO,IAAM,oBAAA,GAAuB;AAC7B,IAAM,mBAAA,GAAsB;AAE5B,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAClC,WAAA,CACE,OAAA,EACgB,MAAA,EACA,GAAA,EACA,IAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AAAA,EACd;AAAA,EANkB,MAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAKpB;AA6CO,SAAS,iBAAA,CACd,OAAA,GAAkB,oBAAA,EAClB,OAAA,GAAkB,mBAAA,EACV;AACR,EAAA,MAAM,OAAO,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,GAAI,OAAA,GAAU,GAAG,OAAO,CAAA,CAAA,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;
|
|
1
|
+
{"version":3,"sources":["../src/libs/api.ts"],"names":["bodyText"],"mappings":"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","file":"api.cjs","sourcesContent":["/**\n * Cliente HTTP de Ecomiq para servicios externos.\n * fetch nativo (funciona en Node, navegador y Cloudflare Workers)\n * + validación de respuestas con Zod.\n */\nimport type { z } from 'zod'\n\nexport const DEFAULT_API_BASE_URL = 'https://storefront.ecomiq.pe'\nexport const DEFAULT_API_VERSION = 'v1'\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly url: string,\n public readonly body?: unknown,\n ) {\n super(message)\n this.name = 'ApiError'\n }\n}\n\nexport interface CreateApiOptions {\n /** Default: https://storefront.ecomiq.pe */\n baseUrl?: string\n /** Segmento de path, default 'v1' → {baseUrl}/v1/... */\n version?: string\n headers?: Record<string, string>\n timeoutMs?: number\n}\n\ninterface RequestOptions {\n query?: Record<string, string | number | boolean | undefined>\n headers?: Record<string, string>\n signal?: AbortSignal\n}\n\nexport interface Api {\n get<S extends z.ZodTypeAny>(\n path: string,\n schema: S,\n options?: RequestOptions,\n ): Promise<z.output<S>>\n post<S extends z.ZodTypeAny>(\n path: string,\n body: unknown,\n schema: S,\n options?: RequestOptions,\n ): Promise<z.output<S>>\n /** POST multipart; no fuerza `content-type: application/json`. */\n postForm<S extends z.ZodTypeAny>(\n path: string,\n body: FormData,\n schema: S,\n options?: RequestOptions,\n ): Promise<z.output<S>>\n request<S extends z.ZodTypeAny>(\n method: string,\n path: string,\n schema: S,\n options?: RequestOptions & { body?: unknown },\n ): Promise<z.output<S>>\n}\n\n/** Une baseUrl + version en la base efectiva del cliente, ej. https://storefront.ecomiq.pe/v1/ */\nexport function resolveApiBaseUrl(\n baseUrl: string = DEFAULT_API_BASE_URL,\n version: string = DEFAULT_API_VERSION,\n): string {\n const root = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`\n const segment = version.replace(/^\\/+|\\/+$/g, '')\n // Sin segmento: conservar la base tal cual (p. ej. BFF `/api/` same-origin).\n // `new URL('/', root)` reemplazaría el pathname entero.\n if (!segment) return root\n return new URL(`${segment}/`, root).toString()\n}\n\n/**\n * Crea un cliente HTTP tipado con Zod.\n *\n * ```ts\n * const api = createApi()\n * const data = await api.get('settings', schema)\n * // → GET https://storefront.ecomiq.pe/v1/settings\n * ```\n */\nexport function createApi(options: CreateApiOptions = {}): Api {\n const {\n baseUrl = DEFAULT_API_BASE_URL,\n version = DEFAULT_API_VERSION,\n headers: baseHeaders = {},\n timeoutMs = 10_000,\n } = options\n\n const effectiveBaseUrl = resolveApiBaseUrl(baseUrl, version)\n\n async function request<S extends z.ZodTypeAny>(\n method: string,\n path: string,\n schema: S,\n opts: RequestOptions & { body?: unknown } = {},\n ): Promise<z.output<S>> {\n const url = new URL(path.replace(/^\\//, ''), effectiveBaseUrl)\n for (const [key, value] of Object.entries(opts.query ?? {})) {\n if (value !== undefined) url.searchParams.set(key, String(value))\n }\n\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), timeoutMs)\n if (opts.signal) opts.signal.addEventListener('abort', () => controller.abort(), { once: true })\n\n const isFormData =\n typeof FormData !== 'undefined' && opts.body instanceof FormData\n\n let response: Response\n try {\n response = await fetch(url.toString(), {\n method,\n headers: {\n accept: 'application/json',\n ...(opts.body !== undefined && !isFormData\n ? { 'content-type': 'application/json' }\n : {}),\n ...baseHeaders,\n ...opts.headers,\n },\n body:\n opts.body === undefined\n ? undefined\n : isFormData\n ? (opts.body as FormData)\n : JSON.stringify(opts.body),\n signal: controller.signal,\n })\n } catch (err) {\n throw new ApiError(\n err instanceof DOMException && err.name === 'AbortError'\n ? `Timeout tras ${timeoutMs}ms: ${url}`\n : `No se pudo conectar con ${url}`,\n 0,\n url.toString(),\n )\n } finally {\n clearTimeout(timeout)\n }\n\n if (!response.ok) {\n const bodyText = await response.text().catch(() => undefined)\n let body: unknown = bodyText\n if (bodyText) {\n try {\n body = JSON.parse(bodyText)\n } catch {}\n }\n throw new ApiError(`${method} ${url} → ${response.status}`, response.status, url.toString(), body)\n }\n\n const bodyText = await response.text()\n let json: unknown = null\n if (bodyText.trim()) {\n try {\n json = JSON.parse(bodyText)\n } catch {\n throw new ApiError(\n `Respuesta no JSON de ${url}`,\n response.status,\n url.toString(),\n bodyText,\n )\n }\n }\n\n const parsed = schema.safeParse(json)\n if (!parsed.success) {\n throw new ApiError(\n `Respuesta inesperada de ${url}: ${parsed.error.issues[0]?.path.join('.')} ${parsed.error.issues[0]?.message}`,\n response.status,\n url.toString(),\n json,\n )\n }\n return parsed.data as z.output<S>\n }\n\n return {\n request,\n get: (path, schema, opts) => request('GET', path, schema, opts),\n post: (path, body, schema, opts) => request('POST', path, schema, { ...opts, body }),\n postForm: (path, body, schema, opts) =>\n request('POST', path, schema, { ...opts, body }),\n }\n}\n"]}
|
package/dist/api.js
CHANGED
|
@@ -16,6 +16,7 @@ var ApiError = class extends Error {
|
|
|
16
16
|
function resolveApiBaseUrl(baseUrl = DEFAULT_API_BASE_URL, version = DEFAULT_API_VERSION) {
|
|
17
17
|
const root = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
|
|
18
18
|
const segment = version.replace(/^\/+|\/+$/g, "");
|
|
19
|
+
if (!segment) return root;
|
|
19
20
|
return new URL(`${segment}/`, root).toString();
|
|
20
21
|
}
|
|
21
22
|
function createApi(options = {}) {
|
|
@@ -58,17 +59,30 @@ function createApi(options = {}) {
|
|
|
58
59
|
clearTimeout(timeout);
|
|
59
60
|
}
|
|
60
61
|
if (!response.ok) {
|
|
61
|
-
const
|
|
62
|
-
let body =
|
|
63
|
-
if (
|
|
62
|
+
const bodyText2 = await response.text().catch(() => void 0);
|
|
63
|
+
let body = bodyText2;
|
|
64
|
+
if (bodyText2) {
|
|
64
65
|
try {
|
|
65
|
-
body = JSON.parse(
|
|
66
|
+
body = JSON.parse(bodyText2);
|
|
66
67
|
} catch {
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
throw new ApiError(`${method} ${url} \u2192 ${response.status}`, response.status, url.toString(), body);
|
|
70
71
|
}
|
|
71
|
-
const
|
|
72
|
+
const bodyText = await response.text();
|
|
73
|
+
let json = null;
|
|
74
|
+
if (bodyText.trim()) {
|
|
75
|
+
try {
|
|
76
|
+
json = JSON.parse(bodyText);
|
|
77
|
+
} catch {
|
|
78
|
+
throw new ApiError(
|
|
79
|
+
`Respuesta no JSON de ${url}`,
|
|
80
|
+
response.status,
|
|
81
|
+
url.toString(),
|
|
82
|
+
bodyText
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
72
86
|
const parsed = schema.safeParse(json);
|
|
73
87
|
if (!parsed.success) {
|
|
74
88
|
throw new ApiError(
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/libs/api.ts"],"names":[],"mappings":";AAOO,IAAM,oBAAA,GAAuB;AAC7B,IAAM,mBAAA,GAAsB;AAE5B,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAClC,WAAA,CACE,OAAA,EACgB,MAAA,EACA,GAAA,EACA,IAAA,EAChB;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AAAA,EACd;AAAA,EANkB,MAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAKpB;AA6CO,SAAS,iBAAA,CACd,OAAA,GAAkB,oBAAA,EAClB,OAAA,GAAkB,mBAAA,EACV;AACR,EAAA,MAAM,OAAO,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,GAAI,OAAA,GAAU,GAAG,OAAO,CAAA,CAAA,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;
|
|
1
|
+
{"version":3,"sources":["../src/libs/api.ts"],"names":["bodyText"],"mappings":"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","file":"api.js","sourcesContent":["/**\n * Cliente HTTP de Ecomiq para servicios externos.\n * fetch nativo (funciona en Node, navegador y Cloudflare Workers)\n * + validación de respuestas con Zod.\n */\nimport type { z } from 'zod'\n\nexport const DEFAULT_API_BASE_URL = 'https://storefront.ecomiq.pe'\nexport const DEFAULT_API_VERSION = 'v1'\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly url: string,\n public readonly body?: unknown,\n ) {\n super(message)\n this.name = 'ApiError'\n }\n}\n\nexport interface CreateApiOptions {\n /** Default: https://storefront.ecomiq.pe */\n baseUrl?: string\n /** Segmento de path, default 'v1' → {baseUrl}/v1/... */\n version?: string\n headers?: Record<string, string>\n timeoutMs?: number\n}\n\ninterface RequestOptions {\n query?: Record<string, string | number | boolean | undefined>\n headers?: Record<string, string>\n signal?: AbortSignal\n}\n\nexport interface Api {\n get<S extends z.ZodTypeAny>(\n path: string,\n schema: S,\n options?: RequestOptions,\n ): Promise<z.output<S>>\n post<S extends z.ZodTypeAny>(\n path: string,\n body: unknown,\n schema: S,\n options?: RequestOptions,\n ): Promise<z.output<S>>\n /** POST multipart; no fuerza `content-type: application/json`. */\n postForm<S extends z.ZodTypeAny>(\n path: string,\n body: FormData,\n schema: S,\n options?: RequestOptions,\n ): Promise<z.output<S>>\n request<S extends z.ZodTypeAny>(\n method: string,\n path: string,\n schema: S,\n options?: RequestOptions & { body?: unknown },\n ): Promise<z.output<S>>\n}\n\n/** Une baseUrl + version en la base efectiva del cliente, ej. https://storefront.ecomiq.pe/v1/ */\nexport function resolveApiBaseUrl(\n baseUrl: string = DEFAULT_API_BASE_URL,\n version: string = DEFAULT_API_VERSION,\n): string {\n const root = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`\n const segment = version.replace(/^\\/+|\\/+$/g, '')\n // Sin segmento: conservar la base tal cual (p. ej. BFF `/api/` same-origin).\n // `new URL('/', root)` reemplazaría el pathname entero.\n if (!segment) return root\n return new URL(`${segment}/`, root).toString()\n}\n\n/**\n * Crea un cliente HTTP tipado con Zod.\n *\n * ```ts\n * const api = createApi()\n * const data = await api.get('settings', schema)\n * // → GET https://storefront.ecomiq.pe/v1/settings\n * ```\n */\nexport function createApi(options: CreateApiOptions = {}): Api {\n const {\n baseUrl = DEFAULT_API_BASE_URL,\n version = DEFAULT_API_VERSION,\n headers: baseHeaders = {},\n timeoutMs = 10_000,\n } = options\n\n const effectiveBaseUrl = resolveApiBaseUrl(baseUrl, version)\n\n async function request<S extends z.ZodTypeAny>(\n method: string,\n path: string,\n schema: S,\n opts: RequestOptions & { body?: unknown } = {},\n ): Promise<z.output<S>> {\n const url = new URL(path.replace(/^\\//, ''), effectiveBaseUrl)\n for (const [key, value] of Object.entries(opts.query ?? {})) {\n if (value !== undefined) url.searchParams.set(key, String(value))\n }\n\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), timeoutMs)\n if (opts.signal) opts.signal.addEventListener('abort', () => controller.abort(), { once: true })\n\n const isFormData =\n typeof FormData !== 'undefined' && opts.body instanceof FormData\n\n let response: Response\n try {\n response = await fetch(url.toString(), {\n method,\n headers: {\n accept: 'application/json',\n ...(opts.body !== undefined && !isFormData\n ? { 'content-type': 'application/json' }\n : {}),\n ...baseHeaders,\n ...opts.headers,\n },\n body:\n opts.body === undefined\n ? undefined\n : isFormData\n ? (opts.body as FormData)\n : JSON.stringify(opts.body),\n signal: controller.signal,\n })\n } catch (err) {\n throw new ApiError(\n err instanceof DOMException && err.name === 'AbortError'\n ? `Timeout tras ${timeoutMs}ms: ${url}`\n : `No se pudo conectar con ${url}`,\n 0,\n url.toString(),\n )\n } finally {\n clearTimeout(timeout)\n }\n\n if (!response.ok) {\n const bodyText = await response.text().catch(() => undefined)\n let body: unknown = bodyText\n if (bodyText) {\n try {\n body = JSON.parse(bodyText)\n } catch {}\n }\n throw new ApiError(`${method} ${url} → ${response.status}`, response.status, url.toString(), body)\n }\n\n const bodyText = await response.text()\n let json: unknown = null\n if (bodyText.trim()) {\n try {\n json = JSON.parse(bodyText)\n } catch {\n throw new ApiError(\n `Respuesta no JSON de ${url}`,\n response.status,\n url.toString(),\n bodyText,\n )\n }\n }\n\n const parsed = schema.safeParse(json)\n if (!parsed.success) {\n throw new ApiError(\n `Respuesta inesperada de ${url}: ${parsed.error.issues[0]?.path.join('.')} ${parsed.error.issues[0]?.message}`,\n response.status,\n url.toString(),\n json,\n )\n }\n return parsed.data as z.output<S>\n }\n\n return {\n request,\n get: (path, schema, opts) => request('GET', path, schema, opts),\n post: (path, body, schema, opts) => request('POST', path, schema, { ...opts, body }),\n postForm: (path, body, schema, opts) =>\n request('POST', path, schema, { ...opts, body }),\n }\n}\n"]}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Api, CreateApiOptions } from './api.js';
|
|
2
|
+
import { Collections, Collection } from './models/collections.js';
|
|
3
|
+
import { ProductsParamsInput, ProductsResponse, ProductDetailParams, ProductDetail, RelatedProductsParams, ProductSummary } from './models/products.js';
|
|
4
|
+
import { ProductAutocompleteParams, ProductSuggestion } from './models/search.js';
|
|
5
|
+
import { ListProductReviewsParams, StorefrontReviews, CreateProductReviewParams, StorefrontReview } from './models/storefront-reviews.js';
|
|
6
|
+
import { CreateCartParams, StorefrontCart, GetCartParams, AddCartItemParams, UpdateCartItemQuantityParams, RemoveCartItemParams } from './models/storefront-cart.js';
|
|
7
|
+
import { CartCheckoutReadParams, CartCheckoutReadResponse, GetShippingOptionsParams, ShippingOptionsResponse, PutShippingMethodParams, CartBuyerParams, CartAddressesParams, CartCheckoutParams, CartCheckoutResponse, UploadPaymentReceiptParams, CartPaymentReceiptResponse, CartPromotionCodeParams } from './models/storefront-checkout.js';
|
|
8
|
+
import { Countries, GetDepartmentsParams, Departments, GetProvincesParams, Provinces, GetDistrictsParams, Districts } from './models/geo.js';
|
|
9
|
+
import { CustomerAddressUpsertInput, CustomerAddresses } from './models/customer-address.js';
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { CustomerMe, CustomerProfilePatch, CustomerRegisterRequest } from './models/customer-profile.js';
|
|
12
|
+
import { CustomerOrderDetail, CustomerOrderList } from './models/customer-order.js';
|
|
13
|
+
import { StorefrontSettings, CmsPageDetailsDto } from './models/settings.js';
|
|
14
|
+
|
|
15
|
+
/** POST/PUT a menudo responde solo `{ id }` (no el body completo). */
|
|
16
|
+
declare const CustomerAddressMutationResponseSchema: z.ZodUnion<[z.ZodObject<{
|
|
17
|
+
addressKey: z.ZodString;
|
|
18
|
+
countryIsoCode: z.ZodString;
|
|
19
|
+
addressLine: z.ZodString;
|
|
20
|
+
addressNumber: z.ZodString;
|
|
21
|
+
department: z.ZodString;
|
|
22
|
+
province: z.ZodString;
|
|
23
|
+
district: z.ZodString;
|
|
24
|
+
phone: z.ZodString;
|
|
25
|
+
cellPhone: z.ZodString;
|
|
26
|
+
postalCode: z.ZodString;
|
|
27
|
+
reference: z.ZodString;
|
|
28
|
+
latitude: z.ZodNullable<z.ZodNumber>;
|
|
29
|
+
longitude: z.ZodNullable<z.ZodNumber>;
|
|
30
|
+
isDefault: z.ZodBoolean;
|
|
31
|
+
} & {
|
|
32
|
+
id: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, string, string | number>>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
province: string;
|
|
35
|
+
postalCode: string;
|
|
36
|
+
district: string;
|
|
37
|
+
phone: string;
|
|
38
|
+
latitude: number | null;
|
|
39
|
+
longitude: number | null;
|
|
40
|
+
isDefault: boolean;
|
|
41
|
+
reference: string;
|
|
42
|
+
addressKey: string;
|
|
43
|
+
countryIsoCode: string;
|
|
44
|
+
addressLine: string;
|
|
45
|
+
addressNumber: string;
|
|
46
|
+
department: string;
|
|
47
|
+
cellPhone: string;
|
|
48
|
+
id?: string | undefined;
|
|
49
|
+
}, {
|
|
50
|
+
province: string;
|
|
51
|
+
postalCode: string;
|
|
52
|
+
district: string;
|
|
53
|
+
phone: string;
|
|
54
|
+
latitude: number | null;
|
|
55
|
+
longitude: number | null;
|
|
56
|
+
isDefault: boolean;
|
|
57
|
+
reference: string;
|
|
58
|
+
addressKey: string;
|
|
59
|
+
countryIsoCode: string;
|
|
60
|
+
addressLine: string;
|
|
61
|
+
addressNumber: string;
|
|
62
|
+
department: string;
|
|
63
|
+
cellPhone: string;
|
|
64
|
+
id?: string | number | undefined;
|
|
65
|
+
}>, z.ZodObject<{
|
|
66
|
+
id: z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, string, string | number>;
|
|
67
|
+
}, "strip", z.ZodTypeAny, {
|
|
68
|
+
id: string;
|
|
69
|
+
}, {
|
|
70
|
+
id: string | number;
|
|
71
|
+
}>, z.ZodNull]>;
|
|
72
|
+
type CustomerAddressMutationResponse = z.infer<typeof CustomerAddressMutationResponseSchema>;
|
|
73
|
+
type CustomerAddressRequestOptions = {
|
|
74
|
+
headers?: Record<string, string>;
|
|
75
|
+
signal?: AbortSignal;
|
|
76
|
+
};
|
|
77
|
+
/** GET /v1/customer/me/addresses → proxy `customer/addresses` */
|
|
78
|
+
declare function getCustomerAddresses(api: Api, options?: CustomerAddressRequestOptions): Promise<CustomerAddresses>;
|
|
79
|
+
/** POST /v1/customer/me/addresses → proxy `customer/addresses` */
|
|
80
|
+
declare function createCustomerAddress(api: Api, data: CustomerAddressUpsertInput, options?: CustomerAddressRequestOptions): Promise<CustomerAddressMutationResponse>;
|
|
81
|
+
/** PUT /v1/customer/me/addresses/{id} → proxy `customer/addresses/{id}` */
|
|
82
|
+
declare function updateCustomerAddress(api: Api, addressId: string, data: CustomerAddressUpsertInput, options?: CustomerAddressRequestOptions): Promise<CustomerAddressMutationResponse>;
|
|
83
|
+
/** DELETE /v1/customer/me/addresses/{id} → proxy `customer/addresses/{id}` */
|
|
84
|
+
declare function deleteCustomerAddress(api: Api, addressId: string, options?: CustomerAddressRequestOptions): Promise<void>;
|
|
85
|
+
|
|
86
|
+
type CustomerRequestOptions = {
|
|
87
|
+
headers?: Record<string, string>;
|
|
88
|
+
signal?: AbortSignal;
|
|
89
|
+
};
|
|
90
|
+
/** POST /v1/customer/register → proxy `customer/register` (público). */
|
|
91
|
+
declare function registerCustomer(api: Api, data: CustomerRegisterRequest, options?: CustomerRequestOptions): Promise<unknown>;
|
|
92
|
+
/** GET /v1/customer/me → proxy `customer` */
|
|
93
|
+
declare function getCustomerMe(api: Api, options?: CustomerRequestOptions): Promise<CustomerMe>;
|
|
94
|
+
/** PATCH /v1/customer → proxy `customer` (204). */
|
|
95
|
+
declare function patchCustomer(api: Api, data: CustomerProfilePatch, options?: CustomerRequestOptions): Promise<void>;
|
|
96
|
+
|
|
97
|
+
type CustomerOrderRequestOptions = {
|
|
98
|
+
headers?: Record<string, string>;
|
|
99
|
+
signal?: AbortSignal;
|
|
100
|
+
};
|
|
101
|
+
/** GET /v1/customer/orders → proxy `customer/orders` */
|
|
102
|
+
declare function getCustomerOrders(api: Api, options?: CustomerOrderRequestOptions): Promise<CustomerOrderList>;
|
|
103
|
+
/** GET /v1/customer/orders/{orderId} → proxy `customer/orders/{orderId}` */
|
|
104
|
+
declare function getCustomerOrder(api: Api, orderId: string, options?: CustomerOrderRequestOptions): Promise<CustomerOrderDetail>;
|
|
105
|
+
|
|
106
|
+
interface CreateClientOptions extends CreateApiOptions {
|
|
107
|
+
/**
|
|
108
|
+
* Dominio/slug de la tienda (header x-Store-Domain).
|
|
109
|
+
* Debe venir de ecomiq.config.js (`config.domain`).
|
|
110
|
+
* Acepta `marketplace`, `marketplace.ecomiq.app` o `marketplace.pe`.
|
|
111
|
+
*/
|
|
112
|
+
domain: string;
|
|
113
|
+
settingsCacheTtlMs?: number;
|
|
114
|
+
}
|
|
115
|
+
interface StorefrontClient extends Api {
|
|
116
|
+
getSettings(): Promise<StorefrontSettings>;
|
|
117
|
+
/** store.id desde settings (asegura cache). */
|
|
118
|
+
getStoreId(): Promise<string>;
|
|
119
|
+
/** GET /v1/collections */
|
|
120
|
+
getCollections(): Promise<Collections>;
|
|
121
|
+
/** GET /v1/collections/by-slug/:slug */
|
|
122
|
+
getCollectionBySlug(slug: string): Promise<Collection>;
|
|
123
|
+
/** GET /v1/pages/{slug} */
|
|
124
|
+
getPageBySlug(slug: string): Promise<CmsPageDetailsDto>;
|
|
125
|
+
/** Invalida el cache de settings. */
|
|
126
|
+
clearCache(): void;
|
|
127
|
+
getProducts(params?: ProductsParamsInput): Promise<ProductsResponse>;
|
|
128
|
+
/** GET product by slug con x-Store-Id. */
|
|
129
|
+
getProductBySlug(slug: string, params?: ProductDetailParams): Promise<ProductDetail>;
|
|
130
|
+
getRelatedProducts(params: RelatedProductsParams): Promise<ProductSummary[]>;
|
|
131
|
+
autocompleteProducts(params: ProductAutocompleteParams): Promise<ProductSuggestion[]>;
|
|
132
|
+
listProductReviews(params: ListProductReviewsParams): Promise<StorefrontReviews>;
|
|
133
|
+
createProductReview(params: CreateProductReviewParams): Promise<StorefrontReview>;
|
|
134
|
+
createCart(params: CreateCartParams): Promise<StorefrontCart>;
|
|
135
|
+
getCart(params: GetCartParams): Promise<StorefrontCart>;
|
|
136
|
+
addCartItem(params: AddCartItemParams): Promise<StorefrontCart>;
|
|
137
|
+
updateCartItemQuantity(params: UpdateCartItemQuantityParams): Promise<StorefrontCart>;
|
|
138
|
+
removeCartItem(params: RemoveCartItemParams): Promise<StorefrontCart>;
|
|
139
|
+
/** GET /v1/carts/{id}/checkout */
|
|
140
|
+
getCartCheckout(params: CartCheckoutReadParams): Promise<CartCheckoutReadResponse>;
|
|
141
|
+
/** GET /v1/carts/{id}/shipping-options */
|
|
142
|
+
getShippingOptions(params: GetShippingOptionsParams): Promise<ShippingOptionsResponse>;
|
|
143
|
+
/** PUT /v1/carts/{id}/shipping-method */
|
|
144
|
+
putCartShippingMethod(params: PutShippingMethodParams): Promise<StorefrontCart>;
|
|
145
|
+
/** PATCH /v1/carts/{id}/buyer */
|
|
146
|
+
patchCartBuyer(params: CartBuyerParams): Promise<StorefrontCart>;
|
|
147
|
+
/** PATCH /v1/carts/{id}/addresses */
|
|
148
|
+
patchCartAddresses(params: CartAddressesParams): Promise<StorefrontCart>;
|
|
149
|
+
/** POST /v1/carts/{id}/checkout */
|
|
150
|
+
checkoutCart(params: CartCheckoutParams): Promise<CartCheckoutResponse>;
|
|
151
|
+
/** POST /v1/carts/{id}/payment-receipt */
|
|
152
|
+
uploadPaymentReceipt(params: UploadPaymentReceiptParams): Promise<CartPaymentReceiptResponse>;
|
|
153
|
+
/** POST /v1/carts/{id}/promotion-codes */
|
|
154
|
+
addCartPromotionCode(params: CartPromotionCodeParams): Promise<StorefrontCart>;
|
|
155
|
+
/** DELETE /v1/carts/{id}/promotion-codes/{code} */
|
|
156
|
+
removeCartPromotionCode(params: CartPromotionCodeParams): Promise<StorefrontCart>;
|
|
157
|
+
/** GET /v1/geo/countries */
|
|
158
|
+
getCountries(): Promise<Countries>;
|
|
159
|
+
/** GET /v1/geo/departments */
|
|
160
|
+
getDepartments(params: GetDepartmentsParams): Promise<Departments>;
|
|
161
|
+
/** GET /v1/geo/provinces */
|
|
162
|
+
getProvinces(params: GetProvincesParams): Promise<Provinces>;
|
|
163
|
+
/** GET /v1/geo/districts */
|
|
164
|
+
getDistricts(params: GetDistrictsParams): Promise<Districts>;
|
|
165
|
+
/** GET customer addresses (requiere Authorization Bearer). */
|
|
166
|
+
getCustomerAddresses(options?: CustomerAddressRequestOptions): Promise<CustomerAddresses>;
|
|
167
|
+
/** POST customer address. */
|
|
168
|
+
createCustomerAddress(data: CustomerAddressUpsertInput, options?: CustomerAddressRequestOptions): Promise<CustomerAddressMutationResponse>;
|
|
169
|
+
/** PUT customer address. */
|
|
170
|
+
updateCustomerAddress(addressId: string, data: CustomerAddressUpsertInput, options?: CustomerAddressRequestOptions): Promise<CustomerAddressMutationResponse>;
|
|
171
|
+
/** DELETE customer address. */
|
|
172
|
+
deleteCustomerAddress(addressId: string, options?: CustomerAddressRequestOptions): Promise<void>;
|
|
173
|
+
/** GET /v1/customer/me */
|
|
174
|
+
getCustomerMe(options?: CustomerRequestOptions): Promise<CustomerMe>;
|
|
175
|
+
/** PATCH /v1/customer */
|
|
176
|
+
patchCustomer(data: CustomerProfilePatch, options?: CustomerRequestOptions): Promise<void>;
|
|
177
|
+
/** GET /v1/customer/orders */
|
|
178
|
+
getCustomerOrders(options?: CustomerOrderRequestOptions): Promise<CustomerOrderList>;
|
|
179
|
+
/** GET /v1/customer/orders/{orderId} */
|
|
180
|
+
getCustomerOrder(orderId: string, options?: CustomerOrderRequestOptions): Promise<CustomerOrderDetail>;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Crea el cliente storefront de bajo nivel (requiere domain).
|
|
184
|
+
* En apps Ecomiq usa `createClient()` de `@ecomiq/storefront`, que toma el domain del config.
|
|
185
|
+
*
|
|
186
|
+
* ```ts
|
|
187
|
+
* const api = createClient({ domain: 'marketplace' })
|
|
188
|
+
* const collections = await api.getCollections()
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
declare function createClient(options: CreateClientOptions): StorefrontClient;
|
|
192
|
+
/** @deprecated Usa createClient. Alias de compatibilidad con el plan. */
|
|
193
|
+
declare const createStorefrontClient: typeof createClient;
|
|
194
|
+
|
|
195
|
+
export { type CreateClientOptions as C, type StorefrontClient as S, type CustomerAddressMutationResponse as a, CustomerAddressMutationResponseSchema as b, type CustomerAddressRequestOptions as c, type CustomerOrderRequestOptions as d, type CustomerRequestOptions as e, createClient as f, createCustomerAddress as g, createStorefrontClient as h, deleteCustomerAddress as i, getCustomerAddresses as j, getCustomerMe as k, getCustomerOrder as l, getCustomerOrders as m, patchCustomer as p, registerCustomer as r, updateCustomerAddress as u };
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Api, CreateApiOptions } from './api.cjs';
|
|
2
|
+
import { Collections, Collection } from './models/collections.cjs';
|
|
3
|
+
import { ProductsParamsInput, ProductsResponse, ProductDetailParams, ProductDetail, RelatedProductsParams, ProductSummary } from './models/products.cjs';
|
|
4
|
+
import { ProductAutocompleteParams, ProductSuggestion } from './models/search.cjs';
|
|
5
|
+
import { ListProductReviewsParams, StorefrontReviews, CreateProductReviewParams, StorefrontReview } from './models/storefront-reviews.cjs';
|
|
6
|
+
import { CreateCartParams, StorefrontCart, GetCartParams, AddCartItemParams, UpdateCartItemQuantityParams, RemoveCartItemParams } from './models/storefront-cart.cjs';
|
|
7
|
+
import { CartCheckoutReadParams, CartCheckoutReadResponse, GetShippingOptionsParams, ShippingOptionsResponse, PutShippingMethodParams, CartBuyerParams, CartAddressesParams, CartCheckoutParams, CartCheckoutResponse, UploadPaymentReceiptParams, CartPaymentReceiptResponse, CartPromotionCodeParams } from './models/storefront-checkout.cjs';
|
|
8
|
+
import { Countries, GetDepartmentsParams, Departments, GetProvincesParams, Provinces, GetDistrictsParams, Districts } from './models/geo.cjs';
|
|
9
|
+
import { CustomerAddressUpsertInput, CustomerAddresses } from './models/customer-address.cjs';
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { CustomerMe, CustomerProfilePatch, CustomerRegisterRequest } from './models/customer-profile.cjs';
|
|
12
|
+
import { CustomerOrderDetail, CustomerOrderList } from './models/customer-order.cjs';
|
|
13
|
+
import { StorefrontSettings, CmsPageDetailsDto } from './models/settings.cjs';
|
|
14
|
+
|
|
15
|
+
/** POST/PUT a menudo responde solo `{ id }` (no el body completo). */
|
|
16
|
+
declare const CustomerAddressMutationResponseSchema: z.ZodUnion<[z.ZodObject<{
|
|
17
|
+
addressKey: z.ZodString;
|
|
18
|
+
countryIsoCode: z.ZodString;
|
|
19
|
+
addressLine: z.ZodString;
|
|
20
|
+
addressNumber: z.ZodString;
|
|
21
|
+
department: z.ZodString;
|
|
22
|
+
province: z.ZodString;
|
|
23
|
+
district: z.ZodString;
|
|
24
|
+
phone: z.ZodString;
|
|
25
|
+
cellPhone: z.ZodString;
|
|
26
|
+
postalCode: z.ZodString;
|
|
27
|
+
reference: z.ZodString;
|
|
28
|
+
latitude: z.ZodNullable<z.ZodNumber>;
|
|
29
|
+
longitude: z.ZodNullable<z.ZodNumber>;
|
|
30
|
+
isDefault: z.ZodBoolean;
|
|
31
|
+
} & {
|
|
32
|
+
id: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, string, string | number>>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
province: string;
|
|
35
|
+
postalCode: string;
|
|
36
|
+
district: string;
|
|
37
|
+
phone: string;
|
|
38
|
+
latitude: number | null;
|
|
39
|
+
longitude: number | null;
|
|
40
|
+
isDefault: boolean;
|
|
41
|
+
reference: string;
|
|
42
|
+
addressKey: string;
|
|
43
|
+
countryIsoCode: string;
|
|
44
|
+
addressLine: string;
|
|
45
|
+
addressNumber: string;
|
|
46
|
+
department: string;
|
|
47
|
+
cellPhone: string;
|
|
48
|
+
id?: string | undefined;
|
|
49
|
+
}, {
|
|
50
|
+
province: string;
|
|
51
|
+
postalCode: string;
|
|
52
|
+
district: string;
|
|
53
|
+
phone: string;
|
|
54
|
+
latitude: number | null;
|
|
55
|
+
longitude: number | null;
|
|
56
|
+
isDefault: boolean;
|
|
57
|
+
reference: string;
|
|
58
|
+
addressKey: string;
|
|
59
|
+
countryIsoCode: string;
|
|
60
|
+
addressLine: string;
|
|
61
|
+
addressNumber: string;
|
|
62
|
+
department: string;
|
|
63
|
+
cellPhone: string;
|
|
64
|
+
id?: string | number | undefined;
|
|
65
|
+
}>, z.ZodObject<{
|
|
66
|
+
id: z.ZodEffects<z.ZodUnion<[z.ZodString, z.ZodNumber]>, string, string | number>;
|
|
67
|
+
}, "strip", z.ZodTypeAny, {
|
|
68
|
+
id: string;
|
|
69
|
+
}, {
|
|
70
|
+
id: string | number;
|
|
71
|
+
}>, z.ZodNull]>;
|
|
72
|
+
type CustomerAddressMutationResponse = z.infer<typeof CustomerAddressMutationResponseSchema>;
|
|
73
|
+
type CustomerAddressRequestOptions = {
|
|
74
|
+
headers?: Record<string, string>;
|
|
75
|
+
signal?: AbortSignal;
|
|
76
|
+
};
|
|
77
|
+
/** GET /v1/customer/me/addresses → proxy `customer/addresses` */
|
|
78
|
+
declare function getCustomerAddresses(api: Api, options?: CustomerAddressRequestOptions): Promise<CustomerAddresses>;
|
|
79
|
+
/** POST /v1/customer/me/addresses → proxy `customer/addresses` */
|
|
80
|
+
declare function createCustomerAddress(api: Api, data: CustomerAddressUpsertInput, options?: CustomerAddressRequestOptions): Promise<CustomerAddressMutationResponse>;
|
|
81
|
+
/** PUT /v1/customer/me/addresses/{id} → proxy `customer/addresses/{id}` */
|
|
82
|
+
declare function updateCustomerAddress(api: Api, addressId: string, data: CustomerAddressUpsertInput, options?: CustomerAddressRequestOptions): Promise<CustomerAddressMutationResponse>;
|
|
83
|
+
/** DELETE /v1/customer/me/addresses/{id} → proxy `customer/addresses/{id}` */
|
|
84
|
+
declare function deleteCustomerAddress(api: Api, addressId: string, options?: CustomerAddressRequestOptions): Promise<void>;
|
|
85
|
+
|
|
86
|
+
type CustomerRequestOptions = {
|
|
87
|
+
headers?: Record<string, string>;
|
|
88
|
+
signal?: AbortSignal;
|
|
89
|
+
};
|
|
90
|
+
/** POST /v1/customer/register → proxy `customer/register` (público). */
|
|
91
|
+
declare function registerCustomer(api: Api, data: CustomerRegisterRequest, options?: CustomerRequestOptions): Promise<unknown>;
|
|
92
|
+
/** GET /v1/customer/me → proxy `customer` */
|
|
93
|
+
declare function getCustomerMe(api: Api, options?: CustomerRequestOptions): Promise<CustomerMe>;
|
|
94
|
+
/** PATCH /v1/customer → proxy `customer` (204). */
|
|
95
|
+
declare function patchCustomer(api: Api, data: CustomerProfilePatch, options?: CustomerRequestOptions): Promise<void>;
|
|
96
|
+
|
|
97
|
+
type CustomerOrderRequestOptions = {
|
|
98
|
+
headers?: Record<string, string>;
|
|
99
|
+
signal?: AbortSignal;
|
|
100
|
+
};
|
|
101
|
+
/** GET /v1/customer/orders → proxy `customer/orders` */
|
|
102
|
+
declare function getCustomerOrders(api: Api, options?: CustomerOrderRequestOptions): Promise<CustomerOrderList>;
|
|
103
|
+
/** GET /v1/customer/orders/{orderId} → proxy `customer/orders/{orderId}` */
|
|
104
|
+
declare function getCustomerOrder(api: Api, orderId: string, options?: CustomerOrderRequestOptions): Promise<CustomerOrderDetail>;
|
|
105
|
+
|
|
106
|
+
interface CreateClientOptions extends CreateApiOptions {
|
|
107
|
+
/**
|
|
108
|
+
* Dominio/slug de la tienda (header x-Store-Domain).
|
|
109
|
+
* Debe venir de ecomiq.config.js (`config.domain`).
|
|
110
|
+
* Acepta `marketplace`, `marketplace.ecomiq.app` o `marketplace.pe`.
|
|
111
|
+
*/
|
|
112
|
+
domain: string;
|
|
113
|
+
settingsCacheTtlMs?: number;
|
|
114
|
+
}
|
|
115
|
+
interface StorefrontClient extends Api {
|
|
116
|
+
getSettings(): Promise<StorefrontSettings>;
|
|
117
|
+
/** store.id desde settings (asegura cache). */
|
|
118
|
+
getStoreId(): Promise<string>;
|
|
119
|
+
/** GET /v1/collections */
|
|
120
|
+
getCollections(): Promise<Collections>;
|
|
121
|
+
/** GET /v1/collections/by-slug/:slug */
|
|
122
|
+
getCollectionBySlug(slug: string): Promise<Collection>;
|
|
123
|
+
/** GET /v1/pages/{slug} */
|
|
124
|
+
getPageBySlug(slug: string): Promise<CmsPageDetailsDto>;
|
|
125
|
+
/** Invalida el cache de settings. */
|
|
126
|
+
clearCache(): void;
|
|
127
|
+
getProducts(params?: ProductsParamsInput): Promise<ProductsResponse>;
|
|
128
|
+
/** GET product by slug con x-Store-Id. */
|
|
129
|
+
getProductBySlug(slug: string, params?: ProductDetailParams): Promise<ProductDetail>;
|
|
130
|
+
getRelatedProducts(params: RelatedProductsParams): Promise<ProductSummary[]>;
|
|
131
|
+
autocompleteProducts(params: ProductAutocompleteParams): Promise<ProductSuggestion[]>;
|
|
132
|
+
listProductReviews(params: ListProductReviewsParams): Promise<StorefrontReviews>;
|
|
133
|
+
createProductReview(params: CreateProductReviewParams): Promise<StorefrontReview>;
|
|
134
|
+
createCart(params: CreateCartParams): Promise<StorefrontCart>;
|
|
135
|
+
getCart(params: GetCartParams): Promise<StorefrontCart>;
|
|
136
|
+
addCartItem(params: AddCartItemParams): Promise<StorefrontCart>;
|
|
137
|
+
updateCartItemQuantity(params: UpdateCartItemQuantityParams): Promise<StorefrontCart>;
|
|
138
|
+
removeCartItem(params: RemoveCartItemParams): Promise<StorefrontCart>;
|
|
139
|
+
/** GET /v1/carts/{id}/checkout */
|
|
140
|
+
getCartCheckout(params: CartCheckoutReadParams): Promise<CartCheckoutReadResponse>;
|
|
141
|
+
/** GET /v1/carts/{id}/shipping-options */
|
|
142
|
+
getShippingOptions(params: GetShippingOptionsParams): Promise<ShippingOptionsResponse>;
|
|
143
|
+
/** PUT /v1/carts/{id}/shipping-method */
|
|
144
|
+
putCartShippingMethod(params: PutShippingMethodParams): Promise<StorefrontCart>;
|
|
145
|
+
/** PATCH /v1/carts/{id}/buyer */
|
|
146
|
+
patchCartBuyer(params: CartBuyerParams): Promise<StorefrontCart>;
|
|
147
|
+
/** PATCH /v1/carts/{id}/addresses */
|
|
148
|
+
patchCartAddresses(params: CartAddressesParams): Promise<StorefrontCart>;
|
|
149
|
+
/** POST /v1/carts/{id}/checkout */
|
|
150
|
+
checkoutCart(params: CartCheckoutParams): Promise<CartCheckoutResponse>;
|
|
151
|
+
/** POST /v1/carts/{id}/payment-receipt */
|
|
152
|
+
uploadPaymentReceipt(params: UploadPaymentReceiptParams): Promise<CartPaymentReceiptResponse>;
|
|
153
|
+
/** POST /v1/carts/{id}/promotion-codes */
|
|
154
|
+
addCartPromotionCode(params: CartPromotionCodeParams): Promise<StorefrontCart>;
|
|
155
|
+
/** DELETE /v1/carts/{id}/promotion-codes/{code} */
|
|
156
|
+
removeCartPromotionCode(params: CartPromotionCodeParams): Promise<StorefrontCart>;
|
|
157
|
+
/** GET /v1/geo/countries */
|
|
158
|
+
getCountries(): Promise<Countries>;
|
|
159
|
+
/** GET /v1/geo/departments */
|
|
160
|
+
getDepartments(params: GetDepartmentsParams): Promise<Departments>;
|
|
161
|
+
/** GET /v1/geo/provinces */
|
|
162
|
+
getProvinces(params: GetProvincesParams): Promise<Provinces>;
|
|
163
|
+
/** GET /v1/geo/districts */
|
|
164
|
+
getDistricts(params: GetDistrictsParams): Promise<Districts>;
|
|
165
|
+
/** GET customer addresses (requiere Authorization Bearer). */
|
|
166
|
+
getCustomerAddresses(options?: CustomerAddressRequestOptions): Promise<CustomerAddresses>;
|
|
167
|
+
/** POST customer address. */
|
|
168
|
+
createCustomerAddress(data: CustomerAddressUpsertInput, options?: CustomerAddressRequestOptions): Promise<CustomerAddressMutationResponse>;
|
|
169
|
+
/** PUT customer address. */
|
|
170
|
+
updateCustomerAddress(addressId: string, data: CustomerAddressUpsertInput, options?: CustomerAddressRequestOptions): Promise<CustomerAddressMutationResponse>;
|
|
171
|
+
/** DELETE customer address. */
|
|
172
|
+
deleteCustomerAddress(addressId: string, options?: CustomerAddressRequestOptions): Promise<void>;
|
|
173
|
+
/** GET /v1/customer/me */
|
|
174
|
+
getCustomerMe(options?: CustomerRequestOptions): Promise<CustomerMe>;
|
|
175
|
+
/** PATCH /v1/customer */
|
|
176
|
+
patchCustomer(data: CustomerProfilePatch, options?: CustomerRequestOptions): Promise<void>;
|
|
177
|
+
/** GET /v1/customer/orders */
|
|
178
|
+
getCustomerOrders(options?: CustomerOrderRequestOptions): Promise<CustomerOrderList>;
|
|
179
|
+
/** GET /v1/customer/orders/{orderId} */
|
|
180
|
+
getCustomerOrder(orderId: string, options?: CustomerOrderRequestOptions): Promise<CustomerOrderDetail>;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Crea el cliente storefront de bajo nivel (requiere domain).
|
|
184
|
+
* En apps Ecomiq usa `createClient()` de `@ecomiq/storefront`, que toma el domain del config.
|
|
185
|
+
*
|
|
186
|
+
* ```ts
|
|
187
|
+
* const api = createClient({ domain: 'marketplace' })
|
|
188
|
+
* const collections = await api.getCollections()
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
declare function createClient(options: CreateClientOptions): StorefrontClient;
|
|
192
|
+
/** @deprecated Usa createClient. Alias de compatibilidad con el plan. */
|
|
193
|
+
declare const createStorefrontClient: typeof createClient;
|
|
194
|
+
|
|
195
|
+
export { type CreateClientOptions as C, type StorefrontClient as S, type CustomerAddressMutationResponse as a, CustomerAddressMutationResponseSchema as b, type CustomerAddressRequestOptions as c, type CustomerOrderRequestOptions as d, type CustomerRequestOptions as e, createClient as f, createCustomerAddress as g, createStorefrontClient as h, deleteCustomerAddress as i, getCustomerAddresses as j, getCustomerMe as k, getCustomerOrder as l, getCustomerOrders as m, patchCustomer as p, registerCustomer as r, updateCustomerAddress as u };
|