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.
Files changed (116) hide show
  1. package/LICENSE.txt +373 -0
  2. package/README.md +388 -0
  3. package/dist/cjs/abstractions/api-key-service.interface.js +3 -0
  4. package/dist/cjs/abstractions/catalog-service.interface.js +3 -0
  5. package/dist/cjs/abstractions/fiscalapi-client.interface.js +3 -0
  6. package/dist/cjs/abstractions/fiscalapi-service.interface.js +3 -0
  7. package/dist/cjs/abstractions/invoice-service.interface.js +3 -0
  8. package/dist/cjs/abstractions/person-service.interface.js +3 -0
  9. package/dist/cjs/abstractions/product-service.interface.js +3 -0
  10. package/dist/cjs/abstractions/tax-file-service.interface.js +3 -0
  11. package/dist/cjs/common/api-response.js +3 -0
  12. package/dist/cjs/common/auditable-dto.js +11 -0
  13. package/dist/cjs/common/base-dto.js +11 -0
  14. package/dist/cjs/common/catalog-dto.js +8 -0
  15. package/dist/cjs/common/file-response.js +3 -0
  16. package/dist/cjs/common/fiscalapi-settings.js +3 -0
  17. package/dist/cjs/common/paged-list.js +18 -0
  18. package/dist/cjs/common/serializable-dto.js +37 -0
  19. package/dist/cjs/http/fiscalapi-http-client-factory.js +66 -0
  20. package/dist/cjs/http/fiscalapi-http-client.interface.js +3 -0
  21. package/dist/cjs/http/fiscalapi-http-client.js +306 -0
  22. package/dist/cjs/index.js +31 -0
  23. package/dist/cjs/models/api-key.js +3 -0
  24. package/dist/cjs/models/invoice.js +3 -0
  25. package/dist/cjs/models/person.js +3 -0
  26. package/dist/cjs/models/product.js +3 -0
  27. package/dist/cjs/models/tax-file.js +3 -0
  28. package/dist/cjs/sdk-constants.js +25 -0
  29. package/dist/cjs/services/api-key-service.js +19 -0
  30. package/dist/cjs/services/base-fiscalapi-service.js +170 -0
  31. package/dist/cjs/services/catalog-service.js +51 -0
  32. package/dist/cjs/services/fiscalapi-client.js +67 -0
  33. package/dist/cjs/services/invoice-service.js +116 -0
  34. package/dist/cjs/services/person-service.js +19 -0
  35. package/dist/cjs/services/product-service.js +19 -0
  36. package/dist/cjs/services/tax-file-service.js +43 -0
  37. package/dist/cjs/utils/date-utils.js +36 -0
  38. package/dist/cjs/utils/encoding-utils.js +21 -0
  39. package/dist/cjs/utils/validation-utils.js +40 -0
  40. package/dist/esm/abstractions/api-key-service.interface.js +2 -0
  41. package/dist/esm/abstractions/catalog-service.interface.js +2 -0
  42. package/dist/esm/abstractions/fiscalapi-client.interface.js +2 -0
  43. package/dist/esm/abstractions/fiscalapi-service.interface.js +2 -0
  44. package/dist/esm/abstractions/invoice-service.interface.js +2 -0
  45. package/dist/esm/abstractions/person-service.interface.js +2 -0
  46. package/dist/esm/abstractions/product-service.interface.js +2 -0
  47. package/dist/esm/abstractions/tax-file-service.interface.js +2 -0
  48. package/dist/esm/common/api-response.js +2 -0
  49. package/dist/esm/common/auditable-dto.js +7 -0
  50. package/dist/esm/common/base-dto.js +7 -0
  51. package/dist/esm/common/catalog-dto.js +4 -0
  52. package/dist/esm/common/file-response.js +2 -0
  53. package/dist/esm/common/fiscalapi-settings.js +2 -0
  54. package/dist/esm/common/paged-list.js +14 -0
  55. package/dist/esm/common/serializable-dto.js +33 -0
  56. package/dist/esm/http/fiscalapi-http-client-factory.js +59 -0
  57. package/dist/esm/http/fiscalapi-http-client.interface.js +2 -0
  58. package/dist/esm/http/fiscalapi-http-client.js +302 -0
  59. package/dist/esm/index.js +13 -0
  60. package/dist/esm/models/api-key.js +2 -0
  61. package/dist/esm/models/invoice.js +2 -0
  62. package/dist/esm/models/person.js +2 -0
  63. package/dist/esm/models/product.js +2 -0
  64. package/dist/esm/models/tax-file.js +2 -0
  65. package/dist/esm/sdk-constants.js +22 -0
  66. package/dist/esm/services/api-key-service.js +15 -0
  67. package/dist/esm/services/base-fiscalapi-service.js +166 -0
  68. package/dist/esm/services/catalog-service.js +47 -0
  69. package/dist/esm/services/fiscalapi-client.js +63 -0
  70. package/dist/esm/services/invoice-service.js +112 -0
  71. package/dist/esm/services/person-service.js +15 -0
  72. package/dist/esm/services/product-service.js +15 -0
  73. package/dist/esm/services/tax-file-service.js +39 -0
  74. package/dist/esm/utils/date-utils.js +31 -0
  75. package/dist/esm/utils/encoding-utils.js +17 -0
  76. package/dist/esm/utils/validation-utils.js +34 -0
  77. package/dist/types/abstractions/api-key-service.interface.d.ts +7 -0
  78. package/dist/types/abstractions/catalog-service.interface.d.ts +27 -0
  79. package/dist/types/abstractions/fiscalapi-client.interface.d.ts +35 -0
  80. package/dist/types/abstractions/fiscalapi-service.interface.d.ts +94 -0
  81. package/dist/types/abstractions/invoice-service.interface.d.ts +39 -0
  82. package/dist/types/abstractions/person-service.interface.d.ts +7 -0
  83. package/dist/types/abstractions/product-service.interface.d.ts +7 -0
  84. package/dist/types/abstractions/tax-file-service.interface.d.ts +22 -0
  85. package/dist/types/common/api-response.d.ts +56 -0
  86. package/dist/types/common/auditable-dto.d.ts +9 -0
  87. package/dist/types/common/base-dto.d.ts +7 -0
  88. package/dist/types/common/catalog-dto.d.ts +8 -0
  89. package/dist/types/common/file-response.d.ts +18 -0
  90. package/dist/types/common/fiscalapi-settings.d.ts +30 -0
  91. package/dist/types/common/paged-list.d.ts +39 -0
  92. package/dist/types/common/serializable-dto.d.ts +10 -0
  93. package/dist/types/http/fiscalapi-http-client-factory.d.ts +22 -0
  94. package/dist/types/http/fiscalapi-http-client.d.ts +113 -0
  95. package/dist/types/http/fiscalapi-http-client.interface.d.ts +80 -0
  96. package/dist/types/index.d.ts +25 -0
  97. package/dist/types/models/api-key.d.ts +21 -0
  98. package/dist/types/models/invoice.d.ts +337 -0
  99. package/dist/types/models/person.d.ts +42 -0
  100. package/dist/types/models/product.d.ts +49 -0
  101. package/dist/types/models/tax-file.d.ts +23 -0
  102. package/dist/types/sdk-constants.d.ts +21 -0
  103. package/dist/types/services/api-key-service.d.ts +15 -0
  104. package/dist/types/services/base-fiscalapi-service.d.ts +72 -0
  105. package/dist/types/services/catalog-service.d.ts +34 -0
  106. package/dist/types/services/fiscalapi-client.d.ts +49 -0
  107. package/dist/types/services/invoice-service.d.ts +54 -0
  108. package/dist/types/services/person-service.d.ts +15 -0
  109. package/dist/types/services/product-service.d.ts +15 -0
  110. package/dist/types/services/tax-file-service.d.ts +30 -0
  111. package/dist/types/utils/date-utils.d.ts +17 -0
  112. package/dist/types/utils/encoding-utils.d.ts +12 -0
  113. package/dist/types/utils/validation-utils.d.ts +25 -0
  114. package/fiscalapi.ico +0 -0
  115. package/fiscalapi.png +0 -0
  116. 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,7 @@
1
+ import { IFiscalapiService } from './fiscalapi-service.interface';
2
+ import { Person } from '../models/person';
3
+ /**
4
+ * Interfaz del servicio de personas
5
+ */
6
+ export interface IPersonService extends IFiscalapiService<Person> {
7
+ }
@@ -0,0 +1,7 @@
1
+ import { IFiscalapiService } from './fiscalapi-service.interface';
2
+ import { Product } from '../models/product';
3
+ /**
4
+ * Interfaz del servicio de productos
5
+ */
6
+ export interface IProductService extends IFiscalapiService<Product> {
7
+ }
@@ -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,7 @@
1
+ import { AuditableDto } from "./auditable-dto";
2
+ /**
3
+ * Clase base para todos los DTOs de la API
4
+ */
5
+ export declare class BaseDto extends AuditableDto {
6
+ id?: string;
7
+ }
@@ -0,0 +1,8 @@
1
+ import { BaseDto } from "./base-dto";
2
+ export declare class CatalogDto extends BaseDto {
3
+ /**
4
+ * Catalog description
5
+ * @example "Catalogo de formas de pago"
6
+ */
7
+ description?: string;
8
+ }
@@ -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
+ }