@pimia/sdk 0.6.0 → 0.8.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 +50 -0
- package/dist/api.d.ts +3319 -756
- package/dist/api.js +4 -0
- package/dist/client.d.ts +137 -52
- package/dist/client.js +160 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -92,6 +92,56 @@ if (meta.idempotentReplay) {
|
|
|
92
92
|
}
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
+
## Subir un fichero
|
|
96
|
+
|
|
97
|
+
Diez operaciones de la API son `multipart/form-data`: el justificante de un
|
|
98
|
+
gasto, el documento de una factura recibida, un extracto bancario, el membrete
|
|
99
|
+
de una plantilla, el certificado de firma, el avatar. Para ésas pásale un
|
|
100
|
+
`FormData` y el cliente lo manda tal cual — **no le pongas `content-type`**: el
|
|
101
|
+
runtime escribe el suyo con el `boundary` que separa las partes, y una cabecera
|
|
102
|
+
puesta a mano se lo quita (el cliente lo rechaza antes de salir, con un aviso
|
|
103
|
+
que lo explica).
|
|
104
|
+
|
|
105
|
+
`toFormData` hace las tres conversiones que el servidor espera y que `FormData`
|
|
106
|
+
sola no hace: los booleanos como `1`/`0`, los objetos y arrays como cadena
|
|
107
|
+
JSON, y los `null` omitidos en vez de mandados como la cadena `"null"`.
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
import { toFormData } from '@pimia/sdk'
|
|
111
|
+
|
|
112
|
+
// Un gasto con su justificante en PDF, de una sola llamada.
|
|
113
|
+
await client.post('/expenses', toFormData({
|
|
114
|
+
expense_date: '2026-08-24',
|
|
115
|
+
expense_category_id: 3,
|
|
116
|
+
amount: 12100, // céntimos, como todo importe
|
|
117
|
+
attachment_receipt: ficheroDelInput, // un File del navegador
|
|
118
|
+
customFields: [{ id: 3, value: 'REF-42' }],
|
|
119
|
+
}))
|
|
120
|
+
|
|
121
|
+
// El documento de una factura recibida, con un Blob al que le das nombre.
|
|
122
|
+
const form = new FormData()
|
|
123
|
+
form.append('document', blobPdf, 'factura-proveedor.pdf')
|
|
124
|
+
await client.post(`/received-invoices/${id}/upload/document`, form)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Los campos de fichero salen tipados como `Blob` en `@pimia/sdk/api`, así que un
|
|
128
|
+
`File` del navegador encaja sin ceremonia.
|
|
129
|
+
|
|
130
|
+
⚠️ Lo que **no** puedes pasar es un `ReadableStream`: el cliente reintenta ante
|
|
131
|
+
un 401 y ante un 429, y un cuerpo de un solo uso no se puede volver a mandar.
|
|
132
|
+
|
|
133
|
+
## Descargar un fichero
|
|
134
|
+
|
|
135
|
+
Para las dos operaciones que devuelven un binario, `download`:
|
|
136
|
+
|
|
137
|
+
```ts
|
|
138
|
+
const pdf = await client.download(`/received-invoices/${id}/show/document`)
|
|
139
|
+
const url = URL.createObjectURL(pdf)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
⚠️ **No uses `get()` para esto.** Lee la respuesta con `response.text()`, así
|
|
143
|
+
que un PDF llega entero de tamaño y no se abre — sin ningún error que mirar.
|
|
144
|
+
|
|
95
145
|
## Recibir webhooks
|
|
96
146
|
|
|
97
147
|
`verifyWebhook` comprueba la firma `PIMIA-WEBHOOK-v1` y te devuelve el evento
|