@pakento/cms-sdk 2.3.0 → 2.4.0
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/index.d.mts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +67 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -120,6 +120,13 @@ interface CreateEcommerceOrderParams {
|
|
|
120
120
|
delivery_instructions?: string;
|
|
121
121
|
payment_method?: "cash" | "transfer";
|
|
122
122
|
}
|
|
123
|
+
interface SendContactUsEmailParams {
|
|
124
|
+
name: string;
|
|
125
|
+
email: string;
|
|
126
|
+
phone?: string;
|
|
127
|
+
notes?: string;
|
|
128
|
+
subject?: string;
|
|
129
|
+
}
|
|
123
130
|
interface ItemsRawResponse {
|
|
124
131
|
totalDocs: number;
|
|
125
132
|
totalPages: number;
|
|
@@ -143,6 +150,9 @@ interface BrandsRawResponse {
|
|
|
143
150
|
totalDocs: number;
|
|
144
151
|
totalPages: number;
|
|
145
152
|
}
|
|
153
|
+
interface EntityRawResponse {
|
|
154
|
+
entity: Entity;
|
|
155
|
+
}
|
|
146
156
|
interface ItemsApiResponse {
|
|
147
157
|
data: ItemsRawResponse | null;
|
|
148
158
|
items: Item[];
|
|
@@ -187,6 +197,11 @@ interface CreateEcommerceOrderResponse {
|
|
|
187
197
|
error: boolean;
|
|
188
198
|
errorMessage: string | null;
|
|
189
199
|
}
|
|
200
|
+
interface SendContactUsEmailResponse {
|
|
201
|
+
message: string;
|
|
202
|
+
error: boolean;
|
|
203
|
+
errorMessage: string | null;
|
|
204
|
+
}
|
|
190
205
|
interface CustomGraphQLParams {
|
|
191
206
|
query: string;
|
|
192
207
|
variables?: Record<string, any>;
|
|
@@ -209,7 +224,8 @@ declare class PakentoCMSAPI {
|
|
|
209
224
|
getEntity(params?: GetEntityParams): Promise<EntityApiResponse>;
|
|
210
225
|
createEcommerceOrder(params: CreateEcommerceOrderParams): Promise<CreateEcommerceOrderResponse>;
|
|
211
226
|
executeCustomQuery(params: CustomGraphQLParams): Promise<CustomGraphQLResponse>;
|
|
227
|
+
sendContactUsEmail(params: SendContactUsEmailParams): Promise<SendContactUsEmailResponse>;
|
|
212
228
|
}
|
|
213
229
|
declare const pakentoCMSAPI: PakentoCMSAPI;
|
|
214
230
|
|
|
215
|
-
export { type Brand, type BrandsApiResponse, type BrandsRawResponse, type CategoriesApiResponse, type CategoriesRawResponse, type CategoriesWhere, type Category, type GetBrandsParams, type GetCategoriesParams, type GetItemsParams, type Item, type ItemImage, type ItemsApiResponse, type ItemsRawResponse, type ItemsWhere, type WhereEquals, pakentoCMSAPI };
|
|
231
|
+
export { type Brand, type BrandsApiResponse, type BrandsRawResponse, type CategoriesApiResponse, type CategoriesRawResponse, type CategoriesWhere, type Category, type CreateEcommerceOrderParams, type CreateEcommerceOrderResponse, type CustomGraphQLParams, type CustomGraphQLResponse, type Entity, type EntityApiResponse, type EntityRawResponse, type GetBrandsParams, type GetCategoriesParams, type GetEntityParams, type GetItemsParams, type Item, type ItemImage, type ItemsApiResponse, type ItemsRawResponse, type ItemsWhere, type SendContactUsEmailParams, type SendContactUsEmailResponse, type WhereEquals, pakentoCMSAPI };
|
package/dist/index.d.ts
CHANGED
|
@@ -120,6 +120,13 @@ interface CreateEcommerceOrderParams {
|
|
|
120
120
|
delivery_instructions?: string;
|
|
121
121
|
payment_method?: "cash" | "transfer";
|
|
122
122
|
}
|
|
123
|
+
interface SendContactUsEmailParams {
|
|
124
|
+
name: string;
|
|
125
|
+
email: string;
|
|
126
|
+
phone?: string;
|
|
127
|
+
notes?: string;
|
|
128
|
+
subject?: string;
|
|
129
|
+
}
|
|
123
130
|
interface ItemsRawResponse {
|
|
124
131
|
totalDocs: number;
|
|
125
132
|
totalPages: number;
|
|
@@ -143,6 +150,9 @@ interface BrandsRawResponse {
|
|
|
143
150
|
totalDocs: number;
|
|
144
151
|
totalPages: number;
|
|
145
152
|
}
|
|
153
|
+
interface EntityRawResponse {
|
|
154
|
+
entity: Entity;
|
|
155
|
+
}
|
|
146
156
|
interface ItemsApiResponse {
|
|
147
157
|
data: ItemsRawResponse | null;
|
|
148
158
|
items: Item[];
|
|
@@ -187,6 +197,11 @@ interface CreateEcommerceOrderResponse {
|
|
|
187
197
|
error: boolean;
|
|
188
198
|
errorMessage: string | null;
|
|
189
199
|
}
|
|
200
|
+
interface SendContactUsEmailResponse {
|
|
201
|
+
message: string;
|
|
202
|
+
error: boolean;
|
|
203
|
+
errorMessage: string | null;
|
|
204
|
+
}
|
|
190
205
|
interface CustomGraphQLParams {
|
|
191
206
|
query: string;
|
|
192
207
|
variables?: Record<string, any>;
|
|
@@ -209,7 +224,8 @@ declare class PakentoCMSAPI {
|
|
|
209
224
|
getEntity(params?: GetEntityParams): Promise<EntityApiResponse>;
|
|
210
225
|
createEcommerceOrder(params: CreateEcommerceOrderParams): Promise<CreateEcommerceOrderResponse>;
|
|
211
226
|
executeCustomQuery(params: CustomGraphQLParams): Promise<CustomGraphQLResponse>;
|
|
227
|
+
sendContactUsEmail(params: SendContactUsEmailParams): Promise<SendContactUsEmailResponse>;
|
|
212
228
|
}
|
|
213
229
|
declare const pakentoCMSAPI: PakentoCMSAPI;
|
|
214
230
|
|
|
215
|
-
export { type Brand, type BrandsApiResponse, type BrandsRawResponse, type CategoriesApiResponse, type CategoriesRawResponse, type CategoriesWhere, type Category, type GetBrandsParams, type GetCategoriesParams, type GetItemsParams, type Item, type ItemImage, type ItemsApiResponse, type ItemsRawResponse, type ItemsWhere, type WhereEquals, pakentoCMSAPI };
|
|
231
|
+
export { type Brand, type BrandsApiResponse, type BrandsRawResponse, type CategoriesApiResponse, type CategoriesRawResponse, type CategoriesWhere, type Category, type CreateEcommerceOrderParams, type CreateEcommerceOrderResponse, type CustomGraphQLParams, type CustomGraphQLResponse, type Entity, type EntityApiResponse, type EntityRawResponse, type GetBrandsParams, type GetCategoriesParams, type GetEntityParams, type GetItemsParams, type Item, type ItemImage, type ItemsApiResponse, type ItemsRawResponse, type ItemsWhere, type SendContactUsEmailParams, type SendContactUsEmailResponse, type WhereEquals, pakentoCMSAPI };
|
package/dist/index.js
CHANGED
|
@@ -653,6 +653,73 @@ var PakentoCMSAPI = class {
|
|
|
653
653
|
};
|
|
654
654
|
}
|
|
655
655
|
}
|
|
656
|
+
async sendContactUsEmail(params) {
|
|
657
|
+
if (!this.baseURL || !this.apiKey) {
|
|
658
|
+
return {
|
|
659
|
+
message: "SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.",
|
|
660
|
+
error: true,
|
|
661
|
+
errorMessage: "SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes."
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
if (!params.name || !params.email) {
|
|
665
|
+
return {
|
|
666
|
+
message: "Faltan campos requeridos: name y email son obligatorios",
|
|
667
|
+
error: true,
|
|
668
|
+
errorMessage: "Faltan campos requeridos: name y email son obligatorios"
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
672
|
+
if (!emailRegex.test(params.email)) {
|
|
673
|
+
return {
|
|
674
|
+
message: "Formato de email inv\xE1lido",
|
|
675
|
+
error: true,
|
|
676
|
+
errorMessage: "Formato de email inv\xE1lido"
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
try {
|
|
680
|
+
const response = await this.client.post(
|
|
681
|
+
"/api/entities/send-contact-us-email",
|
|
682
|
+
params
|
|
683
|
+
);
|
|
684
|
+
if (response.status === 200) {
|
|
685
|
+
return {
|
|
686
|
+
message: response.data.message || "Mensaje enviado exitosamente",
|
|
687
|
+
error: false,
|
|
688
|
+
errorMessage: null
|
|
689
|
+
};
|
|
690
|
+
} else {
|
|
691
|
+
return {
|
|
692
|
+
message: response.data.message || "Error al enviar el mensaje",
|
|
693
|
+
error: true,
|
|
694
|
+
errorMessage: response.data.message || "Error al enviar el mensaje"
|
|
695
|
+
};
|
|
696
|
+
}
|
|
697
|
+
} catch (error) {
|
|
698
|
+
let errorMessage = "Error desconocido";
|
|
699
|
+
if (error instanceof import_axios.AxiosError) {
|
|
700
|
+
const status = error.response?.status;
|
|
701
|
+
const responseMessage = error.response?.data?.message;
|
|
702
|
+
if (status === 400) {
|
|
703
|
+
errorMessage = responseMessage || "Datos de entrada inv\xE1lidos";
|
|
704
|
+
} else if (status === 401) {
|
|
705
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
706
|
+
} else if (status === 404) {
|
|
707
|
+
errorMessage = "Endpoint no encontrado";
|
|
708
|
+
} else if (status && status >= 500) {
|
|
709
|
+
errorMessage = "Error del servidor CMS";
|
|
710
|
+
} else {
|
|
711
|
+
errorMessage = responseMessage || `Error de conexi\xF3n: ${error.message}`;
|
|
712
|
+
}
|
|
713
|
+
} else if (error instanceof Error) {
|
|
714
|
+
errorMessage = error.message;
|
|
715
|
+
}
|
|
716
|
+
return {
|
|
717
|
+
message: errorMessage,
|
|
718
|
+
error: true,
|
|
719
|
+
errorMessage
|
|
720
|
+
};
|
|
721
|
+
}
|
|
722
|
+
}
|
|
656
723
|
};
|
|
657
724
|
var pakentoCMSAPI = new PakentoCMSAPI();
|
|
658
725
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/services/api.ts"],"sourcesContent":["// Services\nexport { pakentoCMSAPI } from \"./services/api\";\n\n// Types\nexport type {\n // Base types\n Item,\n ItemImage,\n Category,\n Brand,\n\n // GraphQL Where conditions\n WhereEquals,\n ItemsWhere,\n CategoriesWhere,\n\n // API Parameters\n GetItemsParams,\n GetCategoriesParams,\n GetBrandsParams,\n\n // Raw API Response types\n ItemsRawResponse,\n CategoriesRawResponse,\n BrandsRawResponse,\n\n // API Response types with error handling\n ItemsApiResponse,\n CategoriesApiResponse,\n BrandsApiResponse,\n} from \"./types\";\n","import axios, { AxiosInstance, AxiosError } from \"axios\";\nimport type {\n GetItemsParams,\n GetCategoriesParams,\n GetBrandsParams,\n GetEntityParams,\n CreateEcommerceOrderParams,\n CustomGraphQLParams,\n ItemsApiResponse,\n CategoriesApiResponse,\n BrandsApiResponse,\n EntityApiResponse,\n CreateEcommerceOrderResponse,\n CustomGraphQLResponse,\n ItemsRawResponse,\n CategoriesRawResponse,\n BrandsRawResponse,\n ItemsWhere,\n} from \"../types\";\n\nclass PakentoCMSAPI {\n private client: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n\n constructor() {\n this.baseURL = process.env.PAKENTO_CMS_BASE_URL || \"\";\n this.apiKey = process.env.PAKENTO_API_KEY || \"\";\n\n if (!this.baseURL || !this.apiKey) {\n /*\n * No lanzamos excepciones en el constructor para evitar errores durante el build.\n * Las validaciones se harán justo antes de ejecutar una petición.\n */\n console.warn(\n \"[PakentoSDK] Variables de entorno PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes. Se validarán al hacer la petición.\"\n );\n }\n\n this.client = axios.create({\n baseURL: this.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `users API-Key ${this.apiKey}`,\n },\n });\n\n // Interceptor para imprimir las URLs de las llamadas a la API\n this.client.interceptors.request.use(\n (config) => {\n const fullUrl = `${config.baseURL}${config.url}`;\n console.log(`🌐 API Call: ${config.method?.toUpperCase()} ${fullUrl}`);\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n }\n\n async getItems(params: GetItemsParams = {}): Promise<ItemsApiResponse> {\n // Validar configuración antes de continuar\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n // Construir el objeto where solo si se envían parámetros\n const whereConditions: ItemsWhere = {};\n\n if (params.where?.item_category_id?.equals) {\n whereConditions.item_category_id = {\n equals: params.where.item_category_id.equals,\n };\n }\n\n if (params.where?.item_super_category_id?.equals) {\n whereConditions.item_super_category_id = {\n equals: params.where.item_super_category_id.equals,\n };\n }\n\n if (params.where?.brand_id?.equals) {\n whereConditions.brand_id = {\n equals: params.where.brand_id.equals,\n };\n }\n\n if (params.where?.id?.equals) {\n whereConditions.id = {\n equals: params.where.id.equals,\n };\n }\n\n // Solo incluir where si tiene condiciones\n const variables: GetItemsParams = {\n onlyOffers: params.onlyOffers,\n onlyEcommerce: params.onlyEcommerce,\n limit: params.limit,\n page: params.page,\n search: params.search,\n sort: params.sort,\n minPrice: params.minPrice,\n maxPrice: params.maxPrice,\n };\n\n // Solo agregar where si tiene condiciones\n if (Object.keys(whereConditions).length > 0) {\n variables.where = whereConditions;\n }\n\n const query = `\n query GetEcommerceItems(\n $where: EcommerceItemsWhere\n $onlyOffers: Boolean\n $onlyEcommerce: Boolean\n $limit: Int\n $page: Int\n $search: String\n $sort: String\n $minPrice: Float\n $maxPrice: Float\n ) {\n GetEcommerceItems(\n where: $where\n onlyOffers: $onlyOffers\n onlyEcommerce: $onlyEcommerce\n limit: $limit\n page: $page\n search: $search\n sort: $sort\n minPrice: $minPrice\n maxPrice: $maxPrice\n ) {\n totalDocs\n totalPages\n prevPage\n nextPage\n docs {\n id\n name\n featured\n old_price\n currency_prefix\n description\n price_text\n price\n brand_id\n brand_name\n cover_image_url\n cover_image_thumbnail_url\n item_category_name\n item_category_id\n images {\n alt\n url\n thumbnail_url\n }\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: ItemsRawResponse = response.data.data.GetEcommerceItems;\n\n return {\n data: rawData,\n items: rawData.docs,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n prevPage: rawData.prevPage,\n nextPage: rawData.nextPage,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getCategories(\n params: GetCategoriesParams = {}\n ): Promise<CategoriesApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEcommerceCategories(\n $where: EcommerceCategoriesWhere\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceCategories(\n where: $where\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n image_url\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n\n const rawData: CategoriesRawResponse =\n response.data.data.GetEcommerceCategories;\n\n return {\n data: rawData.docs,\n categories: rawData.docs,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n }\n\n async getBrands(params: GetBrandsParams = {}): Promise<BrandsApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEcommerceBrands(\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceBrands(\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n description\n items_count\n image_url\n image_thumbnail_url\n image_alt\n }\n hasNextPage\n hasPrevPage\n limit\n nextPage\n offset\n page\n pagingCounter\n prevPage\n totalDocs\n totalPages\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: BrandsRawResponse = response.data.data.GetEcommerceBrands;\n\n return {\n data: rawData,\n brands: rawData.docs,\n hasNextPage: rawData.hasNextPage,\n hasPrevPage: rawData.hasPrevPage,\n limit: rawData.limit,\n nextPage: rawData.nextPage,\n offset: rawData.offset,\n page: rawData.page,\n pagingCounter: rawData.pagingCounter,\n prevPage: rawData.prevPage,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getEntity(params: GetEntityParams = {}): Promise<EntityApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEntity {\n GetEntity {\n id\n tin\n name\n web\n address\n country\n city\n currency_id\n currency_name\n currency_prefix\n currency_suffix\n logo_url\n logo_alt\n logo_thumbnail_url\n logo_sizes_thumbnail_filename\n logo_filename\n logo_width\n logo_height\n logo_2_url\n logo_2_alt\n logo_2_thumbnail_url\n logo_2_sizes_thumbnail_filename\n logo_2_filename\n logo_2_width\n logo_2_height\n featured_image_url\n featured_image_alt\n featured_image_thumbnail_url\n featured_image_sizes_thumbnail_filename\n featured_image_filename\n featured_image_width\n featured_image_height\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage,\n };\n }\n\n const entityData = response.data.data.GetEntity;\n\n return {\n data: entityData,\n entity: entityData,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async createEcommerceOrder(\n params: CreateEcommerceOrderParams\n ): Promise<CreateEcommerceOrderResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n message:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validación de parámetros requeridos\n if (!params.name || !params.email) {\n return {\n message: \"Faltan campos requeridos: name y email son obligatorios\",\n error: true,\n errorMessage: \"Faltan campos requeridos: name y email son obligatorios\",\n };\n }\n\n if (\n !params.items ||\n !Array.isArray(params.items) ||\n params.items.length === 0\n ) {\n return {\n message: \"Se requiere al menos un item en la orden\",\n error: true,\n errorMessage: \"Se requiere al menos un item en la orden\",\n };\n }\n\n if (\n params.payment_method &&\n params.payment_method !== \"cash\" &&\n params.payment_method !== \"transfer\"\n ) {\n return {\n message: \"Método de pago no válido\",\n error: true,\n errorMessage: \"Método de pago no válido\",\n };\n }\n\n // Validar estructura de items\n for (const item of params.items) {\n if (!item.id || !item.quantity || item.quantity <= 0) {\n return {\n message: \"Cada item debe tener un id válido y una cantidad mayor a 0\",\n error: true,\n errorMessage:\n \"Cada item debe tener un id válido y una cantidad mayor a 0\",\n };\n }\n }\n\n try {\n const response = await this.client.post(\n \"/api/orders/create-ecommerce-order\",\n params\n );\n\n if (response.status === 200) {\n return {\n message: response.data.message || \"Orden creada exitosamente\",\n order_id: response.data.order_id,\n error: false,\n errorMessage: null,\n };\n } else {\n return {\n message: response.data.message || \"Error al crear la orden\",\n error: true,\n errorMessage: response.data.message || \"Error al crear la orden\",\n };\n }\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n const responseMessage = error.response?.data?.message;\n\n if (status === 400) {\n errorMessage = responseMessage || \"Datos de entrada inválidos\";\n } else if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage =\n responseMessage || `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n message: errorMessage,\n error: true,\n errorMessage,\n };\n }\n }\n\n async executeCustomQuery(\n params: CustomGraphQLParams\n ): Promise<CustomGraphQLResponse> {\n // Validar configuración antes de continuar\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validar que se proporcione un query\n if (\n !params.query ||\n typeof params.query !== \"string\" ||\n params.query.trim() === \"\"\n ) {\n return {\n data: null,\n error: true,\n errorMessage: \"Se requiere un query GraphQL válido.\",\n };\n }\n\n try {\n const response = await this.client.post(\"/api/graphql\", {\n query: params.query,\n variables: params.variables || {},\n });\n\n // Si hay errores de GraphQL, los incluimos en la respuesta pero no como error fatal\n if (response.data.errors && response.data.errors.length > 0) {\n return {\n data: response.data.data || null,\n errors: response.data.errors,\n error: true,\n errorMessage: `GraphQL Errors: ${response.data.errors\n .map((err: unknown) => (err as Error).message)\n .join(\", \")}`,\n };\n }\n\n return {\n data: response.data.data,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint GraphQL no encontrado\";\n } else if (status === 400) {\n errorMessage = \"Query GraphQL inválido o malformado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n error: true,\n errorMessage,\n };\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":["axios"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/services/api.ts"],"sourcesContent":["// Services\nexport { pakentoCMSAPI } from \"./services/api\";\n\n// Types\nexport type {\n // Base types\n Item,\n ItemImage,\n Category,\n Brand,\n Entity,\n\n // GraphQL Where conditions\n WhereEquals,\n ItemsWhere,\n CategoriesWhere,\n\n // API Parameters\n GetItemsParams,\n GetCategoriesParams,\n GetBrandsParams,\n GetEntityParams,\n CreateEcommerceOrderParams,\n SendContactUsEmailParams,\n CustomGraphQLParams,\n\n // Raw API Response types\n ItemsRawResponse,\n CategoriesRawResponse,\n BrandsRawResponse,\n EntityRawResponse,\n\n // API Response types with error handling\n ItemsApiResponse,\n CategoriesApiResponse,\n BrandsApiResponse,\n EntityApiResponse,\n CreateEcommerceOrderResponse,\n SendContactUsEmailResponse,\n CustomGraphQLResponse,\n} from \"./types\";\n","import axios, { AxiosInstance, AxiosError } from \"axios\";\nimport type {\n GetItemsParams,\n GetCategoriesParams,\n GetBrandsParams,\n GetEntityParams,\n CreateEcommerceOrderParams,\n SendContactUsEmailParams,\n CustomGraphQLParams,\n ItemsApiResponse,\n CategoriesApiResponse,\n BrandsApiResponse,\n EntityApiResponse,\n CreateEcommerceOrderResponse,\n SendContactUsEmailResponse,\n CustomGraphQLResponse,\n ItemsRawResponse,\n CategoriesRawResponse,\n BrandsRawResponse,\n ItemsWhere,\n} from \"../types\";\n\nclass PakentoCMSAPI {\n private client: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n\n constructor() {\n this.baseURL = process.env.PAKENTO_CMS_BASE_URL || \"\";\n this.apiKey = process.env.PAKENTO_API_KEY || \"\";\n\n if (!this.baseURL || !this.apiKey) {\n /*\n * No lanzamos excepciones en el constructor para evitar errores durante el build.\n * Las validaciones se harán justo antes de ejecutar una petición.\n */\n console.warn(\n \"[PakentoSDK] Variables de entorno PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes. Se validarán al hacer la petición.\"\n );\n }\n\n this.client = axios.create({\n baseURL: this.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `users API-Key ${this.apiKey}`,\n },\n });\n\n // Interceptor para imprimir las URLs de las llamadas a la API\n this.client.interceptors.request.use(\n (config) => {\n const fullUrl = `${config.baseURL}${config.url}`;\n console.log(`🌐 API Call: ${config.method?.toUpperCase()} ${fullUrl}`);\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n }\n\n async getItems(params: GetItemsParams = {}): Promise<ItemsApiResponse> {\n // Validar configuración antes de continuar\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n // Construir el objeto where solo si se envían parámetros\n const whereConditions: ItemsWhere = {};\n\n if (params.where?.item_category_id?.equals) {\n whereConditions.item_category_id = {\n equals: params.where.item_category_id.equals,\n };\n }\n\n if (params.where?.item_super_category_id?.equals) {\n whereConditions.item_super_category_id = {\n equals: params.where.item_super_category_id.equals,\n };\n }\n\n if (params.where?.brand_id?.equals) {\n whereConditions.brand_id = {\n equals: params.where.brand_id.equals,\n };\n }\n\n if (params.where?.id?.equals) {\n whereConditions.id = {\n equals: params.where.id.equals,\n };\n }\n\n // Solo incluir where si tiene condiciones\n const variables: GetItemsParams = {\n onlyOffers: params.onlyOffers,\n onlyEcommerce: params.onlyEcommerce,\n limit: params.limit,\n page: params.page,\n search: params.search,\n sort: params.sort,\n minPrice: params.minPrice,\n maxPrice: params.maxPrice,\n };\n\n // Solo agregar where si tiene condiciones\n if (Object.keys(whereConditions).length > 0) {\n variables.where = whereConditions;\n }\n\n const query = `\n query GetEcommerceItems(\n $where: EcommerceItemsWhere\n $onlyOffers: Boolean\n $onlyEcommerce: Boolean\n $limit: Int\n $page: Int\n $search: String\n $sort: String\n $minPrice: Float\n $maxPrice: Float\n ) {\n GetEcommerceItems(\n where: $where\n onlyOffers: $onlyOffers\n onlyEcommerce: $onlyEcommerce\n limit: $limit\n page: $page\n search: $search\n sort: $sort\n minPrice: $minPrice\n maxPrice: $maxPrice\n ) {\n totalDocs\n totalPages\n prevPage\n nextPage\n docs {\n id\n name\n featured\n old_price\n currency_prefix\n description\n price_text\n price\n brand_id\n brand_name\n cover_image_url\n cover_image_thumbnail_url\n item_category_name\n item_category_id\n images {\n alt\n url\n thumbnail_url\n }\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: ItemsRawResponse = response.data.data.GetEcommerceItems;\n\n return {\n data: rawData,\n items: rawData.docs,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n prevPage: rawData.prevPage,\n nextPage: rawData.nextPage,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getCategories(\n params: GetCategoriesParams = {}\n ): Promise<CategoriesApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEcommerceCategories(\n $where: EcommerceCategoriesWhere\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceCategories(\n where: $where\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n image_url\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n\n const rawData: CategoriesRawResponse =\n response.data.data.GetEcommerceCategories;\n\n return {\n data: rawData.docs,\n categories: rawData.docs,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n }\n\n async getBrands(params: GetBrandsParams = {}): Promise<BrandsApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEcommerceBrands(\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceBrands(\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n description\n items_count\n image_url\n image_thumbnail_url\n image_alt\n }\n hasNextPage\n hasPrevPage\n limit\n nextPage\n offset\n page\n pagingCounter\n prevPage\n totalDocs\n totalPages\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: BrandsRawResponse = response.data.data.GetEcommerceBrands;\n\n return {\n data: rawData,\n brands: rawData.docs,\n hasNextPage: rawData.hasNextPage,\n hasPrevPage: rawData.hasPrevPage,\n limit: rawData.limit,\n nextPage: rawData.nextPage,\n offset: rawData.offset,\n page: rawData.page,\n pagingCounter: rawData.pagingCounter,\n prevPage: rawData.prevPage,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getEntity(params: GetEntityParams = {}): Promise<EntityApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEntity {\n GetEntity {\n id\n tin\n name\n web\n address\n country\n city\n currency_id\n currency_name\n currency_prefix\n currency_suffix\n logo_url\n logo_alt\n logo_thumbnail_url\n logo_sizes_thumbnail_filename\n logo_filename\n logo_width\n logo_height\n logo_2_url\n logo_2_alt\n logo_2_thumbnail_url\n logo_2_sizes_thumbnail_filename\n logo_2_filename\n logo_2_width\n logo_2_height\n featured_image_url\n featured_image_alt\n featured_image_thumbnail_url\n featured_image_sizes_thumbnail_filename\n featured_image_filename\n featured_image_width\n featured_image_height\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage,\n };\n }\n\n const entityData = response.data.data.GetEntity;\n\n return {\n data: entityData,\n entity: entityData,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async createEcommerceOrder(\n params: CreateEcommerceOrderParams\n ): Promise<CreateEcommerceOrderResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n message:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validación de parámetros requeridos\n if (!params.name || !params.email) {\n return {\n message: \"Faltan campos requeridos: name y email son obligatorios\",\n error: true,\n errorMessage: \"Faltan campos requeridos: name y email son obligatorios\",\n };\n }\n\n if (\n !params.items ||\n !Array.isArray(params.items) ||\n params.items.length === 0\n ) {\n return {\n message: \"Se requiere al menos un item en la orden\",\n error: true,\n errorMessage: \"Se requiere al menos un item en la orden\",\n };\n }\n\n if (\n params.payment_method &&\n params.payment_method !== \"cash\" &&\n params.payment_method !== \"transfer\"\n ) {\n return {\n message: \"Método de pago no válido\",\n error: true,\n errorMessage: \"Método de pago no válido\",\n };\n }\n\n // Validar estructura de items\n for (const item of params.items) {\n if (!item.id || !item.quantity || item.quantity <= 0) {\n return {\n message: \"Cada item debe tener un id válido y una cantidad mayor a 0\",\n error: true,\n errorMessage:\n \"Cada item debe tener un id válido y una cantidad mayor a 0\",\n };\n }\n }\n\n try {\n const response = await this.client.post(\n \"/api/orders/create-ecommerce-order\",\n params\n );\n\n if (response.status === 200) {\n return {\n message: response.data.message || \"Orden creada exitosamente\",\n order_id: response.data.order_id,\n error: false,\n errorMessage: null,\n };\n } else {\n return {\n message: response.data.message || \"Error al crear la orden\",\n error: true,\n errorMessage: response.data.message || \"Error al crear la orden\",\n };\n }\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n const responseMessage = error.response?.data?.message;\n\n if (status === 400) {\n errorMessage = responseMessage || \"Datos de entrada inválidos\";\n } else if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage =\n responseMessage || `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n message: errorMessage,\n error: true,\n errorMessage,\n };\n }\n }\n\n async executeCustomQuery(\n params: CustomGraphQLParams\n ): Promise<CustomGraphQLResponse> {\n // Validar configuración antes de continuar\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validar que se proporcione un query\n if (\n !params.query ||\n typeof params.query !== \"string\" ||\n params.query.trim() === \"\"\n ) {\n return {\n data: null,\n error: true,\n errorMessage: \"Se requiere un query GraphQL válido.\",\n };\n }\n\n try {\n const response = await this.client.post(\"/api/graphql\", {\n query: params.query,\n variables: params.variables || {},\n });\n\n // Si hay errores de GraphQL, los incluimos en la respuesta pero no como error fatal\n if (response.data.errors && response.data.errors.length > 0) {\n return {\n data: response.data.data || null,\n errors: response.data.errors,\n error: true,\n errorMessage: `GraphQL Errors: ${response.data.errors\n .map((err: unknown) => (err as Error).message)\n .join(\", \")}`,\n };\n }\n\n return {\n data: response.data.data,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint GraphQL no encontrado\";\n } else if (status === 400) {\n errorMessage = \"Query GraphQL inválido o malformado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async sendContactUsEmail(\n params: SendContactUsEmailParams\n ): Promise<SendContactUsEmailResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n message:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validación de parámetros requeridos\n if (!params.name || !params.email) {\n return {\n message: \"Faltan campos requeridos: name y email son obligatorios\",\n error: true,\n errorMessage: \"Faltan campos requeridos: name y email son obligatorios\",\n };\n }\n\n // Validar formato de email básico\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(params.email)) {\n return {\n message: \"Formato de email inválido\",\n error: true,\n errorMessage: \"Formato de email inválido\",\n };\n }\n\n try {\n const response = await this.client.post(\n \"/api/entities/send-contact-us-email\",\n params\n );\n\n if (response.status === 200) {\n return {\n message: response.data.message || \"Mensaje enviado exitosamente\",\n error: false,\n errorMessage: null,\n };\n } else {\n return {\n message: response.data.message || \"Error al enviar el mensaje\",\n error: true,\n errorMessage: response.data.message || \"Error al enviar el mensaje\",\n };\n }\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n const responseMessage = error.response?.data?.message;\n\n if (status === 400) {\n errorMessage = responseMessage || \"Datos de entrada inválidos\";\n } else if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage =\n responseMessage || `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n message: errorMessage,\n error: true,\n errorMessage,\n };\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":["axios"]}
|
package/dist/index.mjs
CHANGED
|
@@ -617,6 +617,73 @@ var PakentoCMSAPI = class {
|
|
|
617
617
|
};
|
|
618
618
|
}
|
|
619
619
|
}
|
|
620
|
+
async sendContactUsEmail(params) {
|
|
621
|
+
if (!this.baseURL || !this.apiKey) {
|
|
622
|
+
return {
|
|
623
|
+
message: "SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.",
|
|
624
|
+
error: true,
|
|
625
|
+
errorMessage: "SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes."
|
|
626
|
+
};
|
|
627
|
+
}
|
|
628
|
+
if (!params.name || !params.email) {
|
|
629
|
+
return {
|
|
630
|
+
message: "Faltan campos requeridos: name y email son obligatorios",
|
|
631
|
+
error: true,
|
|
632
|
+
errorMessage: "Faltan campos requeridos: name y email son obligatorios"
|
|
633
|
+
};
|
|
634
|
+
}
|
|
635
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
636
|
+
if (!emailRegex.test(params.email)) {
|
|
637
|
+
return {
|
|
638
|
+
message: "Formato de email inv\xE1lido",
|
|
639
|
+
error: true,
|
|
640
|
+
errorMessage: "Formato de email inv\xE1lido"
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
try {
|
|
644
|
+
const response = await this.client.post(
|
|
645
|
+
"/api/entities/send-contact-us-email",
|
|
646
|
+
params
|
|
647
|
+
);
|
|
648
|
+
if (response.status === 200) {
|
|
649
|
+
return {
|
|
650
|
+
message: response.data.message || "Mensaje enviado exitosamente",
|
|
651
|
+
error: false,
|
|
652
|
+
errorMessage: null
|
|
653
|
+
};
|
|
654
|
+
} else {
|
|
655
|
+
return {
|
|
656
|
+
message: response.data.message || "Error al enviar el mensaje",
|
|
657
|
+
error: true,
|
|
658
|
+
errorMessage: response.data.message || "Error al enviar el mensaje"
|
|
659
|
+
};
|
|
660
|
+
}
|
|
661
|
+
} catch (error) {
|
|
662
|
+
let errorMessage = "Error desconocido";
|
|
663
|
+
if (error instanceof AxiosError) {
|
|
664
|
+
const status = error.response?.status;
|
|
665
|
+
const responseMessage = error.response?.data?.message;
|
|
666
|
+
if (status === 400) {
|
|
667
|
+
errorMessage = responseMessage || "Datos de entrada inv\xE1lidos";
|
|
668
|
+
} else if (status === 401) {
|
|
669
|
+
errorMessage = "API Key inv\xE1lida o expirada";
|
|
670
|
+
} else if (status === 404) {
|
|
671
|
+
errorMessage = "Endpoint no encontrado";
|
|
672
|
+
} else if (status && status >= 500) {
|
|
673
|
+
errorMessage = "Error del servidor CMS";
|
|
674
|
+
} else {
|
|
675
|
+
errorMessage = responseMessage || `Error de conexi\xF3n: ${error.message}`;
|
|
676
|
+
}
|
|
677
|
+
} else if (error instanceof Error) {
|
|
678
|
+
errorMessage = error.message;
|
|
679
|
+
}
|
|
680
|
+
return {
|
|
681
|
+
message: errorMessage,
|
|
682
|
+
error: true,
|
|
683
|
+
errorMessage
|
|
684
|
+
};
|
|
685
|
+
}
|
|
686
|
+
}
|
|
620
687
|
};
|
|
621
688
|
var pakentoCMSAPI = new PakentoCMSAPI();
|
|
622
689
|
export {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/services/api.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosError } from \"axios\";\nimport type {\n GetItemsParams,\n GetCategoriesParams,\n GetBrandsParams,\n GetEntityParams,\n CreateEcommerceOrderParams,\n CustomGraphQLParams,\n ItemsApiResponse,\n CategoriesApiResponse,\n BrandsApiResponse,\n EntityApiResponse,\n CreateEcommerceOrderResponse,\n CustomGraphQLResponse,\n ItemsRawResponse,\n CategoriesRawResponse,\n BrandsRawResponse,\n ItemsWhere,\n} from \"../types\";\n\nclass PakentoCMSAPI {\n private client: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n\n constructor() {\n this.baseURL = process.env.PAKENTO_CMS_BASE_URL || \"\";\n this.apiKey = process.env.PAKENTO_API_KEY || \"\";\n\n if (!this.baseURL || !this.apiKey) {\n /*\n * No lanzamos excepciones en el constructor para evitar errores durante el build.\n * Las validaciones se harán justo antes de ejecutar una petición.\n */\n console.warn(\n \"[PakentoSDK] Variables de entorno PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes. Se validarán al hacer la petición.\"\n );\n }\n\n this.client = axios.create({\n baseURL: this.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `users API-Key ${this.apiKey}`,\n },\n });\n\n // Interceptor para imprimir las URLs de las llamadas a la API\n this.client.interceptors.request.use(\n (config) => {\n const fullUrl = `${config.baseURL}${config.url}`;\n console.log(`🌐 API Call: ${config.method?.toUpperCase()} ${fullUrl}`);\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n }\n\n async getItems(params: GetItemsParams = {}): Promise<ItemsApiResponse> {\n // Validar configuración antes de continuar\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n // Construir el objeto where solo si se envían parámetros\n const whereConditions: ItemsWhere = {};\n\n if (params.where?.item_category_id?.equals) {\n whereConditions.item_category_id = {\n equals: params.where.item_category_id.equals,\n };\n }\n\n if (params.where?.item_super_category_id?.equals) {\n whereConditions.item_super_category_id = {\n equals: params.where.item_super_category_id.equals,\n };\n }\n\n if (params.where?.brand_id?.equals) {\n whereConditions.brand_id = {\n equals: params.where.brand_id.equals,\n };\n }\n\n if (params.where?.id?.equals) {\n whereConditions.id = {\n equals: params.where.id.equals,\n };\n }\n\n // Solo incluir where si tiene condiciones\n const variables: GetItemsParams = {\n onlyOffers: params.onlyOffers,\n onlyEcommerce: params.onlyEcommerce,\n limit: params.limit,\n page: params.page,\n search: params.search,\n sort: params.sort,\n minPrice: params.minPrice,\n maxPrice: params.maxPrice,\n };\n\n // Solo agregar where si tiene condiciones\n if (Object.keys(whereConditions).length > 0) {\n variables.where = whereConditions;\n }\n\n const query = `\n query GetEcommerceItems(\n $where: EcommerceItemsWhere\n $onlyOffers: Boolean\n $onlyEcommerce: Boolean\n $limit: Int\n $page: Int\n $search: String\n $sort: String\n $minPrice: Float\n $maxPrice: Float\n ) {\n GetEcommerceItems(\n where: $where\n onlyOffers: $onlyOffers\n onlyEcommerce: $onlyEcommerce\n limit: $limit\n page: $page\n search: $search\n sort: $sort\n minPrice: $minPrice\n maxPrice: $maxPrice\n ) {\n totalDocs\n totalPages\n prevPage\n nextPage\n docs {\n id\n name\n featured\n old_price\n currency_prefix\n description\n price_text\n price\n brand_id\n brand_name\n cover_image_url\n cover_image_thumbnail_url\n item_category_name\n item_category_id\n images {\n alt\n url\n thumbnail_url\n }\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: ItemsRawResponse = response.data.data.GetEcommerceItems;\n\n return {\n data: rawData,\n items: rawData.docs,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n prevPage: rawData.prevPage,\n nextPage: rawData.nextPage,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getCategories(\n params: GetCategoriesParams = {}\n ): Promise<CategoriesApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEcommerceCategories(\n $where: EcommerceCategoriesWhere\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceCategories(\n where: $where\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n image_url\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n\n const rawData: CategoriesRawResponse =\n response.data.data.GetEcommerceCategories;\n\n return {\n data: rawData.docs,\n categories: rawData.docs,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n }\n\n async getBrands(params: GetBrandsParams = {}): Promise<BrandsApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEcommerceBrands(\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceBrands(\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n description\n items_count\n image_url\n image_thumbnail_url\n image_alt\n }\n hasNextPage\n hasPrevPage\n limit\n nextPage\n offset\n page\n pagingCounter\n prevPage\n totalDocs\n totalPages\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: BrandsRawResponse = response.data.data.GetEcommerceBrands;\n\n return {\n data: rawData,\n brands: rawData.docs,\n hasNextPage: rawData.hasNextPage,\n hasPrevPage: rawData.hasPrevPage,\n limit: rawData.limit,\n nextPage: rawData.nextPage,\n offset: rawData.offset,\n page: rawData.page,\n pagingCounter: rawData.pagingCounter,\n prevPage: rawData.prevPage,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getEntity(params: GetEntityParams = {}): Promise<EntityApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEntity {\n GetEntity {\n id\n tin\n name\n web\n address\n country\n city\n currency_id\n currency_name\n currency_prefix\n currency_suffix\n logo_url\n logo_alt\n logo_thumbnail_url\n logo_sizes_thumbnail_filename\n logo_filename\n logo_width\n logo_height\n logo_2_url\n logo_2_alt\n logo_2_thumbnail_url\n logo_2_sizes_thumbnail_filename\n logo_2_filename\n logo_2_width\n logo_2_height\n featured_image_url\n featured_image_alt\n featured_image_thumbnail_url\n featured_image_sizes_thumbnail_filename\n featured_image_filename\n featured_image_width\n featured_image_height\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage,\n };\n }\n\n const entityData = response.data.data.GetEntity;\n\n return {\n data: entityData,\n entity: entityData,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async createEcommerceOrder(\n params: CreateEcommerceOrderParams\n ): Promise<CreateEcommerceOrderResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n message:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validación de parámetros requeridos\n if (!params.name || !params.email) {\n return {\n message: \"Faltan campos requeridos: name y email son obligatorios\",\n error: true,\n errorMessage: \"Faltan campos requeridos: name y email son obligatorios\",\n };\n }\n\n if (\n !params.items ||\n !Array.isArray(params.items) ||\n params.items.length === 0\n ) {\n return {\n message: \"Se requiere al menos un item en la orden\",\n error: true,\n errorMessage: \"Se requiere al menos un item en la orden\",\n };\n }\n\n if (\n params.payment_method &&\n params.payment_method !== \"cash\" &&\n params.payment_method !== \"transfer\"\n ) {\n return {\n message: \"Método de pago no válido\",\n error: true,\n errorMessage: \"Método de pago no válido\",\n };\n }\n\n // Validar estructura de items\n for (const item of params.items) {\n if (!item.id || !item.quantity || item.quantity <= 0) {\n return {\n message: \"Cada item debe tener un id válido y una cantidad mayor a 0\",\n error: true,\n errorMessage:\n \"Cada item debe tener un id válido y una cantidad mayor a 0\",\n };\n }\n }\n\n try {\n const response = await this.client.post(\n \"/api/orders/create-ecommerce-order\",\n params\n );\n\n if (response.status === 200) {\n return {\n message: response.data.message || \"Orden creada exitosamente\",\n order_id: response.data.order_id,\n error: false,\n errorMessage: null,\n };\n } else {\n return {\n message: response.data.message || \"Error al crear la orden\",\n error: true,\n errorMessage: response.data.message || \"Error al crear la orden\",\n };\n }\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n const responseMessage = error.response?.data?.message;\n\n if (status === 400) {\n errorMessage = responseMessage || \"Datos de entrada inválidos\";\n } else if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage =\n responseMessage || `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n message: errorMessage,\n error: true,\n errorMessage,\n };\n }\n }\n\n async executeCustomQuery(\n params: CustomGraphQLParams\n ): Promise<CustomGraphQLResponse> {\n // Validar configuración antes de continuar\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validar que se proporcione un query\n if (\n !params.query ||\n typeof params.query !== \"string\" ||\n params.query.trim() === \"\"\n ) {\n return {\n data: null,\n error: true,\n errorMessage: \"Se requiere un query GraphQL válido.\",\n };\n }\n\n try {\n const response = await this.client.post(\"/api/graphql\", {\n query: params.query,\n variables: params.variables || {},\n });\n\n // Si hay errores de GraphQL, los incluimos en la respuesta pero no como error fatal\n if (response.data.errors && response.data.errors.length > 0) {\n return {\n data: response.data.data || null,\n errors: response.data.errors,\n error: true,\n errorMessage: `GraphQL Errors: ${response.data.errors\n .map((err: unknown) => (err as Error).message)\n .join(\", \")}`,\n };\n }\n\n return {\n data: response.data.data,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint GraphQL no encontrado\";\n } else if (status === 400) {\n errorMessage = \"Query GraphQL inválido o malformado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n error: true,\n errorMessage,\n };\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/services/api.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosError } from \"axios\";\nimport type {\n GetItemsParams,\n GetCategoriesParams,\n GetBrandsParams,\n GetEntityParams,\n CreateEcommerceOrderParams,\n SendContactUsEmailParams,\n CustomGraphQLParams,\n ItemsApiResponse,\n CategoriesApiResponse,\n BrandsApiResponse,\n EntityApiResponse,\n CreateEcommerceOrderResponse,\n SendContactUsEmailResponse,\n CustomGraphQLResponse,\n ItemsRawResponse,\n CategoriesRawResponse,\n BrandsRawResponse,\n ItemsWhere,\n} from \"../types\";\n\nclass PakentoCMSAPI {\n private client: AxiosInstance;\n private baseURL: string;\n private apiKey: string;\n\n constructor() {\n this.baseURL = process.env.PAKENTO_CMS_BASE_URL || \"\";\n this.apiKey = process.env.PAKENTO_API_KEY || \"\";\n\n if (!this.baseURL || !this.apiKey) {\n /*\n * No lanzamos excepciones en el constructor para evitar errores durante el build.\n * Las validaciones se harán justo antes de ejecutar una petición.\n */\n console.warn(\n \"[PakentoSDK] Variables de entorno PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes. Se validarán al hacer la petición.\"\n );\n }\n\n this.client = axios.create({\n baseURL: this.baseURL,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `users API-Key ${this.apiKey}`,\n },\n });\n\n // Interceptor para imprimir las URLs de las llamadas a la API\n this.client.interceptors.request.use(\n (config) => {\n const fullUrl = `${config.baseURL}${config.url}`;\n console.log(`🌐 API Call: ${config.method?.toUpperCase()} ${fullUrl}`);\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n }\n\n async getItems(params: GetItemsParams = {}): Promise<ItemsApiResponse> {\n // Validar configuración antes de continuar\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n // Construir el objeto where solo si se envían parámetros\n const whereConditions: ItemsWhere = {};\n\n if (params.where?.item_category_id?.equals) {\n whereConditions.item_category_id = {\n equals: params.where.item_category_id.equals,\n };\n }\n\n if (params.where?.item_super_category_id?.equals) {\n whereConditions.item_super_category_id = {\n equals: params.where.item_super_category_id.equals,\n };\n }\n\n if (params.where?.brand_id?.equals) {\n whereConditions.brand_id = {\n equals: params.where.brand_id.equals,\n };\n }\n\n if (params.where?.id?.equals) {\n whereConditions.id = {\n equals: params.where.id.equals,\n };\n }\n\n // Solo incluir where si tiene condiciones\n const variables: GetItemsParams = {\n onlyOffers: params.onlyOffers,\n onlyEcommerce: params.onlyEcommerce,\n limit: params.limit,\n page: params.page,\n search: params.search,\n sort: params.sort,\n minPrice: params.minPrice,\n maxPrice: params.maxPrice,\n };\n\n // Solo agregar where si tiene condiciones\n if (Object.keys(whereConditions).length > 0) {\n variables.where = whereConditions;\n }\n\n const query = `\n query GetEcommerceItems(\n $where: EcommerceItemsWhere\n $onlyOffers: Boolean\n $onlyEcommerce: Boolean\n $limit: Int\n $page: Int\n $search: String\n $sort: String\n $minPrice: Float\n $maxPrice: Float\n ) {\n GetEcommerceItems(\n where: $where\n onlyOffers: $onlyOffers\n onlyEcommerce: $onlyEcommerce\n limit: $limit\n page: $page\n search: $search\n sort: $sort\n minPrice: $minPrice\n maxPrice: $maxPrice\n ) {\n totalDocs\n totalPages\n prevPage\n nextPage\n docs {\n id\n name\n featured\n old_price\n currency_prefix\n description\n price_text\n price\n brand_id\n brand_name\n cover_image_url\n cover_image_thumbnail_url\n item_category_name\n item_category_id\n images {\n alt\n url\n thumbnail_url\n }\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: ItemsRawResponse = response.data.data.GetEcommerceItems;\n\n return {\n data: rawData,\n items: rawData.docs,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n prevPage: rawData.prevPage,\n nextPage: rawData.nextPage,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n items: [],\n totalDocs: 0,\n totalPages: 0,\n prevPage: null,\n nextPage: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getCategories(\n params: GetCategoriesParams = {}\n ): Promise<CategoriesApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEcommerceCategories(\n $where: EcommerceCategoriesWhere\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceCategories(\n where: $where\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n image_url\n }\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n\n const rawData: CategoriesRawResponse =\n response.data.data.GetEcommerceCategories;\n\n return {\n data: rawData.docs,\n categories: rawData.docs,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n categories: [],\n error: true,\n errorMessage,\n };\n }\n }\n\n async getBrands(params: GetBrandsParams = {}): Promise<BrandsApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEcommerceBrands(\n $limit: Int\n $page: Int\n $sort: String\n ) {\n GetEcommerceBrands(\n limit: $limit\n page: $page\n sort: $sort\n ) {\n docs {\n id\n name\n description\n items_count\n image_url\n image_thumbnail_url\n image_alt\n }\n hasNextPage\n hasPrevPage\n limit\n nextPage\n offset\n page\n pagingCounter\n prevPage\n totalDocs\n totalPages\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage,\n };\n }\n\n const rawData: BrandsRawResponse = response.data.data.GetEcommerceBrands;\n\n return {\n data: rawData,\n brands: rawData.docs,\n hasNextPage: rawData.hasNextPage,\n hasPrevPage: rawData.hasPrevPage,\n limit: rawData.limit,\n nextPage: rawData.nextPage,\n offset: rawData.offset,\n page: rawData.page,\n pagingCounter: rawData.pagingCounter,\n prevPage: rawData.prevPage,\n totalDocs: rawData.totalDocs,\n totalPages: rawData.totalPages,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n brands: [],\n hasNextPage: false,\n hasPrevPage: false,\n limit: 0,\n nextPage: 0,\n offset: 0,\n page: 0,\n pagingCounter: 0,\n prevPage: 0,\n totalDocs: 0,\n totalPages: 0,\n error: true,\n errorMessage,\n };\n }\n }\n\n async getEntity(params: GetEntityParams = {}): Promise<EntityApiResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n try {\n const query = `\n query GetEntity {\n GetEntity {\n id\n tin\n name\n web\n address\n country\n city\n currency_id\n currency_name\n currency_prefix\n currency_suffix\n logo_url\n logo_alt\n logo_thumbnail_url\n logo_sizes_thumbnail_filename\n logo_filename\n logo_width\n logo_height\n logo_2_url\n logo_2_alt\n logo_2_thumbnail_url\n logo_2_sizes_thumbnail_filename\n logo_2_filename\n logo_2_width\n logo_2_height\n featured_image_url\n featured_image_alt\n featured_image_thumbnail_url\n featured_image_sizes_thumbnail_filename\n featured_image_filename\n featured_image_width\n featured_image_height\n }\n }\n `;\n\n const response = await this.client.post(\"/api/graphql\", {\n query,\n variables: params,\n });\n\n if (response.data.errors) {\n const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage,\n };\n }\n\n const entityData = response.data.data.GetEntity;\n\n return {\n data: entityData,\n entity: entityData,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n entity: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async createEcommerceOrder(\n params: CreateEcommerceOrderParams\n ): Promise<CreateEcommerceOrderResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n message:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validación de parámetros requeridos\n if (!params.name || !params.email) {\n return {\n message: \"Faltan campos requeridos: name y email son obligatorios\",\n error: true,\n errorMessage: \"Faltan campos requeridos: name y email son obligatorios\",\n };\n }\n\n if (\n !params.items ||\n !Array.isArray(params.items) ||\n params.items.length === 0\n ) {\n return {\n message: \"Se requiere al menos un item en la orden\",\n error: true,\n errorMessage: \"Se requiere al menos un item en la orden\",\n };\n }\n\n if (\n params.payment_method &&\n params.payment_method !== \"cash\" &&\n params.payment_method !== \"transfer\"\n ) {\n return {\n message: \"Método de pago no válido\",\n error: true,\n errorMessage: \"Método de pago no válido\",\n };\n }\n\n // Validar estructura de items\n for (const item of params.items) {\n if (!item.id || !item.quantity || item.quantity <= 0) {\n return {\n message: \"Cada item debe tener un id válido y una cantidad mayor a 0\",\n error: true,\n errorMessage:\n \"Cada item debe tener un id válido y una cantidad mayor a 0\",\n };\n }\n }\n\n try {\n const response = await this.client.post(\n \"/api/orders/create-ecommerce-order\",\n params\n );\n\n if (response.status === 200) {\n return {\n message: response.data.message || \"Orden creada exitosamente\",\n order_id: response.data.order_id,\n error: false,\n errorMessage: null,\n };\n } else {\n return {\n message: response.data.message || \"Error al crear la orden\",\n error: true,\n errorMessage: response.data.message || \"Error al crear la orden\",\n };\n }\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n const responseMessage = error.response?.data?.message;\n\n if (status === 400) {\n errorMessage = responseMessage || \"Datos de entrada inválidos\";\n } else if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage =\n responseMessage || `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n message: errorMessage,\n error: true,\n errorMessage,\n };\n }\n }\n\n async executeCustomQuery(\n params: CustomGraphQLParams\n ): Promise<CustomGraphQLResponse> {\n // Validar configuración antes de continuar\n if (!this.baseURL || !this.apiKey) {\n return {\n data: null,\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validar que se proporcione un query\n if (\n !params.query ||\n typeof params.query !== \"string\" ||\n params.query.trim() === \"\"\n ) {\n return {\n data: null,\n error: true,\n errorMessage: \"Se requiere un query GraphQL válido.\",\n };\n }\n\n try {\n const response = await this.client.post(\"/api/graphql\", {\n query: params.query,\n variables: params.variables || {},\n });\n\n // Si hay errores de GraphQL, los incluimos en la respuesta pero no como error fatal\n if (response.data.errors && response.data.errors.length > 0) {\n return {\n data: response.data.data || null,\n errors: response.data.errors,\n error: true,\n errorMessage: `GraphQL Errors: ${response.data.errors\n .map((err: unknown) => (err as Error).message)\n .join(\", \")}`,\n };\n }\n\n return {\n data: response.data.data,\n error: false,\n errorMessage: null,\n };\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint GraphQL no encontrado\";\n } else if (status === 400) {\n errorMessage = \"Query GraphQL inválido o malformado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage = `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n data: null,\n error: true,\n errorMessage,\n };\n }\n }\n\n async sendContactUsEmail(\n params: SendContactUsEmailParams\n ): Promise<SendContactUsEmailResponse> {\n if (!this.baseURL || !this.apiKey) {\n return {\n message:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n error: true,\n errorMessage:\n \"SDK no configurado: PAKENTO_CMS_BASE_URL o PAKENTO_API_KEY faltantes.\",\n };\n }\n\n // Validación de parámetros requeridos\n if (!params.name || !params.email) {\n return {\n message: \"Faltan campos requeridos: name y email son obligatorios\",\n error: true,\n errorMessage: \"Faltan campos requeridos: name y email son obligatorios\",\n };\n }\n\n // Validar formato de email básico\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(params.email)) {\n return {\n message: \"Formato de email inválido\",\n error: true,\n errorMessage: \"Formato de email inválido\",\n };\n }\n\n try {\n const response = await this.client.post(\n \"/api/entities/send-contact-us-email\",\n params\n );\n\n if (response.status === 200) {\n return {\n message: response.data.message || \"Mensaje enviado exitosamente\",\n error: false,\n errorMessage: null,\n };\n } else {\n return {\n message: response.data.message || \"Error al enviar el mensaje\",\n error: true,\n errorMessage: response.data.message || \"Error al enviar el mensaje\",\n };\n }\n } catch (error) {\n let errorMessage = \"Error desconocido\";\n\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n const responseMessage = error.response?.data?.message;\n\n if (status === 400) {\n errorMessage = responseMessage || \"Datos de entrada inválidos\";\n } else if (status === 401) {\n errorMessage = \"API Key inválida o expirada\";\n } else if (status === 404) {\n errorMessage = \"Endpoint no encontrado\";\n } else if (status && status >= 500) {\n errorMessage = \"Error del servidor CMS\";\n } else {\n errorMessage =\n responseMessage || `Error de conexión: ${error.message}`;\n }\n } else if (error instanceof Error) {\n errorMessage = error.message;\n }\n\n return {\n message: errorMessage,\n error: true,\n errorMessage,\n };\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":[]}
|