@pakento/cms-sdk 1.2.5 → 2.0.1

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 CHANGED
@@ -11,55 +11,80 @@ interface Item {
11
11
  currency_prefix: string;
12
12
  description: string;
13
13
  price_text: string;
14
+ price: number;
14
15
  cover_image_url: string;
15
16
  cover_image_thumbnail_url: string;
16
17
  images: ItemImage[];
17
18
  }
18
- interface ItemsResponse {
19
+ interface Category {
20
+ id: number;
21
+ name: string;
22
+ image_url: string;
23
+ }
24
+ interface WhereEquals {
25
+ equals?: string;
26
+ }
27
+ interface ItemsWhere {
28
+ item_category_id?: WhereEquals;
29
+ item_super_category_id?: WhereEquals;
30
+ brand_id?: WhereEquals;
31
+ }
32
+ interface CategoriesWhere {
33
+ item_super_category_id?: WhereEquals;
34
+ brand_id?: WhereEquals;
35
+ }
36
+ interface GetItemsParams {
37
+ where?: ItemsWhere;
38
+ onlyOffers?: boolean;
39
+ onlyEcommerce?: boolean;
40
+ limit?: number;
41
+ page?: number;
42
+ search?: string;
43
+ sort?: string;
44
+ minPrice?: number;
45
+ maxPrice?: number;
46
+ }
47
+ interface GetCategoriesParams {
48
+ where?: CategoriesWhere;
49
+ limit?: number;
50
+ page?: number;
51
+ sort?: string;
52
+ }
53
+ interface ItemsRawResponse {
19
54
  totalDocs: number;
20
55
  totalPages: number;
21
56
  prevPage: number | null;
22
57
  nextPage: number | null;
23
58
  docs: Item[];
24
59
  }
25
- interface UseItemsOptions {
26
- page?: number;
27
- limit?: number;
60
+ interface CategoriesRawResponse {
61
+ docs: Category[];
28
62
  }
29
- interface UseItemsReturn {
63
+ interface ItemsApiResponse {
64
+ data: ItemsRawResponse | null;
30
65
  items: Item[];
31
66
  totalDocs: number;
32
67
  totalPages: number;
33
68
  prevPage: number | null;
34
69
  nextPage: number | null;
35
- loading: boolean;
36
- error: string | null;
37
- refetch: () => void;
70
+ error: boolean;
71
+ errorMessage: string | null;
38
72
  }
39
- interface Category {
40
- id: number;
41
- name: string;
42
- image_url: string;
43
- }
44
- interface UseCategoriesReturn {
73
+ interface CategoriesApiResponse {
74
+ data: Category[] | null;
45
75
  categories: Category[];
46
- loading: boolean;
47
- error: string | null;
48
- refetch: () => void;
76
+ error: boolean;
77
+ errorMessage: string | null;
49
78
  }
50
79
 
51
- declare function useItems(options?: UseItemsOptions): UseItemsReturn;
52
-
53
- declare function useCategories(): UseCategoriesReturn;
54
-
55
80
  declare class PakentoCMSAPI {
56
81
  private client;
57
82
  private baseURL;
58
83
  private apiKey;
59
84
  constructor();
60
- getItems(page?: number, limit?: number): Promise<any>;
61
- getCategories(): Promise<any>;
85
+ getItems(params?: GetItemsParams): Promise<ItemsApiResponse>;
86
+ getCategories(params?: GetCategoriesParams): Promise<CategoriesApiResponse>;
62
87
  }
63
88
  declare const pakentoCMSAPI: PakentoCMSAPI;
64
89
 
65
- export { type Category, type Item, type ItemImage, type ItemsResponse, type UseCategoriesReturn, type UseItemsOptions, type UseItemsReturn, pakentoCMSAPI, useCategories, useItems };
90
+ export { type CategoriesApiResponse, type CategoriesRawResponse, type CategoriesWhere, type Category, type GetCategoriesParams, type GetItemsParams, type Item, type ItemImage, type ItemsApiResponse, type ItemsRawResponse, type ItemsWhere, type WhereEquals, pakentoCMSAPI };
package/dist/index.d.ts CHANGED
@@ -11,55 +11,80 @@ interface Item {
11
11
  currency_prefix: string;
12
12
  description: string;
13
13
  price_text: string;
14
+ price: number;
14
15
  cover_image_url: string;
15
16
  cover_image_thumbnail_url: string;
16
17
  images: ItemImage[];
17
18
  }
18
- interface ItemsResponse {
19
+ interface Category {
20
+ id: number;
21
+ name: string;
22
+ image_url: string;
23
+ }
24
+ interface WhereEquals {
25
+ equals?: string;
26
+ }
27
+ interface ItemsWhere {
28
+ item_category_id?: WhereEquals;
29
+ item_super_category_id?: WhereEquals;
30
+ brand_id?: WhereEquals;
31
+ }
32
+ interface CategoriesWhere {
33
+ item_super_category_id?: WhereEquals;
34
+ brand_id?: WhereEquals;
35
+ }
36
+ interface GetItemsParams {
37
+ where?: ItemsWhere;
38
+ onlyOffers?: boolean;
39
+ onlyEcommerce?: boolean;
40
+ limit?: number;
41
+ page?: number;
42
+ search?: string;
43
+ sort?: string;
44
+ minPrice?: number;
45
+ maxPrice?: number;
46
+ }
47
+ interface GetCategoriesParams {
48
+ where?: CategoriesWhere;
49
+ limit?: number;
50
+ page?: number;
51
+ sort?: string;
52
+ }
53
+ interface ItemsRawResponse {
19
54
  totalDocs: number;
20
55
  totalPages: number;
21
56
  prevPage: number | null;
22
57
  nextPage: number | null;
23
58
  docs: Item[];
24
59
  }
25
- interface UseItemsOptions {
26
- page?: number;
27
- limit?: number;
60
+ interface CategoriesRawResponse {
61
+ docs: Category[];
28
62
  }
29
- interface UseItemsReturn {
63
+ interface ItemsApiResponse {
64
+ data: ItemsRawResponse | null;
30
65
  items: Item[];
31
66
  totalDocs: number;
32
67
  totalPages: number;
33
68
  prevPage: number | null;
34
69
  nextPage: number | null;
35
- loading: boolean;
36
- error: string | null;
37
- refetch: () => void;
70
+ error: boolean;
71
+ errorMessage: string | null;
38
72
  }
39
- interface Category {
40
- id: number;
41
- name: string;
42
- image_url: string;
43
- }
44
- interface UseCategoriesReturn {
73
+ interface CategoriesApiResponse {
74
+ data: Category[] | null;
45
75
  categories: Category[];
46
- loading: boolean;
47
- error: string | null;
48
- refetch: () => void;
76
+ error: boolean;
77
+ errorMessage: string | null;
49
78
  }
50
79
 
51
- declare function useItems(options?: UseItemsOptions): UseItemsReturn;
52
-
53
- declare function useCategories(): UseCategoriesReturn;
54
-
55
80
  declare class PakentoCMSAPI {
56
81
  private client;
57
82
  private baseURL;
58
83
  private apiKey;
59
84
  constructor();
60
- getItems(page?: number, limit?: number): Promise<any>;
61
- getCategories(): Promise<any>;
85
+ getItems(params?: GetItemsParams): Promise<ItemsApiResponse>;
86
+ getCategories(params?: GetCategoriesParams): Promise<CategoriesApiResponse>;
62
87
  }
63
88
  declare const pakentoCMSAPI: PakentoCMSAPI;
64
89
 
65
- export { type Category, type Item, type ItemImage, type ItemsResponse, type UseCategoriesReturn, type UseItemsOptions, type UseItemsReturn, pakentoCMSAPI, useCategories, useItems };
90
+ export { type CategoriesApiResponse, type CategoriesRawResponse, type CategoriesWhere, type Category, type GetCategoriesParams, type GetItemsParams, type Item, type ItemImage, type ItemsApiResponse, type ItemsRawResponse, type ItemsWhere, type WhereEquals, pakentoCMSAPI };
package/dist/index.js CHANGED
@@ -30,15 +30,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
- pakentoCMSAPI: () => pakentoCMSAPI,
34
- useCategories: () => useCategories,
35
- useItems: () => useItems
33
+ pakentoCMSAPI: () => pakentoCMSAPI
36
34
  });
37
35
  module.exports = __toCommonJS(index_exports);
38
36
 
39
- // src/hooks/useItems.ts
40
- var import_react = require("react");
41
-
42
37
  // src/services/api.ts
43
38
  var import_axios = __toESM(require("axios"));
44
39
  var PakentoCMSAPI = class {
@@ -71,11 +66,31 @@ var PakentoCMSAPI = class {
71
66
  }
72
67
  );
73
68
  }
74
- async getItems(page = 1, limit = 10) {
69
+ async getItems(params = {}) {
75
70
  try {
76
71
  const query = `
77
- query Query($page: Int, $limit: Int) {
78
- GetEcommerceItems(page: $page, limit: $limit) {
72
+ query GetEcommerceItems(
73
+ $where: EcommerceItemsWhere
74
+ $onlyOffers: Boolean
75
+ $onlyEcommerce: Boolean
76
+ $limit: Int
77
+ $page: Int
78
+ $search: String
79
+ $sort: String
80
+ $minPrice: Float
81
+ $maxPrice: Float
82
+ ) {
83
+ GetEcommerceItems(
84
+ where: $where
85
+ onlyOffers: $onlyOffers
86
+ onlyEcommerce: $onlyEcommerce
87
+ limit: $limit
88
+ page: $page
89
+ search: $search
90
+ sort: $sort
91
+ minPrice: $minPrice
92
+ maxPrice: $maxPrice
93
+ ) {
79
94
  totalDocs
80
95
  totalPages
81
96
  prevPage
@@ -88,6 +103,7 @@ var PakentoCMSAPI = class {
88
103
  currency_prefix
89
104
  description
90
105
  price_text
106
+ price
91
107
  cover_image_url
92
108
  cover_image_thumbnail_url
93
109
  images {
@@ -101,34 +117,75 @@ var PakentoCMSAPI = class {
101
117
  `;
102
118
  const response = await this.client.post("/api/graphql", {
103
119
  query,
104
- variables: { page, limit }
120
+ variables: params
105
121
  });
106
122
  if (response.data.errors) {
107
- throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
123
+ const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
124
+ return {
125
+ data: null,
126
+ items: [],
127
+ totalDocs: 0,
128
+ totalPages: 0,
129
+ prevPage: null,
130
+ nextPage: null,
131
+ error: true,
132
+ errorMessage
133
+ };
108
134
  }
109
- return response.data.data.GetEcommerceItems;
135
+ const rawData = response.data.data.GetEcommerceItems;
136
+ return {
137
+ data: rawData,
138
+ items: rawData.docs,
139
+ totalDocs: rawData.totalDocs,
140
+ totalPages: rawData.totalPages,
141
+ prevPage: rawData.prevPage,
142
+ nextPage: rawData.nextPage,
143
+ error: false,
144
+ errorMessage: null
145
+ };
110
146
  } catch (error) {
147
+ let errorMessage = "Error desconocido";
111
148
  if (error instanceof import_axios.AxiosError) {
112
149
  const status = error.response?.status;
113
150
  if (status === 401) {
114
- throw new Error("API Key inv\xE1lida o expirada");
115
- }
116
- if (status === 404) {
117
- throw new Error("Endpoint no encontrado");
118
- }
119
- if (status && status >= 500) {
120
- throw new Error("Error del servidor CMS");
151
+ errorMessage = "API Key inv\xE1lida o expirada";
152
+ } else if (status === 404) {
153
+ errorMessage = "Endpoint no encontrado";
154
+ } else if (status && status >= 500) {
155
+ errorMessage = "Error del servidor CMS";
156
+ } else {
157
+ errorMessage = `Error de conexi\xF3n: ${error.message}`;
121
158
  }
122
- throw new Error(`Error de conexi\xF3n: ${error.message}`);
159
+ } else if (error instanceof Error) {
160
+ errorMessage = error.message;
123
161
  }
124
- throw error;
162
+ return {
163
+ data: null,
164
+ items: [],
165
+ totalDocs: 0,
166
+ totalPages: 0,
167
+ prevPage: null,
168
+ nextPage: null,
169
+ error: true,
170
+ errorMessage
171
+ };
125
172
  }
126
173
  }
127
- async getCategories() {
174
+ async getCategories(params = {}) {
128
175
  try {
129
176
  const query = `
130
- query Query {
131
- GetEcommerceCategories {
177
+ query GetEcommerceCategories(
178
+ $where: EcommerceCategoriesWhere
179
+ $limit: Int
180
+ $page: Int
181
+ $sort: String
182
+ ) {
183
+ GetEcommerceCategories(
184
+ where: $where
185
+ limit: $limit
186
+ page: $page
187
+ sort: $sort
188
+ ) {
132
189
  docs {
133
190
  id
134
191
  name
@@ -138,115 +195,53 @@ var PakentoCMSAPI = class {
138
195
  }
139
196
  `;
140
197
  const response = await this.client.post("/api/graphql", {
141
- query
198
+ query,
199
+ variables: params
142
200
  });
143
201
  if (response.data.errors) {
144
- throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
202
+ const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
203
+ return {
204
+ data: null,
205
+ categories: [],
206
+ error: true,
207
+ errorMessage
208
+ };
145
209
  }
146
- return response.data.data.GetEcommerceCategories.docs;
210
+ const rawData = response.data.data.GetEcommerceCategories;
211
+ return {
212
+ data: rawData.docs,
213
+ categories: rawData.docs,
214
+ error: false,
215
+ errorMessage: null
216
+ };
147
217
  } catch (error) {
218
+ let errorMessage = "Error desconocido";
148
219
  if (error instanceof import_axios.AxiosError) {
149
220
  const status = error.response?.status;
150
221
  if (status === 401) {
151
- throw new Error("API Key inv\xE1lida o expirada");
152
- }
153
- if (status === 404) {
154
- throw new Error("Endpoint no encontrado");
155
- }
156
- if (status && status >= 500) {
157
- throw new Error("Error del servidor CMS");
222
+ errorMessage = "API Key inv\xE1lida o expirada";
223
+ } else if (status === 404) {
224
+ errorMessage = "Endpoint no encontrado";
225
+ } else if (status && status >= 500) {
226
+ errorMessage = "Error del servidor CMS";
227
+ } else {
228
+ errorMessage = `Error de conexi\xF3n: ${error.message}`;
158
229
  }
159
- throw new Error(`Error de conexi\xF3n: ${error.message}`);
230
+ } else if (error instanceof Error) {
231
+ errorMessage = error.message;
160
232
  }
161
- throw error;
233
+ return {
234
+ data: null,
235
+ categories: [],
236
+ error: true,
237
+ errorMessage
238
+ };
162
239
  }
163
240
  }
164
241
  };
165
242
  var pakentoCMSAPI = new PakentoCMSAPI();
166
-
167
- // src/hooks/useItems.ts
168
- function useItems(options = {}) {
169
- const { page = 1, limit = 10 } = options;
170
- const [items, setItems] = (0, import_react.useState)([]);
171
- const [totalDocs, setTotalDocs] = (0, import_react.useState)(0);
172
- const [totalPages, setTotalPages] = (0, import_react.useState)(0);
173
- const [prevPage, setPrevPage] = (0, import_react.useState)(null);
174
- const [nextPage, setNextPage] = (0, import_react.useState)(null);
175
- const [loading, setLoading] = (0, import_react.useState)(true);
176
- const [error, setError] = (0, import_react.useState)(null);
177
- const fetchItems = (0, import_react.useCallback)(async () => {
178
- try {
179
- setLoading(true);
180
- setError(null);
181
- const response = await pakentoCMSAPI.getItems(page, limit);
182
- setItems(response.docs);
183
- setTotalDocs(response.totalDocs);
184
- setTotalPages(response.totalPages);
185
- setPrevPage(response.prevPage);
186
- setNextPage(response.nextPage);
187
- } catch (err) {
188
- const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar items";
189
- setError(errorMessage);
190
- console.error("Error fetching items:", err);
191
- } finally {
192
- setLoading(false);
193
- }
194
- }, [page, limit]);
195
- (0, import_react.useEffect)(() => {
196
- fetchItems();
197
- }, [fetchItems]);
198
- const refetch = (0, import_react.useCallback)(() => {
199
- fetchItems();
200
- }, [fetchItems]);
201
- return {
202
- items,
203
- totalDocs,
204
- totalPages,
205
- prevPage,
206
- nextPage,
207
- loading,
208
- error,
209
- refetch
210
- };
211
- }
212
-
213
- // src/hooks/useCategories.ts
214
- var import_react2 = require("react");
215
- function useCategories() {
216
- const [categories, setCategories] = (0, import_react2.useState)([]);
217
- const [loading, setLoading] = (0, import_react2.useState)(true);
218
- const [error, setError] = (0, import_react2.useState)(null);
219
- const fetchCategories = (0, import_react2.useCallback)(async () => {
220
- try {
221
- setLoading(true);
222
- setError(null);
223
- const response = await pakentoCMSAPI.getCategories();
224
- setCategories(response);
225
- } catch (err) {
226
- const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar categor\xEDas";
227
- setError(errorMessage);
228
- console.error("Error fetching categories:", err);
229
- } finally {
230
- setLoading(false);
231
- }
232
- }, []);
233
- (0, import_react2.useEffect)(() => {
234
- fetchCategories();
235
- }, [fetchCategories]);
236
- const refetch = (0, import_react2.useCallback)(() => {
237
- fetchCategories();
238
- }, [fetchCategories]);
239
- return {
240
- categories,
241
- loading,
242
- error,
243
- refetch
244
- };
245
- }
246
243
  // Annotate the CommonJS export names for ESM import in node:
247
244
  0 && (module.exports = {
248
- pakentoCMSAPI,
249
- useCategories,
250
- useItems
245
+ pakentoCMSAPI
251
246
  });
252
247
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/hooks/useItems.ts","../src/services/api.ts","../src/hooks/useCategories.ts"],"sourcesContent":["// Hooks\nexport { useItems } from \"./hooks/useItems\";\nexport { useCategories } from \"./hooks/useCategories\";\n\n// Services\nexport { pakentoCMSAPI } from \"./services/api\";\n\n// Types\nexport type {\n Item,\n ItemImage,\n ItemsResponse,\n UseItemsOptions,\n UseItemsReturn,\n Category,\n UseCategoriesReturn,\n} from \"./types\";\n","import { useState, useEffect, useCallback } from \"react\";\nimport { pakentoCMSAPI } from \"../services/api\";\nimport { UseItemsOptions, UseItemsReturn, Item } from \"../types\";\n\nexport function useItems(options: UseItemsOptions = {}): UseItemsReturn {\n const { page = 1, limit = 10 } = options;\n\n const [items, setItems] = useState<Item[]>([]);\n const [totalDocs, setTotalDocs] = useState(0);\n const [totalPages, setTotalPages] = useState(0);\n const [prevPage, setPrevPage] = useState<number | null>(null);\n const [nextPage, setNextPage] = useState<number | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchItems = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const response = await pakentoCMSAPI.getItems(page, limit);\n\n setItems(response.docs);\n setTotalDocs(response.totalDocs);\n setTotalPages(response.totalPages);\n setPrevPage(response.prevPage);\n setNextPage(response.nextPage);\n } catch (err) {\n const errorMessage =\n err instanceof Error\n ? err.message\n : \"Error desconocido al cargar items\";\n setError(errorMessage);\n console.error(\"Error fetching items:\", err);\n } finally {\n setLoading(false);\n }\n }, [page, limit]);\n\n useEffect(() => {\n fetchItems();\n }, [fetchItems]);\n\n const refetch = useCallback(() => {\n fetchItems();\n }, [fetchItems]);\n\n return {\n items,\n totalDocs,\n totalPages,\n prevPage,\n nextPage,\n loading,\n error,\n refetch,\n };\n}\n","import axios, { AxiosInstance, AxiosError } from \"axios\";\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) {\n throw new Error(\n \"PAKENTO_CMS_BASE_URL is required in environment variables\"\n );\n }\n\n if (!this.apiKey) {\n throw new Error(\"PAKENTO_API_KEY is required in environment variables\");\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(page: number = 1, limit: number = 10) {\n try {\n const query = `\n query Query($page: Int, $limit: Int) {\n GetEcommerceItems(page: $page, limit: $limit) {\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 cover_image_url\n cover_image_thumbnail_url\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: { page, limit },\n });\n\n if (response.data.errors) {\n throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);\n }\n\n // Parseamos la respuesta para quitar el wrapper de data->GetEcommerceItems\n return response.data.data.GetEcommerceItems;\n } catch (error) {\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n throw new Error(\"API Key inválida o expirada\");\n }\n if (status === 404) {\n throw new Error(\"Endpoint no encontrado\");\n }\n if (status && status >= 500) {\n throw new Error(\"Error del servidor CMS\");\n }\n throw new Error(`Error de conexión: ${error.message}`);\n }\n throw error;\n }\n }\n\n async getCategories() {\n try {\n const query = `\n query Query {\n GetEcommerceCategories {\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 });\n\n if (response.data.errors) {\n throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);\n }\n\n // Parseamos la respuesta para quitar el wrapper de data->GetEcommerceCategories\n return response.data.data.GetEcommerceCategories.docs;\n } catch (error) {\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n throw new Error(\"API Key inválida o expirada\");\n }\n if (status === 404) {\n throw new Error(\"Endpoint no encontrado\");\n }\n if (status && status >= 500) {\n throw new Error(\"Error del servidor CMS\");\n }\n throw new Error(`Error de conexión: ${error.message}`);\n }\n throw error;\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n","import { useState, useEffect, useCallback } from \"react\";\nimport { pakentoCMSAPI } from \"../services/api\";\nimport { UseCategoriesReturn, Category } from \"../types\";\n\nexport function useCategories(): UseCategoriesReturn {\n const [categories, setCategories] = useState<Category[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchCategories = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const response = await pakentoCMSAPI.getCategories();\n\n setCategories(response);\n } catch (err) {\n const errorMessage =\n err instanceof Error\n ? err.message\n : \"Error desconocido al cargar categorías\";\n setError(errorMessage);\n console.error(\"Error fetching categories:\", err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchCategories();\n }, [fetchCategories]);\n\n const refetch = useCallback(() => {\n fetchCategories();\n }, [fetchCategories]);\n\n return {\n categories,\n loading,\n error,\n refetch,\n };\n}\n"],"mappings":"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","names":["axios","import_react"]}
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\n // GraphQL Where conditions\n WhereEquals,\n ItemsWhere,\n CategoriesWhere,\n\n // API Parameters\n GetItemsParams,\n GetCategoriesParams,\n\n // Raw API Response types\n ItemsRawResponse,\n CategoriesRawResponse,\n\n // API Response types with error handling\n ItemsApiResponse,\n CategoriesApiResponse,\n} from \"./types\";\n","import axios, { AxiosInstance, AxiosError } from \"axios\";\nimport type {\n GetItemsParams,\n GetCategoriesParams,\n ItemsApiResponse,\n CategoriesApiResponse,\n ItemsRawResponse,\n CategoriesRawResponse,\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) {\n throw new Error(\n \"PAKENTO_CMS_BASE_URL is required in environment variables\"\n );\n }\n\n if (!this.apiKey) {\n throw new Error(\"PAKENTO_API_KEY is required in environment variables\");\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 try {\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 cover_image_url\n cover_image_thumbnail_url\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: params,\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 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\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":["axios"]}
package/dist/index.mjs CHANGED
@@ -1,6 +1,3 @@
1
- // src/hooks/useItems.ts
2
- import { useState, useEffect, useCallback } from "react";
3
-
4
1
  // src/services/api.ts
5
2
  import axios, { AxiosError } from "axios";
6
3
  var PakentoCMSAPI = class {
@@ -33,11 +30,31 @@ var PakentoCMSAPI = class {
33
30
  }
34
31
  );
35
32
  }
36
- async getItems(page = 1, limit = 10) {
33
+ async getItems(params = {}) {
37
34
  try {
38
35
  const query = `
39
- query Query($page: Int, $limit: Int) {
40
- GetEcommerceItems(page: $page, limit: $limit) {
36
+ query GetEcommerceItems(
37
+ $where: EcommerceItemsWhere
38
+ $onlyOffers: Boolean
39
+ $onlyEcommerce: Boolean
40
+ $limit: Int
41
+ $page: Int
42
+ $search: String
43
+ $sort: String
44
+ $minPrice: Float
45
+ $maxPrice: Float
46
+ ) {
47
+ GetEcommerceItems(
48
+ where: $where
49
+ onlyOffers: $onlyOffers
50
+ onlyEcommerce: $onlyEcommerce
51
+ limit: $limit
52
+ page: $page
53
+ search: $search
54
+ sort: $sort
55
+ minPrice: $minPrice
56
+ maxPrice: $maxPrice
57
+ ) {
41
58
  totalDocs
42
59
  totalPages
43
60
  prevPage
@@ -50,6 +67,7 @@ var PakentoCMSAPI = class {
50
67
  currency_prefix
51
68
  description
52
69
  price_text
70
+ price
53
71
  cover_image_url
54
72
  cover_image_thumbnail_url
55
73
  images {
@@ -63,34 +81,75 @@ var PakentoCMSAPI = class {
63
81
  `;
64
82
  const response = await this.client.post("/api/graphql", {
65
83
  query,
66
- variables: { page, limit }
84
+ variables: params
67
85
  });
68
86
  if (response.data.errors) {
69
- throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
87
+ const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
88
+ return {
89
+ data: null,
90
+ items: [],
91
+ totalDocs: 0,
92
+ totalPages: 0,
93
+ prevPage: null,
94
+ nextPage: null,
95
+ error: true,
96
+ errorMessage
97
+ };
70
98
  }
71
- return response.data.data.GetEcommerceItems;
99
+ const rawData = response.data.data.GetEcommerceItems;
100
+ return {
101
+ data: rawData,
102
+ items: rawData.docs,
103
+ totalDocs: rawData.totalDocs,
104
+ totalPages: rawData.totalPages,
105
+ prevPage: rawData.prevPage,
106
+ nextPage: rawData.nextPage,
107
+ error: false,
108
+ errorMessage: null
109
+ };
72
110
  } catch (error) {
111
+ let errorMessage = "Error desconocido";
73
112
  if (error instanceof AxiosError) {
74
113
  const status = error.response?.status;
75
114
  if (status === 401) {
76
- throw new Error("API Key inv\xE1lida o expirada");
115
+ errorMessage = "API Key inv\xE1lida o expirada";
116
+ } else if (status === 404) {
117
+ errorMessage = "Endpoint no encontrado";
118
+ } else if (status && status >= 500) {
119
+ errorMessage = "Error del servidor CMS";
120
+ } else {
121
+ errorMessage = `Error de conexi\xF3n: ${error.message}`;
77
122
  }
78
- if (status === 404) {
79
- throw new Error("Endpoint no encontrado");
80
- }
81
- if (status && status >= 500) {
82
- throw new Error("Error del servidor CMS");
83
- }
84
- throw new Error(`Error de conexi\xF3n: ${error.message}`);
123
+ } else if (error instanceof Error) {
124
+ errorMessage = error.message;
85
125
  }
86
- throw error;
126
+ return {
127
+ data: null,
128
+ items: [],
129
+ totalDocs: 0,
130
+ totalPages: 0,
131
+ prevPage: null,
132
+ nextPage: null,
133
+ error: true,
134
+ errorMessage
135
+ };
87
136
  }
88
137
  }
89
- async getCategories() {
138
+ async getCategories(params = {}) {
90
139
  try {
91
140
  const query = `
92
- query Query {
93
- GetEcommerceCategories {
141
+ query GetEcommerceCategories(
142
+ $where: EcommerceCategoriesWhere
143
+ $limit: Int
144
+ $page: Int
145
+ $sort: String
146
+ ) {
147
+ GetEcommerceCategories(
148
+ where: $where
149
+ limit: $limit
150
+ page: $page
151
+ sort: $sort
152
+ ) {
94
153
  docs {
95
154
  id
96
155
  name
@@ -100,114 +159,52 @@ var PakentoCMSAPI = class {
100
159
  }
101
160
  `;
102
161
  const response = await this.client.post("/api/graphql", {
103
- query
162
+ query,
163
+ variables: params
104
164
  });
105
165
  if (response.data.errors) {
106
- throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
166
+ const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
167
+ return {
168
+ data: null,
169
+ categories: [],
170
+ error: true,
171
+ errorMessage
172
+ };
107
173
  }
108
- return response.data.data.GetEcommerceCategories.docs;
174
+ const rawData = response.data.data.GetEcommerceCategories;
175
+ return {
176
+ data: rawData.docs,
177
+ categories: rawData.docs,
178
+ error: false,
179
+ errorMessage: null
180
+ };
109
181
  } catch (error) {
182
+ let errorMessage = "Error desconocido";
110
183
  if (error instanceof AxiosError) {
111
184
  const status = error.response?.status;
112
185
  if (status === 401) {
113
- throw new Error("API Key inv\xE1lida o expirada");
114
- }
115
- if (status === 404) {
116
- throw new Error("Endpoint no encontrado");
117
- }
118
- if (status && status >= 500) {
119
- throw new Error("Error del servidor CMS");
186
+ errorMessage = "API Key inv\xE1lida o expirada";
187
+ } else if (status === 404) {
188
+ errorMessage = "Endpoint no encontrado";
189
+ } else if (status && status >= 500) {
190
+ errorMessage = "Error del servidor CMS";
191
+ } else {
192
+ errorMessage = `Error de conexi\xF3n: ${error.message}`;
120
193
  }
121
- throw new Error(`Error de conexi\xF3n: ${error.message}`);
194
+ } else if (error instanceof Error) {
195
+ errorMessage = error.message;
122
196
  }
123
- throw error;
197
+ return {
198
+ data: null,
199
+ categories: [],
200
+ error: true,
201
+ errorMessage
202
+ };
124
203
  }
125
204
  }
126
205
  };
127
206
  var pakentoCMSAPI = new PakentoCMSAPI();
128
-
129
- // src/hooks/useItems.ts
130
- function useItems(options = {}) {
131
- const { page = 1, limit = 10 } = options;
132
- const [items, setItems] = useState([]);
133
- const [totalDocs, setTotalDocs] = useState(0);
134
- const [totalPages, setTotalPages] = useState(0);
135
- const [prevPage, setPrevPage] = useState(null);
136
- const [nextPage, setNextPage] = useState(null);
137
- const [loading, setLoading] = useState(true);
138
- const [error, setError] = useState(null);
139
- const fetchItems = useCallback(async () => {
140
- try {
141
- setLoading(true);
142
- setError(null);
143
- const response = await pakentoCMSAPI.getItems(page, limit);
144
- setItems(response.docs);
145
- setTotalDocs(response.totalDocs);
146
- setTotalPages(response.totalPages);
147
- setPrevPage(response.prevPage);
148
- setNextPage(response.nextPage);
149
- } catch (err) {
150
- const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar items";
151
- setError(errorMessage);
152
- console.error("Error fetching items:", err);
153
- } finally {
154
- setLoading(false);
155
- }
156
- }, [page, limit]);
157
- useEffect(() => {
158
- fetchItems();
159
- }, [fetchItems]);
160
- const refetch = useCallback(() => {
161
- fetchItems();
162
- }, [fetchItems]);
163
- return {
164
- items,
165
- totalDocs,
166
- totalPages,
167
- prevPage,
168
- nextPage,
169
- loading,
170
- error,
171
- refetch
172
- };
173
- }
174
-
175
- // src/hooks/useCategories.ts
176
- import { useState as useState2, useEffect as useEffect2, useCallback as useCallback2 } from "react";
177
- function useCategories() {
178
- const [categories, setCategories] = useState2([]);
179
- const [loading, setLoading] = useState2(true);
180
- const [error, setError] = useState2(null);
181
- const fetchCategories = useCallback2(async () => {
182
- try {
183
- setLoading(true);
184
- setError(null);
185
- const response = await pakentoCMSAPI.getCategories();
186
- setCategories(response);
187
- } catch (err) {
188
- const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar categor\xEDas";
189
- setError(errorMessage);
190
- console.error("Error fetching categories:", err);
191
- } finally {
192
- setLoading(false);
193
- }
194
- }, []);
195
- useEffect2(() => {
196
- fetchCategories();
197
- }, [fetchCategories]);
198
- const refetch = useCallback2(() => {
199
- fetchCategories();
200
- }, [fetchCategories]);
201
- return {
202
- categories,
203
- loading,
204
- error,
205
- refetch
206
- };
207
- }
208
207
  export {
209
- pakentoCMSAPI,
210
- useCategories,
211
- useItems
208
+ pakentoCMSAPI
212
209
  };
213
210
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useItems.ts","../src/services/api.ts","../src/hooks/useCategories.ts"],"sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { pakentoCMSAPI } from \"../services/api\";\nimport { UseItemsOptions, UseItemsReturn, Item } from \"../types\";\n\nexport function useItems(options: UseItemsOptions = {}): UseItemsReturn {\n const { page = 1, limit = 10 } = options;\n\n const [items, setItems] = useState<Item[]>([]);\n const [totalDocs, setTotalDocs] = useState(0);\n const [totalPages, setTotalPages] = useState(0);\n const [prevPage, setPrevPage] = useState<number | null>(null);\n const [nextPage, setNextPage] = useState<number | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchItems = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const response = await pakentoCMSAPI.getItems(page, limit);\n\n setItems(response.docs);\n setTotalDocs(response.totalDocs);\n setTotalPages(response.totalPages);\n setPrevPage(response.prevPage);\n setNextPage(response.nextPage);\n } catch (err) {\n const errorMessage =\n err instanceof Error\n ? err.message\n : \"Error desconocido al cargar items\";\n setError(errorMessage);\n console.error(\"Error fetching items:\", err);\n } finally {\n setLoading(false);\n }\n }, [page, limit]);\n\n useEffect(() => {\n fetchItems();\n }, [fetchItems]);\n\n const refetch = useCallback(() => {\n fetchItems();\n }, [fetchItems]);\n\n return {\n items,\n totalDocs,\n totalPages,\n prevPage,\n nextPage,\n loading,\n error,\n refetch,\n };\n}\n","import axios, { AxiosInstance, AxiosError } from \"axios\";\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) {\n throw new Error(\n \"PAKENTO_CMS_BASE_URL is required in environment variables\"\n );\n }\n\n if (!this.apiKey) {\n throw new Error(\"PAKENTO_API_KEY is required in environment variables\");\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(page: number = 1, limit: number = 10) {\n try {\n const query = `\n query Query($page: Int, $limit: Int) {\n GetEcommerceItems(page: $page, limit: $limit) {\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 cover_image_url\n cover_image_thumbnail_url\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: { page, limit },\n });\n\n if (response.data.errors) {\n throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);\n }\n\n // Parseamos la respuesta para quitar el wrapper de data->GetEcommerceItems\n return response.data.data.GetEcommerceItems;\n } catch (error) {\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n throw new Error(\"API Key inválida o expirada\");\n }\n if (status === 404) {\n throw new Error(\"Endpoint no encontrado\");\n }\n if (status && status >= 500) {\n throw new Error(\"Error del servidor CMS\");\n }\n throw new Error(`Error de conexión: ${error.message}`);\n }\n throw error;\n }\n }\n\n async getCategories() {\n try {\n const query = `\n query Query {\n GetEcommerceCategories {\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 });\n\n if (response.data.errors) {\n throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);\n }\n\n // Parseamos la respuesta para quitar el wrapper de data->GetEcommerceCategories\n return response.data.data.GetEcommerceCategories.docs;\n } catch (error) {\n if (error instanceof AxiosError) {\n const status = error.response?.status;\n if (status === 401) {\n throw new Error(\"API Key inválida o expirada\");\n }\n if (status === 404) {\n throw new Error(\"Endpoint no encontrado\");\n }\n if (status && status >= 500) {\n throw new Error(\"Error del servidor CMS\");\n }\n throw new Error(`Error de conexión: ${error.message}`);\n }\n throw error;\n }\n }\n}\n\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n","import { useState, useEffect, useCallback } from \"react\";\nimport { pakentoCMSAPI } from \"../services/api\";\nimport { UseCategoriesReturn, Category } from \"../types\";\n\nexport function useCategories(): UseCategoriesReturn {\n const [categories, setCategories] = useState<Category[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const fetchCategories = useCallback(async () => {\n try {\n setLoading(true);\n setError(null);\n\n const response = await pakentoCMSAPI.getCategories();\n\n setCategories(response);\n } catch (err) {\n const errorMessage =\n err instanceof Error\n ? err.message\n : \"Error desconocido al cargar categorías\";\n setError(errorMessage);\n console.error(\"Error fetching categories:\", err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchCategories();\n }, [fetchCategories]);\n\n const refetch = useCallback(() => {\n fetchCategories();\n }, [fetchCategories]);\n\n return {\n categories,\n loading,\n error,\n refetch,\n };\n}\n"],"mappings":"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","names":["useState","useEffect","useCallback","useState","useCallback","useEffect"]}
1
+ {"version":3,"sources":["../src/services/api.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosError } from \"axios\";\nimport type {\n GetItemsParams,\n GetCategoriesParams,\n ItemsApiResponse,\n CategoriesApiResponse,\n ItemsRawResponse,\n CategoriesRawResponse,\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) {\n throw new Error(\n \"PAKENTO_CMS_BASE_URL is required in environment variables\"\n );\n }\n\n if (!this.apiKey) {\n throw new Error(\"PAKENTO_API_KEY is required in environment variables\");\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 try {\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 cover_image_url\n cover_image_thumbnail_url\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: params,\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 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\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pakento/cms-sdk",
3
- "version": "1.2.5",
3
+ "version": "2.0.1",
4
4
  "description": "SDK para conectar tiendas en línea con Pakento CMS",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",