fiscalapi 1.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/LICENSE.txt +373 -0
- package/README.md +388 -0
- package/dist/cjs/abstractions/api-key-service.interface.js +3 -0
- package/dist/cjs/abstractions/catalog-service.interface.js +3 -0
- package/dist/cjs/abstractions/fiscalapi-client.interface.js +3 -0
- package/dist/cjs/abstractions/fiscalapi-service.interface.js +3 -0
- package/dist/cjs/abstractions/invoice-service.interface.js +3 -0
- package/dist/cjs/abstractions/person-service.interface.js +3 -0
- package/dist/cjs/abstractions/product-service.interface.js +3 -0
- package/dist/cjs/abstractions/tax-file-service.interface.js +3 -0
- package/dist/cjs/common/api-response.js +3 -0
- package/dist/cjs/common/auditable-dto.js +11 -0
- package/dist/cjs/common/base-dto.js +11 -0
- package/dist/cjs/common/catalog-dto.js +8 -0
- package/dist/cjs/common/file-response.js +3 -0
- package/dist/cjs/common/fiscalapi-settings.js +3 -0
- package/dist/cjs/common/paged-list.js +18 -0
- package/dist/cjs/common/serializable-dto.js +37 -0
- package/dist/cjs/http/fiscalapi-http-client-factory.js +66 -0
- package/dist/cjs/http/fiscalapi-http-client.interface.js +3 -0
- package/dist/cjs/http/fiscalapi-http-client.js +306 -0
- package/dist/cjs/index.js +31 -0
- package/dist/cjs/models/api-key.js +3 -0
- package/dist/cjs/models/invoice.js +3 -0
- package/dist/cjs/models/person.js +3 -0
- package/dist/cjs/models/product.js +3 -0
- package/dist/cjs/models/tax-file.js +3 -0
- package/dist/cjs/sdk-constants.js +25 -0
- package/dist/cjs/services/api-key-service.js +19 -0
- package/dist/cjs/services/base-fiscalapi-service.js +170 -0
- package/dist/cjs/services/catalog-service.js +51 -0
- package/dist/cjs/services/fiscalapi-client.js +67 -0
- package/dist/cjs/services/invoice-service.js +116 -0
- package/dist/cjs/services/person-service.js +19 -0
- package/dist/cjs/services/product-service.js +19 -0
- package/dist/cjs/services/tax-file-service.js +43 -0
- package/dist/cjs/utils/date-utils.js +36 -0
- package/dist/cjs/utils/encoding-utils.js +21 -0
- package/dist/cjs/utils/validation-utils.js +40 -0
- package/dist/esm/abstractions/api-key-service.interface.js +2 -0
- package/dist/esm/abstractions/catalog-service.interface.js +2 -0
- package/dist/esm/abstractions/fiscalapi-client.interface.js +2 -0
- package/dist/esm/abstractions/fiscalapi-service.interface.js +2 -0
- package/dist/esm/abstractions/invoice-service.interface.js +2 -0
- package/dist/esm/abstractions/person-service.interface.js +2 -0
- package/dist/esm/abstractions/product-service.interface.js +2 -0
- package/dist/esm/abstractions/tax-file-service.interface.js +2 -0
- package/dist/esm/common/api-response.js +2 -0
- package/dist/esm/common/auditable-dto.js +7 -0
- package/dist/esm/common/base-dto.js +7 -0
- package/dist/esm/common/catalog-dto.js +4 -0
- package/dist/esm/common/file-response.js +2 -0
- package/dist/esm/common/fiscalapi-settings.js +2 -0
- package/dist/esm/common/paged-list.js +14 -0
- package/dist/esm/common/serializable-dto.js +33 -0
- package/dist/esm/http/fiscalapi-http-client-factory.js +59 -0
- package/dist/esm/http/fiscalapi-http-client.interface.js +2 -0
- package/dist/esm/http/fiscalapi-http-client.js +302 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/models/api-key.js +2 -0
- package/dist/esm/models/invoice.js +2 -0
- package/dist/esm/models/person.js +2 -0
- package/dist/esm/models/product.js +2 -0
- package/dist/esm/models/tax-file.js +2 -0
- package/dist/esm/sdk-constants.js +22 -0
- package/dist/esm/services/api-key-service.js +15 -0
- package/dist/esm/services/base-fiscalapi-service.js +166 -0
- package/dist/esm/services/catalog-service.js +47 -0
- package/dist/esm/services/fiscalapi-client.js +63 -0
- package/dist/esm/services/invoice-service.js +112 -0
- package/dist/esm/services/person-service.js +15 -0
- package/dist/esm/services/product-service.js +15 -0
- package/dist/esm/services/tax-file-service.js +39 -0
- package/dist/esm/utils/date-utils.js +31 -0
- package/dist/esm/utils/encoding-utils.js +17 -0
- package/dist/esm/utils/validation-utils.js +34 -0
- package/dist/types/abstractions/api-key-service.interface.d.ts +7 -0
- package/dist/types/abstractions/catalog-service.interface.d.ts +27 -0
- package/dist/types/abstractions/fiscalapi-client.interface.d.ts +35 -0
- package/dist/types/abstractions/fiscalapi-service.interface.d.ts +94 -0
- package/dist/types/abstractions/invoice-service.interface.d.ts +39 -0
- package/dist/types/abstractions/person-service.interface.d.ts +7 -0
- package/dist/types/abstractions/product-service.interface.d.ts +7 -0
- package/dist/types/abstractions/tax-file-service.interface.d.ts +22 -0
- package/dist/types/common/api-response.d.ts +56 -0
- package/dist/types/common/auditable-dto.d.ts +9 -0
- package/dist/types/common/base-dto.d.ts +7 -0
- package/dist/types/common/catalog-dto.d.ts +8 -0
- package/dist/types/common/file-response.d.ts +18 -0
- package/dist/types/common/fiscalapi-settings.d.ts +30 -0
- package/dist/types/common/paged-list.d.ts +39 -0
- package/dist/types/common/serializable-dto.d.ts +10 -0
- package/dist/types/http/fiscalapi-http-client-factory.d.ts +22 -0
- package/dist/types/http/fiscalapi-http-client.d.ts +113 -0
- package/dist/types/http/fiscalapi-http-client.interface.d.ts +80 -0
- package/dist/types/index.d.ts +25 -0
- package/dist/types/models/api-key.d.ts +21 -0
- package/dist/types/models/invoice.d.ts +337 -0
- package/dist/types/models/person.d.ts +42 -0
- package/dist/types/models/product.d.ts +49 -0
- package/dist/types/models/tax-file.d.ts +23 -0
- package/dist/types/sdk-constants.d.ts +21 -0
- package/dist/types/services/api-key-service.d.ts +15 -0
- package/dist/types/services/base-fiscalapi-service.d.ts +72 -0
- package/dist/types/services/catalog-service.d.ts +34 -0
- package/dist/types/services/fiscalapi-client.d.ts +49 -0
- package/dist/types/services/invoice-service.d.ts +54 -0
- package/dist/types/services/person-service.d.ts +15 -0
- package/dist/types/services/product-service.d.ts +15 -0
- package/dist/types/services/tax-file-service.d.ts +30 -0
- package/dist/types/utils/date-utils.d.ts +17 -0
- package/dist/types/utils/encoding-utils.d.ts +12 -0
- package/dist/types/utils/validation-utils.d.ts +25 -0
- package/fiscalapi.ico +0 -0
- package/fiscalapi.png +0 -0
- package/package.json +64 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { IFiscalapiService } from './fiscalapi-service.interface';
|
|
2
|
+
import { CatalogDto } from '../common/catalog-dto';
|
|
3
|
+
import { ApiResponse } from '../common/api-response';
|
|
4
|
+
import { PagedList } from '../common/paged-list';
|
|
5
|
+
/**
|
|
6
|
+
* Interfaz del servicio de catálogos
|
|
7
|
+
*/
|
|
8
|
+
export interface ICatalogService extends IFiscalapiService<CatalogDto> {
|
|
9
|
+
/**
|
|
10
|
+
* /api/v4/catalogs/<catalogName>/key/<id>
|
|
11
|
+
* Recupera un registro específico por catalogName e id
|
|
12
|
+
*
|
|
13
|
+
* @param catalogName - Nombre del catálogo
|
|
14
|
+
* @param id - Identificador del registro
|
|
15
|
+
*/
|
|
16
|
+
getRecordById(catalogName: string, id: string): Promise<ApiResponse<CatalogDto>>;
|
|
17
|
+
/**
|
|
18
|
+
* GET /api/v4/catalogs/{catalogName}/{searchText}
|
|
19
|
+
* Busca registros en un catálogo específico
|
|
20
|
+
*
|
|
21
|
+
* @param catalogName - Nombre del catálogo
|
|
22
|
+
* @param searchText - Texto de búsqueda
|
|
23
|
+
* @param pageNumber - Número de página (opcional, default: 1)
|
|
24
|
+
* @param pageSize - Tamaño de página (opcional, default: 50)
|
|
25
|
+
*/
|
|
26
|
+
searchCatalog(catalogName: string, searchText: string, pageNumber?: number, pageSize?: number): Promise<ApiResponse<PagedList<CatalogDto>>>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { IApiKeyService } from './api-key-service.interface';
|
|
2
|
+
import { ICatalogService } from './catalog-service.interface';
|
|
3
|
+
import { IInvoiceService } from './invoice-service.interface';
|
|
4
|
+
import { IPersonService } from './person-service.interface';
|
|
5
|
+
import { IProductService } from './product-service.interface';
|
|
6
|
+
import { ITaxFileService } from './tax-file-service.interface';
|
|
7
|
+
/**
|
|
8
|
+
* Interfaz principal del cliente para FiscalAPI
|
|
9
|
+
*/
|
|
10
|
+
export interface IFiscalapiClient {
|
|
11
|
+
/**
|
|
12
|
+
* Servicio de facturas
|
|
13
|
+
*/
|
|
14
|
+
invoices: IInvoiceService;
|
|
15
|
+
/**
|
|
16
|
+
* Servicio de productos
|
|
17
|
+
*/
|
|
18
|
+
products: IProductService;
|
|
19
|
+
/**
|
|
20
|
+
* Servicio de personas
|
|
21
|
+
*/
|
|
22
|
+
persons: IPersonService;
|
|
23
|
+
/**
|
|
24
|
+
* Servicio de claves de API
|
|
25
|
+
*/
|
|
26
|
+
apiKeys: IApiKeyService;
|
|
27
|
+
/**
|
|
28
|
+
* Servicio de catálogos
|
|
29
|
+
*/
|
|
30
|
+
catalogs: ICatalogService;
|
|
31
|
+
/**
|
|
32
|
+
* Servicio de archivos fiscales
|
|
33
|
+
*/
|
|
34
|
+
taxFiles: ITaxFileService;
|
|
35
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { ApiResponse } from '../common/api-response';
|
|
3
|
+
import { BaseDto } from '../common/base-dto';
|
|
4
|
+
import { PagedList } from '../common/paged-list';
|
|
5
|
+
import { HttpMethod } from '../http/fiscalapi-http-client.interface';
|
|
6
|
+
/**
|
|
7
|
+
* Opciones para ejecutar una operación
|
|
8
|
+
* @template TData - Tipo de datos de entrada
|
|
9
|
+
*/
|
|
10
|
+
export type OperationOptions<TData = any> = {
|
|
11
|
+
/** Ruta o nombre de la operación */
|
|
12
|
+
path: string;
|
|
13
|
+
/** Datos para la operación (opcional) */
|
|
14
|
+
data?: TData;
|
|
15
|
+
/** Parámetros de consulta (opcional) */
|
|
16
|
+
queryParams?: Record<string, string>;
|
|
17
|
+
/** Método HTTP a utilizar */
|
|
18
|
+
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
19
|
+
/** Configuración adicional para Axios (opcional) */
|
|
20
|
+
config?: AxiosRequestConfig;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Opciones para ejecutar una petición personalizada
|
|
24
|
+
* @template TData - Tipo de datos de entrada
|
|
25
|
+
*/
|
|
26
|
+
export type RequestOptions<TData = any> = {
|
|
27
|
+
/** Método HTTP a utilizar */
|
|
28
|
+
method: HttpMethod;
|
|
29
|
+
/** Ruta adicional (opcional) */
|
|
30
|
+
path?: string;
|
|
31
|
+
/** ID del recurso (opcional) */
|
|
32
|
+
id?: string;
|
|
33
|
+
/** Datos para la petición (opcional) */
|
|
34
|
+
data?: TData;
|
|
35
|
+
/** Parámetros de consulta (opcional) */
|
|
36
|
+
queryParams?: Record<string, string>;
|
|
37
|
+
/** Configuración adicional para Axios (opcional) */
|
|
38
|
+
config?: AxiosRequestConfig;
|
|
39
|
+
/** Transformador personalizado para la respuesta (opcional) */
|
|
40
|
+
responseTransformer?: <T>(response: any) => T;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Interfaz base para todos los servicios de FiscalAPI
|
|
44
|
+
* @template T - Tipo de DTO que maneja el servicio
|
|
45
|
+
*/
|
|
46
|
+
export interface IFiscalapiService<T extends BaseDto> {
|
|
47
|
+
/**
|
|
48
|
+
* Recupera una lista paginada de recursos
|
|
49
|
+
* @param {number} pageNumber - Número de página (base 1)
|
|
50
|
+
* @param {number} pageSize - Número de elementos por página
|
|
51
|
+
* @returns {Promise<ApiResponse<PagedList<T>>>} Lista paginada de recursos
|
|
52
|
+
*/
|
|
53
|
+
getList(pageNumber: number, pageSize: number): Promise<ApiResponse<PagedList<T>>>;
|
|
54
|
+
/**
|
|
55
|
+
* Recupera un recurso específico por ID
|
|
56
|
+
* @param {string} id - ID del recurso
|
|
57
|
+
* @param {boolean} [details=false] - Si es verdadero, incluye objetos relacionados
|
|
58
|
+
* @returns {Promise<ApiResponse<T>>} Recurso solicitado
|
|
59
|
+
*/
|
|
60
|
+
getById(id: string, details?: boolean): Promise<ApiResponse<T>>;
|
|
61
|
+
/**
|
|
62
|
+
* Crea un nuevo recurso
|
|
63
|
+
* @param {T} model - Datos del recurso
|
|
64
|
+
* @returns {Promise<ApiResponse<T>>} Recurso creado
|
|
65
|
+
*/
|
|
66
|
+
create(model: T): Promise<ApiResponse<T>>;
|
|
67
|
+
/**
|
|
68
|
+
* Actualiza un recurso existente
|
|
69
|
+
* @param {string} id - ID del recurso
|
|
70
|
+
* @param {T} model - Datos actualizados del recurso
|
|
71
|
+
* @returns {Promise<ApiResponse<T>>} Recurso actualizado
|
|
72
|
+
*/
|
|
73
|
+
update(model: T): Promise<ApiResponse<T>>;
|
|
74
|
+
/**
|
|
75
|
+
* Elimina un recurso
|
|
76
|
+
* @param {string} id - ID del recurso
|
|
77
|
+
* @returns {Promise<ApiResponse<boolean>>} Resultado de la operación
|
|
78
|
+
*/
|
|
79
|
+
delete(id: string): Promise<ApiResponse<boolean>>;
|
|
80
|
+
/**
|
|
81
|
+
* Realiza una búsqueda en el recurso
|
|
82
|
+
* @param {Record<string, string>} searchParams - Parámetros de búsqueda
|
|
83
|
+
* @returns {Promise<ApiResponse<PagedList<T>>>} Resultados de la búsqueda
|
|
84
|
+
*/
|
|
85
|
+
search(searchParams: Record<string, string>): Promise<ApiResponse<PagedList<T>>>;
|
|
86
|
+
/**
|
|
87
|
+
* Ejecuta una petición HTTP personalizada con máxima flexibilidad
|
|
88
|
+
* @param {RequestOptions<TData>} options - Opciones para la petición
|
|
89
|
+
* @returns {Promise<ApiResponse<TResult>>} Resultado de la petición
|
|
90
|
+
* @template TResult - Tipo de resultado esperado
|
|
91
|
+
* @template TData - Tipo de datos de entrada
|
|
92
|
+
*/
|
|
93
|
+
executeRequest<TResult, TData = any>(options: RequestOptions<TData>): Promise<ApiResponse<TResult>>;
|
|
94
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ApiResponse } from '../common/api-response';
|
|
2
|
+
import { FileResponse } from '../common/file-response';
|
|
3
|
+
import { Invoice, CancelInvoiceRequest, CancelInvoiceResponse, CreatePdfRequest, SendInvoiceRequest, InvoiceStatusRequest, InvoiceStatusResponse } from '../models/invoice';
|
|
4
|
+
import { IFiscalapiService } from './fiscalapi-service.interface';
|
|
5
|
+
/**
|
|
6
|
+
* Interfaz para el servicio de facturas
|
|
7
|
+
*/
|
|
8
|
+
export interface IInvoiceService extends IFiscalapiService<Invoice> {
|
|
9
|
+
/**
|
|
10
|
+
* Cancela una factura
|
|
11
|
+
* @param {CancelInvoiceRequest} request - Solicitud para cancelar factura
|
|
12
|
+
* @returns {Promise<ApiResponse<CancelInvoiceResponse>>} Respuesta de la cancelación
|
|
13
|
+
*/
|
|
14
|
+
cancel(request: CancelInvoiceRequest): Promise<ApiResponse<CancelInvoiceResponse>>;
|
|
15
|
+
/**
|
|
16
|
+
* Obtiene el PDF de una factura
|
|
17
|
+
* @param {CreatePdfRequest} request - Solicitud para crear PDF
|
|
18
|
+
* @returns {Promise<ApiResponse<FileResponse>>} Respuesta con el archivo PDF
|
|
19
|
+
*/
|
|
20
|
+
getPdf(request: CreatePdfRequest): Promise<ApiResponse<FileResponse>>;
|
|
21
|
+
/**
|
|
22
|
+
* Obtiene el XML de una factura
|
|
23
|
+
* @param {string} id - ID de la factura
|
|
24
|
+
* @returns {Promise<ApiResponse<FileResponse>>} Respuesta con el archivo XML
|
|
25
|
+
*/
|
|
26
|
+
getXml(id: string): Promise<ApiResponse<FileResponse>>;
|
|
27
|
+
/**
|
|
28
|
+
* Envía una factura por correo electrónico
|
|
29
|
+
* @param {SendInvoiceRequest} request - Solicitud para enviar factura
|
|
30
|
+
* @returns {Promise<ApiResponse<boolean>>} Resultado de la operación
|
|
31
|
+
*/
|
|
32
|
+
send(request: SendInvoiceRequest): Promise<ApiResponse<boolean>>;
|
|
33
|
+
/**
|
|
34
|
+
* Obtiene el estado de una factura
|
|
35
|
+
* @param {InvoiceStatusRequest} request - Solicitud para consultar estado
|
|
36
|
+
* @returns {Promise<ApiResponse<InvoiceStatusResponse>>} Respuesta con el estado de la factura
|
|
37
|
+
*/
|
|
38
|
+
getStatus(request: InvoiceStatusRequest): Promise<ApiResponse<InvoiceStatusResponse>>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { IFiscalapiService } from './fiscalapi-service.interface';
|
|
2
|
+
import { TaxFile } from '../models/tax-file';
|
|
3
|
+
import { ApiResponse } from '../common/api-response';
|
|
4
|
+
/**
|
|
5
|
+
* Interfaz del servicio de archivos fiscales
|
|
6
|
+
*/
|
|
7
|
+
export interface ITaxFileService extends IFiscalapiService<TaxFile> {
|
|
8
|
+
/**
|
|
9
|
+
* Obtiene el último par de ids de certificados válidos y vigente de una persona. Es decir sus certificados por defecto (ids)
|
|
10
|
+
*
|
|
11
|
+
* @param personId - Id de la persona propietaria de los certificados
|
|
12
|
+
* @returns Promise que resuelve en una respuesta API con una lista de un par de certificados, pero sin contenido, solo sus Ids
|
|
13
|
+
*/
|
|
14
|
+
getDefaultReferences(personId: string): Promise<ApiResponse<TaxFile[]>>;
|
|
15
|
+
/**
|
|
16
|
+
* Obtiene el último par de certificados válidos y vigente de una persona. Es decir sus certificados por defecto
|
|
17
|
+
*
|
|
18
|
+
* @param personId - Id de la persona dueña de los certificados
|
|
19
|
+
* @returns Promise que resuelve en una respuesta API con una lista de un par de certificados
|
|
20
|
+
*/
|
|
21
|
+
getDefaultValues(personId: string): Promise<ApiResponse<TaxFile[]>>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encapsulador genérico para respuestas de la API
|
|
3
|
+
* @template T
|
|
4
|
+
*/
|
|
5
|
+
export interface ApiResponse<T> {
|
|
6
|
+
/**
|
|
7
|
+
* Datos de la respuesta
|
|
8
|
+
*/
|
|
9
|
+
data: T;
|
|
10
|
+
/**
|
|
11
|
+
* Indica si la petición fue exitosa
|
|
12
|
+
*/
|
|
13
|
+
succeeded: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Mensaje de error o de éxito
|
|
16
|
+
*/
|
|
17
|
+
message: string;
|
|
18
|
+
/**
|
|
19
|
+
* Detalles adicionales del error
|
|
20
|
+
*/
|
|
21
|
+
details: string;
|
|
22
|
+
/**
|
|
23
|
+
* Código de estado HTTP
|
|
24
|
+
*/
|
|
25
|
+
httpStatusCode: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Detalles de errores de validación
|
|
29
|
+
*/
|
|
30
|
+
export interface ValidationFailure {
|
|
31
|
+
/**
|
|
32
|
+
* Nombre de la propiedad que falló en la validación
|
|
33
|
+
*/
|
|
34
|
+
propertyName: string;
|
|
35
|
+
/**
|
|
36
|
+
* Mensaje de error
|
|
37
|
+
*/
|
|
38
|
+
errorMessage: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Interfaz para los detalles de problemas según RFC 9457
|
|
42
|
+
*/
|
|
43
|
+
export interface ProblemDetails {
|
|
44
|
+
/** URI de referencia que identifica el tipo de problema */
|
|
45
|
+
type: string;
|
|
46
|
+
/** Resumen breve y legible del tipo de problema */
|
|
47
|
+
title: string;
|
|
48
|
+
/** Código de estado HTTP */
|
|
49
|
+
status: number;
|
|
50
|
+
/** Explicación específica y legible de esta ocurrencia del problema */
|
|
51
|
+
detail: string;
|
|
52
|
+
/** URI de referencia que identifica la ocurrencia específica del problema */
|
|
53
|
+
instance?: string;
|
|
54
|
+
/** Propiedades adicionales extendidas */
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DateTime } from 'luxon';
|
|
2
|
+
import { SerializableDto } from './serializable-dto';
|
|
3
|
+
/**
|
|
4
|
+
* Clase que extiende SerializableDto agregando propiedades de auditoría
|
|
5
|
+
*/
|
|
6
|
+
export declare class AuditableDto extends SerializableDto {
|
|
7
|
+
createdAt?: DateTime;
|
|
8
|
+
updatedAt?: DateTime;
|
|
9
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File response from the API.
|
|
3
|
+
*Por ejemplo: Modelo de respuesta de generación de PDF o recuperación de XML
|
|
4
|
+
*/
|
|
5
|
+
export interface FileResponse {
|
|
6
|
+
/**
|
|
7
|
+
* File content as a base64 string
|
|
8
|
+
*/
|
|
9
|
+
base64Content: string;
|
|
10
|
+
/**
|
|
11
|
+
* File name
|
|
12
|
+
*/
|
|
13
|
+
fileName: string;
|
|
14
|
+
/**
|
|
15
|
+
* Content type
|
|
16
|
+
*/
|
|
17
|
+
contentType: string;
|
|
18
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuración para el cliente de FiscalAPI
|
|
3
|
+
*/
|
|
4
|
+
export interface FiscalapiSettings {
|
|
5
|
+
/**
|
|
6
|
+
* URL base de la API de FiscalAPI
|
|
7
|
+
*/
|
|
8
|
+
apiUrl: string;
|
|
9
|
+
/**
|
|
10
|
+
* Clave de API para autenticación
|
|
11
|
+
*/
|
|
12
|
+
apiKey: string;
|
|
13
|
+
/**
|
|
14
|
+
* Versión de la API (predeterminado: 'v4')
|
|
15
|
+
*/
|
|
16
|
+
apiVersion?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Identificador del inquilino
|
|
19
|
+
*/
|
|
20
|
+
tenant: string;
|
|
21
|
+
/**
|
|
22
|
+
* Zona horaria para la API (predeterminado: 'America/Mexico_City')
|
|
23
|
+
*/
|
|
24
|
+
timeZone?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Indica si de debe ejecutar en modo depuración, esto es, si se deben mostrar los logs de la API y deshabilitar la validación del certificado SSL
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
debug?: boolean;
|
|
30
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lista paginada genérica para respuestas de la API
|
|
3
|
+
* @template T
|
|
4
|
+
*/
|
|
5
|
+
export declare class PagedList<T> {
|
|
6
|
+
/**
|
|
7
|
+
* Número de página actual
|
|
8
|
+
*/
|
|
9
|
+
pageNumber: number;
|
|
10
|
+
/**
|
|
11
|
+
* Tamaño de página
|
|
12
|
+
*/
|
|
13
|
+
pageSize: number;
|
|
14
|
+
/**
|
|
15
|
+
* Número total de elementos en todas las páginas
|
|
16
|
+
*/
|
|
17
|
+
totalItems: number;
|
|
18
|
+
/**
|
|
19
|
+
* Número total de páginas
|
|
20
|
+
*/
|
|
21
|
+
totalPages: number;
|
|
22
|
+
/**
|
|
23
|
+
* Indica si hay una página anterior
|
|
24
|
+
*/
|
|
25
|
+
hasPreviousPage: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Indica si hay una página siguiente
|
|
28
|
+
*/
|
|
29
|
+
hasNextPage: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Elementos en la página actual
|
|
32
|
+
*/
|
|
33
|
+
items: T[];
|
|
34
|
+
/**
|
|
35
|
+
* Comprueba si la colección está vacía
|
|
36
|
+
* @returns {boolean} Verdadero si la colección está vacía
|
|
37
|
+
*/
|
|
38
|
+
isEmpty(): boolean;
|
|
39
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clase base que proporciona funcionalidad de serialización para modelos de datos
|
|
3
|
+
*/
|
|
4
|
+
export declare class SerializableDto {
|
|
5
|
+
/**
|
|
6
|
+
* Convierte la instancia a una representación JSON en forma de string
|
|
7
|
+
* @returns {string} Representación JSON del objeto
|
|
8
|
+
*/
|
|
9
|
+
toString(): string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FiscalapiSettings } from '../common/fiscalapi-settings';
|
|
2
|
+
import { IFiscalapiHttpClient } from './fiscalapi-http-client.interface';
|
|
3
|
+
/**
|
|
4
|
+
* Fábrica para crear clientes HTTP para FiscalAPI
|
|
5
|
+
*/
|
|
6
|
+
export declare class FiscalapiHttpClientFactory {
|
|
7
|
+
private static clients;
|
|
8
|
+
/**
|
|
9
|
+
* Crea un nuevo cliente HTTP para FiscalAPI
|
|
10
|
+
* @param {FiscalapiSettings} settings - Configuración de FiscalAPI
|
|
11
|
+
* @returns {IFiscalapiHttpClient} Instancia del cliente HTTP
|
|
12
|
+
* @throws {Error} Si la configuración es nula o indefinida
|
|
13
|
+
*/
|
|
14
|
+
static create(settings: FiscalapiSettings): IFiscalapiHttpClient;
|
|
15
|
+
/**
|
|
16
|
+
* Crea una instancia de Axios configurada según los ajustes de FiscalAPI
|
|
17
|
+
* @param {FiscalapiSettings} settings - Configuración de FiscalAPI
|
|
18
|
+
* @returns {AxiosInstance} Instancia de Axios configurada
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
private static createAxiosInstance;
|
|
22
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { AxiosInstance, AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { FiscalapiSettings } from './../common/fiscalapi-settings';
|
|
3
|
+
import { IFiscalapiHttpClient, HttpMethod, RequestOptions } from './fiscalapi-http-client.interface';
|
|
4
|
+
import { ApiResponse } from '../common/api-response';
|
|
5
|
+
/**
|
|
6
|
+
* Cliente HTTP para FiscalAPI
|
|
7
|
+
*/
|
|
8
|
+
export declare class FiscalapiHttpClient implements IFiscalapiHttpClient {
|
|
9
|
+
private readonly httpClient;
|
|
10
|
+
private readonly settings;
|
|
11
|
+
/**
|
|
12
|
+
* Crea una nueva instancia del cliente HTTP para FiscalAPI
|
|
13
|
+
* @param {AxiosInstance} httpClient - Instancia de Axios configurada
|
|
14
|
+
* @param {FiscalapiSettings} settings - Configuración para el cliente FiscalAPI
|
|
15
|
+
*/
|
|
16
|
+
constructor(httpClient: AxiosInstance, settings: FiscalapiSettings);
|
|
17
|
+
/**
|
|
18
|
+
* Configura los interceptores para logear las peticiones y respuestas en modo debug
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
private setupDebugInterceptors;
|
|
22
|
+
/**
|
|
23
|
+
* Logea los detalles de una petición HTTP cuando el modo debug está activado
|
|
24
|
+
* @param {InternalAxiosRequestConfig} config - Configuración de la petición
|
|
25
|
+
* @private
|
|
26
|
+
*/
|
|
27
|
+
private logRequest;
|
|
28
|
+
/**
|
|
29
|
+
* Logea los detalles de una respuesta HTTP cuando el modo debug está activado
|
|
30
|
+
* @param {AxiosResponse} response - Respuesta de la petición
|
|
31
|
+
* @private
|
|
32
|
+
*/
|
|
33
|
+
private logResponse;
|
|
34
|
+
/**
|
|
35
|
+
* Ejecuta una petición HTTP genérica con control completo sobre los parámetros
|
|
36
|
+
* @param {HttpMethod} method - Método HTTP a utilizar
|
|
37
|
+
* @param {string} endpoint - Punto final de la API
|
|
38
|
+
* @param {RequestOptions<TData>} options - Opciones de la petición
|
|
39
|
+
* @returns {Promise<ApiResponse<TResult>>} Respuesta de la API
|
|
40
|
+
* @template TResult - Tipo de datos esperado en la respuesta
|
|
41
|
+
* @template TData - Tipo de datos a enviar en la petición (opcional)
|
|
42
|
+
*/
|
|
43
|
+
executeRequest<TResult, TData = any>(method: HttpMethod, endpoint: string, options?: RequestOptions<TData>): Promise<ApiResponse<TResult>>;
|
|
44
|
+
/**
|
|
45
|
+
* Procesa la respuesta HTTP y la convierte en ApiResponse
|
|
46
|
+
* @param {AxiosResponse} response - Respuesta HTTP original
|
|
47
|
+
* @returns {ApiResponse<T>} Respuesta procesada
|
|
48
|
+
* @template T - Tipo de datos esperado
|
|
49
|
+
* @private
|
|
50
|
+
*/
|
|
51
|
+
private processResponse;
|
|
52
|
+
/**
|
|
53
|
+
* Maneja los errores de las peticiones HTTP
|
|
54
|
+
* @param {unknown} error - Error capturado
|
|
55
|
+
* @returns {ApiResponse<T>} Respuesta de error estandarizada
|
|
56
|
+
* @template T - Tipo de datos esperado
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
private handleRequestError;
|
|
60
|
+
/**
|
|
61
|
+
* Realiza una petición GET a la API
|
|
62
|
+
* @param {string} endpoint - Punto final de la API
|
|
63
|
+
* @param {AxiosRequestConfig} [config] - Configuración adicional para la petición
|
|
64
|
+
* @returns {Promise<ApiResponse<T>>} Respuesta de la API
|
|
65
|
+
* @template T - Tipo de datos esperado en la respuesta
|
|
66
|
+
*/
|
|
67
|
+
getAsync<T>(endpoint: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
68
|
+
/**
|
|
69
|
+
* Realiza una petición GET por ID a la API
|
|
70
|
+
* @param {string} endpoint - Punto final de la API con ID
|
|
71
|
+
* @param {AxiosRequestConfig} [config] - Configuración adicional para la petición
|
|
72
|
+
* @returns {Promise<ApiResponse<T>>} Respuesta de la API
|
|
73
|
+
* @template T - Tipo de datos esperado en la respuesta
|
|
74
|
+
*/
|
|
75
|
+
getByIdAsync<T>(endpoint: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
76
|
+
/**
|
|
77
|
+
* Realiza una petición POST a la API
|
|
78
|
+
* @param {string} endpoint - Punto final de la API
|
|
79
|
+
* @param {TData} data - Datos a enviar en la petición
|
|
80
|
+
* @param {AxiosRequestConfig} [config] - Configuración adicional para la petición
|
|
81
|
+
* @returns {Promise<ApiResponse<T>>} Respuesta de la API
|
|
82
|
+
* @template T - Tipo de datos esperado en la respuesta
|
|
83
|
+
* @template TData - Tipo de datos a enviar en la petición
|
|
84
|
+
*/
|
|
85
|
+
postAsync<T, TData = Record<string, unknown>>(endpoint: string, data: TData, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
86
|
+
/**
|
|
87
|
+
* Realiza una petición PUT a la API
|
|
88
|
+
* @param {string} endpoint - Punto final de la API
|
|
89
|
+
* @param {TData} data - Datos a enviar en la petición
|
|
90
|
+
* @param {AxiosRequestConfig} [config] - Configuración adicional para la petición
|
|
91
|
+
* @returns {Promise<ApiResponse<T>>} Respuesta de la API
|
|
92
|
+
* @template T - Tipo de datos esperado en la respuesta
|
|
93
|
+
* @template TData - Tipo de datos a enviar en la petición
|
|
94
|
+
*/
|
|
95
|
+
putAsync<T, TData = Record<string, unknown>>(endpoint: string, data: TData, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
96
|
+
/**
|
|
97
|
+
* Realiza una petición DELETE a la API
|
|
98
|
+
* @param {string} endpoint - Punto final de la API
|
|
99
|
+
* @param {AxiosRequestConfig} [config] - Configuración adicional para la petición
|
|
100
|
+
* @returns {Promise<ApiResponse<boolean>>} Respuesta de la API
|
|
101
|
+
*/
|
|
102
|
+
deleteAsync(endpoint: string, config?: AxiosRequestConfig): Promise<ApiResponse<boolean>>;
|
|
103
|
+
/**
|
|
104
|
+
* Realiza una petición PATCH a la API
|
|
105
|
+
* @param {string} endpoint - Punto final de la API
|
|
106
|
+
* @param {TData} data - Datos a enviar en la petición
|
|
107
|
+
* @param {AxiosRequestConfig} [config] - Configuración adicional para la petición
|
|
108
|
+
* @returns {Promise<ApiResponse<T>>} Respuesta de la API
|
|
109
|
+
* @template T - Tipo de datos esperado en la respuesta
|
|
110
|
+
* @template TData - Tipo de datos a enviar en la petición
|
|
111
|
+
*/
|
|
112
|
+
patchAsync<T, TData = Record<string, unknown>>(endpoint: string, data: TData, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
113
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { ApiResponse } from '../common/api-response';
|
|
3
|
+
/**
|
|
4
|
+
* Métodos HTTP soportados
|
|
5
|
+
*/
|
|
6
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
|
|
7
|
+
/**
|
|
8
|
+
* Opciones para una petición HTTP genérica
|
|
9
|
+
* @template TData - Tipo de datos de entrada (opcional)
|
|
10
|
+
*/
|
|
11
|
+
export interface RequestOptions<TData = any> {
|
|
12
|
+
/** Datos para enviar en el cuerpo de la petición (opcional) */
|
|
13
|
+
data?: TData;
|
|
14
|
+
/** Parámetros de consulta (query string) (opcional) */
|
|
15
|
+
queryParams?: Record<string, string>;
|
|
16
|
+
/** Configuración adicional para Axios (opcional) */
|
|
17
|
+
config?: AxiosRequestConfig;
|
|
18
|
+
/** Transformador de respuesta personalizado (opcional) */
|
|
19
|
+
responseTransformer?: <T>(response: any) => T;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Interfaz para el cliente HTTP de FiscalAPI
|
|
23
|
+
*/
|
|
24
|
+
export interface IFiscalapiHttpClient {
|
|
25
|
+
/**
|
|
26
|
+
* Realiza una petición GET a la API
|
|
27
|
+
* @param endpoint - Punto final de la API
|
|
28
|
+
* @param config - Configuración adicional para la petición
|
|
29
|
+
* @returns Respuesta de la API
|
|
30
|
+
*/
|
|
31
|
+
getAsync<T>(endpoint: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
32
|
+
/**
|
|
33
|
+
* Realiza una petición GET por ID a la API
|
|
34
|
+
* @param endpoint - Punto final de la API con ID
|
|
35
|
+
* @param config - Configuración adicional para la petición
|
|
36
|
+
* @returns Respuesta de la API
|
|
37
|
+
*/
|
|
38
|
+
getByIdAsync<T>(endpoint: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
39
|
+
/**
|
|
40
|
+
* Realiza una petición POST a la API
|
|
41
|
+
* @param endpoint - Punto final de la API
|
|
42
|
+
* @param data - Datos a enviar en la petición
|
|
43
|
+
* @param config - Configuración adicional para la petición
|
|
44
|
+
* @returns Respuesta de la API
|
|
45
|
+
*/
|
|
46
|
+
postAsync<T, TData = Record<string, unknown>>(endpoint: string, data: TData, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
47
|
+
/**
|
|
48
|
+
* Realiza una petición PUT a la API
|
|
49
|
+
* @param endpoint - Punto final de la API
|
|
50
|
+
* @param data - Datos a enviar en la petición
|
|
51
|
+
* @param config - Configuración adicional para la petición
|
|
52
|
+
* @returns Respuesta de la API
|
|
53
|
+
*/
|
|
54
|
+
putAsync<T, TData = Record<string, unknown>>(endpoint: string, data: TData, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
55
|
+
/**
|
|
56
|
+
* Realiza una petición DELETE a la API
|
|
57
|
+
* @param endpoint - Punto final de la API
|
|
58
|
+
* @param config - Configuración adicional para la petición
|
|
59
|
+
* @returns Respuesta de la API
|
|
60
|
+
*/
|
|
61
|
+
deleteAsync(endpoint: string, config?: AxiosRequestConfig): Promise<ApiResponse<boolean>>;
|
|
62
|
+
/**
|
|
63
|
+
* Realiza una petición PATCH a la API
|
|
64
|
+
* @param endpoint - Punto final de la API
|
|
65
|
+
* @param data - Datos a enviar en la petición
|
|
66
|
+
* @param config - Configuración adicional para la petición
|
|
67
|
+
* @returns Respuesta de la API
|
|
68
|
+
*/
|
|
69
|
+
patchAsync<T, TData = Record<string, unknown>>(endpoint: string, data: TData, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
70
|
+
/**
|
|
71
|
+
* Ejecuta una petición HTTP genérica con control completo sobre los parámetros
|
|
72
|
+
* @param method - Método HTTP a utilizar
|
|
73
|
+
* @param endpoint - Punto final de la API
|
|
74
|
+
* @param options - Opciones de la petición
|
|
75
|
+
* @returns Respuesta de la API
|
|
76
|
+
* @template TResult - Tipo de datos esperado en la respuesta
|
|
77
|
+
* @template TData - Tipo de datos a enviar en la petición (opcional)
|
|
78
|
+
*/
|
|
79
|
+
executeRequest<TResult, TData = any>(method: HttpMethod, endpoint: string, options?: RequestOptions<TData>): Promise<ApiResponse<TResult>>;
|
|
80
|
+
}
|