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,166 @@
1
+ /**
2
+ * Implementación base de un servicio de FiscalAPI
3
+ * @template T - Tipo de DTO que maneja el servicio
4
+ */
5
+ export class BaseFiscalapiService {
6
+ /**
7
+ * Crea una nueva instancia del servicio base
8
+ * @param {IFiscalapiHttpClient} httpClient - Cliente HTTP
9
+ * @param {string} resourcePath - Ruta del recurso en la API
10
+ * @param {string} apiVersion - Versión de la API
11
+ */
12
+ constructor(httpClient, resourcePath, apiVersion) {
13
+ if (!httpClient)
14
+ throw new Error('httpClient no puede ser nulo o indefinido');
15
+ if (!resourcePath)
16
+ throw new Error('resourcePath no puede ser nulo o indefinido');
17
+ if (!apiVersion)
18
+ throw new Error('apiVersion no puede ser nulo o indefinido');
19
+ this.httpClient = httpClient;
20
+ this.resourcePath = resourcePath;
21
+ this.apiVersion = apiVersion;
22
+ }
23
+ /**
24
+ * Construye una URL de endpoint de API
25
+ * @param {string} [path=''] - Segmento de ruta opcional
26
+ * @param {Record<string, string>} [queryParams] - Parámetros de consulta opcionales
27
+ * @returns {string} URL del endpoint
28
+ * @protected
29
+ */
30
+ buildEndpoint(path = '', queryParams) {
31
+ let baseEndpoint = `api/${this.apiVersion}/${this.resourcePath}`;
32
+ if (path) {
33
+ baseEndpoint += `/${path}`;
34
+ }
35
+ if (queryParams && Object.keys(queryParams).length > 0) {
36
+ const queryString = Object.entries(queryParams)
37
+ .filter(([key]) => key)
38
+ .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
39
+ .join('&');
40
+ baseEndpoint += `?${queryString}`;
41
+ }
42
+ return baseEndpoint;
43
+ }
44
+ /**
45
+ * Convierte los parámetros de consulta a un objeto compatible con la configuración de Axios
46
+ * @param {Record<string, string>} queryParams - Parámetros de consulta
47
+ * @returns {AxiosRequestConfig} Configuración de Axios con los parámetros
48
+ * @protected
49
+ */
50
+ createConfigWithParams(queryParams) {
51
+ return queryParams ? { params: queryParams } : {};
52
+ }
53
+ /**
54
+ * Ejecuta una petición HTTP personalizada con máxima flexibilidad
55
+ * @param {RequestOptions<TData>} options - Opciones para la petición
56
+ * @returns {Promise<ApiResponse<TResult>>} Resultado de la petición
57
+ * @template TResult - Tipo de resultado esperado
58
+ * @template TData - Tipo de datos de entrada
59
+ */
60
+ async executeRequest(options) {
61
+ try {
62
+ // Extraer opciones
63
+ const { method, path = '', id, data, queryParams = {}, config = {}, responseTransformer } = options;
64
+ // Construir el endpoint completo
65
+ let endpoint = '';
66
+ // Si se proporciona un ID, lo añadimos a la ruta
67
+ if (id) {
68
+ endpoint = this.buildEndpoint(`${path ? `${path}/` : ''}${id}`, queryParams);
69
+ }
70
+ else if (path) {
71
+ endpoint = this.buildEndpoint(path, queryParams);
72
+ }
73
+ else {
74
+ endpoint = this.buildEndpoint('', queryParams);
75
+ }
76
+ // Ejecutar la petición a través del cliente HTTP
77
+ return this.httpClient.executeRequest(method, endpoint, {
78
+ data,
79
+ config,
80
+ responseTransformer
81
+ });
82
+ }
83
+ catch (error) {
84
+ // Manejo centralizado de errores
85
+ console.error(`Error al ejecutar petición personalizada:`, error);
86
+ // Convertir el error en una respuesta de error estándar
87
+ if (error instanceof Error) {
88
+ const errorResponse = {
89
+ succeeded: false,
90
+ data: null,
91
+ message: `Error al ejecutar petición: ${error.message}`,
92
+ details: JSON.stringify({
93
+ code: 'REQUEST_ERROR',
94
+ message: error.message
95
+ }),
96
+ httpStatusCode: 500
97
+ };
98
+ return errorResponse;
99
+ }
100
+ throw error;
101
+ }
102
+ }
103
+ /**
104
+ * @inheritdoc
105
+ */
106
+ async getList(pageNumber, pageSize) {
107
+ const queryParams = {
108
+ PageNumber: pageNumber.toString(),
109
+ PageSize: pageSize.toString()
110
+ };
111
+ return this.executeRequest({
112
+ method: 'GET',
113
+ queryParams
114
+ });
115
+ }
116
+ /**
117
+ * @inheritdoc
118
+ */
119
+ async getById(id, details = false) {
120
+ const queryParams = details ? { details: details.toString().toLowerCase() } : undefined;
121
+ return this.executeRequest({
122
+ method: 'GET',
123
+ id,
124
+ queryParams
125
+ });
126
+ }
127
+ /**
128
+ * @inheritdoc
129
+ */
130
+ async create(model) {
131
+ return this.executeRequest({
132
+ method: 'POST',
133
+ data: model
134
+ });
135
+ }
136
+ /**
137
+ * @inheritdoc
138
+ */
139
+ async update(model) {
140
+ return this.executeRequest({
141
+ method: 'PUT',
142
+ id: model.id,
143
+ data: model
144
+ });
145
+ }
146
+ /**
147
+ * @inheritdoc
148
+ */
149
+ async delete(id) {
150
+ return this.executeRequest({
151
+ method: 'DELETE',
152
+ id
153
+ });
154
+ }
155
+ /**
156
+ * @inheritdoc
157
+ */
158
+ async search(searchParams) {
159
+ return this.executeRequest({
160
+ method: 'GET',
161
+ path: 'search',
162
+ queryParams: searchParams
163
+ });
164
+ }
165
+ }
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maXNjYWxhcGktc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9iYXNlLWZpc2NhbGFwaS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BOzs7R0FHRztBQUNILE1BQU0sT0FBZ0Isb0JBQW9CO0lBVXhDOzs7OztPQUtHO0lBQ0gsWUFBWSxVQUFnQyxFQUFFLFlBQW9CLEVBQUUsVUFBa0I7UUFDcEYsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLFlBQVk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGFBQWEsQ0FBQyxPQUFlLEVBQUUsRUFBRSxXQUFvQztRQUM3RSxJQUFJLFlBQVksR0FBRyxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWpFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxZQUFZLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7aUJBQzVDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FB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QUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBeGlvc1JlcXVlc3RDb25maWcgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBCYXNlRHRvIH0gZnJvbSAnLi4vY29tbW9uL2Jhc2UtZHRvJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vY29tbW9uL2FwaS1yZXNwb25zZSc7XG5pbXBvcnQgeyBQYWdlZExpc3QgfSBmcm9tICcuLi9jb21tb24vcGFnZWQtbGlzdCc7XG5pbXBvcnQgeyBJRmlzY2FsYXBpSHR0cENsaWVudCwgSHR0cE1ldGhvZCB9IGZyb20gJy4uL2h0dHAvZmlzY2FsYXBpLWh0dHAtY2xpZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRmlzY2FsYXBpU2VydmljZSwgT3BlcmF0aW9uT3B0aW9ucywgUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi9hYnN0cmFjdGlvbnMvZmlzY2FsYXBpLXNlcnZpY2UuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhY2nDs24gYmFzZSBkZSB1biBzZXJ2aWNpbyBkZSBGaXNjYWxBUElcbiAqIEB0ZW1wbGF0ZSBUIC0gVGlwbyBkZSBEVE8gcXVlIG1hbmVqYSBlbCBzZXJ2aWNpb1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZpc2NhbGFwaVNlcnZpY2U8VCBleHRlbmRzIEJhc2VEdG8+IGltcGxlbWVudHMgSUZpc2NhbGFwaVNlcnZpY2U8VD4ge1xuICAvKiogQ2xpZW50ZSBIVFRQICovXG4gIHByb3RlY3RlZCByZWFkb25seSBodHRwQ2xpZW50OiBJRmlzY2FsYXBpSHR0cENsaWVudDtcbiAgXG4gIC8qKiBSdXRhIGRlbCByZWN1cnNvICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgXG4gIC8qKiBWZXJzacOzbiBkZSBsYSBBUEkgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYSB1bmEgbnVldmEgaW5zdGFuY2lhIGRlbCBzZXJ2aWNpbyBiYXNlXG4gICAqIEBwYXJhbSB7SUZpc2NhbGFwaUh0dHBDbGllbnR9IGh0dHBDbGllbnQgLSBDbGllbnRlIEhUVFBcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlUGF0aCAtIFJ1dGEgZGVsIHJlY3Vyc28gZW4gbGEgQVBJXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGlWZXJzaW9uIC0gVmVyc2nDs24gZGUgbGEgQVBJXG4gICAqL1xuICBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBJRmlzY2FsYXBpSHR0cENsaWVudCwgcmVzb3VyY2VQYXRoOiBzdHJpbmcsIGFwaVZlcnNpb246IHN0cmluZykge1xuICAgIGlmICghaHR0cENsaWVudCkgdGhyb3cgbmV3IEVycm9yKCdodHRwQ2xpZW50IG5vIHB1ZWRlIHNlciBudWxvIG8gaW5kZWZpbmlkbycpO1xuICAgIGlmICghcmVzb3VyY2VQYXRoKSB0aHJvdyBuZXcgRXJyb3IoJ3Jlc291cmNlUGF0aCBubyBwdWVkZSBzZXIgbnVsbyBvIGluZGVmaW5pZG8nKTtcbiAgICBpZiAoIWFwaVZlcnNpb24pIHRocm93IG5ldyBFcnJvcignYXBpVmVyc2lvbiBubyBwdWVkZSBzZXIgbnVsbyBvIGluZGVmaW5pZG8nKTtcbiAgICBcbiAgICB0aGlzLmh0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgIHRoaXMucmVzb3VyY2VQYXRoID0gcmVzb3VyY2VQYXRoO1xuICAgIHRoaXMuYXBpVmVyc2lvbiA9IGFwaVZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydXllIHVuYSBVUkwgZGUgZW5kcG9pbnQgZGUgQVBJXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aD0nJ10gLSBTZWdtZW50byBkZSBydXRhIG9wY2lvbmFsXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gW3F1ZXJ5UGFyYW1zXSAtIFBhcsOhbWV0cm9zIGRlIGNvbnN1bHRhIG9wY2lvbmFsZXNcbiAgICogQHJldHVybnMge3N0cmluZ30gVVJMIGRlbCBlbmRwb2ludFxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRFbmRwb2ludChwYXRoOiBzdHJpbmcgPSAnJywgcXVlcnlQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICBsZXQgYmFzZUVuZHBvaW50ID0gYGFwaS8ke3RoaXMuYXBpVmVyc2lvbn0vJHt0aGlzLnJlc291cmNlUGF0aH1gO1xuICAgIFxuICAgIGlmIChwYXRoKSB7XG4gICAgICBiYXNlRW5kcG9pbnQgKz0gYC8ke3BhdGh9YDtcbiAgICB9XG4gICAgXG4gICAgaWYgKHF1ZXJ5UGFyYW1zICYmIE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4ga2V5KVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YClcbiAgICAgICAgLmpvaW4oJyYnKTtcbiAgICAgIFxuICAgICAgYmFzZUVuZHBvaW50ICs9IGA/JHtxdWVyeVN0cmluZ31gO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gYmFzZUVuZHBvaW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZpZXJ0ZSBsb3MgcGFyw6FtZXRyb3MgZGUgY29uc3VsdGEgYSB1biBvYmpldG8gY29tcGF0aWJsZSBjb24gbGEgY29uZmlndXJhY2nDs24gZGUgQXhpb3NcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBxdWVyeVBhcmFtcyAtIFBhcsOhbWV0cm9zIGRlIGNvbnN1bHRhXG4gICAqIEByZXR1cm5zIHtBeGlvc1JlcXVlc3RDb25maWd9IENvbmZpZ3VyYWNpw7NuIGRlIEF4aW9zIGNvbiBsb3MgcGFyw6FtZXRyb3NcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUNvbmZpZ1dpdGhQYXJhbXMocXVlcnlQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogQXhpb3NSZXF1ZXN0Q29uZmlnIHtcbiAgICByZXR1cm4gcXVlcnlQYXJhbXMgPyB7IHBhcmFtczogcXVlcnlQYXJhbXMgfSA6IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVqZWN1dGEgdW5hIHBldGljacOzbiBIVFRQIHBlcnNvbmFsaXphZGEgY29uIG3DoXhpbWEgZmxleGliaWxpZGFkXG4gICAqIEBwYXJhbSB7UmVxdWVzdE9wdGlvbnM8VERhdGE+fSBvcHRpb25zIC0gT3BjaW9uZXMgcGFyYSBsYSBwZXRpY2nDs25cbiAgICogQHJldHVybnMge1Byb21pc2U8QXBpUmVzcG9uc2U8VFJlc3VsdD4+fSBSZXN1bHRhZG8gZGUgbGEgcGV0aWNpw7NuXG4gICAqIEB0ZW1wbGF0ZSBUUmVzdWx0IC0gVGlwbyBkZSByZXN1bHRhZG8gZXNwZXJhZG9cbiAgICogQHRlbXBsYXRlIFREYXRhIC0gVGlwbyBkZSBkYXRvcyBkZSBlbnRyYWRhXG4gICAqL1xuICBhc3luYyBleGVjdXRlUmVxdWVzdDxUUmVzdWx0LCBURGF0YSA9IGFueT4oXG4gICAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnM8VERhdGE+XG4gICk6IFByb21pc2U8QXBpUmVzcG9uc2U8VFJlc3VsdD4+IHtcbiAgICB0cnkge1xuICAgICAgLy8gRXh0cmFlciBvcGNpb25lc1xuICAgICAgY29uc3QgeyBcbiAgICAgICAgbWV0aG9kLCBcbiAgICAgICAgcGF0aCA9ICcnLCBcbiAgICAgICAgaWQsIFxuICAgICAgICBkYXRhLCBcbiAgICAgICAgcXVlcnlQYXJhbXMgPSB7fSwgXG4gICAgICAgIGNvbmZpZyA9IHt9LFxuICAgICAgICByZXNwb25zZVRyYW5zZm9ybWVyXG4gICAgICB9ID0gb3B0aW9ucztcbiAgICAgIFxuICAgICAgLy8gQ29uc3RydWlyIGVsIGVuZHBvaW50IGNvbXBsZXRvXG4gICAgICBsZXQgZW5kcG9pbnQgPSAnJztcbiAgICAgIFxuICAgICAgLy8gU2kgc2UgcHJvcG9yY2lvbmEgdW4gSUQsIGxvIGHDsWFkaW1vcyBhIGxhIHJ1dGFcbiAgICAgIGlmIChpZCkge1xuICAgICAgICBlbmRwb2ludCA9IHRoaXMuYnVpbGRFbmRwb2ludChgJHtwYXRoID8gYCR7cGF0aH0vYCA6ICcnfSR7aWR9YCwgcXVlcnlQYXJhbXMpO1xuICAgICAgfSBlbHNlIGlmIChwYXRoKSB7XG4gICAgICAgIGVuZHBvaW50ID0gdGhpcy5idWlsZEVuZHBvaW50KHBhdGgsIHF1ZXJ5UGFyYW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZHBvaW50ID0gdGhpcy5idWlsZEVuZHBvaW50KCcnLCBxdWVyeVBhcmFtcyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVqZWN1dGFyIGxhIHBldGljacOzbiBhIHRyYXbDqXMgZGVsIGNsaWVudGUgSFRUUFxuICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5leGVjdXRlUmVxdWVzdDxUUmVzdWx0LCBURGF0YT4oXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXNwb25zZVRyYW5zZm9ybWVyXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE1hbmVqbyBjZW50cmFsaXphZG8gZGUgZXJyb3Jlc1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgYWwgZWplY3V0YXIgcGV0aWNpw7NuIHBlcnNvbmFsaXphZGE6YCwgZXJyb3IpO1xuICAgICAgXG4gICAgICAvLyBDb252ZXJ0aXIgZWwgZXJyb3IgZW4gdW5hIHJlc3B1ZXN0YSBkZSBlcnJvciBlc3TDoW5kYXJcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yUmVzcG9uc2U6IEFwaVJlc3BvbnNlPFRSZXN1bHQ+ID0ge1xuICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgZGF0YTogbnVsbCBhcyB1bmtub3duIGFzIFRSZXN1bHQsXG4gICAgICAgICAgbWVzc2FnZTogYEVycm9yIGFsIGVqZWN1dGFyIHBldGljacOzbjogJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgZGV0YWlsczogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgY29kZTogJ1JFUVVFU1RfRVJST1InLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGh0dHBTdGF0dXNDb2RlOiA1MDBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBlcnJvclJlc3BvbnNlO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gXG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBhc3luYyBnZXRMaXN0KHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IFByb21pc2U8QXBpUmVzcG9uc2U8UGFnZWRMaXN0PFQ+Pj4ge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgUGFnZU51bWJlcjogcGFnZU51bWJlci50b1N0cmluZygpLFxuICAgICAgUGFnZVNpemU6IHBhZ2VTaXplLnRvU3RyaW5nKClcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0PFBhZ2VkTGlzdDxUPj4oe1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHF1ZXJ5UGFyYW1zXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGFzeW5jIGdldEJ5SWQoaWQ6IHN0cmluZywgZGV0YWlsczogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxBcGlSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gZGV0YWlscyA/IHsgZGV0YWlsczogZGV0YWlscy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgfSA6IHVuZGVmaW5lZDtcbiAgICBcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUmVxdWVzdDxUPih7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaWQsXG4gICAgICBxdWVyeVBhcmFtc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBhc3luYyBjcmVhdGUobW9kZWw6IFQpOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3Q8VCwgVD4oe1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBkYXRhOiBtb2RlbFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBhc3luYyB1cGRhdGUobW9kZWw6IFQpOiBQcm9taXNlPEFwaVJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3Q8VCwgVD4oe1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGlkOiBtb2RlbC5pZCxcbiAgICAgIGRhdGE6IG1vZGVsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGFzeW5jIGRlbGV0ZShpZDogc3RyaW5nKTogUHJvbWlzZTxBcGlSZXNwb25zZTxib29sZWFuPj4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVSZXF1ZXN0PGJvb2xlYW4+KHtcbiAgICAgIG1ldGhvZDogJ0RFTEVURScsXG4gICAgICBpZFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBhc3luYyBzZWFyY2goc2VhcmNoUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxBcGlSZXNwb25zZTxQYWdlZExpc3Q8VD4+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVJlcXVlc3Q8UGFnZWRMaXN0PFQ+Pih7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgcGF0aDogJ3NlYXJjaCcsXG4gICAgICBxdWVyeVBhcmFtczogc2VhcmNoUGFyYW1zXG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,47 @@
1
+ import { BaseFiscalapiService } from './base-fiscalapi-service';
2
+ /**
3
+ * Implementación del servicio de catálogos
4
+ */
5
+ export class CatalogService extends BaseFiscalapiService {
6
+ /**
7
+ * Crea una nueva instancia del servicio de catálogos
8
+ * @param {IFiscalapiHttpClient} httpClient - Cliente HTTP
9
+ * @param {string} apiVersion - Versión de la API
10
+ */
11
+ constructor(httpClient, apiVersion) {
12
+ super(httpClient, 'catalogs', apiVersion);
13
+ }
14
+ /**
15
+ * Recupera un registro de un catálogo por catalogName y id.
16
+ *
17
+ * @param catalogName - Nombre del catálogo
18
+ * @param id - Id del registro en el catalogName
19
+ * @returns Promise que resuelve en una respuesta API con CatalogDto
20
+ */
21
+ async getRecordById(catalogName, id) {
22
+ const path = `${catalogName}/key/${id}`;
23
+ const endpoint = this.buildEndpoint(path);
24
+ // api/v4/catalogs/<catalogName>/key/<id>
25
+ return this.httpClient.getAsync(endpoint);
26
+ }
27
+ /**
28
+ * Busca en un catálogo.
29
+ *
30
+ * @param catalogName - Catalog name. Must be a catalog retrieved from getList()
31
+ * @param searchText - Criterio de búsqueda. Debe tener 4 caracteres de longitud como mínimo.
32
+ * @param pageNumber - Numero de pagina a recuperar (default: 1)
33
+ * @param pageSize - Tamaño de la página entre 1 y 100 registros por página (default: 50)
34
+ * @returns Promise que resuelve en una respuesta API con lista paginada de CatalogDto
35
+ */
36
+ async searchCatalog(catalogName, searchText, pageNumber = 1, pageSize = 50) {
37
+ const path = `${catalogName}/${searchText}`;
38
+ const queryParams = {
39
+ pageNumber: pageNumber.toString(),
40
+ pageSize: pageSize.toString()
41
+ };
42
+ const endpoint = this.buildEndpoint(path, queryParams);
43
+ const response = await this.httpClient.getAsync(endpoint);
44
+ return response;
45
+ }
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2NhdGFsb2ctc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdoRTs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQWdDO0lBQ2xFOzs7O09BSUc7SUFDSCxZQUFZLFVBQWdDLEVBQUUsVUFBa0I7UUFDOUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUlDOzs7Ozs7TUFNRTtJQUNLLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBbUIsRUFBRSxFQUFVO1FBQ3hELE1BQU0sSUFBSSxHQUFHLEdBQUcsV0FBVyxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMseUNBQXlDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQWEsUUFBUSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7Ozs7OztNQVFFO0lBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FDeEIsV0FBbUIsRUFDbkIsVUFBa0IsRUFDbEIsYUFBcUIsQ0FBQyxFQUN0QixXQUFtQixFQUFFO1FBRXJCLE1BQU0sSUFBSSxHQUFHLEdBQUcsV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sV0FBVyxHQUFHO1lBQ2hCLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ2pDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFO1NBQ2hDLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUF3QixRQUFRLENBQUMsQ0FBQztRQUNqRixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYXRhbG9nRHRvIH0gZnJvbSAnLi4vY29tbW9uL2NhdGFsb2ctZHRvJztcbmltcG9ydCB7IElGaXNjYWxhcGlIdHRwQ2xpZW50IH0gZnJvbSAnLi4vaHR0cC9maXNjYWxhcGktaHR0cC1jbGllbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vY29tbW9uL2FwaS1yZXNwb25zZSc7XG5pbXBvcnQgeyBCYXNlRmlzY2FsYXBpU2VydmljZSB9IGZyb20gJy4vYmFzZS1maXNjYWxhcGktc2VydmljZSc7XG5pbXBvcnQgeyBJQ2F0YWxvZ1NlcnZpY2UsIFBhZ2VkTGlzdCB9IGZyb20gJy4uJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhY2nDs24gZGVsIHNlcnZpY2lvIGRlIGNhdMOhbG9nb3NcbiAqL1xuZXhwb3J0IGNsYXNzIENhdGFsb2dTZXJ2aWNlIGV4dGVuZHMgQmFzZUZpc2NhbGFwaVNlcnZpY2U8Q2F0YWxvZ0R0bz4gaW1wbGVtZW50cyBJQ2F0YWxvZ1NlcnZpY2Uge1xuICAvKipcbiAgICogQ3JlYSB1bmEgbnVldmEgaW5zdGFuY2lhIGRlbCBzZXJ2aWNpbyBkZSBjYXTDoWxvZ29zXG4gICAqIEBwYXJhbSB7SUZpc2NhbGFwaUh0dHBDbGllbnR9IGh0dHBDbGllbnQgLSBDbGllbnRlIEhUVFBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwaVZlcnNpb24gLSBWZXJzacOzbiBkZSBsYSBBUElcbiAgICovXG4gIGNvbnN0cnVjdG9yKGh0dHBDbGllbnQ6IElGaXNjYWxhcGlIdHRwQ2xpZW50LCBhcGlWZXJzaW9uOiBzdHJpbmcpIHtcbiAgICBzdXBlcihodHRwQ2xpZW50LCAnY2F0YWxvZ3MnLCBhcGlWZXJzaW9uKTtcbiAgfVxuXG5cblxuICAgIC8qKlxuICAgICogUmVjdXBlcmEgdW4gcmVnaXN0cm8gZGUgdW4gY2F0w6Fsb2dvIHBvciBjYXRhbG9nTmFtZSB5IGlkLlxuICAgICogXG4gICAgKiBAcGFyYW0gY2F0YWxvZ05hbWUgLSBOb21icmUgZGVsIGNhdMOhbG9nb1xuICAgICogQHBhcmFtIGlkIC0gSWQgZGVsIHJlZ2lzdHJvIGVuIGVsIGNhdGFsb2dOYW1lXG4gICAgKiBAcmV0dXJucyBQcm9taXNlIHF1ZSByZXN1ZWx2ZSBlbiB1bmEgcmVzcHVlc3RhIEFQSSBjb24gQ2F0YWxvZ0R0b1xuICAgICovXG4gICAgcHVibGljIGFzeW5jIGdldFJlY29yZEJ5SWQoY2F0YWxvZ05hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFByb21pc2U8QXBpUmVzcG9uc2U8Q2F0YWxvZ0R0bz4+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBgJHtjYXRhbG9nTmFtZX0va2V5LyR7aWR9YDtcbiAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5idWlsZEVuZHBvaW50KHBhdGgpO1xuICAgICAgLy8gYXBpL3Y0L2NhdGFsb2dzLzxjYXRhbG9nTmFtZT4va2V5LzxpZD5cbiAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0QXN5bmM8Q2F0YWxvZ0R0bz4oZW5kcG9pbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQnVzY2EgZW4gdW4gY2F0w6Fsb2dvLlxuICAgICogXG4gICAgKiBAcGFyYW0gY2F0YWxvZ05hbWUgLSBDYXRhbG9nIG5hbWUuIE11c3QgYmUgYSBjYXRhbG9nIHJldHJpZXZlZCBmcm9tIGdldExpc3QoKVxuICAgICogQHBhcmFtIHNlYXJjaFRleHQgLSBDcml0ZXJpbyBkZSBiw7pzcXVlZGEuIERlYmUgdGVuZXIgNCBjYXJhY3RlcmVzIGRlIGxvbmdpdHVkIGNvbW8gbcOtbmltby5cbiAgICAqIEBwYXJhbSBwYWdlTnVtYmVyIC0gTnVtZXJvIGRlIHBhZ2luYSBhIHJlY3VwZXJhciAoZGVmYXVsdDogMSlcbiAgICAqIEBwYXJhbSBwYWdlU2l6ZSAtIFRhbWHDsW8gZGUgbGEgcMOhZ2luYSBlbnRyZSAxIHkgMTAwIHJlZ2lzdHJvcyBwb3IgcMOhZ2luYSAoZGVmYXVsdDogNTApXG4gICAgKiBAcmV0dXJucyBQcm9taXNlIHF1ZSByZXN1ZWx2ZSBlbiB1bmEgcmVzcHVlc3RhIEFQSSBjb24gbGlzdGEgcGFnaW5hZGEgZGUgQ2F0YWxvZ0R0b1xuICAgICovXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaENhdGFsb2coXG4gICAgICBjYXRhbG9nTmFtZTogc3RyaW5nLCBcbiAgICAgIHNlYXJjaFRleHQ6IHN0cmluZyxcbiAgICAgIHBhZ2VOdW1iZXI6IG51bWJlciA9IDEsIFxuICAgICAgcGFnZVNpemU6IG51bWJlciA9IDUwXG4gICAgKTogUHJvbWlzZTxBcGlSZXNwb25zZTxQYWdlZExpc3Q8Q2F0YWxvZ0R0bz4+PiB7XG4gICAgICBjb25zdCBwYXRoID0gYCR7Y2F0YWxvZ05hbWV9LyR7c2VhcmNoVGV4dH1gO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7XG4gICAgICAgICAgcGFnZU51bWJlcjogcGFnZU51bWJlci50b1N0cmluZygpLFxuICAgICAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZS50b1N0cmluZygpXG4gICAgICB9O1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmJ1aWxkRW5kcG9pbnQocGF0aCwgcXVlcnlQYXJhbXMpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0QXN5bmM8UGFnZWRMaXN0PENhdGFsb2dEdG8+PihlbmRwb2ludCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gIFxufVxuIl19
@@ -0,0 +1,63 @@
1
+ import { FiscalapiHttpClientFactory } from '../http/fiscalapi-http-client-factory';
2
+ import { ApiKeyService } from './api-key-service';
3
+ import { CatalogService } from './catalog-service';
4
+ import { InvoiceService } from './invoice-service';
5
+ import { PersonService } from './person-service';
6
+ import { ProductService } from './product-service';
7
+ import { TaxFileService } from './tax-file-service';
8
+ /**
9
+ * Cliente principal para FiscalAPI
10
+ */
11
+ export class FiscalapiClient {
12
+ /**
13
+ * Crea una nueva instancia del cliente de FiscalAPI
14
+ * @param {FiscalapiSettings} settings - Configuración
15
+ * @private
16
+ */
17
+ constructor(settings) {
18
+ // Crea el cliente HTTP
19
+ const httpClient = FiscalapiHttpClientFactory.create(settings);
20
+ const apiVersion = settings.apiVersion || 'v4';
21
+ // Inicializa los servicios
22
+ this.invoices = new InvoiceService(httpClient, apiVersion);
23
+ this.products = new ProductService(httpClient, apiVersion);
24
+ this.persons = new PersonService(httpClient, apiVersion);
25
+ this.apiKeys = new ApiKeyService(httpClient, apiVersion);
26
+ this.catalogs = new CatalogService(httpClient, apiVersion);
27
+ this.taxFiles = new TaxFileService(httpClient, apiVersion);
28
+ }
29
+ /**
30
+ * Crea una nueva instancia del cliente de FiscalAPI
31
+ * @param {FiscalapiSettings} settings - Configuración
32
+ * @returns {IFiscalapiClient} Instancia del cliente de FiscalAPI
33
+ */
34
+ static create(settings) {
35
+ if (!settings) {
36
+ throw new Error('La configuración no puede ser nula o indefinida');
37
+ }
38
+ // Valida la configuración
39
+ FiscalapiClient.validateSettings(settings);
40
+ // Establece valores predeterminados para configuraciones opcionales
41
+ settings.apiVersion = settings.apiVersion || 'v4';
42
+ settings.timeZone = settings.timeZone || 'America/Mexico_City';
43
+ settings.debug = settings.debug || false;
44
+ return new FiscalapiClient(settings);
45
+ }
46
+ /**
47
+ * Valida la configuración
48
+ * @param {FiscalapiSettings} settings - Configuración
49
+ * @private
50
+ */
51
+ static validateSettings(settings) {
52
+ if (!settings.apiUrl) {
53
+ throw new Error('apiUrl es requerido');
54
+ }
55
+ if (!settings.apiKey) {
56
+ throw new Error('apiKey es requerido');
57
+ }
58
+ if (!settings.tenant) {
59
+ throw new Error('tenant es requerido');
60
+ }
61
+ }
62
+ }
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzY2FsYXBpLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9maXNjYWxhcGktY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUErQjFCOzs7O09BSUc7SUFDSCxZQUFvQixRQUEyQjtRQUM3Qyx1QkFBdUI7UUFDdkIsTUFBTSxVQUFVLEdBQUcsMEJBQTBCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO1FBRS9DLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBMkI7UUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNDLG9FQUFvRTtRQUNwRSxRQUFRLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO1FBQ2xELFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxxQkFBcUIsQ0FBQztRQUMvRCxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO1FBRXpDLE9BQU8sSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBMkI7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXG4gIElGaXNjYWxhcGlDbGllbnQsXG4gIElJbnZvaWNlU2VydmljZSwgXG4gIElQcm9kdWN0U2VydmljZSwgXG4gIElQZXJzb25TZXJ2aWNlLCBcbiAgSUFwaUtleVNlcnZpY2UsIFxuICBJQ2F0YWxvZ1NlcnZpY2UsIFxuICBJVGF4RmlsZVNlcnZpY2UgfSBmcm9tICcuLic7XG5pbXBvcnQgeyBGaXNjYWxhcGlTZXR0aW5ncyB9IGZyb20gJy4uL2NvbW1vbi9maXNjYWxhcGktc2V0dGluZ3MnO1xuaW1wb3J0IHsgRmlzY2FsYXBpSHR0cENsaWVudEZhY3RvcnkgfSBmcm9tICcuLi9odHRwL2Zpc2NhbGFwaS1odHRwLWNsaWVudC1mYWN0b3J5JztcbmltcG9ydCB7IEFwaUtleVNlcnZpY2UgfSBmcm9tICcuL2FwaS1rZXktc2VydmljZSc7XG5pbXBvcnQgeyBDYXRhbG9nU2VydmljZSB9IGZyb20gJy4vY2F0YWxvZy1zZXJ2aWNlJztcbmltcG9ydCB7IEludm9pY2VTZXJ2aWNlIH0gZnJvbSAnLi9pbnZvaWNlLXNlcnZpY2UnO1xuaW1wb3J0IHsgUGVyc29uU2VydmljZSB9IGZyb20gJy4vcGVyc29uLXNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICcuL3Byb2R1Y3Qtc2VydmljZSc7XG5pbXBvcnQgeyBUYXhGaWxlU2VydmljZSB9IGZyb20gJy4vdGF4LWZpbGUtc2VydmljZSc7XG5cbi8qKlxuICogQ2xpZW50ZSBwcmluY2lwYWwgcGFyYSBGaXNjYWxBUElcbiAqL1xuZXhwb3J0IGNsYXNzIEZpc2NhbGFwaUNsaWVudCBpbXBsZW1lbnRzIElGaXNjYWxhcGlDbGllbnQge1xuICAvKipcbiAgICogU2VydmljaW8gZGUgZmFjdHVyYXNcbiAgICovXG4gIHJlYWRvbmx5IGludm9pY2VzOiBJSW52b2ljZVNlcnZpY2U7XG4gIFxuICAvKipcbiAgICogU2VydmljaW8gZGUgcHJvZHVjdG9zXG4gICAqL1xuICByZWFkb25seSBwcm9kdWN0czogSVByb2R1Y3RTZXJ2aWNlO1xuICBcbiAgLyoqXG4gICAqIFNlcnZpY2lvIGRlIHBlcnNvbmFzXG4gICAqL1xuICByZWFkb25seSBwZXJzb25zOiBJUGVyc29uU2VydmljZTtcbiAgXG4gIC8qKlxuICAgKiBTZXJ2aWNpbyBkZSBjbGF2ZXMgZGUgQVBJXG4gICAqL1xuICByZWFkb25seSBhcGlLZXlzOiBJQXBpS2V5U2VydmljZTtcbiAgXG4gIC8qKlxuICAgKiBTZXJ2aWNpbyBkZSBjYXTDoWxvZ29zXG4gICAqL1xuICByZWFkb25seSBjYXRhbG9nczogSUNhdGFsb2dTZXJ2aWNlO1xuICBcbiAgLyoqXG4gICAqIFNlcnZpY2lvIGRlIGFyY2hpdm9zIGZpc2NhbGVzXG4gICAqL1xuICByZWFkb25seSB0YXhGaWxlczogSVRheEZpbGVTZXJ2aWNlO1xuXG4gIC8qKlxuICAgKiBDcmVhIHVuYSBudWV2YSBpbnN0YW5jaWEgZGVsIGNsaWVudGUgZGUgRmlzY2FsQVBJXG4gICAqIEBwYXJhbSB7RmlzY2FsYXBpU2V0dGluZ3N9IHNldHRpbmdzIC0gQ29uZmlndXJhY2nDs25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3Ioc2V0dGluZ3M6IEZpc2NhbGFwaVNldHRpbmdzKSB7XG4gICAgLy8gQ3JlYSBlbCBjbGllbnRlIEhUVFBcbiAgICBjb25zdCBodHRwQ2xpZW50ID0gRmlzY2FsYXBpSHR0cENsaWVudEZhY3RvcnkuY3JlYXRlKHNldHRpbmdzKTtcbiAgICBjb25zdCBhcGlWZXJzaW9uID0gc2V0dGluZ3MuYXBpVmVyc2lvbiB8fCAndjQnO1xuICAgIFxuICAgIC8vIEluaWNpYWxpemEgbG9zIHNlcnZpY2lvc1xuICAgIHRoaXMuaW52b2ljZXMgPSBuZXcgSW52b2ljZVNlcnZpY2UoaHR0cENsaWVudCwgYXBpVmVyc2lvbik7XG4gICAgdGhpcy5wcm9kdWN0cyA9IG5ldyBQcm9kdWN0U2VydmljZShodHRwQ2xpZW50LCBhcGlWZXJzaW9uKTtcbiAgICB0aGlzLnBlcnNvbnMgPSBuZXcgUGVyc29uU2VydmljZShodHRwQ2xpZW50LCBhcGlWZXJzaW9uKTtcbiAgICB0aGlzLmFwaUtleXMgPSBuZXcgQXBpS2V5U2VydmljZShodHRwQ2xpZW50LCBhcGlWZXJzaW9uKTtcbiAgICB0aGlzLmNhdGFsb2dzID0gbmV3IENhdGFsb2dTZXJ2aWNlKGh0dHBDbGllbnQsIGFwaVZlcnNpb24pO1xuICAgIHRoaXMudGF4RmlsZXMgPSBuZXcgVGF4RmlsZVNlcnZpY2UoaHR0cENsaWVudCwgYXBpVmVyc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYSB1bmEgbnVldmEgaW5zdGFuY2lhIGRlbCBjbGllbnRlIGRlIEZpc2NhbEFQSVxuICAgKiBAcGFyYW0ge0Zpc2NhbGFwaVNldHRpbmdzfSBzZXR0aW5ncyAtIENvbmZpZ3VyYWNpw7NuXG4gICAqIEByZXR1cm5zIHtJRmlzY2FsYXBpQ2xpZW50fSBJbnN0YW5jaWEgZGVsIGNsaWVudGUgZGUgRmlzY2FsQVBJXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlKHNldHRpbmdzOiBGaXNjYWxhcGlTZXR0aW5ncyk6IElGaXNjYWxhcGlDbGllbnQge1xuICAgIGlmICghc2V0dGluZ3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTGEgY29uZmlndXJhY2nDs24gbm8gcHVlZGUgc2VyIG51bGEgbyBpbmRlZmluaWRhJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZhbGlkYSBsYSBjb25maWd1cmFjacOzblxuICAgIEZpc2NhbGFwaUNsaWVudC52YWxpZGF0ZVNldHRpbmdzKHNldHRpbmdzKTtcbiAgICBcbiAgICAvLyBFc3RhYmxlY2UgdmFsb3JlcyBwcmVkZXRlcm1pbmFkb3MgcGFyYSBjb25maWd1cmFjaW9uZXMgb3BjaW9uYWxlc1xuICAgIHNldHRpbmdzLmFwaVZlcnNpb24gPSBzZXR0aW5ncy5hcGlWZXJzaW9uIHx8ICd2NCc7XG4gICAgc2V0dGluZ3MudGltZVpvbmUgPSBzZXR0aW5ncy50aW1lWm9uZSB8fCAnQW1lcmljYS9NZXhpY29fQ2l0eSc7XG4gICAgc2V0dGluZ3MuZGVidWcgPSBzZXR0aW5ncy5kZWJ1ZyB8fCBmYWxzZTtcbiAgICBcbiAgICByZXR1cm4gbmV3IEZpc2NhbGFwaUNsaWVudChzZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhIGxhIGNvbmZpZ3VyYWNpw7NuXG4gICAqIEBwYXJhbSB7RmlzY2FsYXBpU2V0dGluZ3N9IHNldHRpbmdzIC0gQ29uZmlndXJhY2nDs25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlU2V0dGluZ3Moc2V0dGluZ3M6IEZpc2NhbGFwaVNldHRpbmdzKTogdm9pZCB7XG4gICAgaWYgKCFzZXR0aW5ncy5hcGlVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXBpVXJsIGVzIHJlcXVlcmlkbycpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXNldHRpbmdzLmFwaUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhcGlLZXkgZXMgcmVxdWVyaWRvJyk7XG4gICAgfVxuICAgIFxuICAgIGlmICghc2V0dGluZ3MudGVuYW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RlbmFudCBlcyByZXF1ZXJpZG8nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,112 @@
1
+ import { BaseFiscalapiService } from './base-fiscalapi-service';
2
+ /**
3
+ * Implementación del servicio de facturas
4
+ */
5
+ export class InvoiceService extends BaseFiscalapiService {
6
+ /**
7
+ * Crea una nueva instancia del servicio de facturas
8
+ * @param {IFiscalapiHttpClient} httpClient - Cliente HTTP
9
+ * @param {string} apiVersion - Versión de la API
10
+ */
11
+ constructor(httpClient, apiVersion) {
12
+ super(httpClient, 'invoices', apiVersion);
13
+ this.INCOME_ENDPOINT = 'income';
14
+ this.CREDIT_NOTE_ENDPOINT = 'credit-note';
15
+ this.PAYMENT_ENDPOINT = 'payment';
16
+ }
17
+ /**
18
+ * @inheritdoc
19
+ */
20
+ async create(requestModel) {
21
+ if (!requestModel) {
22
+ throw new Error('requestModel cannot be null');
23
+ }
24
+ let endpoint;
25
+ switch (requestModel.typeCode) {
26
+ case 'I':
27
+ endpoint = this.INCOME_ENDPOINT;
28
+ break;
29
+ case 'E':
30
+ endpoint = this.CREDIT_NOTE_ENDPOINT;
31
+ break;
32
+ case 'P':
33
+ endpoint = this.PAYMENT_ENDPOINT;
34
+ break;
35
+ default:
36
+ throw new Error(`Unsupported invoice type: ${requestModel.typeCode}`);
37
+ }
38
+ return await this.executeRequest({
39
+ path: endpoint,
40
+ data: requestModel,
41
+ method: 'POST',
42
+ });
43
+ }
44
+ /**
45
+ * Cancela una factura
46
+ * @param {CancelInvoiceRequest} request - Solicitud para cancelar factura
47
+ * @returns {Promise<ApiResponse<CancelInvoiceResponse>>} Respuesta de la cancelación
48
+ */
49
+ async cancel(request) {
50
+ if (!request) {
51
+ throw new Error('request cannot be null');
52
+ }
53
+ return await this.executeRequest({
54
+ data: request,
55
+ method: 'DELETE',
56
+ });
57
+ }
58
+ /**
59
+ * Obtiene el PDF de una factura
60
+ * @param {CreatePdfRequest} request - Solicitud para crear PDF
61
+ * @returns {Promise<ApiResponse<FileResponse>>} Respuesta con el archivo PDF
62
+ */
63
+ async getPdf(request) {
64
+ if (!request) {
65
+ throw new Error('request cannot be null');
66
+ }
67
+ return await this.executeRequest({
68
+ path: 'pdf',
69
+ data: request,
70
+ method: 'POST',
71
+ });
72
+ }
73
+ /**
74
+ * Obtiene el XML de una factura
75
+ * @param {string} id - ID de la factura
76
+ * @returns {Promise<ApiResponse<FileResponse>>} Respuesta con el archivo XML
77
+ */
78
+ async getXml(id) {
79
+ if (!id || id.trim() === '') {
80
+ throw new Error('id cannot be null or empty');
81
+ }
82
+ return await this.executeRequest({
83
+ path: `${id}/xml`,
84
+ method: 'GET',
85
+ });
86
+ }
87
+ /**
88
+ * Envía una factura por correo electrónico
89
+ * @param {SendInvoiceRequest} request - Solicitud para enviar factura
90
+ * @returns {Promise<ApiResponse<boolean>>} Resultado de la operación
91
+ */
92
+ async send(request) {
93
+ return await this.executeRequest({
94
+ path: 'send',
95
+ data: request,
96
+ method: 'POST',
97
+ });
98
+ }
99
+ /**
100
+ * Obtiene el estado de una factura
101
+ * @param {InvoiceStatusRequest} request - Solicitud para consultar estado
102
+ * @returns {Promise<ApiResponse<InvoiceStatusResponse>>} Respuesta con el estado de la factura
103
+ */
104
+ async getStatus(request) {
105
+ return await this.executeRequest({
106
+ path: 'status',
107
+ data: request,
108
+ method: 'POST',
109
+ });
110
+ }
111
+ }
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2ludm9pY2Utc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVloRTs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQTZCO0lBSy9EOzs7O09BSUc7SUFDSCxZQUFZLFVBQWdDLEVBQUUsVUFBa0I7UUFDOUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFWM0Isb0JBQWUsR0FBRyxRQUFRLENBQUM7UUFDM0IseUJBQW9CLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLHFCQUFnQixHQUFHLFNBQVMsQ0FBQztJQVM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDTyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQXFCO1FBQzFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksUUFBZ0IsQ0FBQztRQUVyQixRQUFRLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixLQUFLLEdBQUc7Z0JBQ04sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixLQUFLLEdBQUc7Z0JBQ04sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztnQkFDckMsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTixRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUNqQyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVDLE9BQU8sTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFtQjtZQUNqRCxJQUFJLEVBQUMsUUFBUTtZQUNiLElBQUksRUFBQyxZQUFZO1lBQ2pCLE1BQU0sRUFBQyxNQUFNO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQTZCO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQThDO1lBQzVFLElBQUksRUFBQyxPQUFPO1lBQ1osTUFBTSxFQUFDLFFBQVE7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQXlCO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQWlDO1lBQy9ELElBQUksRUFBQyxLQUFLO1lBQ1YsSUFBSSxFQUFDLE9BQU87WUFDWixNQUFNLEVBQUMsTUFBTTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFVO1FBRXJCLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQXVCO1lBQ3JELElBQUksRUFBQyxHQUFHLEVBQUUsTUFBTTtZQUNoQixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUMsQ0FBQztJQUVMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUEyQjtRQUNwQyxPQUFPLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBOEI7WUFDNUQsSUFBSSxFQUFDLE1BQU07WUFDWCxJQUFJLEVBQUMsT0FBTztZQUNaLE1BQU0sRUFBQyxNQUFNO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQTZCO1FBQ3ZDLE9BQU8sTUFBTSxJQUFJLENBQUMsY0FBYyxDQUE4QztZQUM5RSxJQUFJLEVBQUMsUUFBUTtZQUNiLElBQUksRUFBQyxPQUFPO1lBQ1osTUFBTSxFQUFDLE1BQU07U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmlzY2FsYXBpSHR0cENsaWVudCB9IGZyb20gJy4uL2h0dHAvZmlzY2FsYXBpLWh0dHAtY2xpZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4uL2NvbW1vbi9hcGktcmVzcG9uc2UnO1xuaW1wb3J0IHsgRmlsZVJlc3BvbnNlIH0gZnJvbSAnLi4vY29tbW9uL2ZpbGUtcmVzcG9uc2UnO1xuaW1wb3J0IHsgQmFzZUZpc2NhbGFwaVNlcnZpY2UgfSBmcm9tICcuL2Jhc2UtZmlzY2FsYXBpLXNlcnZpY2UnO1xuaW1wb3J0IHsgSUludm9pY2VTZXJ2aWNlIH0gZnJvbSAnLi4vYWJzdHJhY3Rpb25zL2ludm9pY2Utc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgXG4gIEludm9pY2UsIFxuICBDYW5jZWxJbnZvaWNlUmVxdWVzdCwgXG4gIENhbmNlbEludm9pY2VSZXNwb25zZSwgXG4gIENyZWF0ZVBkZlJlcXVlc3QsIFxuICBTZW5kSW52b2ljZVJlcXVlc3QsXG4gIEludm9pY2VTdGF0dXNSZXF1ZXN0LFxuICBJbnZvaWNlU3RhdHVzUmVzcG9uc2Vcbn0gZnJvbSAnLi4vbW9kZWxzL2ludm9pY2UnO1xuXG4vKipcbiAqIEltcGxlbWVudGFjacOzbiBkZWwgc2VydmljaW8gZGUgZmFjdHVyYXNcbiAqL1xuZXhwb3J0IGNsYXNzIEludm9pY2VTZXJ2aWNlIGV4dGVuZHMgQmFzZUZpc2NhbGFwaVNlcnZpY2U8SW52b2ljZT4gaW1wbGVtZW50cyBJSW52b2ljZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IElOQ09NRV9FTkRQT0lOVCA9ICdpbmNvbWUnO1xuICBwcml2YXRlIHJlYWRvbmx5IENSRURJVF9OT1RFX0VORFBPSU5UID0gJ2NyZWRpdC1ub3RlJztcbiAgcHJpdmF0ZSByZWFkb25seSBQQVlNRU5UX0VORFBPSU5UID0gJ3BheW1lbnQnO1xuXG4gIC8qKlxuICAgKiBDcmVhIHVuYSBudWV2YSBpbnN0YW5jaWEgZGVsIHNlcnZpY2lvIGRlIGZhY3R1cmFzXG4gICAqIEBwYXJhbSB7SUZpc2NhbGFwaUh0dHBDbGllbnR9IGh0dHBDbGllbnQgLSBDbGllbnRlIEhUVFBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwaVZlcnNpb24gLSBWZXJzacOzbiBkZSBsYSBBUElcbiAgICovXG4gIGNvbnN0cnVjdG9yKGh0dHBDbGllbnQ6IElGaXNjYWxhcGlIdHRwQ2xpZW50LCBhcGlWZXJzaW9uOiBzdHJpbmcpIHtcbiAgICBzdXBlcihodHRwQ2xpZW50LCAnaW52b2ljZXMnLCBhcGlWZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZShyZXF1ZXN0TW9kZWw6IEludm9pY2UpOiBQcm9taXNlPEFwaVJlc3BvbnNlPEludm9pY2U+PiB7XG4gICAgaWYgKCFyZXF1ZXN0TW9kZWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmVxdWVzdE1vZGVsIGNhbm5vdCBiZSBudWxsJyk7XG4gICAgfVxuXG4gICAgbGV0IGVuZHBvaW50OiBzdHJpbmc7XG5cbiAgICBzd2l0Y2ggKHJlcXVlc3RNb2RlbC50eXBlQ29kZSkge1xuICAgICAgY2FzZSAnSSc6XG4gICAgICAgIGVuZHBvaW50ID0gdGhpcy5JTkNPTUVfRU5EUE9JTlQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRSc6XG4gICAgICAgIGVuZHBvaW50ID0gdGhpcy5DUkVESVRfTk9URV9FTkRQT0lOVDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdQJzpcbiAgICAgICAgZW5kcG9pbnQgPSB0aGlzLlBBWU1FTlRfRU5EUE9JTlQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbnZvaWNlIHR5cGU6ICR7cmVxdWVzdE1vZGVsLnR5cGVDb2RlfWApO1xuICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZVJlcXVlc3Q8SW52b2ljZSwgSW52b2ljZT4oe1xuICAgICAgICBwYXRoOmVuZHBvaW50LFxuICAgICAgICBkYXRhOnJlcXVlc3RNb2RlbCxcbiAgICAgICAgbWV0aG9kOidQT1NUJyxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbGEgdW5hIGZhY3R1cmFcbiAgICogQHBhcmFtIHtDYW5jZWxJbnZvaWNlUmVxdWVzdH0gcmVxdWVzdCAtIFNvbGljaXR1ZCBwYXJhIGNhbmNlbGFyIGZhY3R1cmFcbiAgICogQHJldHVybnMge1Byb21pc2U8QXBpUmVzcG9uc2U8Q2FuY2VsSW52b2ljZVJlc3BvbnNlPj59IFJlc3B1ZXN0YSBkZSBsYSBjYW5jZWxhY2nDs25cbiAgICovXG4gIGFzeW5jIGNhbmNlbChyZXF1ZXN0OiBDYW5jZWxJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8QXBpUmVzcG9uc2U8Q2FuY2VsSW52b2ljZVJlc3BvbnNlPj4ge1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0IGNhbm5vdCBiZSBudWxsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZVJlcXVlc3Q8Q2FuY2VsSW52b2ljZVJlc3BvbnNlLCBDYW5jZWxJbnZvaWNlUmVxdWVzdD4oe1xuICAgICAgZGF0YTpyZXF1ZXN0LFxuICAgICAgbWV0aG9kOidERUxFVEUnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgUERGIGRlIHVuYSBmYWN0dXJhXG4gICAqIEBwYXJhbSB7Q3JlYXRlUGRmUmVxdWVzdH0gcmVxdWVzdCAtIFNvbGljaXR1ZCBwYXJhIGNyZWFyIFBERlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcGlSZXNwb25zZTxGaWxlUmVzcG9uc2U+Pn0gUmVzcHVlc3RhIGNvbiBlbCBhcmNoaXZvIFBERlxuICAgKi9cbiAgYXN5bmMgZ2V0UGRmKHJlcXVlc3Q6IENyZWF0ZVBkZlJlcXVlc3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlPEZpbGVSZXNwb25zZT4+IHtcbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncmVxdWVzdCBjYW5ub3QgYmUgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdDxGaWxlUmVzcG9uc2UsIENyZWF0ZVBkZlJlcXVlc3Q+KHtcbiAgICAgIHBhdGg6J3BkZicsXG4gICAgICBkYXRhOnJlcXVlc3QsXG4gICAgICBtZXRob2Q6J1BPU1QnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgWE1MIGRlIHVuYSBmYWN0dXJhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIElEIGRlIGxhIGZhY3R1cmFcbiAgICogQHJldHVybnMge1Byb21pc2U8QXBpUmVzcG9uc2U8RmlsZVJlc3BvbnNlPj59IFJlc3B1ZXN0YSBjb24gZWwgYXJjaGl2byBYTUxcbiAgICovXG4gIGFzeW5jIGdldFhtbChpZDogc3RyaW5nKTogUHJvbWlzZTxBcGlSZXNwb25zZTxGaWxlUmVzcG9uc2U+PiB7XG5cbiAgICBpZiAoIWlkIHx8IGlkLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaWQgY2Fubm90IGJlIG51bGwgb3IgZW1wdHknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdDxGaWxlUmVzcG9uc2UsIHN0cmluZz4oe1xuICAgICAgcGF0aDpgJHtpZH0veG1sYCxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgfSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnbDrWEgdW5hIGZhY3R1cmEgcG9yIGNvcnJlbyBlbGVjdHLDs25pY29cbiAgICogQHBhcmFtIHtTZW5kSW52b2ljZVJlcXVlc3R9IHJlcXVlc3QgLSBTb2xpY2l0dWQgcGFyYSBlbnZpYXIgZmFjdHVyYVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcGlSZXNwb25zZTxib29sZWFuPj59IFJlc3VsdGFkbyBkZSBsYSBvcGVyYWNpw7NuXG4gICAqL1xuICBhc3luYyBzZW5kKHJlcXVlc3Q6IFNlbmRJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8QXBpUmVzcG9uc2U8Ym9vbGVhbj4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdDxib29sZWFuLCBTZW5kSW52b2ljZVJlcXVlc3Q+KHtcbiAgICAgIHBhdGg6J3NlbmQnLFxuICAgICAgZGF0YTpyZXF1ZXN0LFxuICAgICAgbWV0aG9kOidQT1NUJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIGVzdGFkbyBkZSB1bmEgZmFjdHVyYVxuICAgKiBAcGFyYW0ge0ludm9pY2VTdGF0dXNSZXF1ZXN0fSByZXF1ZXN0IC0gU29saWNpdHVkIHBhcmEgY29uc3VsdGFyIGVzdGFkb1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcGlSZXNwb25zZTxJbnZvaWNlU3RhdHVzUmVzcG9uc2U+Pn0gUmVzcHVlc3RhIGNvbiBlbCBlc3RhZG8gZGUgbGEgZmFjdHVyYVxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzKHJlcXVlc3Q6IEludm9pY2VTdGF0dXNSZXF1ZXN0KTogUHJvbWlzZTxBcGlSZXNwb25zZTxJbnZvaWNlU3RhdHVzUmVzcG9uc2U+PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVSZXF1ZXN0PEludm9pY2VTdGF0dXNSZXNwb25zZSwgSW52b2ljZVN0YXR1c1JlcXVlc3Q+KHtcbiAgICAgICAgcGF0aDonc3RhdHVzJyxcbiAgICAgICAgZGF0YTpyZXF1ZXN0LFxuICAgICAgICBtZXRob2Q6J1BPU1QnLFxuICAgICAgfSk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,15 @@
1
+ import { BaseFiscalapiService } from './base-fiscalapi-service';
2
+ /**
3
+ * Implementación del servicio de personas
4
+ */
5
+ export class PersonService extends BaseFiscalapiService {
6
+ /**
7
+ * Crea una nueva instancia del servicio de personas
8
+ * @param {IFiscalapiHttpClient} httpClient - Cliente HTTP
9
+ * @param {string} apiVersion - Versión de la API
10
+ */
11
+ constructor(httpClient, apiVersion) {
12
+ super(httpClient, 'people', apiVersion);
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVyc29uLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHaEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLG9CQUE0QjtJQUM3RDs7OztPQUlHO0lBQ0gsWUFBWSxVQUFnQyxFQUFFLFVBQWtCO1FBQzlELEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgUGVyc29uIH0gZnJvbSAnLi4vbW9kZWxzL3BlcnNvbic7XG5pbXBvcnQgeyBJRmlzY2FsYXBpSHR0cENsaWVudCB9IGZyb20gJy4uL2h0dHAvZmlzY2FsYXBpLWh0dHAtY2xpZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYXNlRmlzY2FsYXBpU2VydmljZSB9IGZyb20gJy4vYmFzZS1maXNjYWxhcGktc2VydmljZSc7XG5pbXBvcnQgeyBJUGVyc29uU2VydmljZSB9IGZyb20gJy4uJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhY2nDs24gZGVsIHNlcnZpY2lvIGRlIHBlcnNvbmFzXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJzb25TZXJ2aWNlIGV4dGVuZHMgQmFzZUZpc2NhbGFwaVNlcnZpY2U8UGVyc29uPiBpbXBsZW1lbnRzIElQZXJzb25TZXJ2aWNlIHtcbiAgLyoqXG4gICAqIENyZWEgdW5hIG51ZXZhIGluc3RhbmNpYSBkZWwgc2VydmljaW8gZGUgcGVyc29uYXNcbiAgICogQHBhcmFtIHtJRmlzY2FsYXBpSHR0cENsaWVudH0gaHR0cENsaWVudCAtIENsaWVudGUgSFRUUFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpVmVyc2lvbiAtIFZlcnNpw7NuIGRlIGxhIEFQSVxuICAgKi9cbiAgY29uc3RydWN0b3IoaHR0cENsaWVudDogSUZpc2NhbGFwaUh0dHBDbGllbnQsIGFwaVZlcnNpb246IHN0cmluZykge1xuICAgIHN1cGVyKGh0dHBDbGllbnQsICdwZW9wbGUnLCBhcGlWZXJzaW9uKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,15 @@
1
+ import { BaseFiscalapiService } from './base-fiscalapi-service';
2
+ /**
3
+ * Implementación del servicio de productos
4
+ */
5
+ export class ProductService extends BaseFiscalapiService {
6
+ /**
7
+ * Crea una nueva instancia del servicio de productos
8
+ * @param {IFiscalapiHttpClient} httpClient - Cliente HTTP
9
+ * @param {string} apiVersion - Versión de la API
10
+ */
11
+ constructor(httpClient, apiVersion) {
12
+ super(httpClient, 'products', apiVersion);
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3Byb2R1Y3Qtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdoRTs7R0FFRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsb0JBQTZCO0lBQy9EOzs7O09BSUc7SUFDSCxZQUFZLFVBQWdDLEVBQUUsVUFBa0I7UUFDOUQsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uL21vZGVscy9wcm9kdWN0JztcbmltcG9ydCB7IElGaXNjYWxhcGlIdHRwQ2xpZW50IH0gZnJvbSAnLi4vaHR0cC9maXNjYWxhcGktaHR0cC1jbGllbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhc2VGaXNjYWxhcGlTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLWZpc2NhbGFwaS1zZXJ2aWNlJztcbmltcG9ydCB7IElQcm9kdWN0U2VydmljZSB9IGZyb20gJy4uJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhY2nDs24gZGVsIHNlcnZpY2lvIGRlIHByb2R1Y3Rvc1xuICovXG5leHBvcnQgY2xhc3MgUHJvZHVjdFNlcnZpY2UgZXh0ZW5kcyBCYXNlRmlzY2FsYXBpU2VydmljZTxQcm9kdWN0PiBpbXBsZW1lbnRzIElQcm9kdWN0U2VydmljZSB7XG4gIC8qKlxuICAgKiBDcmVhIHVuYSBudWV2YSBpbnN0YW5jaWEgZGVsIHNlcnZpY2lvIGRlIHByb2R1Y3Rvc1xuICAgKiBAcGFyYW0ge0lGaXNjYWxhcGlIdHRwQ2xpZW50fSBodHRwQ2xpZW50IC0gQ2xpZW50ZSBIVFRQXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcGlWZXJzaW9uIC0gVmVyc2nDs24gZGUgbGEgQVBJXG4gICAqL1xuICBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBJRmlzY2FsYXBpSHR0cENsaWVudCwgYXBpVmVyc2lvbjogc3RyaW5nKSB7XG4gICAgc3VwZXIoaHR0cENsaWVudCwgJ3Byb2R1Y3RzJywgYXBpVmVyc2lvbik7XG4gIH1cbn0iXX0=
@@ -0,0 +1,39 @@
1
+ import { BaseFiscalapiService } from './base-fiscalapi-service';
2
+ /**
3
+ * Implementación del servicio de archivos fiscales
4
+ */
5
+ export class TaxFileService extends BaseFiscalapiService {
6
+ /**
7
+ * Crea una nueva instancia del servicio de archivos fiscales
8
+ * @param {IFiscalapiHttpClient} httpClient - Cliente HTTP
9
+ * @param {string} apiVersion - Versión de la API
10
+ */
11
+ constructor(httpClient, apiVersion) {
12
+ super(httpClient, 'tax-files', apiVersion);
13
+ }
14
+ /**
15
+ * Obtiene el último par de ids de certificados válidos y vigente de una persona. Es decir sus certificados por defecto (ids)
16
+ *
17
+ * @param personId - Id de la persona propietaria de los certificados
18
+ * @returns Promise que resuelve en una respuesta API con una lista de un par de certificados, pero sin contenido, solo sus Ids
19
+ */
20
+ async getDefaultReferences(personId) {
21
+ // GET /api/v4/tax-files/{personId}/default-references
22
+ const path = `${personId}/default-references`;
23
+ const endpoint = this.buildEndpoint(path);
24
+ return this.httpClient.getAsync(endpoint);
25
+ }
26
+ /**
27
+ * Obtiene el último par de certificados válidos y vigente de una persona. Es decir sus certificados por defecto
28
+ *
29
+ * @param personId - Id de la persona dueña de los certificados
30
+ * @returns Promise que resuelve en una respuesta API con una lista de un par de certificados
31
+ */
32
+ async getDefaultValues(personId) {
33
+ // GET /api/v4/tax-files/{personId}/default-values
34
+ const path = `${personId}/default-values`;
35
+ const endpoint = this.buildEndpoint(path);
36
+ return this.httpClient.getAsync(endpoint);
37
+ }
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LWZpbGUtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90YXgtZmlsZS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2hFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWUsU0FBUSxvQkFBNkI7SUFDL0Q7Ozs7T0FJRztJQUNILFlBQVksVUFBZ0MsRUFBRSxVQUFrQjtRQUM5RCxLQUFLLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBR0M7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsb0JBQW9CLENBQUMsUUFBZ0I7UUFDekMsc0RBQXNEO1FBQ3RELE1BQU0sSUFBSSxHQUFHLEdBQUcsUUFBUSxxQkFBcUIsQ0FBQztRQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQVksUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7OztNQUtFO0lBQ0ssS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQWdCO1FBQzVDLGtEQUFrRDtRQUNsRCxNQUFNLElBQUksR0FBRyxHQUFHLFFBQVEsaUJBQWlCLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFZLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRheEZpbGUgfSBmcm9tICcuLi9tb2RlbHMvdGF4LWZpbGUnO1xuaW1wb3J0IHsgSUZpc2NhbGFwaUh0dHBDbGllbnQgfSBmcm9tICcuLi9odHRwL2Zpc2NhbGFwaS1odHRwLWNsaWVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi9jb21tb24vYXBpLXJlc3BvbnNlJztcbmltcG9ydCB7IEZpbGVSZXNwb25zZSB9IGZyb20gJy4uL2NvbW1vbi9maWxlLXJlc3BvbnNlJztcbmltcG9ydCB7IEJhc2VGaXNjYWxhcGlTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLWZpc2NhbGFwaS1zZXJ2aWNlJztcbmltcG9ydCB7IElUYXhGaWxlU2VydmljZSB9IGZyb20gJy4uJztcblxuLyoqXG4gKiBJbXBsZW1lbnRhY2nDs24gZGVsIHNlcnZpY2lvIGRlIGFyY2hpdm9zIGZpc2NhbGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBUYXhGaWxlU2VydmljZSBleHRlbmRzIEJhc2VGaXNjYWxhcGlTZXJ2aWNlPFRheEZpbGU+IGltcGxlbWVudHMgSVRheEZpbGVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIENyZWEgdW5hIG51ZXZhIGluc3RhbmNpYSBkZWwgc2VydmljaW8gZGUgYXJjaGl2b3MgZmlzY2FsZXNcbiAgICogQHBhcmFtIHtJRmlzY2FsYXBpSHR0cENsaWVudH0gaHR0cENsaWVudCAtIENsaWVudGUgSFRUUFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBpVmVyc2lvbiAtIFZlcnNpw7NuIGRlIGxhIEFQSVxuICAgKi9cbiAgY29uc3RydWN0b3IoaHR0cENsaWVudDogSUZpc2NhbGFwaUh0dHBDbGllbnQsIGFwaVZlcnNpb246IHN0cmluZykge1xuICAgIHN1cGVyKGh0dHBDbGllbnQsICd0YXgtZmlsZXMnLCBhcGlWZXJzaW9uKTtcbiAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBPYnRpZW5lIGVsIMO6bHRpbW8gcGFyIGRlIGlkcyBkZSBjZXJ0aWZpY2Fkb3MgdsOhbGlkb3MgeSB2aWdlbnRlIGRlIHVuYSBwZXJzb25hLiBFcyBkZWNpciBzdXMgY2VydGlmaWNhZG9zIHBvciBkZWZlY3RvIChpZHMpXG4gICAgICogXG4gICAgICogQHBhcmFtIHBlcnNvbklkIC0gSWQgZGUgbGEgcGVyc29uYSBwcm9waWV0YXJpYSBkZSBsb3MgY2VydGlmaWNhZG9zXG4gICAgICogQHJldHVybnMgUHJvbWlzZSBxdWUgcmVzdWVsdmUgZW4gdW5hIHJlc3B1ZXN0YSBBUEkgY29uIHVuYSBsaXN0YSBkZSB1biBwYXIgZGUgY2VydGlmaWNhZG9zLCBwZXJvIHNpbiBjb250ZW5pZG8sIHNvbG8gc3VzIElkc1xuICAgICAqL1xuICAgIGFzeW5jIGdldERlZmF1bHRSZWZlcmVuY2VzKHBlcnNvbklkOiBzdHJpbmcpOiBQcm9taXNlPEFwaVJlc3BvbnNlPFRheEZpbGVbXT4+IHtcbiAgICAgIC8vIEdFVCAvYXBpL3Y0L3RheC1maWxlcy97cGVyc29uSWR9L2RlZmF1bHQtcmVmZXJlbmNlc1xuICAgICAgY29uc3QgcGF0aCA9IGAke3BlcnNvbklkfS9kZWZhdWx0LXJlZmVyZW5jZXNgO1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmJ1aWxkRW5kcG9pbnQocGF0aCk7XG4gICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldEFzeW5jPFRheEZpbGVbXT4oZW5kcG9pbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogT2J0aWVuZSBlbCDDumx0aW1vIHBhciBkZSBjZXJ0aWZpY2Fkb3MgdsOhbGlkb3MgeSB2aWdlbnRlIGRlIHVuYSBwZXJzb25hLiBFcyBkZWNpciBzdXMgY2VydGlmaWNhZG9zIHBvciBkZWZlY3RvXG4gICAgKiBcbiAgICAqIEBwYXJhbSBwZXJzb25JZCAtIElkIGRlIGxhIHBlcnNvbmEgZHVlw7FhIGRlIGxvcyBjZXJ0aWZpY2Fkb3NcbiAgICAqIEByZXR1cm5zIFByb21pc2UgcXVlIHJlc3VlbHZlIGVuIHVuYSByZXNwdWVzdGEgQVBJIGNvbiB1bmEgbGlzdGEgZGUgdW4gcGFyIGRlIGNlcnRpZmljYWRvc1xuICAgICovXG4gICAgcHVibGljIGFzeW5jIGdldERlZmF1bHRWYWx1ZXMocGVyc29uSWQ6IHN0cmluZyk6IFByb21pc2U8QXBpUmVzcG9uc2U8VGF4RmlsZVtdPj4ge1xuICAgICAgLy8gR0VUIC9hcGkvdjQvdGF4LWZpbGVzL3twZXJzb25JZH0vZGVmYXVsdC12YWx1ZXNcbiAgICAgIGNvbnN0IHBhdGggPSBgJHtwZXJzb25JZH0vZGVmYXVsdC12YWx1ZXNgO1xuICAgICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmJ1aWxkRW5kcG9pbnQocGF0aCk7XG4gICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldEFzeW5jPFRheEZpbGVbXT4oZW5kcG9pbnQpO1xuICAgIH1cbn0iXX0=
@@ -0,0 +1,31 @@
1
+ import { DateTime } from 'luxon';
2
+ /**
3
+ * Formato de fecha SAT (para facturas mexicanas)
4
+ */
5
+ export const SAT_DATE_FORMAT = 'yyyy-MM-dd\'T\'HH:mm:ss';
6
+ /**
7
+ * Formatea una fecha de acuerdo al formato de fecha SAT
8
+ * @param {Date|string|DateTime} date - Fecha a formatear
9
+ * @returns {string} Cadena de fecha formateada
10
+ */
11
+ export function formatSatDate(date) {
12
+ if (typeof date === 'string') {
13
+ return DateTime.fromISO(date).toFormat(SAT_DATE_FORMAT);
14
+ }
15
+ else if (date instanceof Date) {
16
+ return DateTime.fromJSDate(date).toFormat(SAT_DATE_FORMAT);
17
+ }
18
+ else if (date instanceof DateTime) {
19
+ return date.toFormat(SAT_DATE_FORMAT);
20
+ }
21
+ throw new Error('Formato de fecha inválido');
22
+ }
23
+ /**
24
+ * Analiza una cadena de formato de fecha SAT en un objeto DateTime
25
+ * @param {string} dateStr - Cadena de fecha en formato SAT
26
+ * @returns {DateTime} Objeto DateTime
27
+ */
28
+ export function parseSatDate(dateStr) {
29
+ return DateTime.fromFormat(dateStr, SAT_DATE_FORMAT);
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9kYXRlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFHakM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcseUJBQXlCLENBQUM7QUFFekQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBOEI7SUFDMUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM3QixPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFELENBQUM7U0FBTSxJQUFJLElBQUksWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUNoQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdELENBQUM7U0FBTSxJQUFJLElBQUksWUFBWSxRQUFRLEVBQUUsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBZTtJQUN4QyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIgXG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcblxuXG4vKipcbiAqIEZvcm1hdG8gZGUgZmVjaGEgU0FUIChwYXJhIGZhY3R1cmFzIG1leGljYW5hcylcbiAqL1xuZXhwb3J0IGNvbnN0IFNBVF9EQVRFX0ZPUk1BVCA9ICd5eXl5LU1NLWRkXFwnVFxcJ0hIOm1tOnNzJztcblxuLyoqXG4gKiBGb3JtYXRlYSB1bmEgZmVjaGEgZGUgYWN1ZXJkbyBhbCBmb3JtYXRvIGRlIGZlY2hhIFNBVFxuICogQHBhcmFtIHtEYXRlfHN0cmluZ3xEYXRlVGltZX0gZGF0ZSAtIEZlY2hhIGEgZm9ybWF0ZWFyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDYWRlbmEgZGUgZmVjaGEgZm9ybWF0ZWFkYVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2F0RGF0ZShkYXRlOiBEYXRlIHwgc3RyaW5nIHwgRGF0ZVRpbWUpOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21JU08oZGF0ZSkudG9Gb3JtYXQoU0FUX0RBVEVfRk9STUFUKTtcbiAgfSBlbHNlIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tSlNEYXRlKGRhdGUpLnRvRm9ybWF0KFNBVF9EQVRFX0ZPUk1BVCk7XG4gIH0gZWxzZSBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGVUaW1lKSB7XG4gICAgcmV0dXJuIGRhdGUudG9Gb3JtYXQoU0FUX0RBVEVfRk9STUFUKTtcbiAgfVxuICBcbiAgdGhyb3cgbmV3IEVycm9yKCdGb3JtYXRvIGRlIGZlY2hhIGludsOhbGlkbycpO1xufVxuXG4vKipcbiAqIEFuYWxpemEgdW5hIGNhZGVuYSBkZSBmb3JtYXRvIGRlIGZlY2hhIFNBVCBlbiB1biBvYmpldG8gRGF0ZVRpbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlU3RyIC0gQ2FkZW5hIGRlIGZlY2hhIGVuIGZvcm1hdG8gU0FUXG4gKiBAcmV0dXJucyB7RGF0ZVRpbWV9IE9iamV0byBEYXRlVGltZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTYXREYXRlKGRhdGVTdHI6IHN0cmluZyk6IERhdGVUaW1lIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdChkYXRlU3RyLCBTQVRfREFURV9GT1JNQVQpO1xuICB9XG4gICJdfQ==
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Codifica una cadena a base64
3
+ * @param {string} text - Texto a codificar
4
+ * @returns {string} Cadena codificada en base64
5
+ */
6
+ export function encodeToBase64(text) {
7
+ return Buffer.from(text).toString('base64');
8
+ }
9
+ /**
10
+ * Decodifica una cadena base64
11
+ * @param {string} base64Text - Cadena codificada en base64
12
+ * @returns {string} Cadena decodificada
13
+ */
14
+ export function decodeFromBase64(base64Text) {
15
+ return Buffer.from(base64Text, 'base64').toString('utf8');
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RpbmctdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvZW5jb2RpbmctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBWTtJQUN2QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFVBQWtCO0lBQ2pELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIgXG4vKipcbiAqIENvZGlmaWNhIHVuYSBjYWRlbmEgYSBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGV4dG8gYSBjb2RpZmljYXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IENhZGVuYSBjb2RpZmljYWRhIGVuIGJhc2U2NFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVG9CYXNlNjQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGV4dCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG4gIFxuICAvKipcbiAgICogRGVjb2RpZmljYSB1bmEgY2FkZW5hIGJhc2U2NFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0VGV4dCAtIENhZGVuYSBjb2RpZmljYWRhIGVuIGJhc2U2NFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBDYWRlbmEgZGVjb2RpZmljYWRhXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gZGVjb2RlRnJvbUJhc2U2NChiYXNlNjRUZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShiYXNlNjRUZXh0LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgfSJdfQ==
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Comprueba si un valor es nulo o indefinido
3
+ * @param {any} value - Valor a comprobar
4
+ * @returns {boolean} Verdadero si el valor es nulo o indefinido, falso en caso contrario
5
+ */
6
+ export function isNullOrUndefined(value) {
7
+ return value === null || value === undefined;
8
+ }
9
+ /**
10
+ * Comprueba si una cadena es nula, indefinida o vacía
11
+ * @param {string|null|undefined} value - Cadena a comprobar
12
+ * @returns {boolean} Verdadero si la cadena es nula, indefinida o vacía, falso en caso contrario
13
+ */
14
+ export function isNullOrEmpty(value) {
15
+ return isNullOrUndefined(value) || value === '';
16
+ }
17
+ /**
18
+ * Comprueba si un array es nulo, indefinido o vacío
19
+ * @param {T[]|null|undefined} value - Array a comprobar
20
+ * @returns {boolean} Verdadero si el array es nulo, indefinido o vacío, falso en caso contrario
21
+ * @template T
22
+ */
23
+ export function isArrayNullOrEmpty(value) {
24
+ return isNullOrUndefined(value) || (Array.isArray(value) && value.length === 0);
25
+ }
26
+ /**
27
+ * Comprueba si un objeto es nulo, indefinido o no tiene propiedades
28
+ * @param {object|null|undefined} value - Objeto a comprobar
29
+ * @returns {boolean} Verdadero si el objeto es nulo, indefinido o no tiene propiedades, falso en caso contrario
30
+ */
31
+ export function isObjectEmpty(value) {
32
+ return isNullOrUndefined(value) || (typeof value === 'object' && value !== null && Object.keys(value).length === 0);
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy92YWxpZGF0aW9uLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBVTtJQUN4QyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBZ0M7SUFDNUQsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBSSxLQUE2QjtJQUNqRSxPQUFPLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFnQztJQUM1RCxPQUFPLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiBcbi8qKlxuICogQ29tcHJ1ZWJhIHNpIHVuIHZhbG9yIGVzIG51bG8gbyBpbmRlZmluaWRvXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBWYWxvciBhIGNvbXByb2JhclxuICogQHJldHVybnMge2Jvb2xlYW59IFZlcmRhZGVybyBzaSBlbCB2YWxvciBlcyBudWxvIG8gaW5kZWZpbmlkbywgZmFsc28gZW4gY2FzbyBjb250cmFyaW9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBydWViYSBzaSB1bmEgY2FkZW5hIGVzIG51bGEsIGluZGVmaW5pZGEgbyB2YWPDrWFcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVsbHx1bmRlZmluZWR9IHZhbHVlIC0gQ2FkZW5hIGEgY29tcHJvYmFyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBWZXJkYWRlcm8gc2kgbGEgY2FkZW5hIGVzIG51bGEsIGluZGVmaW5pZGEgbyB2YWPDrWEsIGZhbHNvIGVuIGNhc28gY29udHJhcmlvXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JFbXB0eSh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkgfHwgdmFsdWUgPT09ICcnO1xuICB9XG4gIFxuICAvKipcbiAgICogQ29tcHJ1ZWJhIHNpIHVuIGFycmF5IGVzIG51bG8sIGluZGVmaW5pZG8gbyB2YWPDrW9cbiAgICogQHBhcmFtIHtUW118bnVsbHx1bmRlZmluZWR9IHZhbHVlIC0gQXJyYXkgYSBjb21wcm9iYXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFZlcmRhZGVybyBzaSBlbCBhcnJheSBlcyBudWxvLCBpbmRlZmluaWRvIG8gdmFjw61vLCBmYWxzbyBlbiBjYXNvIGNvbnRyYXJpb1xuICAgKiBAdGVtcGxhdGUgVFxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlOdWxsT3JFbXB0eTxUPih2YWx1ZTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb21wcnVlYmEgc2kgdW4gb2JqZXRvIGVzIG51bG8sIGluZGVmaW5pZG8gbyBubyB0aWVuZSBwcm9waWVkYWRlc1xuICAgKiBAcGFyYW0ge29iamVjdHxudWxsfHVuZGVmaW5lZH0gdmFsdWUgLSBPYmpldG8gYSBjb21wcm9iYXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFZlcmRhZGVybyBzaSBlbCBvYmpldG8gZXMgbnVsbywgaW5kZWZpbmlkbyBvIG5vIHRpZW5lIHByb3BpZWRhZGVzLCBmYWxzbyBlbiBjYXNvIGNvbnRyYXJpb1xuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkodmFsdWU6IG9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpIHx8ICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApO1xuICB9Il19
@@ -0,0 +1,7 @@
1
+ import { IFiscalapiService } from './fiscalapi-service.interface';
2
+ import { ApiKey } from '../models/api-key';
3
+ /**
4
+ * Interfaz del servicio de claves de API
5
+ */
6
+ export interface IApiKeyService extends IFiscalapiService<ApiKey> {
7
+ }