@cheqi/sdk 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cheqi-sdk.d.ts +7 -6
- package/dist/cheqi-sdk.js +7 -2
- package/dist/cheqi-sdk.js.map +1 -1
- package/dist/errors.d.ts +17 -1
- package/dist/errors.js +36 -1
- package/dist/errors.js.map +1 -1
- package/dist/http/client.js +46 -8
- package/dist/http/client.js.map +1 -1
- package/dist/http/retry.js +12 -5
- package/dist/http/retry.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/models/domain.js +9 -1
- package/dist/models/domain.js.map +1 -1
- package/dist/models/generated/AuthorizedCompanyDTO.d.ts +0 -6
- package/dist/models/generated/AuthorizedCompanyDTO.js +0 -2
- package/dist/models/generated/AuthorizedCompanyDTO.js.map +1 -1
- package/dist/models/generated/CompanyCreationRequest.d.ts +6 -6
- package/dist/models/generated/CompanyCreationRequest.js +2 -2
- package/dist/models/generated/CompanyCreationRequest.js.map +1 -1
- package/dist/models/generated/CompanyResponseBody.d.ts +6 -6
- package/dist/models/generated/CompanyResponseBody.js +2 -2
- package/dist/models/generated/CompanyResponseBody.js.map +1 -1
- package/dist/models/generated/EncryptedCreditNoteDto.d.ts +4 -13
- package/dist/models/generated/EncryptedCreditNoteDto.js +3 -11
- package/dist/models/generated/EncryptedCreditNoteDto.js.map +1 -1
- package/dist/models/generated/EncryptedReceipt.d.ts +109 -0
- package/dist/models/generated/{EncryptedReceiptDto.js → EncryptedReceipt.js} +12 -20
- package/dist/models/generated/EncryptedReceipt.js.map +1 -0
- package/dist/models/generated/IdentificationDetails.d.ts +1 -1
- package/dist/models/generated/ReceiptCreatedResponse.d.ts +6 -0
- package/dist/models/generated/ReceiptCreatedResponse.js +2 -0
- package/dist/models/generated/ReceiptCreatedResponse.js.map +1 -1
- package/dist/models/generated/ReceiptTemplateGenerationRequest.d.ts +2 -2
- package/dist/models/generated/ReceiptTemplateGenerationRequest.js +1 -3
- package/dist/models/generated/ReceiptTemplateGenerationRequest.js.map +1 -1
- package/dist/models/generated/ReceiverType.d.ts +28 -0
- package/dist/models/generated/ReceiverType.js +47 -0
- package/dist/models/generated/ReceiverType.js.map +1 -0
- package/dist/models/generated/RecipientResolutionResponse.d.ts +1 -13
- package/dist/models/generated/RecipientResolutionResponse.js +2 -6
- package/dist/models/generated/RecipientResolutionResponse.js.map +1 -1
- package/dist/models/generated/WebhookEventDTO.d.ts +3 -3
- package/dist/models/generated/WebhookEventDTO.js +3 -3
- package/dist/models/generated/WebhookEventDTO.js.map +1 -1
- package/dist/models/generated/index.d.ts +2 -1
- package/dist/models/generated/index.js +2 -1
- package/dist/models/generated/index.js.map +1 -1
- package/dist/models.d.ts +30 -0
- package/dist/models.js +90 -7
- package/dist/models.js.map +1 -1
- package/dist/rfc8785.d.ts +17 -0
- package/dist/rfc8785.js +241 -9
- package/dist/rfc8785.js.map +1 -1
- package/dist/services/credit-note.d.ts +7 -4
- package/dist/services/credit-note.js +14 -3
- package/dist/services/credit-note.js.map +1 -1
- package/dist/services/decryption.js +2 -2
- package/dist/services/decryption.js.map +1 -1
- package/dist/services/encryption.js +17 -6
- package/dist/services/encryption.js.map +1 -1
- package/dist/services/matching.js +2 -2
- package/dist/services/matching.js.map +1 -1
- package/dist/services/receipt-processor.d.ts +27 -0
- package/dist/services/receipt-processor.js +111 -0
- package/dist/services/receipt-processor.js.map +1 -0
- package/dist/services/receipt.js +4 -1
- package/dist/services/receipt.js.map +1 -1
- package/dist/types.d.ts +42 -2
- package/dist/utils.d.ts +13 -0
- package/dist/utils.js +32 -1
- package/dist/utils.js.map +1 -1
- package/dist/xml.d.ts +6 -0
- package/dist/xml.js +155 -3
- package/dist/xml.js.map +1 -1
- package/package.json +4 -1
- package/dist/models/generated/EncryptedReceiptDto.d.ts +0 -118
- package/dist/models/generated/EncryptedReceiptDto.js.map +0 -1
package/dist/rfc8785.js
CHANGED
|
@@ -1,26 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 8785-style JSON canonicalization, byte-compatible with the Cheqi Java SDK
|
|
3
|
+
* `RFC8785Canonicalizer`:
|
|
4
|
+
* - object keys sorted lexicographically (UTF-16 code-unit order),
|
|
5
|
+
* - strings escaped exactly as Java/`JSON.stringify` (control chars < 0x20 as
|
|
6
|
+
* `\u00xx`; `
|
|
7
|
+
`/`
|
|
8
|
+
` left unescaped),
|
|
9
|
+
* - numbers rendered like Jackson: integral tokens as integers, decimal tokens
|
|
10
|
+
* via `BigDecimal.toPlainString()` (no scientific notation, original scale
|
|
11
|
+
* preserved).
|
|
12
|
+
*
|
|
13
|
+
* When the input is a JSON **string**, original number tokens are preserved so
|
|
14
|
+
* the output matches the backend byte-for-byte (e.g. `12.10` stays `12.10`).
|
|
15
|
+
* When the input is an already-parsed object, numbers are JS `number`s and the
|
|
16
|
+
* original textual scale cannot be recovered (e.g. `12.10` becomes `12.1`).
|
|
17
|
+
*/
|
|
18
|
+
/** Wrapper preserving the exact source text of a JSON number token. */
|
|
19
|
+
class JsonNumberToken {
|
|
20
|
+
raw;
|
|
21
|
+
constructor(raw) {
|
|
22
|
+
this.raw = raw;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
1
25
|
function serializeString(value) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
26
|
+
// JSON.stringify escapes the same set Java's canonicalizeString does and
|
|
27
|
+
// leaves U+2028/U+2029 unescaped — matching the Java SDK.
|
|
28
|
+
return JSON.stringify(value);
|
|
5
29
|
}
|
|
6
|
-
|
|
30
|
+
/** Render a JSON number token like Jackson: integral as-is, decimal via BigDecimal.toPlainString(). */
|
|
31
|
+
function formatNumberToken(token) {
|
|
32
|
+
const match = /^(-?)(\d+)(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/.exec(token);
|
|
33
|
+
if (!match) {
|
|
34
|
+
return serializeJsNumber(Number(token));
|
|
35
|
+
}
|
|
36
|
+
const sign = match[1];
|
|
37
|
+
const intPart = match[2];
|
|
38
|
+
const fracPart = match[3] ?? "";
|
|
39
|
+
const exp = match[4] ? Number.parseInt(match[4], 10) : 0;
|
|
40
|
+
// Integral token (no fraction, no exponent) → integer representation.
|
|
41
|
+
if (fracPart === "" && exp === 0) {
|
|
42
|
+
return BigInt(sign + intPart).toString();
|
|
43
|
+
}
|
|
44
|
+
// Decimal token → BigDecimal.toPlainString().
|
|
45
|
+
const scale = fracPart.length - exp;
|
|
46
|
+
let magnitude = (intPart + fracPart).replace(/^0+/, "");
|
|
47
|
+
if (magnitude === "") {
|
|
48
|
+
magnitude = "0";
|
|
49
|
+
}
|
|
50
|
+
let result;
|
|
51
|
+
if (scale === 0) {
|
|
52
|
+
result = magnitude;
|
|
53
|
+
}
|
|
54
|
+
else if (scale < 0) {
|
|
55
|
+
result = magnitude + "0".repeat(-scale);
|
|
56
|
+
}
|
|
57
|
+
else if (magnitude.length > scale) {
|
|
58
|
+
const pointPos = magnitude.length - scale;
|
|
59
|
+
result = `${magnitude.slice(0, pointPos)}.${magnitude.slice(pointPos)}`;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
result = `0.${"0".repeat(scale - magnitude.length)}${magnitude}`;
|
|
63
|
+
}
|
|
64
|
+
// Drop the sign for zero (BigDecimal has no negative zero).
|
|
65
|
+
return sign === "-" && /[1-9]/.test(result) ? `-${result}` : result;
|
|
66
|
+
}
|
|
67
|
+
/** Format an already-parsed JS number without scientific notation. */
|
|
68
|
+
function serializeJsNumber(value) {
|
|
7
69
|
if (!Number.isFinite(value)) {
|
|
8
70
|
throw new Error("NaN and Infinity are not valid JSON values");
|
|
9
71
|
}
|
|
10
|
-
if (
|
|
72
|
+
if (value === 0) {
|
|
11
73
|
return "0";
|
|
12
74
|
}
|
|
13
|
-
|
|
75
|
+
if (Number.isInteger(value) && Math.abs(value) < 1e21) {
|
|
76
|
+
return value.toString();
|
|
77
|
+
}
|
|
78
|
+
const text = value.toString();
|
|
79
|
+
if (!/[eE]/.test(text)) {
|
|
80
|
+
return text;
|
|
81
|
+
}
|
|
82
|
+
// Expand scientific notation produced by Number.toString() into plain form.
|
|
83
|
+
return formatNumberToken(text);
|
|
14
84
|
}
|
|
15
85
|
function serialize(value) {
|
|
16
86
|
if (value === null) {
|
|
17
87
|
return "null";
|
|
18
88
|
}
|
|
89
|
+
if (value instanceof JsonNumberToken) {
|
|
90
|
+
return formatNumberToken(value.raw);
|
|
91
|
+
}
|
|
19
92
|
if (typeof value === "boolean") {
|
|
20
93
|
return value ? "true" : "false";
|
|
21
94
|
}
|
|
22
95
|
if (typeof value === "number") {
|
|
23
|
-
return
|
|
96
|
+
return serializeJsNumber(value);
|
|
97
|
+
}
|
|
98
|
+
if (typeof value === "bigint") {
|
|
99
|
+
return value.toString();
|
|
24
100
|
}
|
|
25
101
|
if (typeof value === "string") {
|
|
26
102
|
return serializeString(value);
|
|
@@ -35,8 +111,164 @@ function serialize(value) {
|
|
|
35
111
|
}
|
|
36
112
|
throw new TypeError(`Cannot canonicalize type: ${typeof value}`);
|
|
37
113
|
}
|
|
114
|
+
// ── Tokenizing JSON parser that preserves number source text ──────────────────
|
|
115
|
+
function parseJsonPreservingNumbers(text) {
|
|
116
|
+
let i = 0;
|
|
117
|
+
function error(message) {
|
|
118
|
+
throw new SyntaxError(`Invalid JSON at position ${i}: ${message}`);
|
|
119
|
+
}
|
|
120
|
+
function skipWhitespace() {
|
|
121
|
+
while (i < text.length) {
|
|
122
|
+
const c = text.charCodeAt(i);
|
|
123
|
+
if (c === 0x20 || c === 0x09 || c === 0x0a || c === 0x0d) {
|
|
124
|
+
i += 1;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function parseValue() {
|
|
132
|
+
skipWhitespace();
|
|
133
|
+
const ch = text[i];
|
|
134
|
+
if (ch === "{") {
|
|
135
|
+
return parseObject();
|
|
136
|
+
}
|
|
137
|
+
if (ch === "[") {
|
|
138
|
+
return parseArray();
|
|
139
|
+
}
|
|
140
|
+
if (ch === '"') {
|
|
141
|
+
return parseString();
|
|
142
|
+
}
|
|
143
|
+
if (ch === "-" || (ch >= "0" && ch <= "9")) {
|
|
144
|
+
return parseNumber();
|
|
145
|
+
}
|
|
146
|
+
if (text.startsWith("true", i)) {
|
|
147
|
+
i += 4;
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
if (text.startsWith("false", i)) {
|
|
151
|
+
i += 5;
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
if (text.startsWith("null", i)) {
|
|
155
|
+
i += 4;
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
error(`unexpected token '${ch ?? "EOF"}'`);
|
|
159
|
+
}
|
|
160
|
+
function parseObject() {
|
|
161
|
+
const obj = {};
|
|
162
|
+
i += 1; // {
|
|
163
|
+
skipWhitespace();
|
|
164
|
+
if (text[i] === "}") {
|
|
165
|
+
i += 1;
|
|
166
|
+
return obj;
|
|
167
|
+
}
|
|
168
|
+
for (;;) {
|
|
169
|
+
skipWhitespace();
|
|
170
|
+
if (text[i] !== '"') {
|
|
171
|
+
error("expected string key");
|
|
172
|
+
}
|
|
173
|
+
const key = parseString();
|
|
174
|
+
skipWhitespace();
|
|
175
|
+
if (text[i] !== ":") {
|
|
176
|
+
error("expected ':'");
|
|
177
|
+
}
|
|
178
|
+
i += 1;
|
|
179
|
+
obj[key] = parseValue();
|
|
180
|
+
skipWhitespace();
|
|
181
|
+
const ch = text[i];
|
|
182
|
+
if (ch === ",") {
|
|
183
|
+
i += 1;
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (ch === "}") {
|
|
187
|
+
i += 1;
|
|
188
|
+
return obj;
|
|
189
|
+
}
|
|
190
|
+
error("expected ',' or '}'");
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function parseArray() {
|
|
194
|
+
const arr = [];
|
|
195
|
+
i += 1; // [
|
|
196
|
+
skipWhitespace();
|
|
197
|
+
if (text[i] === "]") {
|
|
198
|
+
i += 1;
|
|
199
|
+
return arr;
|
|
200
|
+
}
|
|
201
|
+
for (;;) {
|
|
202
|
+
arr.push(parseValue());
|
|
203
|
+
skipWhitespace();
|
|
204
|
+
const ch = text[i];
|
|
205
|
+
if (ch === ",") {
|
|
206
|
+
i += 1;
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (ch === "]") {
|
|
210
|
+
i += 1;
|
|
211
|
+
return arr;
|
|
212
|
+
}
|
|
213
|
+
error("expected ',' or ']'");
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function parseString() {
|
|
217
|
+
const start = i;
|
|
218
|
+
i += 1; // opening quote
|
|
219
|
+
while (i < text.length) {
|
|
220
|
+
const ch = text[i];
|
|
221
|
+
if (ch === "\\") {
|
|
222
|
+
i += 2;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
if (ch === '"') {
|
|
226
|
+
i += 1;
|
|
227
|
+
return JSON.parse(text.slice(start, i));
|
|
228
|
+
}
|
|
229
|
+
i += 1;
|
|
230
|
+
}
|
|
231
|
+
error("unterminated string");
|
|
232
|
+
}
|
|
233
|
+
function parseNumber() {
|
|
234
|
+
const start = i;
|
|
235
|
+
if (text[i] === "-") {
|
|
236
|
+
i += 1;
|
|
237
|
+
}
|
|
238
|
+
while (i < text.length && text[i] >= "0" && text[i] <= "9") {
|
|
239
|
+
i += 1;
|
|
240
|
+
}
|
|
241
|
+
if (text[i] === ".") {
|
|
242
|
+
i += 1;
|
|
243
|
+
while (i < text.length && text[i] >= "0" && text[i] <= "9") {
|
|
244
|
+
i += 1;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (text[i] === "e" || text[i] === "E") {
|
|
248
|
+
i += 1;
|
|
249
|
+
if (text[i] === "+" || text[i] === "-") {
|
|
250
|
+
i += 1;
|
|
251
|
+
}
|
|
252
|
+
while (i < text.length && text[i] >= "0" && text[i] <= "9") {
|
|
253
|
+
i += 1;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return new JsonNumberToken(text.slice(start, i));
|
|
257
|
+
}
|
|
258
|
+
const result = parseValue();
|
|
259
|
+
skipWhitespace();
|
|
260
|
+
if (i < text.length) {
|
|
261
|
+
error("trailing content");
|
|
262
|
+
}
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
38
265
|
export function canonicalizeJson(value) {
|
|
39
|
-
|
|
40
|
-
|
|
266
|
+
if (typeof value === "string") {
|
|
267
|
+
if (value.trim() === "") {
|
|
268
|
+
throw new Error("JSON string cannot be null or empty");
|
|
269
|
+
}
|
|
270
|
+
return serialize(parseJsonPreservingNumbers(value));
|
|
271
|
+
}
|
|
272
|
+
return serialize(value);
|
|
41
273
|
}
|
|
42
274
|
//# sourceMappingURL=rfc8785.js.map
|
package/dist/rfc8785.js.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"rfc8785.js","sourceRoot":"","sources":["../src/rfc8785.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CreditNoteResult } from "../models.js";
|
|
2
|
-
import type { CheqiApiClient, CreditNoteTemplateGenerationRequest, CreditNoteTemplateRequest, CreditNoteTemplateResponse, DecryptedDeliveredCreditNote, EncryptedCreditNote, EncryptedCreditNoteInitiationRequest, IdentificationDetails, MatchedRecipient, RecipientResolutionResponse } from "../types.js";
|
|
2
|
+
import type { CheqiApiClient, CreditNoteInitiationRequest, CreditNoteTemplateGenerationRequest, CreditNoteTemplateRequest, CreditNoteTemplateResponse, DecryptedDeliveredCreditNote, EncryptedCreditNote, EncryptedCreditNoteInitiationRequest, IdentificationDetails, MatchedRecipient, RecipientResolutionResponse } from "../types.js";
|
|
3
3
|
import { DecryptionService } from "./decryption.js";
|
|
4
4
|
import { EncryptionService } from "./encryption.js";
|
|
5
5
|
import { MatchingService } from "./matching.js";
|
|
@@ -13,9 +13,12 @@ export declare class CreditNoteService {
|
|
|
13
13
|
generateCreditNoteTemplate(request: CreditNoteTemplateGenerationRequest, accessToken?: string | null): Promise<CreditNoteTemplateResponse>;
|
|
14
14
|
createEncryptedCreditNote(creditNoteEnvelope: string, recipient: MatchedRecipient): EncryptedCreditNote;
|
|
15
15
|
sendEncryptedCreditNotes(parentCheqiReceiptId: string, encryptedCreditNotes: EncryptedCreditNote[], templateHash: string, matchResponse: RecipientResolutionResponse, accessToken?: string | null): Promise<Record<string, unknown>>;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Decrypt and parse a customer-initiated credit-note (return) request.
|
|
18
|
+
* Mirrors the Java SDK, which deserializes the decrypted JSON into a
|
|
19
|
+
* structured {@link CreditNoteInitiationRequest}.
|
|
20
|
+
*/
|
|
21
|
+
decryptCreditNoteRequest(encryptedCreditNote: EncryptedCreditNoteInitiationRequest, privateKeyBase64: string): CreditNoteInitiationRequest;
|
|
19
22
|
decryptDeliveredCreditNote(encryptedCreditNote: EncryptedCreditNote, privateKeyBase64: string): DecryptedDeliveredCreditNote;
|
|
20
23
|
private buildEncryptedCreditNotes;
|
|
21
24
|
private mergeCreditNoteContext;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CheqiSDKError, CreditNoteProcessingError, ErrorCodes } from "../errors.js";
|
|
1
|
+
import { CheqiSDKError, CreditNoteProcessingError, DecryptionError, ErrorCodes } from "../errors.js";
|
|
2
2
|
import { CreditNoteResult } from "../models.js";
|
|
3
3
|
import { serializeJson, sha256Hex } from "../utils.js";
|
|
4
4
|
const CUSTOMER_PARTY_PLACEHOLDER = "<cac:AccountingCustomerParty/>";
|
|
@@ -20,7 +20,7 @@ function routeFound(matchResponse) {
|
|
|
20
20
|
return Boolean(matchResponse.routeFound ?? matchResponse.customerFound);
|
|
21
21
|
}
|
|
22
22
|
function matchedRecipients(matchResponse) {
|
|
23
|
-
return matchResponse.recipients ??
|
|
23
|
+
return matchResponse.recipients ?? [];
|
|
24
24
|
}
|
|
25
25
|
export class CreditNoteService {
|
|
26
26
|
apiClient;
|
|
@@ -127,13 +127,24 @@ export class CreditNoteService {
|
|
|
127
127
|
}
|
|
128
128
|
return this.apiClient.sendEncryptedCreditNotes(matchResponse.matchId, parentCheqiReceiptId, encryptedCreditNotes, templateHash, accessToken);
|
|
129
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Decrypt and parse a customer-initiated credit-note (return) request.
|
|
132
|
+
* Mirrors the Java SDK, which deserializes the decrypted JSON into a
|
|
133
|
+
* structured {@link CreditNoteInitiationRequest}.
|
|
134
|
+
*/
|
|
130
135
|
decryptCreditNoteRequest(encryptedCreditNote, privateKeyBase64) {
|
|
131
136
|
if (!this.decryptionService) {
|
|
132
137
|
throw new CheqiSDKError("Decryption service is not configured", {
|
|
133
138
|
errorCode: ErrorCodes.DECRYPTION_ERROR
|
|
134
139
|
});
|
|
135
140
|
}
|
|
136
|
-
|
|
141
|
+
const { content } = this.decryptionService.decryptCreditNote(encryptedCreditNote, privateKeyBase64);
|
|
142
|
+
try {
|
|
143
|
+
return JSON.parse(content);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
throw new DecryptionError("Failed to deserialize decrypted credit note request", { cause: error });
|
|
147
|
+
}
|
|
137
148
|
}
|
|
138
149
|
decryptDeliveredCreditNote(encryptedCreditNote, privateKeyBase64) {
|
|
139
150
|
if (!this.decryptionService) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit-note.js","sourceRoot":"","sources":["../../src/services/credit-note.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"credit-note.js","sourceRoot":"","sources":["../../src/services/credit-note.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { constants, createDecipheriv, createPrivateKey, privateDecrypt } from "n
|
|
|
2
2
|
import { AES_KEY_LENGTH, GCM_IV_LENGTH, GCM_TAG_LENGTH } from "../crypto.js";
|
|
3
3
|
import { DecryptionError } from "../errors.js";
|
|
4
4
|
import { CreditNoteContextEnvelopeFromJSON } from "../models/generated/CreditNoteContextEnvelope.js";
|
|
5
|
-
import {
|
|
5
|
+
import { decodeKey } from "../utils.js";
|
|
6
6
|
function rsaDecrypt(encryptedKeyBase64, privateKeyBase64) {
|
|
7
7
|
if (!encryptedKeyBase64) {
|
|
8
8
|
throw new DecryptionError("Encrypted key cannot be empty");
|
|
@@ -11,7 +11,7 @@ function rsaDecrypt(encryptedKeyBase64, privateKeyBase64) {
|
|
|
11
11
|
throw new DecryptionError("Private key is required for decryption");
|
|
12
12
|
}
|
|
13
13
|
const privateKey = createPrivateKey({
|
|
14
|
-
key:
|
|
14
|
+
key: decodeKey(privateKeyBase64),
|
|
15
15
|
format: "der",
|
|
16
16
|
type: "pkcs8"
|
|
17
17
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decryption.js","sourceRoot":"","sources":["../../src/services/decryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iCAAiC,EAAE,MAAM,kDAAkD,CAAC;AAQrG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"decryption.js","sourceRoot":"","sources":["../../src/services/decryption.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
import { constants, createCipheriv, createPublicKey, publicEncrypt, randomBytes } from "node:crypto";
|
|
2
2
|
import { AES_KEY_LENGTH, GCM_IV_LENGTH } from "../crypto.js";
|
|
3
3
|
import { EncryptionError } from "../errors.js";
|
|
4
|
-
import {
|
|
4
|
+
import { decodeKey } from "../utils.js";
|
|
5
|
+
/**
|
|
6
|
+
* Parse an RSA public key, supporting both X.509 SubjectPublicKeyInfo (SPKI) and
|
|
7
|
+
* raw PKCS#1 RSAPublicKey DER (the format produced by iOS
|
|
8
|
+
* `SecKeyCopyExternalRepresentation`). Mirrors the Java SDK `RSAPublicKeyParser`.
|
|
9
|
+
*/
|
|
10
|
+
function parsePublicKey(publicKeyBase64) {
|
|
11
|
+
const der = decodeKey(publicKeyBase64);
|
|
12
|
+
try {
|
|
13
|
+
return createPublicKey({ key: der, format: "der", type: "spki" });
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Fall back to raw PKCS#1 RSA public key (iOS SecKeyCopyExternalRepresentation).
|
|
17
|
+
return createPublicKey({ key: der, format: "der", type: "pkcs1" });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
5
20
|
function hybridEncrypt(plaintext, publicKeyBase64) {
|
|
6
21
|
if (!publicKeyBase64) {
|
|
7
22
|
throw new EncryptionError("Public key is required for encryption");
|
|
@@ -12,11 +27,7 @@ function hybridEncrypt(plaintext, publicKeyBase64) {
|
|
|
12
27
|
const ciphertext = Buffer.concat([cipher.update(plaintext, "utf8"), cipher.final()]);
|
|
13
28
|
const tag = cipher.getAuthTag();
|
|
14
29
|
const encryptedData = Buffer.concat([iv, ciphertext, tag]).toString("base64");
|
|
15
|
-
const publicKey =
|
|
16
|
-
key: parseBase64Der(publicKeyBase64),
|
|
17
|
-
format: "der",
|
|
18
|
-
type: "spki"
|
|
19
|
-
});
|
|
30
|
+
const publicKey = parsePublicKey(publicKeyBase64);
|
|
20
31
|
const encryptedKey = publicEncrypt({
|
|
21
32
|
key: publicKey,
|
|
22
33
|
oaepHash: "sha256",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/services/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/services/encryption.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CheqiApiError, ErrorCodes } from "../errors.js";
|
|
1
|
+
import { CheqiApiError, CheqiSDKError, ErrorCodes } from "../errors.js";
|
|
2
2
|
import { coalesceString } from "../utils.js";
|
|
3
3
|
export class MatchingService {
|
|
4
4
|
apiClient;
|
|
@@ -7,7 +7,7 @@ export class MatchingService {
|
|
|
7
7
|
}
|
|
8
8
|
async matchCustomer(identificationDetails, accessToken) {
|
|
9
9
|
if (!this.hasValidIdentifiers(identificationDetails)) {
|
|
10
|
-
throw new
|
|
10
|
+
throw new CheqiSDKError("Identification details must contain at least one identifier (card details, payment account details, or email)", { errorCode: ErrorCodes.VALIDATION_ERROR, httpStatusCode: 400 });
|
|
11
11
|
}
|
|
12
12
|
try {
|
|
13
13
|
return await this.apiClient.matchCustomer(identificationDetails, accessToken);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matching.js","sourceRoot":"","sources":["../../src/services/matching.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"matching.js","sourceRoot":"","sources":["../../src/services/matching.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,SAAgD;QAAhD,cAAS,GAAT,SAAS,CAAuC;IAAG,CAAC;IAEjF,KAAK,CAAC,aAAa,CACjB,qBAA4C,EAC5C,WAA2B;QAE3B,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,aAAa,CACrB,+GAA+G,EAC/G,EAAE,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,cAAc,EAAE,GAAG,EAAE,CAChE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;gBACnC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,aAAa,CAAC,6BAA6B,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,EAAE,EAAE;gBACvF,SAAS,EAAE,UAAU,CAAC,aAAa;gBACnC,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,qBAA+D;QACzF,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,OAAO,CACZ,cAAc,CACX,qBAAqB,CAAC,WAA6D,EAAE,oBAAoB,EAC1G,qBAAqB,CAAC,WAAW,EAAE,uBAAuB,EAC1D,qBAAqB,CAAC,qBAAqB,EAAE,UAAU,EACvD,qBAAqB,CAAC,cAAc,EACpC,qBAAqB,CAAC,cAAc,EACpC,qBAAqB,CAAC,WAAW,CAClC,CACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DecryptedReceipt, EncryptedReceipt } from "../types.js";
|
|
2
|
+
import { DecryptionService } from "./decryption.js";
|
|
3
|
+
/**
|
|
4
|
+
* Decrypts an encrypted receipt and merges the receipt context (receiving party
|
|
5
|
+
* and payment means) into both the UBL XML and CheqiReceipt formats.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors the Java SDK `ReceiptProcessor` + `ReceiptMergeService`:
|
|
8
|
+
* - UBL XML: the `<cac:AccountingCustomerParty/>` placeholder is replaced with
|
|
9
|
+
* the `xmlReceivingParty` fragment.
|
|
10
|
+
* - UBL XML: `xmlPaymentMeans` is injected immediately after the
|
|
11
|
+
* AccountingCustomerParty element when present.
|
|
12
|
+
* - CheqiReceipt: the `receivingParty` is injected from the receipt context.
|
|
13
|
+
*/
|
|
14
|
+
export declare class ReceiptProcessor {
|
|
15
|
+
private readonly decryptionService;
|
|
16
|
+
constructor(decryptionService: DecryptionService);
|
|
17
|
+
/**
|
|
18
|
+
* Decrypt an encrypted receipt and return a fully merged {@link DecryptedReceipt}.
|
|
19
|
+
* @param encryptedReceipt The encrypted receipt payload.
|
|
20
|
+
* @param privateKey Base64-encoded PKCS#8 DER private key.
|
|
21
|
+
*/
|
|
22
|
+
processEncryptedReceipt(encryptedReceipt: EncryptedReceipt, privateKey: string): DecryptedReceipt;
|
|
23
|
+
private merge;
|
|
24
|
+
private mergeXmlParty;
|
|
25
|
+
private mergeXmlPaymentMeans;
|
|
26
|
+
private mergeReceivingParty;
|
|
27
|
+
}
|