@pakento/cms-sdk 1.2.5 → 2.0.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 CHANGED
@@ -15,51 +15,75 @@ interface Item {
15
15
  cover_image_thumbnail_url: string;
16
16
  images: ItemImage[];
17
17
  }
18
- interface ItemsResponse {
18
+ interface Category {
19
+ id: number;
20
+ name: string;
21
+ image_url: string;
22
+ }
23
+ interface WhereEquals {
24
+ equals?: string;
25
+ }
26
+ interface ItemsWhere {
27
+ item_category_id?: WhereEquals;
28
+ item_super_category_id?: WhereEquals;
29
+ brand_id?: WhereEquals;
30
+ }
31
+ interface CategoriesWhere {
32
+ item_super_category_id?: WhereEquals;
33
+ brand_id?: WhereEquals;
34
+ }
35
+ interface GetItemsParams {
36
+ where?: ItemsWhere;
37
+ onlyOffers?: boolean;
38
+ onlyEcommerce?: boolean;
39
+ limit?: number;
40
+ page?: number;
41
+ search?: string;
42
+ sort?: string;
43
+ minPrice?: number;
44
+ maxPrice?: number;
45
+ }
46
+ interface GetCategoriesParams {
47
+ where?: CategoriesWhere;
48
+ limit?: number;
49
+ page?: number;
50
+ sort?: string;
51
+ }
52
+ interface ItemsRawResponse {
19
53
  totalDocs: number;
20
54
  totalPages: number;
21
55
  prevPage: number | null;
22
56
  nextPage: number | null;
23
57
  docs: Item[];
24
58
  }
25
- interface UseItemsOptions {
26
- page?: number;
27
- limit?: number;
59
+ interface CategoriesRawResponse {
60
+ docs: Category[];
28
61
  }
29
- interface UseItemsReturn {
62
+ interface ItemsApiResponse {
63
+ data: ItemsRawResponse | null;
30
64
  items: Item[];
31
65
  totalDocs: number;
32
66
  totalPages: number;
33
67
  prevPage: number | null;
34
68
  nextPage: number | null;
35
- loading: boolean;
36
- error: string | null;
37
- refetch: () => void;
69
+ error: boolean;
70
+ errorMessage: string | null;
38
71
  }
39
- interface Category {
40
- id: number;
41
- name: string;
42
- image_url: string;
43
- }
44
- interface UseCategoriesReturn {
72
+ interface CategoriesApiResponse {
73
+ data: Category[] | null;
45
74
  categories: Category[];
46
- loading: boolean;
47
- error: string | null;
48
- refetch: () => void;
75
+ error: boolean;
76
+ errorMessage: string | null;
49
77
  }
50
78
 
51
- declare function useItems(options?: UseItemsOptions): UseItemsReturn;
52
-
53
- declare function useCategories(): UseCategoriesReturn;
54
-
55
79
  declare class PakentoCMSAPI {
56
80
  private client;
57
81
  private baseURL;
58
82
  private apiKey;
59
83
  constructor();
60
- getItems(page?: number, limit?: number): Promise<any>;
61
- getCategories(): Promise<any>;
84
+ getItems(params?: GetItemsParams): Promise<ItemsApiResponse>;
85
+ getCategories(params?: GetCategoriesParams): Promise<CategoriesApiResponse>;
62
86
  }
63
87
  declare const pakentoCMSAPI: PakentoCMSAPI;
64
88
 
65
- export { type Category, type Item, type ItemImage, type ItemsResponse, type UseCategoriesReturn, type UseItemsOptions, type UseItemsReturn, pakentoCMSAPI, useCategories, useItems };
89
+ 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
@@ -15,51 +15,75 @@ interface Item {
15
15
  cover_image_thumbnail_url: string;
16
16
  images: ItemImage[];
17
17
  }
18
- interface ItemsResponse {
18
+ interface Category {
19
+ id: number;
20
+ name: string;
21
+ image_url: string;
22
+ }
23
+ interface WhereEquals {
24
+ equals?: string;
25
+ }
26
+ interface ItemsWhere {
27
+ item_category_id?: WhereEquals;
28
+ item_super_category_id?: WhereEquals;
29
+ brand_id?: WhereEquals;
30
+ }
31
+ interface CategoriesWhere {
32
+ item_super_category_id?: WhereEquals;
33
+ brand_id?: WhereEquals;
34
+ }
35
+ interface GetItemsParams {
36
+ where?: ItemsWhere;
37
+ onlyOffers?: boolean;
38
+ onlyEcommerce?: boolean;
39
+ limit?: number;
40
+ page?: number;
41
+ search?: string;
42
+ sort?: string;
43
+ minPrice?: number;
44
+ maxPrice?: number;
45
+ }
46
+ interface GetCategoriesParams {
47
+ where?: CategoriesWhere;
48
+ limit?: number;
49
+ page?: number;
50
+ sort?: string;
51
+ }
52
+ interface ItemsRawResponse {
19
53
  totalDocs: number;
20
54
  totalPages: number;
21
55
  prevPage: number | null;
22
56
  nextPage: number | null;
23
57
  docs: Item[];
24
58
  }
25
- interface UseItemsOptions {
26
- page?: number;
27
- limit?: number;
59
+ interface CategoriesRawResponse {
60
+ docs: Category[];
28
61
  }
29
- interface UseItemsReturn {
62
+ interface ItemsApiResponse {
63
+ data: ItemsRawResponse | null;
30
64
  items: Item[];
31
65
  totalDocs: number;
32
66
  totalPages: number;
33
67
  prevPage: number | null;
34
68
  nextPage: number | null;
35
- loading: boolean;
36
- error: string | null;
37
- refetch: () => void;
69
+ error: boolean;
70
+ errorMessage: string | null;
38
71
  }
39
- interface Category {
40
- id: number;
41
- name: string;
42
- image_url: string;
43
- }
44
- interface UseCategoriesReturn {
72
+ interface CategoriesApiResponse {
73
+ data: Category[] | null;
45
74
  categories: Category[];
46
- loading: boolean;
47
- error: string | null;
48
- refetch: () => void;
75
+ error: boolean;
76
+ errorMessage: string | null;
49
77
  }
50
78
 
51
- declare function useItems(options?: UseItemsOptions): UseItemsReturn;
52
-
53
- declare function useCategories(): UseCategoriesReturn;
54
-
55
79
  declare class PakentoCMSAPI {
56
80
  private client;
57
81
  private baseURL;
58
82
  private apiKey;
59
83
  constructor();
60
- getItems(page?: number, limit?: number): Promise<any>;
61
- getCategories(): Promise<any>;
84
+ getItems(params?: GetItemsParams): Promise<ItemsApiResponse>;
85
+ getCategories(params?: GetCategoriesParams): Promise<CategoriesApiResponse>;
62
86
  }
63
87
  declare const pakentoCMSAPI: PakentoCMSAPI;
64
88
 
65
- export { type Category, type Item, type ItemImage, type ItemsResponse, type UseCategoriesReturn, type UseItemsOptions, type UseItemsReturn, pakentoCMSAPI, useCategories, useItems };
89
+ 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
@@ -101,34 +116,75 @@ var PakentoCMSAPI = class {
101
116
  `;
102
117
  const response = await this.client.post("/api/graphql", {
103
118
  query,
104
- variables: { page, limit }
119
+ variables: params
105
120
  });
106
121
  if (response.data.errors) {
107
- throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
122
+ const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
123
+ return {
124
+ data: null,
125
+ items: [],
126
+ totalDocs: 0,
127
+ totalPages: 0,
128
+ prevPage: null,
129
+ nextPage: null,
130
+ error: true,
131
+ errorMessage
132
+ };
108
133
  }
109
- return response.data.data.GetEcommerceItems;
134
+ const rawData = response.data.data.GetEcommerceItems;
135
+ return {
136
+ data: rawData,
137
+ items: rawData.docs,
138
+ totalDocs: rawData.totalDocs,
139
+ totalPages: rawData.totalPages,
140
+ prevPage: rawData.prevPage,
141
+ nextPage: rawData.nextPage,
142
+ error: false,
143
+ errorMessage: null
144
+ };
110
145
  } catch (error) {
146
+ let errorMessage = "Error desconocido";
111
147
  if (error instanceof import_axios.AxiosError) {
112
148
  const status = error.response?.status;
113
149
  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");
150
+ errorMessage = "API Key inv\xE1lida o expirada";
151
+ } else if (status === 404) {
152
+ errorMessage = "Endpoint no encontrado";
153
+ } else if (status && status >= 500) {
154
+ errorMessage = "Error del servidor CMS";
155
+ } else {
156
+ errorMessage = `Error de conexi\xF3n: ${error.message}`;
121
157
  }
122
- throw new Error(`Error de conexi\xF3n: ${error.message}`);
158
+ } else if (error instanceof Error) {
159
+ errorMessage = error.message;
123
160
  }
124
- throw error;
161
+ return {
162
+ data: null,
163
+ items: [],
164
+ totalDocs: 0,
165
+ totalPages: 0,
166
+ prevPage: null,
167
+ nextPage: null,
168
+ error: true,
169
+ errorMessage
170
+ };
125
171
  }
126
172
  }
127
- async getCategories() {
173
+ async getCategories(params = {}) {
128
174
  try {
129
175
  const query = `
130
- query Query {
131
- GetEcommerceCategories {
176
+ query GetEcommerceCategories(
177
+ $where: EcommerceCategoriesWhere
178
+ $limit: Int
179
+ $page: Int
180
+ $sort: String
181
+ ) {
182
+ GetEcommerceCategories(
183
+ where: $where
184
+ limit: $limit
185
+ page: $page
186
+ sort: $sort
187
+ ) {
132
188
  docs {
133
189
  id
134
190
  name
@@ -138,115 +194,53 @@ var PakentoCMSAPI = class {
138
194
  }
139
195
  `;
140
196
  const response = await this.client.post("/api/graphql", {
141
- query
197
+ query,
198
+ variables: params
142
199
  });
143
200
  if (response.data.errors) {
144
- throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
201
+ const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
202
+ return {
203
+ data: null,
204
+ categories: [],
205
+ error: true,
206
+ errorMessage
207
+ };
145
208
  }
146
- return response.data.data.GetEcommerceCategories.docs;
209
+ const rawData = response.data.data.GetEcommerceCategories;
210
+ return {
211
+ data: rawData.docs,
212
+ categories: rawData.docs,
213
+ error: false,
214
+ errorMessage: null
215
+ };
147
216
  } catch (error) {
217
+ let errorMessage = "Error desconocido";
148
218
  if (error instanceof import_axios.AxiosError) {
149
219
  const status = error.response?.status;
150
220
  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");
221
+ errorMessage = "API Key inv\xE1lida o expirada";
222
+ } else if (status === 404) {
223
+ errorMessage = "Endpoint no encontrado";
224
+ } else if (status && status >= 500) {
225
+ errorMessage = "Error del servidor CMS";
226
+ } else {
227
+ errorMessage = `Error de conexi\xF3n: ${error.message}`;
158
228
  }
159
- throw new Error(`Error de conexi\xF3n: ${error.message}`);
229
+ } else if (error instanceof Error) {
230
+ errorMessage = error.message;
160
231
  }
161
- throw error;
232
+ return {
233
+ data: null,
234
+ categories: [],
235
+ error: true,
236
+ errorMessage
237
+ };
162
238
  }
163
239
  }
164
240
  };
165
241
  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
242
  // Annotate the CommonJS export names for ESM import in node:
247
243
  0 && (module.exports = {
248
- pakentoCMSAPI,
249
- useCategories,
250
- useItems
244
+ pakentoCMSAPI
251
245
  });
252
246
  //# 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 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
@@ -63,34 +80,75 @@ var PakentoCMSAPI = class {
63
80
  `;
64
81
  const response = await this.client.post("/api/graphql", {
65
82
  query,
66
- variables: { page, limit }
83
+ variables: params
67
84
  });
68
85
  if (response.data.errors) {
69
- throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
86
+ const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
87
+ return {
88
+ data: null,
89
+ items: [],
90
+ totalDocs: 0,
91
+ totalPages: 0,
92
+ prevPage: null,
93
+ nextPage: null,
94
+ error: true,
95
+ errorMessage
96
+ };
70
97
  }
71
- return response.data.data.GetEcommerceItems;
98
+ const rawData = response.data.data.GetEcommerceItems;
99
+ return {
100
+ data: rawData,
101
+ items: rawData.docs,
102
+ totalDocs: rawData.totalDocs,
103
+ totalPages: rawData.totalPages,
104
+ prevPage: rawData.prevPage,
105
+ nextPage: rawData.nextPage,
106
+ error: false,
107
+ errorMessage: null
108
+ };
72
109
  } catch (error) {
110
+ let errorMessage = "Error desconocido";
73
111
  if (error instanceof AxiosError) {
74
112
  const status = error.response?.status;
75
113
  if (status === 401) {
76
- throw new Error("API Key inv\xE1lida o expirada");
114
+ errorMessage = "API Key inv\xE1lida o expirada";
115
+ } else if (status === 404) {
116
+ errorMessage = "Endpoint no encontrado";
117
+ } else if (status && status >= 500) {
118
+ errorMessage = "Error del servidor CMS";
119
+ } else {
120
+ errorMessage = `Error de conexi\xF3n: ${error.message}`;
77
121
  }
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}`);
122
+ } else if (error instanceof Error) {
123
+ errorMessage = error.message;
85
124
  }
86
- throw error;
125
+ return {
126
+ data: null,
127
+ items: [],
128
+ totalDocs: 0,
129
+ totalPages: 0,
130
+ prevPage: null,
131
+ nextPage: null,
132
+ error: true,
133
+ errorMessage
134
+ };
87
135
  }
88
136
  }
89
- async getCategories() {
137
+ async getCategories(params = {}) {
90
138
  try {
91
139
  const query = `
92
- query Query {
93
- GetEcommerceCategories {
140
+ query GetEcommerceCategories(
141
+ $where: EcommerceCategoriesWhere
142
+ $limit: Int
143
+ $page: Int
144
+ $sort: String
145
+ ) {
146
+ GetEcommerceCategories(
147
+ where: $where
148
+ limit: $limit
149
+ page: $page
150
+ sort: $sort
151
+ ) {
94
152
  docs {
95
153
  id
96
154
  name
@@ -100,114 +158,52 @@ var PakentoCMSAPI = class {
100
158
  }
101
159
  `;
102
160
  const response = await this.client.post("/api/graphql", {
103
- query
161
+ query,
162
+ variables: params
104
163
  });
105
164
  if (response.data.errors) {
106
- throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
165
+ const errorMessage = `GraphQL Error: ${response.data.errors[0].message}`;
166
+ return {
167
+ data: null,
168
+ categories: [],
169
+ error: true,
170
+ errorMessage
171
+ };
107
172
  }
108
- return response.data.data.GetEcommerceCategories.docs;
173
+ const rawData = response.data.data.GetEcommerceCategories;
174
+ return {
175
+ data: rawData.docs,
176
+ categories: rawData.docs,
177
+ error: false,
178
+ errorMessage: null
179
+ };
109
180
  } catch (error) {
181
+ let errorMessage = "Error desconocido";
110
182
  if (error instanceof AxiosError) {
111
183
  const status = error.response?.status;
112
184
  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");
185
+ errorMessage = "API Key inv\xE1lida o expirada";
186
+ } else if (status === 404) {
187
+ errorMessage = "Endpoint no encontrado";
188
+ } else if (status && status >= 500) {
189
+ errorMessage = "Error del servidor CMS";
190
+ } else {
191
+ errorMessage = `Error de conexi\xF3n: ${error.message}`;
120
192
  }
121
- throw new Error(`Error de conexi\xF3n: ${error.message}`);
193
+ } else if (error instanceof Error) {
194
+ errorMessage = error.message;
122
195
  }
123
- throw error;
196
+ return {
197
+ data: null,
198
+ categories: [],
199
+ error: true,
200
+ errorMessage
201
+ };
124
202
  }
125
203
  }
126
204
  };
127
205
  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
206
  export {
209
- pakentoCMSAPI,
210
- useCategories,
211
- useItems
207
+ pakentoCMSAPI
212
208
  };
213
209
  //# 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 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.0",
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",