@facturacr/atv-sdk 0.0.18-beta → 0.0.20-beta

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 (150) hide show
  1. package/dist/__tests__/stubs/createDocument.stub.d.ts +2 -0
  2. package/dist/__tests__/stubs/createDocument.stub.js +78 -0
  3. package/dist/__tests__/stubs/createDocument.stub.js.map +1 -0
  4. package/dist/__tests__/stubs/frontendRequest.stub.d.ts +3 -0
  5. package/dist/__tests__/stubs/frontendRequest.stub.js +61 -0
  6. package/dist/__tests__/stubs/frontendRequest.stub.js.map +1 -0
  7. package/dist/__tests__/stubs/token.stub.d.ts +17 -0
  8. package/dist/__tests__/stubs/token.stub.js +21 -0
  9. package/dist/__tests__/stubs/token.stub.js.map +1 -0
  10. package/dist/__tests__/tests/ATV/index.test.d.ts +1 -0
  11. package/dist/__tests__/tests/ATV/index.test.js +62 -0
  12. package/dist/__tests__/tests/ATV/index.test.js.map +1 -0
  13. package/dist/__tests__/tests/getClave.test.d.ts +1 -0
  14. package/dist/__tests__/tests/getClave.test.js +15 -0
  15. package/dist/__tests__/tests/getClave.test.js.map +1 -0
  16. package/dist/__tests__/tests/getToken.test.d.ts +0 -0
  17. package/dist/__tests__/tests/getToken.test.js +28 -0
  18. package/dist/__tests__/tests/getToken.test.js.map +1 -0
  19. package/dist/__tests__/tests/lib/getClave.test.d.ts +1 -0
  20. package/dist/__tests__/tests/lib/getClave.test.js +15 -0
  21. package/dist/__tests__/tests/lib/getClave.test.js.map +1 -0
  22. package/dist/__tests__/tests/services/getToken.test.d.ts +1 -0
  23. package/dist/__tests__/tests/services/getToken.test.js +27 -0
  24. package/dist/__tests__/tests/services/getToken.test.js.map +1 -0
  25. package/dist/src/ATV/core/Clave.d.ts +18 -0
  26. package/dist/src/ATV/core/Clave.js +29 -0
  27. package/dist/src/ATV/core/Clave.js.map +1 -0
  28. package/dist/src/ATV/core/Document.d.ts +46 -0
  29. package/dist/src/ATV/core/Document.js +80 -0
  30. package/dist/src/ATV/core/Document.js.map +1 -0
  31. package/dist/src/ATV/core/DocumentType.d.ts +8 -0
  32. package/dist/src/ATV/core/DocumentType.js +20 -0
  33. package/dist/src/ATV/core/DocumentType.js.map +1 -0
  34. package/dist/src/ATV/core/FullConsecutive.d.ts +13 -0
  35. package/dist/src/ATV/core/FullConsecutive.js +22 -0
  36. package/dist/src/ATV/core/FullConsecutive.js.map +1 -0
  37. package/dist/src/ATV/core/OrderLine.d.ts +34 -0
  38. package/dist/src/ATV/core/OrderLine.js +63 -0
  39. package/dist/src/ATV/core/OrderLine.js.map +1 -0
  40. package/dist/src/ATV/core/Person.d.ts +36 -0
  41. package/dist/src/ATV/core/Person.js +37 -0
  42. package/dist/src/ATV/core/Person.js.map +1 -0
  43. package/dist/src/ATV/core/Summary.type.d.ts +20 -0
  44. package/dist/src/ATV/core/Summary.type.js +3 -0
  45. package/dist/src/ATV/core/Summary.type.js.map +1 -0
  46. package/dist/src/ATV/core/documentNames.types.d.ts +1 -0
  47. package/dist/src/ATV/core/documentNames.types.js +3 -0
  48. package/dist/src/ATV/core/documentNames.types.js.map +1 -0
  49. package/dist/src/ATV/index.d.ts +32 -0
  50. package/dist/src/ATV/index.js +134 -0
  51. package/dist/src/ATV/index.js.map +1 -0
  52. package/dist/src/ATV/mappers/billDocToAtv.d.ts +5 -0
  53. package/dist/src/ATV/mappers/billDocToAtv.js +99 -0
  54. package/dist/src/ATV/mappers/billDocToAtv.js.map +1 -0
  55. package/dist/src/ATV/types.d.ts +32 -0
  56. package/dist/src/ATV/types.js +3 -0
  57. package/dist/src/ATV/types.js.map +1 -0
  58. package/dist/src/ATV/useCases/createDocument/index.d.ts +16 -0
  59. package/dist/src/ATV/useCases/createDocument/index.js +140 -0
  60. package/dist/src/ATV/useCases/createDocument/index.js.map +1 -0
  61. package/dist/src/ATV/useCases/createDocument/types.d.ts +74 -0
  62. package/dist/src/ATV/useCases/createDocument/types.js +3 -0
  63. package/dist/src/ATV/useCases/createDocument/types.js.map +1 -0
  64. package/dist/src/confirmXML.d.ts +8 -0
  65. package/dist/src/confirmXML.js +44 -0
  66. package/dist/src/confirmXML.js.map +1 -0
  67. package/dist/src/creditNote.d.ts +14 -0
  68. package/dist/src/creditNote.js +77 -0
  69. package/dist/src/creditNote.js.map +1 -0
  70. package/dist/src/data/codigoMoneda.d.ts +1 -0
  71. package/dist/src/data/codigoMoneda.js +184 -0
  72. package/dist/src/data/codigoMoneda.js.map +1 -0
  73. package/dist/src/data/exoneracion.d.ts +1 -0
  74. package/dist/src/data/exoneracion.js +15 -0
  75. package/dist/src/data/exoneracion.js.map +1 -0
  76. package/dist/src/data/impuestos.d.ts +25 -0
  77. package/dist/src/data/impuestos.js +51 -0
  78. package/dist/src/data/impuestos.js.map +1 -0
  79. package/dist/src/data/tipoCedula.d.ts +7 -0
  80. package/dist/src/data/tipoCedula.js +17 -0
  81. package/dist/src/data/tipoCedula.js.map +1 -0
  82. package/dist/src/data/tipoDocumento.d.ts +26 -0
  83. package/dist/src/data/tipoDocumento.js +30 -0
  84. package/dist/src/data/tipoDocumento.js.map +1 -0
  85. package/dist/src/data/unidadesMedida.d.ts +5 -0
  86. package/dist/src/data/unidadesMedida.js +141 -0
  87. package/dist/src/data/unidadesMedida.js.map +1 -0
  88. package/dist/src/debitNote.d.ts +14 -0
  89. package/dist/src/debitNote.js +77 -0
  90. package/dist/src/debitNote.js.map +1 -0
  91. package/dist/src/electronicBill.d.ts +3 -0
  92. package/dist/src/electronicBill.js +61 -0
  93. package/dist/src/electronicBill.js.map +1 -0
  94. package/dist/src/helpers/comprobantes.d.ts +7 -0
  95. package/dist/src/helpers/comprobantes.js +92 -0
  96. package/dist/src/helpers/comprobantes.js.map +1 -0
  97. package/dist/src/index.d.ts +2 -0
  98. package/dist/src/index.js.map +1 -0
  99. package/dist/src/lib/genClave/index.d.ts +9 -0
  100. package/dist/src/lib/genClave/index.js +119 -0
  101. package/dist/src/lib/genClave/index.js.map +1 -0
  102. package/dist/src/lib/genJSON/confirmXML.d.ts +7 -0
  103. package/dist/src/lib/genJSON/confirmXML.js +46 -0
  104. package/dist/src/lib/genJSON/confirmXML.js.map +1 -0
  105. package/dist/src/lib/genJSON/index.d.ts +5 -0
  106. package/dist/src/lib/genJSON/index.js +135 -0
  107. package/dist/src/lib/genJSON/index.js.map +1 -0
  108. package/dist/src/lib/genXML/index.d.ts +7 -0
  109. package/dist/src/lib/genXML/index.js +51 -0
  110. package/dist/src/lib/genXML/index.js.map +1 -0
  111. package/dist/src/lib/genXML/sigXML/genKeysAndCert.d.ts +6 -0
  112. package/dist/src/lib/genXML/sigXML/genKeysAndCert.js +72 -0
  113. package/dist/src/lib/genXML/sigXML/genKeysAndCert.js.map +1 -0
  114. package/dist/src/lib/genXML/sigXML/index.d.ts +1 -0
  115. package/dist/src/lib/genXML/sigXML/index.js +88 -0
  116. package/dist/src/lib/genXML/sigXML/index.js.map +1 -0
  117. package/dist/src/lib/genXML/xmlConfig.d.ts +55 -0
  118. package/dist/src/lib/genXML/xmlConfig.js +36 -0
  119. package/dist/src/lib/genXML/xmlConfig.js.map +1 -0
  120. package/dist/src/services/getToken/GetToken.d.ts +8 -0
  121. package/dist/src/services/getToken/GetToken.js +66 -0
  122. package/dist/src/services/getToken/GetToken.js.map +1 -0
  123. package/dist/src/services/getToken/__tests__/GetToken.test.d.ts +1 -0
  124. package/dist/src/services/getToken/__tests__/GetToken.test.js +86 -0
  125. package/dist/src/services/getToken/__tests__/GetToken.test.js.map +1 -0
  126. package/dist/src/services/getToken/index.d.ts +3 -0
  127. package/dist/src/services/getToken/index.js +22 -0
  128. package/dist/src/services/getToken/index.js.map +1 -0
  129. package/dist/src/services/getToken/types.d.ts +27 -0
  130. package/dist/src/services/getToken/types.js +3 -0
  131. package/dist/src/services/getToken/types.js.map +1 -0
  132. package/dist/src/services/send/index.d.ts +2 -0
  133. package/dist/src/services/send/index.js +40 -0
  134. package/dist/src/services/send/index.js.map +1 -0
  135. package/dist/src/types/xml/notaDeCredito.d.ts +21 -0
  136. package/dist/src/types/xml/notaDeCredito.js +3 -0
  137. package/dist/src/types/xml/notaDeCredito.js.map +1 -0
  138. package/dist/src/types/xml/notaDeDebito.d.ts +21 -0
  139. package/dist/src/types/xml/notaDeDebito.js +3 -0
  140. package/dist/src/types/xml/notaDeDebito.js.map +1 -0
  141. package/examples/README.md +4 -0
  142. package/examples/createAndSend.ts +1 -1
  143. package/package.json +1 -1
  144. package/src/ATV/index.ts +0 -1
  145. package/src/ATV/mappers/billDocToAtv.ts +2 -2
  146. package/src/ATV/useCases/createDocument/index.ts +2 -1
  147. package/src/ATV/useCases/createDocument/types.ts +3 -0
  148. package/src/lib/genJSON/index.ts +2 -2
  149. package/src/types/facturaInterfaces.d.ts +1 -1
  150. package/tsconfig.json +1 -1
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.xmlExtructures = exports.defaultOptions = exports.declaration = void 0;
4
+ const FE_XML_SCHEMA_NS = 'https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/facturaElectronica';
5
+ const FE_XML_SCHEMA_XSI = 'https://www.hacienda.go.cr/ATV/ComprobanteElectronico/docs/esquemas/2016/v4.3/FacturaElectronica_V4.3.xsd';
6
+ const FEE_XML_SCHEMA_NS = 'https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/facturaElectronicaExportacion';
7
+ const FEE_XML_SCHEMA_XSI = 'https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/facturaElectronicaExportacion.xsd';
8
+ const MR_XML_SCHEMA_NS = 'https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/mensajeReceptor';
9
+ const NC_XML_SCHEMA_NS = 'https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/notaCreditoElectronica';
10
+ const NC_XML_SCHEMA_XSI = 'https://www.hacienda.go.cr/ATV/ComprobanteElectronico/docs/esquemas/2016/v4.3/NotaCreditoElectronica_V4.3.xsd';
11
+ const ND_XML_SCHEMA_NS = 'https://cdn.comprobanteselectronicos.go.cr/xml-schemas/v4.3/notaDebitoElectronica';
12
+ const ND_XML_SCHEMA_XSI = 'https://www.hacienda.go.cr/ATV/ComprobanteElectronico/docs/esquemas/2016/v4.3/NotaDebitoElectronica_V4.3.xsd';
13
+ exports.declaration = '<?xml version="1.0" encoding="utf-8"?>';
14
+ exports.defaultOptions = {
15
+ attrNodeName: 'attr'
16
+ };
17
+ const COMMON_STRUCTURE = {
18
+ 'xmlns:ds': 'http://www.w3.org/2000/09/xmldsig#',
19
+ 'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema',
20
+ 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance'
21
+ };
22
+ const FE_XML_ATTRS = Object.assign(Object.assign({ xmlns: FE_XML_SCHEMA_NS }, COMMON_STRUCTURE), { 'xsi:schemaLocation': `${FE_XML_SCHEMA_NS} ${FE_XML_SCHEMA_XSI}` });
23
+ const FEE_XML_ATTRS = Object.assign(Object.assign({ xmlns: FE_XML_SCHEMA_NS }, COMMON_STRUCTURE), { 'xsi:schemaLocation': `${FEE_XML_SCHEMA_NS} ${FEE_XML_SCHEMA_XSI}` });
24
+ const NC_XML_ATTRS = Object.assign(Object.assign({ xmlns: NC_XML_SCHEMA_NS }, COMMON_STRUCTURE), { 'xsi:schemaLocation': `${NC_XML_SCHEMA_NS} ${NC_XML_SCHEMA_XSI}` });
25
+ const ND_XML_ATTRS = Object.assign(Object.assign({ xmlns: NC_XML_SCHEMA_NS }, COMMON_STRUCTURE), { 'xsi:schemaLocation': `${ND_XML_SCHEMA_NS} ${ND_XML_SCHEMA_XSI}` });
26
+ const MR_XML_ATTRS = Object.assign(Object.assign({ xmlns: MR_XML_SCHEMA_NS }, COMMON_STRUCTURE), { 'xsi:schemaLocation': `${MR_XML_SCHEMA_NS}` });
27
+ exports.xmlExtructures = {
28
+ FacturaElectronica: FE_XML_ATTRS,
29
+ FacturaElectronicaExportacion: FEE_XML_ATTRS,
30
+ NotaCreditoElectronica: NC_XML_ATTRS,
31
+ NotaDebitoElectronica: ND_XML_ATTRS,
32
+ CCE: MR_XML_ATTRS,
33
+ CPCE: MR_XML_ATTRS,
34
+ RCE: MR_XML_ATTRS
35
+ };
36
+ //# sourceMappingURL=xmlConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xmlConfig.js","sourceRoot":"","sources":["../../../../src/lib/genXML/xmlConfig.ts"],"names":[],"mappings":";;;AAAA,MAAM,gBAAgB,GAAG,gFAAgF,CAAA;AACzG,MAAM,iBAAiB,GAAG,2GAA2G,CAAA;AAErI,MAAM,iBAAiB,GAAG,2FAA2F,CAAA;AACrH,MAAM,kBAAkB,GAAG,+FAA+F,CAAA;AAE1H,MAAM,gBAAgB,GAAG,6EAA6E,CAAA;AAEtG,MAAM,gBAAgB,GAAG,oFAAoF,CAAA;AAC7G,MAAM,iBAAiB,GAAG,+GAA+G,CAAA;AAEzI,MAAM,gBAAgB,GAAG,mFAAmF,CAAA;AAC5G,MAAM,iBAAiB,GAAG,8GAA8G,CAAA;AAE3H,QAAA,WAAW,GAAG,wCAAwC,CAAA;AAEtD,QAAA,cAAc,GAAG;IAC5B,YAAY,EAAE,MAAM;CACrB,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB,UAAU,EAAE,oCAAoC;IAChD,WAAW,EAAE,kCAAkC;IAC/C,WAAW,EAAE,2CAA2C;CACzD,CAAA;AAED,MAAM,YAAY,iCAChB,KAAK,EAAE,gBAAgB,IACpB,gBAAgB,KACnB,oBAAoB,EAAE,GAAG,gBAAgB,IAAI,iBAAiB,EAAE,GACjE,CAAA;AAED,MAAM,aAAa,iCACjB,KAAK,EAAE,gBAAgB,IACpB,gBAAgB,KACnB,oBAAoB,EAAE,GAAG,iBAAiB,IAAI,kBAAkB,EAAE,GACnE,CAAA;AAED,MAAM,YAAY,iCAChB,KAAK,EAAE,gBAAgB,IACpB,gBAAgB,KACnB,oBAAoB,EAAE,GAAG,gBAAgB,IAAI,iBAAiB,EAAE,GACjE,CAAA;AAED,MAAM,YAAY,iCAChB,KAAK,EAAE,gBAAgB,IACpB,gBAAgB,KACnB,oBAAoB,EAAE,GAAG,gBAAgB,IAAI,iBAAiB,EAAE,GACjE,CAAA;AAED,MAAM,YAAY,iCAChB,KAAK,EAAE,gBAAgB,IACpB,gBAAgB,KACnB,oBAAoB,EAAE,GAAG,gBAAgB,EAAE,GAC5C,CAAA;AAEY,QAAA,cAAc,GAAG;IAC5B,kBAAkB,EAAE,YAAY;IAChC,6BAA6B,EAAE,aAAa;IAC5C,sBAAsB,EAAE,YAAY;IACpC,qBAAqB,EAAE,YAAY;IACnC,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,YAAY;CAClB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { GetTokenDto, GetTokenResponse } from './types';
2
+ import { ATV } from "../../ATV";
3
+ export declare class GetToken {
4
+ private readonly props;
5
+ constructor(scope: ATV);
6
+ execute({ username, password }: GetTokenDto): Promise<GetTokenResponse>;
7
+ private initProps;
8
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.GetToken = void 0;
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const querystring_1 = __importDefault(require("querystring"));
18
+ const MAIN_DOMAIN = 'https://idp.comprobanteselectronicos.go.cr';
19
+ const options = {
20
+ prod: {
21
+ serviceUrl: `${MAIN_DOMAIN}/auth/realms/rut/protocol/openid-connect/token`,
22
+ clientId: 'api-prod'
23
+ },
24
+ stg: {
25
+ serviceUrl: `${MAIN_DOMAIN}/auth/realms/rut-stag/protocol/openid-connect/token`,
26
+ clientId: 'api-stag'
27
+ }
28
+ };
29
+ class GetToken {
30
+ constructor(scope) {
31
+ this.props = this.initProps(scope.mode);
32
+ }
33
+ execute(_a) {
34
+ return __awaiter(this, arguments, void 0, function* ({ username, password }) {
35
+ const fetchResponse = yield axios_1.default.post(this.props.serviceUrl, querystring_1.default.stringify({
36
+ // eslint-disable-next-line @typescript-eslint/camelcase
37
+ client_id: this.props.clientId,
38
+ // eslint-disable-next-line @typescript-eslint/camelcase
39
+ grant_type: 'password',
40
+ // eslint-disable-next-line @typescript-eslint/camelcase
41
+ client_secret: '',
42
+ username,
43
+ password
44
+ }), {
45
+ headers: {
46
+ 'Content-Type': 'application/x-www-form-urlencoded'
47
+ }
48
+ });
49
+ const data = fetchResponse.data;
50
+ return {
51
+ accessToken: data.access_token,
52
+ expiresIn: data.expires_in,
53
+ refreshToken: data.refresh_token,
54
+ refreshExpiresIn: data.refresh_expires_in,
55
+ sessionState: data.session_state,
56
+ tokenType: data.token_type,
57
+ scope: data.scope
58
+ };
59
+ });
60
+ }
61
+ initProps(mode) {
62
+ return options[mode] || options.prod;
63
+ }
64
+ }
65
+ exports.GetToken = GetToken;
66
+ //# sourceMappingURL=GetToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetToken.js","sourceRoot":"","sources":["../../../../src/services/getToken/GetToken.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAAyB;AACzB,8DAA4B;AAI5B,MAAM,WAAW,GAAG,4CAA4C,CAAA;AAChE,MAAM,OAAO,GAA4C;IACvD,IAAI,EAAE;QACJ,UAAU,EAAE,GAAG,WAAW,gDAAgD;QAC1E,QAAQ,EAAE,UAAU;KACrB;IACD,GAAG,EAAE;QACH,UAAU,EAAE,GAAG,WAAW,qDAAqD;QAC/E,QAAQ,EAAE,UAAU;KACrB;CACF,CAAA;AAED,MAAa,QAAQ;IAEnB,YAAY,KAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAEY,OAAO;6DAAC,EAAE,QAAQ,EAAE,QAAQ,EAAe;YACtD,MAAM,aAAa,GAAG,MAAM,eAAK,CAAC,IAAI,CAAsB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,qBAAE,CAAC,SAAS,CAAC;gBAC9F,wDAAwD;gBACxD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;gBAC9B,wDAAwD;gBACxD,UAAU,EAAE,UAAU;gBACtB,wDAAwD;gBACxD,aAAa,EAAE,EAAE;gBACjB,QAAQ;gBACR,QAAQ;aACT,CAAC,EAAE;gBACF,OAAO,EAAE;oBACP,cAAc,EAAE,mCAAmC;iBACpD;aACF,CAAC,CAAA;YACF,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAA;YAC/B,OAAO;gBACL,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,gBAAgB,EAAE,IAAI,CAAC,kBAAkB;gBACzC,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAA;QACH,CAAC;KAAA;IAEO,SAAS,CAAC,IAAY;QAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAA;IACtC,CAAC;CACF;AApCD,4BAoCC"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ /* eslint-disable @typescript-eslint/camelcase */
16
+ const axios_1 = __importDefault(require("axios"));
17
+ const querystring_1 = __importDefault(require("querystring"));
18
+ const GetToken_1 = require("../GetToken");
19
+ const ATV_1 = require("../../../ATV");
20
+ jest.mock('@src/ATV');
21
+ jest.mock('axios');
22
+ jest.mock('querystring');
23
+ const fetchResponse = {
24
+ data: {
25
+ access_token: 'access_token',
26
+ expires_in: 3600,
27
+ refresh_token: 'refresh_token',
28
+ refresh_expires_in: 1209600,
29
+ session_state: 'session_state',
30
+ token_type: 'Bearer',
31
+ scope: 'openid'
32
+ }
33
+ };
34
+ describe('GetToken', () => {
35
+ let atv;
36
+ let getToken;
37
+ beforeEach(() => {
38
+ atv = new ATV_1.ATV();
39
+ getToken = new GetToken_1.GetToken(atv);
40
+ axios_1.default.post.mockResolvedValue(fetchResponse);
41
+ });
42
+ afterEach(() => {
43
+ jest.resetAllMocks();
44
+ });
45
+ it('should call axios.post with correct parameters', () => __awaiter(void 0, void 0, void 0, function* () {
46
+ // Arrange
47
+ const dto = {
48
+ username: 'testuser',
49
+ password: 'testpassword'
50
+ };
51
+ const expectedUrl = 'https://idp.comprobanteselectronicos.go.cr/auth/realms/rut/protocol/openid-connect/token';
52
+ const expectedData = querystring_1.default.stringify({
53
+ client_id: 'api-stag',
54
+ grant_type: 'password',
55
+ client_secret: '',
56
+ username: 'testuser',
57
+ password: 'testpassword'
58
+ });
59
+ const expectedConfig = {
60
+ headers: {
61
+ 'Content-Type': 'application/x-www-form-urlencoded'
62
+ }
63
+ };
64
+ // Act
65
+ yield getToken.execute(dto);
66
+ // Assert
67
+ expect(axios_1.default.post).toHaveBeenCalledWith(expectedUrl, expectedData, expectedConfig);
68
+ }));
69
+ it('should return expected response', () => __awaiter(void 0, void 0, void 0, function* () {
70
+ // Arrange
71
+ const expectedResponse = {
72
+ accessToken: 'access_token',
73
+ expiresIn: 3600,
74
+ refreshToken: 'refresh_token',
75
+ refreshExpiresIn: 1209600,
76
+ sessionState: 'session_state',
77
+ tokenType: 'Bearer',
78
+ scope: 'openid'
79
+ };
80
+ // Act
81
+ const result = yield getToken.execute({ username: 'testuser', password: 'testpassword' });
82
+ // Assert
83
+ expect(result).toEqual(expectedResponse);
84
+ }));
85
+ });
86
+ //# sourceMappingURL=GetToken.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GetToken.test.js","sourceRoot":"","sources":["../../../../../src/services/getToken/__tests__/GetToken.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,kDAAyB;AACzB,8DAA4B;AAC5B,0CAAsC;AACtC,sCAA8B;AAG9B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AACrB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAClB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAExB,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE;QACJ,YAAY,EAAE,cAAc;QAC5B,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,eAAe;QAC9B,kBAAkB,EAAE,OAAO;QAC3B,aAAa,EAAE,eAAe;QAC9B,UAAU,EAAE,QAAQ;QACpB,KAAK,EAAE,QAAQ;KAChB;CACF,CAAA;AACD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,GAAQ,CAAA;IACZ,IAAI,QAAkB,CAAA;IAEtB,UAAU,CAAC,GAAG,EAAE;QACd,GAAG,GAAG,IAAI,SAAG,EAAE,CAAA;QACf,QAAQ,GAAG,IAAI,mBAAQ,CAAC,GAAG,CAAC,CAC3B;QAAC,eAAK,CAAC,IAAkB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,GAAS,EAAE;QAC9D,UAAU;QACV,MAAM,GAAG,GAAgB;YACvB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,cAAc;SACzB,CAAA;QACD,MAAM,WAAW,GAAG,0FAA0F,CAAA;QAC9G,MAAM,YAAY,GAAG,qBAAE,CAAC,SAAS,CAAC;YAChC,SAAS,EAAE,UAAU;YACrB,UAAU,EAAE,UAAU;YACtB,aAAa,EAAE,EAAE;YACjB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAA;QACF,MAAM,cAAc,GAAG;YACrB,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;aACpD;SACF,CAAA;QAED,MAAM;QACN,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAE3B,SAAS;QACT,MAAM,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAA;IACpF,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAS,EAAE;QAC/C,UAAU;QACV,MAAM,gBAAgB,GAAG;YACvB,WAAW,EAAE,cAAc;YAC3B,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,eAAe;YAC7B,gBAAgB,EAAE,OAAO;YACzB,YAAY,EAAE,eAAe;YAC7B,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,QAAQ;SAChB,CAAA;QAED,MAAM;QACN,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAA;QAEzF,SAAS;QACT,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC1C,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { postTokenOptions } from "./interfaces";
2
+ declare const _default: (postOptions: postTokenOptions) => Promise<any>;
3
+ export default _default;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const axios_1 = __importDefault(require("axios"));
7
+ const querystring_1 = __importDefault(require("querystring"));
8
+ const MAIN_DOMAIN = 'https://idp.comprobanteselectronicos.go.cr';
9
+ const RUT = (process.env.IS_STG) ? 'rut-stag' : 'rut';
10
+ const PATH = `/auth/realms/${RUT}/protocol/openid-connect/token`;
11
+ const TOKEN_URL = MAIN_DOMAIN + PATH;
12
+ exports.default = (postOptions) => {
13
+ return axios_1.default.post(TOKEN_URL, querystring_1.default.stringify(postOptions), {
14
+ headers: {
15
+ 'Content-Type': 'application/x-www-form-urlencoded'
16
+ }
17
+ });
18
+ };
19
+ /*
20
+ * https://www.hacienda.go.cr/docs/5d16ade309fe0_Guia_IdP.pdf
21
+ */
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/getToken/index.ts"],"names":[],"mappings":";;;;;AAAA,kDAAyB;AACzB,8DAA4B;AAG5B,MAAM,WAAW,GAAG,4CAA4C,CAAA;AAChE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAA;AACrD,MAAM,IAAI,GAAG,gBAAgB,GAAG,gCAAgC,CAAA;AAEhE,MAAM,SAAS,GAAG,WAAW,GAAG,IAAI,CAAA;AAEpC,kBAAe,CAAC,WAA6B,EAAgB,EAAE;IAC7D,OAAO,eAAK,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAE,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;QACtD,OAAO,EAAE;YACP,cAAc,EAAE,mCAAmC;SACpD;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;GAEG"}
@@ -0,0 +1,27 @@
1
+ export type GetTokenDto = {
2
+ username: string;
3
+ password: string;
4
+ };
5
+ export type GetTokenInternalProps = {
6
+ serviceUrl: string;
7
+ clientId: string;
8
+ };
9
+ export type GetTokenRawResponse = {
10
+ access_token: string;
11
+ expires_in: number;
12
+ refresh_expires_in: number;
13
+ refresh_token: string;
14
+ token_type: string;
15
+ 'not-before-policy': number;
16
+ session_state: string;
17
+ scope: string;
18
+ };
19
+ export type GetTokenResponse = {
20
+ accessToken: string;
21
+ expiresIn: number;
22
+ refreshExpiresIn: number;
23
+ refreshToken: string;
24
+ tokenType: string;
25
+ sessionState: string;
26
+ scope: string;
27
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/services/getToken/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare function send(token: string, postOptions: any): Record<string, any>;
2
+ export declare function sendToCustomURL(token: string, url: string): Record<string, any>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.sendToCustomURL = exports.send = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const MAIN_DOMAIN = 'https://api.comprobanteselectronicos.go.cr/';
9
+ const RUT = (process.env.IS_STG) ? 'recepcion-sandbox' : 'recepcion';
10
+ const PATH = `${RUT}/v1/recepcion/`;
11
+ const SANBOX_URL = 'https://api-sandbox.comprobanteselectronicos.go.cr/recepcion/v1/recepcion';
12
+ const URL = (process.env.IS_STG) ? SANBOX_URL : MAIN_DOMAIN + PATH;
13
+ function send(token, postOptions) {
14
+ return (0, axios_1.default)({
15
+ url: URL,
16
+ method: 'post',
17
+ data: postOptions,
18
+ headers: {
19
+ Authorization: 'bearer ' + token,
20
+ 'Content-Type': 'application/json'
21
+ }
22
+ });
23
+ }
24
+ exports.send = send;
25
+ function sendToCustomURL(token, url) {
26
+ return (0, axios_1.default)({
27
+ url,
28
+ method: 'get',
29
+ headers: {
30
+ Authorization: 'bearer ' + token,
31
+ 'Content-Type': 'application/json'
32
+ }
33
+ });
34
+ }
35
+ exports.sendToCustomURL = sendToCustomURL;
36
+ /*
37
+ * https://www.hacienda.go.cr/docs/5d16ade309fe0_Guia_IdP.pdf
38
+ * https://www.hacienda.go.cr/ATV/ComprobanteElectronico/docs/esquemas/2016/v4.2/comprobantes-electronicos-api.html#
39
+ */
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/send/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AAEzB,MAAM,WAAW,GAAG,6CAA6C,CAAA;AACjE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAA;AACpE,MAAM,IAAI,GAAG,GAAG,GAAG,gBAAgB,CAAA;AACnC,MAAM,UAAU,GAAG,2EAA2E,CAAA;AAC9F,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAA;AAElE,SAAgB,IAAI,CAAC,KAAa,EAAE,WAAgB;IAClD,OAAO,IAAA,eAAK,EAAC;QACX,GAAG,EAAE,GAAG;QACR,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,GAAG,KAAK;YAChC,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAA;AACJ,CAAC;AAVD,oBAUC;AAED,SAAgB,eAAe,CAAC,KAAa,EAAE,GAAW;IACxD,OAAO,IAAA,eAAK,EAAC;QACX,GAAG;QACH,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,SAAS,GAAG,KAAK;YAChC,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAA;AACJ,CAAC;AATD,0CASC;AAED;;;GAGG"}
@@ -0,0 +1,21 @@
1
+ import { Persona, DetalleServicio, Resumen } from "../facturaInterfaces";
2
+ type NotaCreditoElectronica = {
3
+ Clave: string;
4
+ CodigoActividad: string;
5
+ NumeroConsecutivo: string;
6
+ FechaEmision?: string;
7
+ Emisor: Persona;
8
+ Receptor: Persona;
9
+ CondicionVenta?: string;
10
+ PlazoCredito?: string;
11
+ MedioPago?: string;
12
+ DetalleServicio?: DetalleServicio;
13
+ ResumenFactura: Resumen;
14
+ Otros?: {
15
+ OtroTexto: string;
16
+ };
17
+ };
18
+ export type NotaCreditoContenedor = {
19
+ NotaCreditoElectronica: NotaCreditoElectronica;
20
+ };
21
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=notaDeCredito.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notaDeCredito.js","sourceRoot":"","sources":["../../../../src/types/xml/notaDeCredito.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { Persona, DetalleServicio, Resumen } from "../facturaInterfaces";
2
+ type NotaDebitoElectronica = {
3
+ Clave: string;
4
+ CodigoActividad: string;
5
+ NumeroConsecutivo: string;
6
+ FechaEmision?: string;
7
+ Emisor: Persona;
8
+ Receptor: Persona;
9
+ CondicionVenta?: string;
10
+ PlazoCredito?: string;
11
+ MedioPago?: string;
12
+ DetalleServicio?: DetalleServicio;
13
+ ResumenFactura: Resumen;
14
+ Otros?: {
15
+ OtroTexto: string;
16
+ };
17
+ };
18
+ export type NotaDebitoContenedor = {
19
+ NotaDebitoElectronica: NotaDebitoElectronica;
20
+ };
21
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=notaDeDebito.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notaDeDebito.js","sourceRoot":"","sources":["../../../../src/types/xml/notaDeDebito.ts"],"names":[],"mappings":""}
@@ -1,5 +1,9 @@
1
1
  # Ejemplos con implementaciones para pruebas
2
2
 
3
+ ```
4
+ yarn build
5
+ ```
6
+
3
7
  Para probar crear y enviar factura
4
8
  ```
5
9
  yarn ts-node -r tsconfig-paths/register --require dotenv/config examples/createAndSend.ts
@@ -1,5 +1,5 @@
1
1
  import fs from 'fs'
2
- import { ATV } from '@src/ATV'
2
+ import { ATV } from '../dist/src/ATV'
3
3
  import { createDocumentInputStub } from '@test/stubs/createDocument.stub'
4
4
 
5
5
  const IS_STG = process.env.IS_STG
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@facturacr/atv-sdk",
3
- "version": "0.0.18-beta",
3
+ "version": "0.0.20-beta",
4
4
  "description": "Librería (SDK) de Javascript/NodeJS para acceder al API de Administración Tributaria Virtual (ATV) del Ministerio de Hacienda.",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
package/src/ATV/index.ts CHANGED
@@ -47,7 +47,6 @@ export class ATV {
47
47
  public async sendConfirmation(input: SendConfirmationInput) {
48
48
  try {
49
49
  const response = await axios(input)
50
- console.log('response', response)
51
50
  const xmlResponse = response.data['respuesta-xml']
52
51
  if (!xmlResponse) {
53
52
  const state = response.data['ind-estado']
@@ -1,9 +1,9 @@
1
- import { Document, FacturaElectronicaContenedor, DetalleServicio, Resumen, Persona } from '@src/types/facturaInterfaces'
1
+ import { Document, InvoiceDocumentContainer, DetalleServicio, Resumen, Persona } from '@src/types/facturaInterfaces'
2
2
  import { Document as DomainDocument } from '../core/Document'
3
3
  import { OrderLine } from '../core/OrderLine'
4
4
  import { Person } from '../core/Person'
5
5
 
6
- type AtvFormat = FacturaElectronicaContenedor
6
+ type AtvFormat = InvoiceDocumentContainer
7
7
 
8
8
  const mapOrderLinesToAtvFormat = (orderLines: OrderLine[]): DetalleServicio => {
9
9
  const LineaDetalle = orderLines.map<DetalleServicio['LineaDetalle'][0]>((orderLine) => {
@@ -35,7 +35,8 @@ export class CreateDocumentCommand {
35
35
  return {
36
36
  command,
37
37
  extraData: {
38
- xml
38
+ xml,
39
+ document: atvDocument
39
40
  }
40
41
  }
41
42
  }
@@ -1,5 +1,6 @@
1
1
  import { PersonProps } from '@src/ATV/core/Person'
2
2
  import { DocumentNames } from '@src/ATV/core/documentNames.types'
3
+ import { InvoiceDocumentContainer } from '@src/types/facturaInterfaces';
3
4
  import { Method } from 'axios'
4
5
 
5
6
  type PersonInput = PersonProps;
@@ -71,9 +72,11 @@ export type Command = {
71
72
  'Content-Type': string;
72
73
  };
73
74
  }
75
+
74
76
  export type CreateAndSendDocumentResponse = {
75
77
  command: Command;
76
78
  extraData: {
77
79
  xml: string;
80
+ document: InvoiceDocumentContainer;
78
81
  };
79
82
  }
@@ -1,5 +1,5 @@
1
1
  import { ClientPayload } from '@src/types/globalInterfaces'
2
- import { FacturaElectronicaContenedor, Resumen, Persona, Impuesto, LineaDetalle } from '@src/types/facturaInterfaces'
2
+ import { InvoiceDocumentContainer, Resumen, Persona, Impuesto, LineaDetalle } from '@src/types/facturaInterfaces'
3
3
  import { genXML } from '@src/lib/genXML'
4
4
 
5
5
  // Default XML Values
@@ -123,7 +123,7 @@ export default async (frontEndRequest: ClientPayload, date: any, clave: string,
123
123
  },
124
124
  ResumenFactura: getBillResum(lines)
125
125
  }
126
- const factura: FacturaElectronicaContenedor = {
126
+ const factura: InvoiceDocumentContainer = {
127
127
  [key]: body
128
128
  }
129
129
  const XML = await genXML(key, factura, options)
@@ -95,7 +95,7 @@ export interface Document {
95
95
  };
96
96
  }
97
97
 
98
- export interface FacturaElectronicaContenedor {
98
+ export interface InvoiceDocumentContainer {
99
99
  [key: 'FacturaElectronica' | 'FacturaElectronicaExportacion']: Document | FacturaElectronicaExportacion;
100
100
  }
101
101
 
package/tsconfig.json CHANGED
@@ -24,5 +24,5 @@
24
24
  ]
25
25
  },
26
26
  "include": ["./src/**/*", "__tests__/**/*", "__tests__/stubs", "examples"],
27
- "exclude": ["node_modules/**/*"]
27
+ "exclude": ["node_modules/**/*", "examples/**/*"]
28
28
  }