@cheqi/sdk 0.1.1

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 (335) hide show
  1. package/README.md +57 -0
  2. package/dist/cheqi-sdk.d.ts +98 -0
  3. package/dist/cheqi-sdk.js +134 -0
  4. package/dist/cheqi-sdk.js.map +1 -0
  5. package/dist/config.d.ts +23 -0
  6. package/dist/config.js +63 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/crypto.d.ts +9 -0
  9. package/dist/crypto.js +10 -0
  10. package/dist/crypto.js.map +1 -0
  11. package/dist/entity/index.d.ts +1 -0
  12. package/dist/entity/index.js +2 -0
  13. package/dist/entity/index.js.map +1 -0
  14. package/dist/errors.d.ts +40 -0
  15. package/dist/errors.js +48 -0
  16. package/dist/errors.js.map +1 -0
  17. package/dist/http/client.d.ts +32 -0
  18. package/dist/http/client.js +199 -0
  19. package/dist/http/client.js.map +1 -0
  20. package/dist/http/endpoints.d.ts +13 -0
  21. package/dist/http/endpoints.js +14 -0
  22. package/dist/http/endpoints.js.map +1 -0
  23. package/dist/http/retry.d.ts +30 -0
  24. package/dist/http/retry.js +74 -0
  25. package/dist/http/retry.js.map +1 -0
  26. package/dist/index.d.ts +21 -0
  27. package/dist/index.js +19 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/logger.d.ts +31 -0
  30. package/dist/logger.js +31 -0
  31. package/dist/logger.js.map +1 -0
  32. package/dist/models/domain.d.ts +366 -0
  33. package/dist/models/domain.js +467 -0
  34. package/dist/models/domain.js.map +1 -0
  35. package/dist/models/entity.d.ts +226 -0
  36. package/dist/models/entity.js +334 -0
  37. package/dist/models/entity.js.map +1 -0
  38. package/dist/models/generated/AccountIdentifierType.d.ts +24 -0
  39. package/dist/models/generated/AccountIdentifierType.js +43 -0
  40. package/dist/models/generated/AccountIdentifierType.js.map +1 -0
  41. package/dist/models/generated/AcknowledgeRequest.d.ts +32 -0
  42. package/dist/models/generated/AcknowledgeRequest.js +42 -0
  43. package/dist/models/generated/AcknowledgeRequest.js.map +1 -0
  44. package/dist/models/generated/AddressDTO.d.ts +74 -0
  45. package/dist/models/generated/AddressDTO.js +64 -0
  46. package/dist/models/generated/AddressDTO.js.map +1 -0
  47. package/dist/models/generated/AuthorizedCardDTO.d.ts +38 -0
  48. package/dist/models/generated/AuthorizedCardDTO.js +44 -0
  49. package/dist/models/generated/AuthorizedCardDTO.js.map +1 -0
  50. package/dist/models/generated/AuthorizedCompanyDTO.d.ts +64 -0
  51. package/dist/models/generated/AuthorizedCompanyDTO.js +54 -0
  52. package/dist/models/generated/AuthorizedCompanyDTO.js.map +1 -0
  53. package/dist/models/generated/AuthorizedEmailDTO.d.ts +38 -0
  54. package/dist/models/generated/AuthorizedEmailDTO.js +44 -0
  55. package/dist/models/generated/AuthorizedEmailDTO.js.map +1 -0
  56. package/dist/models/generated/AuthorizedPaymentAccountDTO.d.ts +70 -0
  57. package/dist/models/generated/AuthorizedPaymentAccountDTO.js +63 -0
  58. package/dist/models/generated/AuthorizedPaymentAccountDTO.js.map +1 -0
  59. package/dist/models/generated/AuthorizedResourcesResponse.d.ts +53 -0
  60. package/dist/models/generated/AuthorizedResourcesResponse.js +51 -0
  61. package/dist/models/generated/AuthorizedResourcesResponse.js.map +1 -0
  62. package/dist/models/generated/Barcode.d.ts +44 -0
  63. package/dist/models/generated/Barcode.js +46 -0
  64. package/dist/models/generated/Barcode.js.map +1 -0
  65. package/dist/models/generated/BarcodeType.d.ts +29 -0
  66. package/dist/models/generated/BarcodeType.js +48 -0
  67. package/dist/models/generated/BarcodeType.js.map +1 -0
  68. package/dist/models/generated/BuyerType.d.ts +25 -0
  69. package/dist/models/generated/BuyerType.js +44 -0
  70. package/dist/models/generated/BuyerType.js.map +1 -0
  71. package/dist/models/generated/CardDetails.d.ts +54 -0
  72. package/dist/models/generated/CardDetails.js +57 -0
  73. package/dist/models/generated/CardDetails.js.map +1 -0
  74. package/dist/models/generated/Charge.d.ts +44 -0
  75. package/dist/models/generated/Charge.js +48 -0
  76. package/dist/models/generated/Charge.js.map +1 -0
  77. package/dist/models/generated/CheqiCreditNote.d.ts +148 -0
  78. package/dist/models/generated/CheqiCreditNote.js +86 -0
  79. package/dist/models/generated/CheqiCreditNote.js.map +1 -0
  80. package/dist/models/generated/CheqiReceipt.d.ts +143 -0
  81. package/dist/models/generated/CheqiReceipt.js +85 -0
  82. package/dist/models/generated/CheqiReceipt.js.map +1 -0
  83. package/dist/models/generated/CompanyCreationRequest.d.ts +114 -0
  84. package/dist/models/generated/CompanyCreationRequest.js +80 -0
  85. package/dist/models/generated/CompanyCreationRequest.js.map +1 -0
  86. package/dist/models/generated/CompanyIdentifierDTO.d.ts +92 -0
  87. package/dist/models/generated/CompanyIdentifierDTO.js +73 -0
  88. package/dist/models/generated/CompanyIdentifierDTO.js.map +1 -0
  89. package/dist/models/generated/CompanyIdentifierRequirement.d.ts +63 -0
  90. package/dist/models/generated/CompanyIdentifierRequirement.js +53 -0
  91. package/dist/models/generated/CompanyIdentifierRequirement.js.map +1 -0
  92. package/dist/models/generated/CompanyIdentifierType.d.ts +29 -0
  93. package/dist/models/generated/CompanyIdentifierType.js +48 -0
  94. package/dist/models/generated/CompanyIdentifierType.js.map +1 -0
  95. package/dist/models/generated/CompanyReceiptDeliveryDeviceDto.d.ts +65 -0
  96. package/dist/models/generated/CompanyReceiptDeliveryDeviceDto.js +58 -0
  97. package/dist/models/generated/CompanyReceiptDeliveryDeviceDto.js.map +1 -0
  98. package/dist/models/generated/CompanyReceiptDeliverySettingsResponse.d.ts +39 -0
  99. package/dist/models/generated/CompanyReceiptDeliverySettingsResponse.js +45 -0
  100. package/dist/models/generated/CompanyReceiptDeliverySettingsResponse.js.map +1 -0
  101. package/dist/models/generated/CompanyResponseBody.d.ts +151 -0
  102. package/dist/models/generated/CompanyResponseBody.js +85 -0
  103. package/dist/models/generated/CompanyResponseBody.js.map +1 -0
  104. package/dist/models/generated/CompanyRole.d.ts +25 -0
  105. package/dist/models/generated/CompanyRole.js +44 -0
  106. package/dist/models/generated/CompanyRole.js.map +1 -0
  107. package/dist/models/generated/ContactDetailDto.d.ts +50 -0
  108. package/dist/models/generated/ContactDetailDto.js +48 -0
  109. package/dist/models/generated/ContactDetailDto.js.map +1 -0
  110. package/dist/models/generated/CreateChildCompanyRequest.d.ts +39 -0
  111. package/dist/models/generated/CreateChildCompanyRequest.js +45 -0
  112. package/dist/models/generated/CreateChildCompanyRequest.js.map +1 -0
  113. package/dist/models/generated/CreateStoreRequest.d.ts +63 -0
  114. package/dist/models/generated/CreateStoreRequest.js +59 -0
  115. package/dist/models/generated/CreateStoreRequest.js.map +1 -0
  116. package/dist/models/generated/CreditNoteContextEnvelope.d.ts +40 -0
  117. package/dist/models/generated/CreditNoteContextEnvelope.js +46 -0
  118. package/dist/models/generated/CreditNoteContextEnvelope.js.map +1 -0
  119. package/dist/models/generated/CreditNoteCreatedResponse.d.ts +50 -0
  120. package/dist/models/generated/CreditNoteCreatedResponse.js +48 -0
  121. package/dist/models/generated/CreditNoteCreatedResponse.js.map +1 -0
  122. package/dist/models/generated/CreditNoteTemplateGenerationRequest.d.ts +59 -0
  123. package/dist/models/generated/CreditNoteTemplateGenerationRequest.js +63 -0
  124. package/dist/models/generated/CreditNoteTemplateGenerationRequest.js.map +1 -0
  125. package/dist/models/generated/CreditNoteTemplateRequest.d.ts +128 -0
  126. package/dist/models/generated/CreditNoteTemplateRequest.js +98 -0
  127. package/dist/models/generated/CreditNoteTemplateRequest.js.map +1 -0
  128. package/dist/models/generated/CreditNoteTemplateResponse.d.ts +39 -0
  129. package/dist/models/generated/CreditNoteTemplateResponse.js +45 -0
  130. package/dist/models/generated/CreditNoteTemplateResponse.js.map +1 -0
  131. package/dist/models/generated/Discount.d.ts +44 -0
  132. package/dist/models/generated/Discount.js +48 -0
  133. package/dist/models/generated/Discount.js.map +1 -0
  134. package/dist/models/generated/DocumentType.d.ts +25 -0
  135. package/dist/models/generated/DocumentType.js +44 -0
  136. package/dist/models/generated/DocumentType.js.map +1 -0
  137. package/dist/models/generated/EmailReceiptRequest.d.ts +39 -0
  138. package/dist/models/generated/EmailReceiptRequest.js +49 -0
  139. package/dist/models/generated/EmailReceiptRequest.js.map +1 -0
  140. package/dist/models/generated/EncryptedCreditNote.d.ts +86 -0
  141. package/dist/models/generated/EncryptedCreditNote.js +72 -0
  142. package/dist/models/generated/EncryptedCreditNote.js.map +1 -0
  143. package/dist/models/generated/EncryptedCreditNoteDto.d.ts +102 -0
  144. package/dist/models/generated/EncryptedCreditNoteDto.js +85 -0
  145. package/dist/models/generated/EncryptedCreditNoteDto.js.map +1 -0
  146. package/dist/models/generated/EncryptedCreditNoteInitiationRequest.d.ts +50 -0
  147. package/dist/models/generated/EncryptedCreditNoteInitiationRequest.js +48 -0
  148. package/dist/models/generated/EncryptedCreditNoteInitiationRequest.js.map +1 -0
  149. package/dist/models/generated/EncryptedCreditNotesRequest.d.ts +51 -0
  150. package/dist/models/generated/EncryptedCreditNotesRequest.js +57 -0
  151. package/dist/models/generated/EncryptedCreditNotesRequest.js.map +1 -0
  152. package/dist/models/generated/EncryptedReceiptDto.d.ts +118 -0
  153. package/dist/models/generated/EncryptedReceiptDto.js +77 -0
  154. package/dist/models/generated/EncryptedReceiptDto.js.map +1 -0
  155. package/dist/models/generated/EncryptedReceiptRequest.d.ts +69 -0
  156. package/dist/models/generated/EncryptedReceiptRequest.js +63 -0
  157. package/dist/models/generated/EncryptedReceiptRequest.js.map +1 -0
  158. package/dist/models/generated/EncryptedReceiptsRequest.d.ts +45 -0
  159. package/dist/models/generated/EncryptedReceiptsRequest.js +53 -0
  160. package/dist/models/generated/EncryptedReceiptsRequest.js.map +1 -0
  161. package/dist/models/generated/IdentificationDetails.d.ts +71 -0
  162. package/dist/models/generated/IdentificationDetails.js +57 -0
  163. package/dist/models/generated/IdentificationDetails.js.map +1 -0
  164. package/dist/models/generated/Identifier.d.ts +38 -0
  165. package/dist/models/generated/Identifier.js +44 -0
  166. package/dist/models/generated/Identifier.js.map +1 -0
  167. package/dist/models/generated/KeyAlgorithm.d.ts +25 -0
  168. package/dist/models/generated/KeyAlgorithm.js +44 -0
  169. package/dist/models/generated/KeyAlgorithm.js.map +1 -0
  170. package/dist/models/generated/MatchedRecipient.d.ts +51 -0
  171. package/dist/models/generated/MatchedRecipient.js +49 -0
  172. package/dist/models/generated/MatchedRecipient.js.map +1 -0
  173. package/dist/models/generated/NotificationDisplayCode.d.ts +39 -0
  174. package/dist/models/generated/NotificationDisplayCode.js +49 -0
  175. package/dist/models/generated/NotificationDisplayCode.js.map +1 -0
  176. package/dist/models/generated/PartyAddress.d.ts +56 -0
  177. package/dist/models/generated/PartyAddress.js +50 -0
  178. package/dist/models/generated/PartyAddress.js.map +1 -0
  179. package/dist/models/generated/PaymentAccountDetails.d.ts +57 -0
  180. package/dist/models/generated/PaymentAccountDetails.js +55 -0
  181. package/dist/models/generated/PaymentAccountDetails.js.map +1 -0
  182. package/dist/models/generated/PaymentMeansEnvelope.d.ts +68 -0
  183. package/dist/models/generated/PaymentMeansEnvelope.js +54 -0
  184. package/dist/models/generated/PaymentMeansEnvelope.js.map +1 -0
  185. package/dist/models/generated/PaymentType.d.ts +26 -0
  186. package/dist/models/generated/PaymentType.js +45 -0
  187. package/dist/models/generated/PaymentType.js.map +1 -0
  188. package/dist/models/generated/Period.d.ts +44 -0
  189. package/dist/models/generated/Period.js +50 -0
  190. package/dist/models/generated/Period.js.map +1 -0
  191. package/dist/models/generated/PermanentFailureAcknowledgeRequest.d.ts +38 -0
  192. package/dist/models/generated/PermanentFailureAcknowledgeRequest.js +44 -0
  193. package/dist/models/generated/PermanentFailureAcknowledgeRequest.js.map +1 -0
  194. package/dist/models/generated/Product.d.ts +122 -0
  195. package/dist/models/generated/Product.js +94 -0
  196. package/dist/models/generated/Product.js.map +1 -0
  197. package/dist/models/generated/PublicKeyResponse.d.ts +51 -0
  198. package/dist/models/generated/PublicKeyResponse.js +49 -0
  199. package/dist/models/generated/PublicKeyResponse.js.map +1 -0
  200. package/dist/models/generated/ReceiptContextEnvelope.d.ts +40 -0
  201. package/dist/models/generated/ReceiptContextEnvelope.js +46 -0
  202. package/dist/models/generated/ReceiptContextEnvelope.js.map +1 -0
  203. package/dist/models/generated/ReceiptCreatedResponse.d.ts +44 -0
  204. package/dist/models/generated/ReceiptCreatedResponse.js +46 -0
  205. package/dist/models/generated/ReceiptCreatedResponse.js.map +1 -0
  206. package/dist/models/generated/ReceiptEnvelope.d.ts +52 -0
  207. package/dist/models/generated/ReceiptEnvelope.js +50 -0
  208. package/dist/models/generated/ReceiptEnvelope.js.map +1 -0
  209. package/dist/models/generated/ReceiptFormat.d.ts +27 -0
  210. package/dist/models/generated/ReceiptFormat.js +46 -0
  211. package/dist/models/generated/ReceiptFormat.js.map +1 -0
  212. package/dist/models/generated/ReceiptQueueDto.d.ts +137 -0
  213. package/dist/models/generated/ReceiptQueueDto.js +79 -0
  214. package/dist/models/generated/ReceiptQueueDto.js.map +1 -0
  215. package/dist/models/generated/ReceiptTemplateGenerationRequest.d.ts +59 -0
  216. package/dist/models/generated/ReceiptTemplateGenerationRequest.js +63 -0
  217. package/dist/models/generated/ReceiptTemplateGenerationRequest.js.map +1 -0
  218. package/dist/models/generated/ReceiptTemplateRequest.d.ts +141 -0
  219. package/dist/models/generated/ReceiptTemplateRequest.js +99 -0
  220. package/dist/models/generated/ReceiptTemplateRequest.js.map +1 -0
  221. package/dist/models/generated/ReceiptTemplateResponse.d.ts +52 -0
  222. package/dist/models/generated/ReceiptTemplateResponse.js +50 -0
  223. package/dist/models/generated/ReceiptTemplateResponse.js.map +1 -0
  224. package/dist/models/generated/ReceivingParty.d.ts +76 -0
  225. package/dist/models/generated/ReceivingParty.js +58 -0
  226. package/dist/models/generated/ReceivingParty.js.map +1 -0
  227. package/dist/models/generated/ReceivingPartyEnvelope.d.ts +39 -0
  228. package/dist/models/generated/ReceivingPartyEnvelope.js +45 -0
  229. package/dist/models/generated/ReceivingPartyEnvelope.js.map +1 -0
  230. package/dist/models/generated/RecipientResolutionResponse.d.ts +76 -0
  231. package/dist/models/generated/RecipientResolutionResponse.js +58 -0
  232. package/dist/models/generated/RecipientResolutionResponse.js.map +1 -0
  233. package/dist/models/generated/ReturnProcessingMode.d.ts +25 -0
  234. package/dist/models/generated/ReturnProcessingMode.js +44 -0
  235. package/dist/models/generated/ReturnProcessingMode.js.map +1 -0
  236. package/dist/models/generated/RoutingIdentifier.d.ts +39 -0
  237. package/dist/models/generated/RoutingIdentifier.js +45 -0
  238. package/dist/models/generated/RoutingIdentifier.js.map +1 -0
  239. package/dist/models/generated/RoutingIdentifierType.d.ts +27 -0
  240. package/dist/models/generated/RoutingIdentifierType.js +46 -0
  241. package/dist/models/generated/RoutingIdentifierType.js.map +1 -0
  242. package/dist/models/generated/SellingParty.d.ts +58 -0
  243. package/dist/models/generated/SellingParty.js +52 -0
  244. package/dist/models/generated/SellingParty.js.map +1 -0
  245. package/dist/models/generated/StoreDTO.d.ts +99 -0
  246. package/dist/models/generated/StoreDTO.js +69 -0
  247. package/dist/models/generated/StoreDTO.js.map +1 -0
  248. package/dist/models/generated/Tax.d.ts +56 -0
  249. package/dist/models/generated/Tax.js +56 -0
  250. package/dist/models/generated/Tax.js.map +1 -0
  251. package/dist/models/generated/UnitCode.d.ts +77 -0
  252. package/dist/models/generated/UnitCode.js +96 -0
  253. package/dist/models/generated/UnitCode.js.map +1 -0
  254. package/dist/models/generated/UpdateCompanyReceiptDeliveryPreferenceRequest.d.ts +32 -0
  255. package/dist/models/generated/UpdateCompanyReceiptDeliveryPreferenceRequest.js +44 -0
  256. package/dist/models/generated/UpdateCompanyReceiptDeliveryPreferenceRequest.js.map +1 -0
  257. package/dist/models/generated/UpdateStoreRequest.d.ts +63 -0
  258. package/dist/models/generated/UpdateStoreRequest.js +53 -0
  259. package/dist/models/generated/UpdateStoreRequest.js.map +1 -0
  260. package/dist/models/generated/UploadPublicKeyRequest.d.ts +39 -0
  261. package/dist/models/generated/UploadPublicKeyRequest.js +49 -0
  262. package/dist/models/generated/UploadPublicKeyRequest.js.map +1 -0
  263. package/dist/models/generated/VatMetadata.d.ts +70 -0
  264. package/dist/models/generated/VatMetadata.js +56 -0
  265. package/dist/models/generated/VatMetadata.js.map +1 -0
  266. package/dist/models/generated/VatRegime.d.ts +31 -0
  267. package/dist/models/generated/VatRegime.js +50 -0
  268. package/dist/models/generated/VatRegime.js.map +1 -0
  269. package/dist/models/generated/WebhookDTO.d.ts +62 -0
  270. package/dist/models/generated/WebhookDTO.js +52 -0
  271. package/dist/models/generated/WebhookDTO.js.map +1 -0
  272. package/dist/models/generated/WebhookEventDTO.d.ts +113 -0
  273. package/dist/models/generated/WebhookEventDTO.js +78 -0
  274. package/dist/models/generated/WebhookEventDTO.js.map +1 -0
  275. package/dist/models/generated/WebhookRequestBody.d.ts +55 -0
  276. package/dist/models/generated/WebhookRequestBody.js +56 -0
  277. package/dist/models/generated/WebhookRequestBody.js.map +1 -0
  278. package/dist/models/generated/WebhookResponse.d.ts +39 -0
  279. package/dist/models/generated/WebhookResponse.js +45 -0
  280. package/dist/models/generated/WebhookResponse.js.map +1 -0
  281. package/dist/models/generated/WebhookSecretRotationResponse.d.ts +56 -0
  282. package/dist/models/generated/WebhookSecretRotationResponse.js +50 -0
  283. package/dist/models/generated/WebhookSecretRotationResponse.js.map +1 -0
  284. package/dist/models/generated/index.d.ts +82 -0
  285. package/dist/models/generated/index.js +83 -0
  286. package/dist/models/generated/index.js.map +1 -0
  287. package/dist/models/generated/runtime.d.ts +182 -0
  288. package/dist/models/generated/runtime.js +330 -0
  289. package/dist/models/generated/runtime.js.map +1 -0
  290. package/dist/models/index.d.ts +3 -0
  291. package/dist/models/index.js +4 -0
  292. package/dist/models/index.js.map +1 -0
  293. package/dist/models.d.ts +51 -0
  294. package/dist/models.js +106 -0
  295. package/dist/models.js.map +1 -0
  296. package/dist/rfc8785.d.ts +1 -0
  297. package/dist/rfc8785.js +42 -0
  298. package/dist/rfc8785.js.map +1 -0
  299. package/dist/services/company.d.ts +7 -0
  300. package/dist/services/company.js +33 -0
  301. package/dist/services/company.js.map +1 -0
  302. package/dist/services/credit-note.d.ts +25 -0
  303. package/dist/services/credit-note.js +211 -0
  304. package/dist/services/credit-note.js.map +1 -0
  305. package/dist/services/decryption.d.ts +33 -0
  306. package/dist/services/decryption.js +145 -0
  307. package/dist/services/decryption.js.map +1 -0
  308. package/dist/services/encryption.d.ts +25 -0
  309. package/dist/services/encryption.js +94 -0
  310. package/dist/services/encryption.js.map +1 -0
  311. package/dist/services/matching.d.ts +7 -0
  312. package/dist/services/matching.js +32 -0
  313. package/dist/services/matching.js.map +1 -0
  314. package/dist/services/receipt.d.ts +17 -0
  315. package/dist/services/receipt.js +186 -0
  316. package/dist/services/receipt.js.map +1 -0
  317. package/dist/services/store.d.ts +16 -0
  318. package/dist/services/store.js +89 -0
  319. package/dist/services/store.js.map +1 -0
  320. package/dist/services/verification.d.ts +10 -0
  321. package/dist/services/verification.js +30 -0
  322. package/dist/services/verification.js.map +1 -0
  323. package/dist/types.d.ts +70 -0
  324. package/dist/types.js +2 -0
  325. package/dist/types.js.map +1 -0
  326. package/dist/utils.d.ts +11 -0
  327. package/dist/utils.js +54 -0
  328. package/dist/utils.js.map +1 -0
  329. package/dist/validators.d.ts +11 -0
  330. package/dist/validators.js +56 -0
  331. package/dist/validators.js.map +1 -0
  332. package/dist/xml.d.ts +2 -0
  333. package/dist/xml.js +11 -0
  334. package/dist/xml.js.map +1 -0
  335. package/package.json +56 -0
package/dist/models.js ADDED
@@ -0,0 +1,106 @@
1
+ export class ReceiptResult {
2
+ success;
3
+ deliveryMethod;
4
+ customerFound;
5
+ receiptCount;
6
+ response;
7
+ templateContent;
8
+ message;
9
+ customerEmail;
10
+ constructor(init) {
11
+ this.success = init.success;
12
+ this.deliveryMethod = init.deliveryMethod ?? null;
13
+ this.customerFound = init.customerFound ?? false;
14
+ this.receiptCount = init.receiptCount ?? 0;
15
+ this.response = init.response ?? null;
16
+ this.templateContent = init.templateContent ?? null;
17
+ this.message = init.message ?? null;
18
+ this.customerEmail = init.customerEmail ?? null;
19
+ }
20
+ static deliveredToApp(response, templateContent) {
21
+ const receiptCount = (Array.isArray(response.createdReceipts) ? response.createdReceipts.length : undefined) ??
22
+ (typeof response.receiptCount === "number" ? response.receiptCount : 0);
23
+ return new ReceiptResult({
24
+ success: true,
25
+ deliveryMethod: "APP",
26
+ customerFound: true,
27
+ receiptCount,
28
+ response,
29
+ templateContent
30
+ });
31
+ }
32
+ static deliveredViaEmail(customerEmail) {
33
+ return new ReceiptResult({
34
+ success: true,
35
+ deliveryMethod: "EMAIL",
36
+ customerFound: false,
37
+ customerEmail
38
+ });
39
+ }
40
+ static customerNotFound() {
41
+ return new ReceiptResult({
42
+ success: false,
43
+ customerFound: false,
44
+ message: "Customer not found"
45
+ });
46
+ }
47
+ isSuccess() {
48
+ return this.success;
49
+ }
50
+ isCustomerNotFound() {
51
+ return !this.customerFound;
52
+ }
53
+ getReceiptCount() {
54
+ return this.receiptCount;
55
+ }
56
+ getMessage() {
57
+ return this.message;
58
+ }
59
+ }
60
+ export class CreditNoteResult {
61
+ success;
62
+ customerFound;
63
+ creditNoteCount;
64
+ response;
65
+ templateContent;
66
+ message;
67
+ constructor(init) {
68
+ this.success = init.success;
69
+ this.customerFound = init.customerFound ?? false;
70
+ this.creditNoteCount = init.creditNoteCount ?? 0;
71
+ this.response = init.response ?? null;
72
+ this.templateContent = init.templateContent ?? null;
73
+ this.message = init.message ?? null;
74
+ }
75
+ static deliveredToApp(response, templateContent) {
76
+ const creditNoteCount = (Array.isArray(response.createdCreditNotes) ? response.createdCreditNotes.length : undefined) ??
77
+ (typeof response.creditNoteCount === "number" ? response.creditNoteCount : 0);
78
+ return new CreditNoteResult({
79
+ success: true,
80
+ customerFound: true,
81
+ creditNoteCount,
82
+ response,
83
+ templateContent
84
+ });
85
+ }
86
+ static customerNotFound() {
87
+ return new CreditNoteResult({
88
+ success: false,
89
+ customerFound: false,
90
+ message: "Customer not found"
91
+ });
92
+ }
93
+ isSuccess() {
94
+ return this.success;
95
+ }
96
+ isCustomerNotFound() {
97
+ return !this.customerFound;
98
+ }
99
+ getCreditNoteCount() {
100
+ return this.creditNoteCount;
101
+ }
102
+ getMessage() {
103
+ return this.message;
104
+ }
105
+ }
106
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function canonicalizeJson(value: string | object): string;
@@ -0,0 +1,42 @@
1
+ function serializeString(value) {
2
+ return JSON.stringify(value)
3
+ .replace(/\u2028/g, "\\u2028")
4
+ .replace(/\u2029/g, "\\u2029");
5
+ }
6
+ function serializeNumber(value) {
7
+ if (!Number.isFinite(value)) {
8
+ throw new Error("NaN and Infinity are not valid JSON values");
9
+ }
10
+ if (Object.is(value, -0) || value === 0) {
11
+ return "0";
12
+ }
13
+ return String(value);
14
+ }
15
+ function serialize(value) {
16
+ if (value === null) {
17
+ return "null";
18
+ }
19
+ if (typeof value === "boolean") {
20
+ return value ? "true" : "false";
21
+ }
22
+ if (typeof value === "number") {
23
+ return serializeNumber(value);
24
+ }
25
+ if (typeof value === "string") {
26
+ return serializeString(value);
27
+ }
28
+ if (Array.isArray(value)) {
29
+ return `[${value.map((entry) => serialize(entry)).join(",")}]`;
30
+ }
31
+ if (typeof value === "object") {
32
+ const record = value;
33
+ const keys = Object.keys(record).sort();
34
+ return `{${keys.map((key) => `${serializeString(key)}:${serialize(record[key])}`).join(",")}}`;
35
+ }
36
+ throw new TypeError(`Cannot canonicalize type: ${typeof value}`);
37
+ }
38
+ export function canonicalizeJson(value) {
39
+ const parsed = typeof value === "string" ? JSON.parse(value) : value;
40
+ return serialize(parsed);
41
+ }
42
+ //# sourceMappingURL=rfc8785.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rfc8785.js","sourceRoot":"","sources":["../src/rfc8785.ts"],"names":[],"mappings":"AAAA,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACzB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAClC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACjE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACjG,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,6BAA6B,OAAO,KAAK,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,MAAM,MAAM,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CheqiApiClient, CompanyDTO } from "../types.js";
2
+ import { Company } from "../models/domain.js";
3
+ export declare class CompanyService {
4
+ private readonly apiClient;
5
+ constructor(apiClient: Pick<CheqiApiClient, "provisionCompany">);
6
+ provisionCompany(company: Company | CompanyDTO, adminEmail: string): Promise<Record<string, unknown>>;
7
+ }
@@ -0,0 +1,33 @@
1
+ import { CheqiSDKError, ErrorCodes } from "../errors.js";
2
+ import { Company } from "../models/domain.js";
3
+ import { getCompanyValidationErrors } from "../validators.js";
4
+ export class CompanyService {
5
+ apiClient;
6
+ constructor(apiClient) {
7
+ this.apiClient = apiClient;
8
+ }
9
+ provisionCompany(company, adminEmail) {
10
+ if (!company) {
11
+ throw new CheqiSDKError("Company cannot be null", {
12
+ errorCode: ErrorCodes.VALIDATION_ERROR,
13
+ httpStatusCode: 400
14
+ });
15
+ }
16
+ const validationErrors = getCompanyValidationErrors(company);
17
+ if (validationErrors.length > 0) {
18
+ throw new CheqiSDKError(`Invalid company data: ${validationErrors.join(", ")}`, {
19
+ errorCode: ErrorCodes.VALIDATION_ERROR,
20
+ httpStatusCode: 400
21
+ });
22
+ }
23
+ if (!adminEmail.includes("@")) {
24
+ throw new CheqiSDKError("Admin email must be a valid email address", {
25
+ errorCode: ErrorCodes.VALIDATION_ERROR,
26
+ httpStatusCode: 400
27
+ });
28
+ }
29
+ const companyDTO = company instanceof Company ? company.toCompanyDTO() : company;
30
+ return this.apiClient.provisionCompany({ company: companyDTO, adminEmail });
31
+ }
32
+ }
33
+ //# sourceMappingURL=company.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company.js","sourceRoot":"","sources":["../../src/services/company.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,OAAO,cAAc;IAEN;IADnB,YACmB,SAAmD;QAAnD,cAAS,GAAT,SAAS,CAA0C;IACnE,CAAC;IAEJ,gBAAgB,CAAC,OAA6B,EAAE,UAAkB;QAChE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,aAAa,CAAC,wBAAwB,EAAE;gBAChD,SAAS,EAAE,UAAU,CAAC,gBAAgB;gBACtC,cAAc,EAAE,GAAG;aACpB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,aAAa,CAAC,yBAAyB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;gBAC9E,SAAS,EAAE,UAAU,CAAC,gBAAgB;gBACtC,cAAc,EAAE,GAAG;aACpB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,aAAa,CAAC,2CAA2C,EAAE;gBACnE,SAAS,EAAE,UAAU,CAAC,gBAAgB;gBACtC,cAAc,EAAE,GAAG;aACpB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjF,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9E,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import { CreditNoteResult } from "../models.js";
2
+ import type { CheqiApiClient, CreditNoteTemplateGenerationRequest, CreditNoteTemplateRequest, CreditNoteTemplateResponse, DecryptedDeliveredCreditNote, EncryptedCreditNote, EncryptedCreditNoteInitiationRequest, IdentificationDetails, MatchedRecipient, RecipientResolutionResponse } from "../types.js";
3
+ import { DecryptionService } from "./decryption.js";
4
+ import { EncryptionService } from "./encryption.js";
5
+ import { MatchingService } from "./matching.js";
6
+ export declare class CreditNoteService {
7
+ private readonly apiClient;
8
+ private readonly encryptionService;
9
+ private readonly matchingService;
10
+ private readonly decryptionService;
11
+ constructor(apiClient: Pick<CheqiApiClient, "generateCreditNoteTemplate" | "sendEncryptedCreditNotes">, encryptionService: EncryptionService, matchingService: MatchingService, decryptionService?: DecryptionService | null);
12
+ processCompleteCreditNote(identificationDetails: IdentificationDetails, creditNoteTemplateRequest: CreditNoteTemplateRequest, accessToken?: string | null): Promise<CreditNoteResult>;
13
+ generateCreditNoteTemplate(request: CreditNoteTemplateGenerationRequest, accessToken?: string | null): Promise<CreditNoteTemplateResponse>;
14
+ createEncryptedCreditNote(creditNoteEnvelope: string, recipient: MatchedRecipient): EncryptedCreditNote;
15
+ sendEncryptedCreditNotes(parentCheqiReceiptId: string, encryptedCreditNotes: EncryptedCreditNote[], templateHash: string, matchResponse: RecipientResolutionResponse, accessToken?: string | null): Promise<Record<string, unknown>>;
16
+ decryptCreditNoteRequest(encryptedCreditNote: EncryptedCreditNoteInitiationRequest, privateKeyBase64: string): {
17
+ content: string;
18
+ };
19
+ decryptDeliveredCreditNote(encryptedCreditNote: EncryptedCreditNote, privateKeyBase64: string): DecryptedDeliveredCreditNote;
20
+ private buildEncryptedCreditNotes;
21
+ private mergeCreditNoteContext;
22
+ private mergeXmlParty;
23
+ private mergeXmlPaymentMeans;
24
+ private mergeReceivingParty;
25
+ }
@@ -0,0 +1,211 @@
1
+ import { CheqiSDKError, CreditNoteProcessingError, ErrorCodes } from "../errors.js";
2
+ import { CreditNoteResult } from "../models.js";
3
+ import { serializeJson, sha256Hex } from "../utils.js";
4
+ const CUSTOMER_PARTY_PLACEHOLDER = "<cac:AccountingCustomerParty/>";
5
+ const CUSTOMER_PARTY_CLOSING_TAG = "</cac:AccountingCustomerParty>";
6
+ function uniqueFormats(recipients = []) {
7
+ const seen = new Set();
8
+ const formats = [];
9
+ for (const recipient of recipients) {
10
+ for (const format of recipient.acceptedFormats ?? []) {
11
+ if (!seen.has(format)) {
12
+ seen.add(format);
13
+ formats.push(format);
14
+ }
15
+ }
16
+ }
17
+ return formats;
18
+ }
19
+ function routeFound(matchResponse) {
20
+ return Boolean(matchResponse.routeFound ?? matchResponse.customerFound);
21
+ }
22
+ function matchedRecipients(matchResponse) {
23
+ return matchResponse.recipients ?? matchResponse.matchedRecipients ?? [];
24
+ }
25
+ export class CreditNoteService {
26
+ apiClient;
27
+ encryptionService;
28
+ matchingService;
29
+ decryptionService;
30
+ constructor(apiClient, encryptionService, matchingService, decryptionService = null) {
31
+ this.apiClient = apiClient;
32
+ this.encryptionService = encryptionService;
33
+ this.matchingService = matchingService;
34
+ this.decryptionService = decryptionService;
35
+ }
36
+ async processCompleteCreditNote(identificationDetails, creditNoteTemplateRequest, accessToken = null) {
37
+ if (!identificationDetails) {
38
+ throw new CheqiSDKError("Identification details cannot be null", {
39
+ errorCode: ErrorCodes.VALIDATION_ERROR,
40
+ httpStatusCode: 400
41
+ });
42
+ }
43
+ if (!creditNoteTemplateRequest) {
44
+ throw new CheqiSDKError("Credit note template request cannot be null", {
45
+ errorCode: ErrorCodes.VALIDATION_ERROR,
46
+ httpStatusCode: 400
47
+ });
48
+ }
49
+ const originalReceiptId = identificationDetails.cheqiReceiptId;
50
+ if (!originalReceiptId) {
51
+ throw new CheqiSDKError("Original receipt ID (cheqiReceiptId) is required for credit note processing", {
52
+ errorCode: ErrorCodes.VALIDATION_ERROR,
53
+ httpStatusCode: 400
54
+ });
55
+ }
56
+ try {
57
+ const matchResponse = await this.matchingService.matchCustomer(identificationDetails, accessToken);
58
+ const recipientEmail = identificationDetails.recipientEmail;
59
+ if (!routeFound(matchResponse) && !recipientEmail) {
60
+ return CreditNoteResult.customerNotFound();
61
+ }
62
+ const templateResponse = await this.generateCreditNoteTemplate({
63
+ creditNoteTemplateRequest,
64
+ formats: uniqueFormats(matchedRecipients(matchResponse)),
65
+ buyerCountryCode: matchResponse.buyerCountryCode ?? "",
66
+ buyerType: matchResponse.buyerType ?? "CONSUMER",
67
+ taxesApplied: true
68
+ }, accessToken);
69
+ if (!routeFound(matchResponse)) {
70
+ return CreditNoteResult.customerNotFound();
71
+ }
72
+ const encryptedCreditNotes = this.buildEncryptedCreditNotes(matchResponse, templateResponse);
73
+ const templateContent = templateResponse.cheqi
74
+ ? serializeJson(templateResponse.cheqi)
75
+ : (templateResponse.ublCreditNote ?? "");
76
+ const templateHash = sha256Hex(templateContent);
77
+ const createdResponse = await this.sendEncryptedCreditNotes(originalReceiptId, encryptedCreditNotes, templateHash, matchResponse, accessToken);
78
+ return CreditNoteResult.deliveredToApp(createdResponse, templateContent);
79
+ }
80
+ catch (error) {
81
+ if (error instanceof CheqiSDKError) {
82
+ throw error;
83
+ }
84
+ throw new CreditNoteProcessingError(`Credit note processing failed: ${String(error.message)}`, {
85
+ cause: error
86
+ });
87
+ }
88
+ }
89
+ generateCreditNoteTemplate(request, accessToken = null) {
90
+ if (!request) {
91
+ throw new CheqiSDKError("Credit note template request cannot be null", {
92
+ errorCode: ErrorCodes.VALIDATION_ERROR,
93
+ httpStatusCode: 400
94
+ });
95
+ }
96
+ return this.apiClient.generateCreditNoteTemplate(request, accessToken);
97
+ }
98
+ createEncryptedCreditNote(creditNoteEnvelope, recipient) {
99
+ if (!creditNoteEnvelope.trim()) {
100
+ throw new CheqiSDKError("Credit note envelope cannot be null or empty", {
101
+ errorCode: ErrorCodes.VALIDATION_ERROR,
102
+ httpStatusCode: 400
103
+ });
104
+ }
105
+ return {
106
+ ...this.encryptionService.encryptCreditNoteForRecipient(creditNoteEnvelope, recipient)
107
+ };
108
+ }
109
+ sendEncryptedCreditNotes(parentCheqiReceiptId, encryptedCreditNotes, templateHash, matchResponse, accessToken = null) {
110
+ if (encryptedCreditNotes.length === 0) {
111
+ throw new CheqiSDKError("Encrypted credit notes cannot be null or empty", {
112
+ errorCode: ErrorCodes.VALIDATION_ERROR,
113
+ httpStatusCode: 400
114
+ });
115
+ }
116
+ if (!templateHash.trim()) {
117
+ throw new CheqiSDKError("Template hash cannot be null or empty", {
118
+ errorCode: ErrorCodes.VALIDATION_ERROR,
119
+ httpStatusCode: 400
120
+ });
121
+ }
122
+ if (!routeFound(matchResponse) || !matchResponse.matchId) {
123
+ throw new CheqiSDKError("Cannot send credit notes: customer was not found during matching", {
124
+ errorCode: ErrorCodes.CUSTOMER_NOT_FOUND,
125
+ httpStatusCode: 400
126
+ });
127
+ }
128
+ return this.apiClient.sendEncryptedCreditNotes(matchResponse.matchId, parentCheqiReceiptId, encryptedCreditNotes, templateHash, accessToken);
129
+ }
130
+ decryptCreditNoteRequest(encryptedCreditNote, privateKeyBase64) {
131
+ if (!this.decryptionService) {
132
+ throw new CheqiSDKError("Decryption service is not configured", {
133
+ errorCode: ErrorCodes.DECRYPTION_ERROR
134
+ });
135
+ }
136
+ return this.decryptionService.decryptCreditNote(encryptedCreditNote, privateKeyBase64);
137
+ }
138
+ decryptDeliveredCreditNote(encryptedCreditNote, privateKeyBase64) {
139
+ if (!this.decryptionService) {
140
+ throw new CheqiSDKError("Decryption service is not configured", {
141
+ errorCode: ErrorCodes.DECRYPTION_ERROR
142
+ });
143
+ }
144
+ const decrypted = this.decryptionService.decryptDeliveredCreditNote(encryptedCreditNote, privateKeyBase64);
145
+ return this.mergeCreditNoteContext(decrypted);
146
+ }
147
+ buildEncryptedCreditNotes(matchResponse, templateResponse) {
148
+ const encryptedCreditNotes = [];
149
+ for (const recipient of matchedRecipients(matchResponse)) {
150
+ const acceptedFormats = recipient.acceptedFormats ?? [];
151
+ const envelope = {};
152
+ if (acceptedFormats.includes("CHEQI") && templateResponse.cheqi) {
153
+ envelope.cheqiCreditNote = templateResponse.cheqi;
154
+ }
155
+ if (acceptedFormats.includes("UBL_CREDIT_NOTE") && templateResponse.ublCreditNote) {
156
+ envelope.ublCreditNote = templateResponse.ublCreditNote;
157
+ }
158
+ encryptedCreditNotes.push(this.createEncryptedCreditNote(serializeJson(envelope), recipient));
159
+ }
160
+ return encryptedCreditNotes;
161
+ }
162
+ mergeCreditNoteContext(decrypted) {
163
+ const context = decrypted.creditNoteContextEnvelope;
164
+ if (!context) {
165
+ return decrypted;
166
+ }
167
+ const creditNoteEnvelope = {
168
+ cheqiCreditNote: decrypted.creditNoteEnvelope.cheqiCreditNote,
169
+ ublCreditNote: decrypted.creditNoteEnvelope.ublCreditNote
170
+ };
171
+ this.mergeXmlParty(creditNoteEnvelope, context);
172
+ this.mergeXmlPaymentMeans(creditNoteEnvelope, context);
173
+ this.mergeReceivingParty(creditNoteEnvelope, context);
174
+ return {
175
+ ...decrypted,
176
+ creditNoteEnvelope
177
+ };
178
+ }
179
+ mergeXmlParty(creditNoteEnvelope, context) {
180
+ const xmlReceivingParty = context.receivingParty?.xmlReceivingParty;
181
+ if (!xmlReceivingParty || !creditNoteEnvelope.ublCreditNote?.includes(CUSTOMER_PARTY_PLACEHOLDER)) {
182
+ return;
183
+ }
184
+ creditNoteEnvelope.ublCreditNote = creditNoteEnvelope.ublCreditNote.replace(CUSTOMER_PARTY_PLACEHOLDER, xmlReceivingParty);
185
+ }
186
+ mergeXmlPaymentMeans(creditNoteEnvelope, context) {
187
+ const xmlPaymentMeans = context.paymentMeans?.xmlPaymentMeans;
188
+ const xml = creditNoteEnvelope.ublCreditNote;
189
+ if (!xmlPaymentMeans || !xml) {
190
+ return;
191
+ }
192
+ if (xml.includes(CUSTOMER_PARTY_CLOSING_TAG)) {
193
+ creditNoteEnvelope.ublCreditNote = xml.replace(CUSTOMER_PARTY_CLOSING_TAG, CUSTOMER_PARTY_CLOSING_TAG + xmlPaymentMeans);
194
+ return;
195
+ }
196
+ if (xml.includes(CUSTOMER_PARTY_PLACEHOLDER)) {
197
+ creditNoteEnvelope.ublCreditNote = xml.replace(CUSTOMER_PARTY_PLACEHOLDER, CUSTOMER_PARTY_PLACEHOLDER + xmlPaymentMeans);
198
+ }
199
+ }
200
+ mergeReceivingParty(creditNoteEnvelope, context) {
201
+ const receivingParty = context.receivingParty?.receivingParty;
202
+ if (!receivingParty || !creditNoteEnvelope.cheqiCreditNote) {
203
+ return;
204
+ }
205
+ creditNoteEnvelope.cheqiCreditNote = {
206
+ ...creditNoteEnvelope.cheqiCreditNote,
207
+ receivingParty
208
+ };
209
+ }
210
+ }
211
+ //# sourceMappingURL=credit-note.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credit-note.js","sourceRoot":"","sources":["../../src/services/credit-note.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { DecryptedDeliveredCreditNote, EncryptedCreditNote, EncryptedCreditNoteInitiationRequest, EncryptedReceipt } from "../types.js";
2
+ /**
3
+ * Decrypts encrypted receipts and credit-note initiation requests using
4
+ * the seller's RSA private key.
5
+ */
6
+ export declare class DecryptionService {
7
+ /**
8
+ * Decrypt an encrypted receipt payload.
9
+ * @param encryptedReceipt The encrypted receipt from the Cheqi backend.
10
+ * @param privateKeyBase64 Base64-encoded PKCS#8 DER private key.
11
+ * @returns The decrypted receipt content and optional customer details.
12
+ */
13
+ decryptReceipt(encryptedReceipt: EncryptedReceipt, privateKeyBase64: string): {
14
+ receiptContent: string;
15
+ customerDetails: string | null;
16
+ };
17
+ /**
18
+ * Decrypt an encrypted credit-note initiation request.
19
+ * @param encryptedCreditNote The encrypted credit-note from a webhook.
20
+ * @param privateKeyBase64 Base64-encoded PKCS#8 DER private key.
21
+ * @returns The decrypted credit-note content.
22
+ */
23
+ decryptCreditNote(encryptedCreditNote: EncryptedCreditNoteInitiationRequest, privateKeyBase64: string): {
24
+ content: string;
25
+ };
26
+ /**
27
+ * Decrypt an encrypted delivered credit-note payload and optional credit-note context.
28
+ * @param encryptedCreditNote The encrypted delivered credit-note payload from the backend.
29
+ * @param privateKeyBase64 Base64-encoded PKCS#8 DER private key.
30
+ * @returns The decrypted credit-note envelope and optional context envelope.
31
+ */
32
+ decryptDeliveredCreditNote(encryptedCreditNote: EncryptedCreditNote, privateKeyBase64: string): DecryptedDeliveredCreditNote;
33
+ }
@@ -0,0 +1,145 @@
1
+ import { constants, createDecipheriv, createPrivateKey, privateDecrypt } from "node:crypto";
2
+ import { AES_KEY_LENGTH, GCM_IV_LENGTH, GCM_TAG_LENGTH } from "../crypto.js";
3
+ import { DecryptionError } from "../errors.js";
4
+ import { CreditNoteContextEnvelopeFromJSON } from "../models/generated/CreditNoteContextEnvelope.js";
5
+ import { parseBase64Der } from "../utils.js";
6
+ function rsaDecrypt(encryptedKeyBase64, privateKeyBase64) {
7
+ if (!encryptedKeyBase64) {
8
+ throw new DecryptionError("Encrypted key cannot be empty");
9
+ }
10
+ if (!privateKeyBase64) {
11
+ throw new DecryptionError("Private key is required for decryption");
12
+ }
13
+ const privateKey = createPrivateKey({
14
+ key: parseBase64Der(privateKeyBase64),
15
+ format: "der",
16
+ type: "pkcs8"
17
+ });
18
+ const decryptedKey = privateDecrypt({
19
+ key: privateKey,
20
+ oaepHash: "sha256",
21
+ padding: constants.RSA_PKCS1_OAEP_PADDING
22
+ }, Buffer.from(encryptedKeyBase64, "base64"));
23
+ if (decryptedKey.length !== AES_KEY_LENGTH) {
24
+ throw new DecryptionError(`Decrypted AES key has invalid length: expected ${AES_KEY_LENGTH} bytes, got ${decryptedKey.length}`);
25
+ }
26
+ return decryptedKey;
27
+ }
28
+ function aesDecrypt(encryptedDataBase64, aesKey) {
29
+ if (!encryptedDataBase64) {
30
+ throw new DecryptionError("Encrypted data cannot be empty");
31
+ }
32
+ const combined = Buffer.from(encryptedDataBase64, "base64");
33
+ const minLength = GCM_IV_LENGTH + GCM_TAG_LENGTH;
34
+ if (combined.length < minLength) {
35
+ throw new DecryptionError(`Encrypted data too short: expected at least ${minLength} bytes, got ${combined.length}`);
36
+ }
37
+ const iv = combined.subarray(0, GCM_IV_LENGTH);
38
+ const ciphertext = combined.subarray(GCM_IV_LENGTH, combined.length - GCM_TAG_LENGTH);
39
+ const tag = combined.subarray(combined.length - GCM_TAG_LENGTH);
40
+ const decipher = createDecipheriv("aes-256-gcm", aesKey, iv);
41
+ decipher.setAuthTag(tag);
42
+ return Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString("utf8");
43
+ }
44
+ /**
45
+ * Decrypts encrypted receipts and credit-note initiation requests using
46
+ * the seller's RSA private key.
47
+ */
48
+ export class DecryptionService {
49
+ /**
50
+ * Decrypt an encrypted receipt payload.
51
+ * @param encryptedReceipt The encrypted receipt from the Cheqi backend.
52
+ * @param privateKeyBase64 Base64-encoded PKCS#8 DER private key.
53
+ * @returns The decrypted receipt content and optional customer details.
54
+ */
55
+ decryptReceipt(encryptedReceipt, privateKeyBase64) {
56
+ if (!encryptedReceipt) {
57
+ throw new DecryptionError("Encrypted receipt cannot be null");
58
+ }
59
+ try {
60
+ const encryptedKey = encryptedReceipt.encryptedSymmetricKey ?? "";
61
+ const encryptedPayload = encryptedReceipt.encryptedReceipt ?? "";
62
+ const receiptKey = rsaDecrypt(encryptedKey, privateKeyBase64);
63
+ const receiptContent = aesDecrypt(encryptedPayload, receiptKey);
64
+ let customerDetails = null;
65
+ if (encryptedReceipt.encryptedCustomerDetails && encryptedReceipt.encryptedCustomerAesKey) {
66
+ const customerKey = rsaDecrypt(encryptedReceipt.encryptedCustomerAesKey, privateKeyBase64);
67
+ customerDetails = aesDecrypt(encryptedReceipt.encryptedCustomerDetails, customerKey);
68
+ }
69
+ return { receiptContent, customerDetails };
70
+ }
71
+ catch (error) {
72
+ if (error instanceof DecryptionError) {
73
+ throw error;
74
+ }
75
+ throw new DecryptionError(`Failed to decrypt receipt: ${String(error.message)}`, {
76
+ cause: error
77
+ });
78
+ }
79
+ }
80
+ /**
81
+ * Decrypt an encrypted credit-note initiation request.
82
+ * @param encryptedCreditNote The encrypted credit-note from a webhook.
83
+ * @param privateKeyBase64 Base64-encoded PKCS#8 DER private key.
84
+ * @returns The decrypted credit-note content.
85
+ */
86
+ decryptCreditNote(encryptedCreditNote, privateKeyBase64) {
87
+ if (!encryptedCreditNote) {
88
+ throw new DecryptionError("Encrypted credit note cannot be null");
89
+ }
90
+ try {
91
+ const encryptedKey = encryptedCreditNote.encryptedSymmetricKey ?? "";
92
+ const encryptedPayload = encryptedCreditNote.encryptedCreditNoteInitiationRequest ?? "";
93
+ const aesKey = rsaDecrypt(encryptedKey, privateKeyBase64);
94
+ return {
95
+ content: aesDecrypt(encryptedPayload, aesKey)
96
+ };
97
+ }
98
+ catch (error) {
99
+ if (error instanceof DecryptionError) {
100
+ throw error;
101
+ }
102
+ throw new DecryptionError(`Failed to decrypt credit note: ${String(error.message)}`, {
103
+ cause: error
104
+ });
105
+ }
106
+ }
107
+ /**
108
+ * Decrypt an encrypted delivered credit-note payload and optional credit-note context.
109
+ * @param encryptedCreditNote The encrypted delivered credit-note payload from the backend.
110
+ * @param privateKeyBase64 Base64-encoded PKCS#8 DER private key.
111
+ * @returns The decrypted credit-note envelope and optional context envelope.
112
+ */
113
+ decryptDeliveredCreditNote(encryptedCreditNote, privateKeyBase64) {
114
+ if (!encryptedCreditNote) {
115
+ throw new DecryptionError("Encrypted credit note cannot be null");
116
+ }
117
+ try {
118
+ const payloadKey = rsaDecrypt(encryptedCreditNote.encryptedSymmetricKey ?? "", privateKeyBase64);
119
+ const rawJson = aesDecrypt(encryptedCreditNote.encryptedCreditNote ?? "", payloadKey);
120
+ const creditNoteEnvelope = JSON.parse(rawJson);
121
+ let creditNoteContextEnvelope = null;
122
+ let rawCreditNoteContextJson = null;
123
+ if (encryptedCreditNote.encryptedCustomerDetails && encryptedCreditNote.encryptedCustomerAesKey) {
124
+ const contextKey = rsaDecrypt(encryptedCreditNote.encryptedCustomerAesKey, privateKeyBase64);
125
+ rawCreditNoteContextJson = aesDecrypt(encryptedCreditNote.encryptedCustomerDetails, contextKey);
126
+ creditNoteContextEnvelope = CreditNoteContextEnvelopeFromJSON(JSON.parse(rawCreditNoteContextJson));
127
+ }
128
+ return {
129
+ creditNoteEnvelope,
130
+ creditNoteContextEnvelope,
131
+ rawJson,
132
+ rawCreditNoteContextJson
133
+ };
134
+ }
135
+ catch (error) {
136
+ if (error instanceof DecryptionError) {
137
+ throw error;
138
+ }
139
+ throw new DecryptionError(`Failed to decrypt delivered credit note: ${String(error.message)}`, {
140
+ cause: error
141
+ });
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=decryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decryption.js","sourceRoot":"","sources":["../../src/services/decryption.ts"],"names":[],"mappings":"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"}