@pakento/cms-sdk 1.1.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/README.md +194 -0
- package/dist/index.d.mts +47 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +127 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# @pakento/cms-sdk
|
|
2
|
+
|
|
3
|
+
SDK para conectar tiendas en línea con Pakento CMS de forma rápida y sencilla.
|
|
4
|
+
|
|
5
|
+
## Instalación
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @pakento/cms-sdk
|
|
9
|
+
# o
|
|
10
|
+
bun add @pakento/cms-sdk
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Configuración
|
|
14
|
+
|
|
15
|
+
Agrega las siguientes variables de entorno a tu proyecto:
|
|
16
|
+
|
|
17
|
+
```env
|
|
18
|
+
PAKENTO_CMS_BASE_URL=https://cms.pakento.com
|
|
19
|
+
PAKENTO_API_KEY=tu-api-key-aqui
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Uso
|
|
23
|
+
|
|
24
|
+
### Hook useItems
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
import { useItems } from "@pakento/cms-sdk";
|
|
28
|
+
|
|
29
|
+
function ProductList() {
|
|
30
|
+
const { items, loading, error, totalDocs, refetch } = useItems({
|
|
31
|
+
page: 1,
|
|
32
|
+
limit: 10,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
if (loading) return <div>Cargando...</div>;
|
|
36
|
+
if (error) return <div>Error: {error}</div>;
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<div>
|
|
40
|
+
<h2>Productos ({totalDocs})</h2>
|
|
41
|
+
{items.map((item) => (
|
|
42
|
+
<div key={item.id}>
|
|
43
|
+
<h3>{item.name}</h3>
|
|
44
|
+
<p>Precio: {item.price_text}</p>
|
|
45
|
+
<img src={item.cover_image_thumbnail_url} alt={item.name} />
|
|
46
|
+
</div>
|
|
47
|
+
))}
|
|
48
|
+
<button onClick={refetch}>Recargar</button>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### API Service
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import { pakentoCMSAPI } from "@pakento/cms-sdk";
|
|
58
|
+
|
|
59
|
+
// Uso directo del servicio
|
|
60
|
+
async function getProducts() {
|
|
61
|
+
try {
|
|
62
|
+
const response = await pakentoCMSAPI.getItems(1, 20);
|
|
63
|
+
console.log(response.docs);
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error("Error:", error.message);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Tipos
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
import type { Item, ItemsResponse, UseItemsReturn } from "@pakento/cms-sdk";
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Desarrollo
|
|
77
|
+
|
|
78
|
+
### Configuración inicial
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Instalar dependencias
|
|
82
|
+
bun install
|
|
83
|
+
|
|
84
|
+
# Desarrollo con watch mode
|
|
85
|
+
bun run dev
|
|
86
|
+
|
|
87
|
+
# Build
|
|
88
|
+
bun run build
|
|
89
|
+
|
|
90
|
+
# Linting
|
|
91
|
+
bun run lint
|
|
92
|
+
bun run lint:fix
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Desarrollo local con link
|
|
96
|
+
|
|
97
|
+
Para probar el SDK en tu aplicación local:
|
|
98
|
+
|
|
99
|
+
1. En el directorio del SDK:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
bun run build
|
|
103
|
+
bun link
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
2. En tu aplicación NextJS:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
bun link @pakento/cms-sdk
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
3. Cuando hagas cambios en el SDK:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
bun run build
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Los cambios se reflejarán automáticamente en tu app.
|
|
119
|
+
|
|
120
|
+
### Para desconectar el link:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# En tu aplicación
|
|
124
|
+
bun unlink @pakento/cms-sdk
|
|
125
|
+
|
|
126
|
+
# Reinstalar desde NPM
|
|
127
|
+
bun add @pakento/cms-sdk
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Publicación
|
|
131
|
+
|
|
132
|
+
### Variables de entorno necesarias
|
|
133
|
+
|
|
134
|
+
```env
|
|
135
|
+
NPM_TOKEN=tu-npm-token-aqui
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Publicación automática
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
bun run publish-flow
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Este comando te preguntará qué tipo de versión quieres publicar y ejecutará:
|
|
145
|
+
|
|
146
|
+
- Lint
|
|
147
|
+
- Build
|
|
148
|
+
- Commit
|
|
149
|
+
- Push
|
|
150
|
+
- Publish
|
|
151
|
+
|
|
152
|
+
### Publicación manual
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Cambiar versión manualmente en package.json
|
|
156
|
+
# Luego:
|
|
157
|
+
bun run build
|
|
158
|
+
npm publish --access public
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Tipos de versión
|
|
162
|
+
|
|
163
|
+
- **patch**: 1.0.0 → 1.0.1 (bug fixes)
|
|
164
|
+
- **minor**: 1.0.0 → 1.1.0 (nuevas features)
|
|
165
|
+
- **major**: 1.0.0 → 2.0.0 (breaking changes)
|
|
166
|
+
- **custom**: Especificar versión manualmente
|
|
167
|
+
- **skip**: No cambiar versión
|
|
168
|
+
|
|
169
|
+
## Estructura del proyecto
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
src/
|
|
173
|
+
├── hooks/
|
|
174
|
+
│ └── useItems.ts # Hook principal para obtener items
|
|
175
|
+
├── services/
|
|
176
|
+
│ └── api.ts # Cliente API con Axios
|
|
177
|
+
├── types/
|
|
178
|
+
│ └── index.ts # Definiciones de tipos TypeScript
|
|
179
|
+
└── index.ts # Exportaciones principales
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Manejo de errores
|
|
183
|
+
|
|
184
|
+
El SDK incluye manejo de errores para:
|
|
185
|
+
|
|
186
|
+
- API Key inválida (401)
|
|
187
|
+
- Endpoint no encontrado (404)
|
|
188
|
+
- Errores del servidor (5xx)
|
|
189
|
+
- Errores de conexión
|
|
190
|
+
- Errores de GraphQL
|
|
191
|
+
|
|
192
|
+
## Licencia
|
|
193
|
+
|
|
194
|
+
MIT
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
interface ItemImage {
|
|
2
|
+
alt: string;
|
|
3
|
+
url: string;
|
|
4
|
+
thumbnail_url: string;
|
|
5
|
+
}
|
|
6
|
+
interface Item {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
price_text: string;
|
|
10
|
+
cover_image_url: string;
|
|
11
|
+
cover_image_thumbnail_url: string;
|
|
12
|
+
images: ItemImage[];
|
|
13
|
+
}
|
|
14
|
+
interface ItemsResponse {
|
|
15
|
+
totalDocs: number;
|
|
16
|
+
totalPages: number;
|
|
17
|
+
prevPage: number | null;
|
|
18
|
+
nextPage: number | null;
|
|
19
|
+
docs: Item[];
|
|
20
|
+
}
|
|
21
|
+
interface UseItemsOptions {
|
|
22
|
+
page?: number;
|
|
23
|
+
limit?: number;
|
|
24
|
+
}
|
|
25
|
+
interface UseItemsReturn {
|
|
26
|
+
items: Item[];
|
|
27
|
+
totalDocs: number;
|
|
28
|
+
totalPages: number;
|
|
29
|
+
prevPage: number | null;
|
|
30
|
+
nextPage: number | null;
|
|
31
|
+
loading: boolean;
|
|
32
|
+
error: string | null;
|
|
33
|
+
refetch: () => void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
declare function useItems(options?: UseItemsOptions): UseItemsReturn;
|
|
37
|
+
|
|
38
|
+
declare class PakentoCMSAPI {
|
|
39
|
+
private client;
|
|
40
|
+
private baseURL;
|
|
41
|
+
private apiKey;
|
|
42
|
+
constructor();
|
|
43
|
+
getItems(page?: number, limit?: number): Promise<any>;
|
|
44
|
+
}
|
|
45
|
+
declare const pakentoCMSAPI: PakentoCMSAPI;
|
|
46
|
+
|
|
47
|
+
export { type Item, type ItemImage, type ItemsResponse, type UseItemsOptions, type UseItemsReturn, pakentoCMSAPI, useItems };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
interface ItemImage {
|
|
2
|
+
alt: string;
|
|
3
|
+
url: string;
|
|
4
|
+
thumbnail_url: string;
|
|
5
|
+
}
|
|
6
|
+
interface Item {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
price_text: string;
|
|
10
|
+
cover_image_url: string;
|
|
11
|
+
cover_image_thumbnail_url: string;
|
|
12
|
+
images: ItemImage[];
|
|
13
|
+
}
|
|
14
|
+
interface ItemsResponse {
|
|
15
|
+
totalDocs: number;
|
|
16
|
+
totalPages: number;
|
|
17
|
+
prevPage: number | null;
|
|
18
|
+
nextPage: number | null;
|
|
19
|
+
docs: Item[];
|
|
20
|
+
}
|
|
21
|
+
interface UseItemsOptions {
|
|
22
|
+
page?: number;
|
|
23
|
+
limit?: number;
|
|
24
|
+
}
|
|
25
|
+
interface UseItemsReturn {
|
|
26
|
+
items: Item[];
|
|
27
|
+
totalDocs: number;
|
|
28
|
+
totalPages: number;
|
|
29
|
+
prevPage: number | null;
|
|
30
|
+
nextPage: number | null;
|
|
31
|
+
loading: boolean;
|
|
32
|
+
error: string | null;
|
|
33
|
+
refetch: () => void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
declare function useItems(options?: UseItemsOptions): UseItemsReturn;
|
|
37
|
+
|
|
38
|
+
declare class PakentoCMSAPI {
|
|
39
|
+
private client;
|
|
40
|
+
private baseURL;
|
|
41
|
+
private apiKey;
|
|
42
|
+
constructor();
|
|
43
|
+
getItems(page?: number, limit?: number): Promise<any>;
|
|
44
|
+
}
|
|
45
|
+
declare const pakentoCMSAPI: PakentoCMSAPI;
|
|
46
|
+
|
|
47
|
+
export { type Item, type ItemImage, type ItemsResponse, type UseItemsOptions, type UseItemsReturn, pakentoCMSAPI, useItems };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
pakentoCMSAPI: () => pakentoCMSAPI,
|
|
34
|
+
useItems: () => useItems
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(index_exports);
|
|
37
|
+
|
|
38
|
+
// src/hooks/useItems.ts
|
|
39
|
+
var import_react = require("react");
|
|
40
|
+
|
|
41
|
+
// src/services/api.ts
|
|
42
|
+
var import_axios = __toESM(require("axios"));
|
|
43
|
+
var PakentoCMSAPI = class {
|
|
44
|
+
constructor() {
|
|
45
|
+
this.baseURL = process.env.PAKENTO_CMS_BASE_URL || "";
|
|
46
|
+
this.apiKey = process.env.PAKENTO_API_KEY || "";
|
|
47
|
+
if (!this.baseURL) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
"PAKENTO_CMS_BASE_URL is required in environment variables"
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
if (!this.apiKey) {
|
|
53
|
+
throw new Error("PAKENTO_API_KEY is required in environment variables");
|
|
54
|
+
}
|
|
55
|
+
this.client = import_axios.default.create({
|
|
56
|
+
baseURL: this.baseURL,
|
|
57
|
+
headers: {
|
|
58
|
+
"Content-Type": "application/json",
|
|
59
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async getItems(page = 1, limit = 10) {
|
|
64
|
+
try {
|
|
65
|
+
const query = `
|
|
66
|
+
query Query($page: Int, $limit: Int) {
|
|
67
|
+
GetEcommerceItems(page: $page, limit: $limit) {
|
|
68
|
+
totalDocs
|
|
69
|
+
totalPages
|
|
70
|
+
prevPage
|
|
71
|
+
nextPage
|
|
72
|
+
docs {
|
|
73
|
+
id
|
|
74
|
+
name
|
|
75
|
+
price_text
|
|
76
|
+
cover_image_url
|
|
77
|
+
cover_image_thumbnail_url
|
|
78
|
+
images {
|
|
79
|
+
alt
|
|
80
|
+
url
|
|
81
|
+
thumbnail_url
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
`;
|
|
87
|
+
const response = await this.client.post("/api/graphql", {
|
|
88
|
+
query,
|
|
89
|
+
variables: { page, limit }
|
|
90
|
+
});
|
|
91
|
+
if (response.data.errors) {
|
|
92
|
+
throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
|
|
93
|
+
}
|
|
94
|
+
return response.data.data.GetEcommerceItems;
|
|
95
|
+
} catch (error) {
|
|
96
|
+
if (error instanceof import_axios.AxiosError) {
|
|
97
|
+
const status = error.response?.status;
|
|
98
|
+
if (status === 401) {
|
|
99
|
+
throw new Error("API Key inv\xE1lida o expirada");
|
|
100
|
+
}
|
|
101
|
+
if (status === 404) {
|
|
102
|
+
throw new Error("Endpoint no encontrado");
|
|
103
|
+
}
|
|
104
|
+
if (status && status >= 500) {
|
|
105
|
+
throw new Error("Error del servidor CMS");
|
|
106
|
+
}
|
|
107
|
+
throw new Error(`Error de conexi\xF3n: ${error.message}`);
|
|
108
|
+
}
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
var pakentoCMSAPI = new PakentoCMSAPI();
|
|
114
|
+
|
|
115
|
+
// src/hooks/useItems.ts
|
|
116
|
+
function useItems(options = {}) {
|
|
117
|
+
const { page = 1, limit = 10 } = options;
|
|
118
|
+
const [items, setItems] = (0, import_react.useState)([]);
|
|
119
|
+
const [totalDocs, setTotalDocs] = (0, import_react.useState)(0);
|
|
120
|
+
const [totalPages, setTotalPages] = (0, import_react.useState)(0);
|
|
121
|
+
const [prevPage, setPrevPage] = (0, import_react.useState)(null);
|
|
122
|
+
const [nextPage, setNextPage] = (0, import_react.useState)(null);
|
|
123
|
+
const [loading, setLoading] = (0, import_react.useState)(true);
|
|
124
|
+
const [error, setError] = (0, import_react.useState)(null);
|
|
125
|
+
const fetchItems = (0, import_react.useCallback)(async () => {
|
|
126
|
+
try {
|
|
127
|
+
setLoading(true);
|
|
128
|
+
setError(null);
|
|
129
|
+
const response = await pakentoCMSAPI.getItems(page, limit);
|
|
130
|
+
setItems(response.docs);
|
|
131
|
+
setTotalDocs(response.totalDocs);
|
|
132
|
+
setTotalPages(response.totalPages);
|
|
133
|
+
setPrevPage(response.prevPage);
|
|
134
|
+
setNextPage(response.nextPage);
|
|
135
|
+
} catch (err) {
|
|
136
|
+
const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar items";
|
|
137
|
+
setError(errorMessage);
|
|
138
|
+
console.error("Error fetching items:", err);
|
|
139
|
+
} finally {
|
|
140
|
+
setLoading(false);
|
|
141
|
+
}
|
|
142
|
+
}, [page, limit]);
|
|
143
|
+
(0, import_react.useEffect)(() => {
|
|
144
|
+
fetchItems();
|
|
145
|
+
}, [fetchItems]);
|
|
146
|
+
const refetch = (0, import_react.useCallback)(() => {
|
|
147
|
+
fetchItems();
|
|
148
|
+
}, [fetchItems]);
|
|
149
|
+
return {
|
|
150
|
+
items,
|
|
151
|
+
totalDocs,
|
|
152
|
+
totalPages,
|
|
153
|
+
prevPage,
|
|
154
|
+
nextPage,
|
|
155
|
+
loading,
|
|
156
|
+
error,
|
|
157
|
+
refetch
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
161
|
+
0 && (module.exports = {
|
|
162
|
+
pakentoCMSAPI,
|
|
163
|
+
useItems
|
|
164
|
+
});
|
|
165
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/hooks/useItems.ts","../src/services/api.ts"],"sourcesContent":["// Hooks\nexport { useItems } from \"./hooks/useItems\";\n\n// Services\nexport { pakentoCMSAPI } from \"./services/api\";\n\n// Types\nexport type {\n Item,\n ItemImage,\n ItemsResponse,\n UseItemsOptions,\n UseItemsReturn,\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: `Bearer ${this.apiKey}`,\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 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\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":["axios"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// src/hooks/useItems.ts
|
|
2
|
+
import { useState, useEffect, useCallback } from "react";
|
|
3
|
+
|
|
4
|
+
// src/services/api.ts
|
|
5
|
+
import axios, { AxiosError } from "axios";
|
|
6
|
+
var PakentoCMSAPI = class {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.baseURL = process.env.PAKENTO_CMS_BASE_URL || "";
|
|
9
|
+
this.apiKey = process.env.PAKENTO_API_KEY || "";
|
|
10
|
+
if (!this.baseURL) {
|
|
11
|
+
throw new Error(
|
|
12
|
+
"PAKENTO_CMS_BASE_URL is required in environment variables"
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
if (!this.apiKey) {
|
|
16
|
+
throw new Error("PAKENTO_API_KEY is required in environment variables");
|
|
17
|
+
}
|
|
18
|
+
this.client = axios.create({
|
|
19
|
+
baseURL: this.baseURL,
|
|
20
|
+
headers: {
|
|
21
|
+
"Content-Type": "application/json",
|
|
22
|
+
Authorization: `Bearer ${this.apiKey}`
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async getItems(page = 1, limit = 10) {
|
|
27
|
+
try {
|
|
28
|
+
const query = `
|
|
29
|
+
query Query($page: Int, $limit: Int) {
|
|
30
|
+
GetEcommerceItems(page: $page, limit: $limit) {
|
|
31
|
+
totalDocs
|
|
32
|
+
totalPages
|
|
33
|
+
prevPage
|
|
34
|
+
nextPage
|
|
35
|
+
docs {
|
|
36
|
+
id
|
|
37
|
+
name
|
|
38
|
+
price_text
|
|
39
|
+
cover_image_url
|
|
40
|
+
cover_image_thumbnail_url
|
|
41
|
+
images {
|
|
42
|
+
alt
|
|
43
|
+
url
|
|
44
|
+
thumbnail_url
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
const response = await this.client.post("/api/graphql", {
|
|
51
|
+
query,
|
|
52
|
+
variables: { page, limit }
|
|
53
|
+
});
|
|
54
|
+
if (response.data.errors) {
|
|
55
|
+
throw new Error(`GraphQL Error: ${response.data.errors[0].message}`);
|
|
56
|
+
}
|
|
57
|
+
return response.data.data.GetEcommerceItems;
|
|
58
|
+
} catch (error) {
|
|
59
|
+
if (error instanceof AxiosError) {
|
|
60
|
+
const status = error.response?.status;
|
|
61
|
+
if (status === 401) {
|
|
62
|
+
throw new Error("API Key inv\xE1lida o expirada");
|
|
63
|
+
}
|
|
64
|
+
if (status === 404) {
|
|
65
|
+
throw new Error("Endpoint no encontrado");
|
|
66
|
+
}
|
|
67
|
+
if (status && status >= 500) {
|
|
68
|
+
throw new Error("Error del servidor CMS");
|
|
69
|
+
}
|
|
70
|
+
throw new Error(`Error de conexi\xF3n: ${error.message}`);
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
var pakentoCMSAPI = new PakentoCMSAPI();
|
|
77
|
+
|
|
78
|
+
// src/hooks/useItems.ts
|
|
79
|
+
function useItems(options = {}) {
|
|
80
|
+
const { page = 1, limit = 10 } = options;
|
|
81
|
+
const [items, setItems] = useState([]);
|
|
82
|
+
const [totalDocs, setTotalDocs] = useState(0);
|
|
83
|
+
const [totalPages, setTotalPages] = useState(0);
|
|
84
|
+
const [prevPage, setPrevPage] = useState(null);
|
|
85
|
+
const [nextPage, setNextPage] = useState(null);
|
|
86
|
+
const [loading, setLoading] = useState(true);
|
|
87
|
+
const [error, setError] = useState(null);
|
|
88
|
+
const fetchItems = useCallback(async () => {
|
|
89
|
+
try {
|
|
90
|
+
setLoading(true);
|
|
91
|
+
setError(null);
|
|
92
|
+
const response = await pakentoCMSAPI.getItems(page, limit);
|
|
93
|
+
setItems(response.docs);
|
|
94
|
+
setTotalDocs(response.totalDocs);
|
|
95
|
+
setTotalPages(response.totalPages);
|
|
96
|
+
setPrevPage(response.prevPage);
|
|
97
|
+
setNextPage(response.nextPage);
|
|
98
|
+
} catch (err) {
|
|
99
|
+
const errorMessage = err instanceof Error ? err.message : "Error desconocido al cargar items";
|
|
100
|
+
setError(errorMessage);
|
|
101
|
+
console.error("Error fetching items:", err);
|
|
102
|
+
} finally {
|
|
103
|
+
setLoading(false);
|
|
104
|
+
}
|
|
105
|
+
}, [page, limit]);
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
fetchItems();
|
|
108
|
+
}, [fetchItems]);
|
|
109
|
+
const refetch = useCallback(() => {
|
|
110
|
+
fetchItems();
|
|
111
|
+
}, [fetchItems]);
|
|
112
|
+
return {
|
|
113
|
+
items,
|
|
114
|
+
totalDocs,
|
|
115
|
+
totalPages,
|
|
116
|
+
prevPage,
|
|
117
|
+
nextPage,
|
|
118
|
+
loading,
|
|
119
|
+
error,
|
|
120
|
+
refetch
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export {
|
|
124
|
+
pakentoCMSAPI,
|
|
125
|
+
useItems
|
|
126
|
+
};
|
|
127
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/useItems.ts","../src/services/api.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: `Bearer ${this.apiKey}`,\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 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\nexport const pakentoCMSAPI = new PakentoCMSAPI();\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pakento/cms-sdk",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "SDK para conectar tiendas en línea con Pakento CMS",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"dev": "tsup --watch",
|
|
12
|
+
"build": "tsup",
|
|
13
|
+
"lint": "eslint src --ext .ts,.tsx",
|
|
14
|
+
"lint:fix": "eslint src --ext .ts,.tsx --fix",
|
|
15
|
+
"type-check": "tsc --noEmit",
|
|
16
|
+
"prepublishOnly": "bun run build",
|
|
17
|
+
"publish": "bun run scripts/publish.ts",
|
|
18
|
+
"link-local": "bun link"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"pakento",
|
|
22
|
+
"cms",
|
|
23
|
+
"sdk",
|
|
24
|
+
"nextjs",
|
|
25
|
+
"ecommerce"
|
|
26
|
+
],
|
|
27
|
+
"author": "Pakento",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^24.1.0",
|
|
31
|
+
"@types/react": "^18.2.0",
|
|
32
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
33
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
34
|
+
"eslint": "^8.0.0",
|
|
35
|
+
"ts-node": "^10.9.2",
|
|
36
|
+
"tsup": "^8.0.0",
|
|
37
|
+
"typescript": "^5.0.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"axios": "^1.6.0",
|
|
41
|
+
"dotenv": "^17.2.1"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"react": ">=16.8.0"
|
|
45
|
+
},
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "https://github.com/pakento/cms-sdk.git"
|
|
49
|
+
}
|
|
50
|
+
}
|