awesome-node-checkout 1.2.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +81 -23
  3. package/dist/adapters/express/index.d.ts +35 -2
  4. package/dist/adapters/express/index.d.ts.map +1 -1
  5. package/dist/adapters/express/index.js +77 -34
  6. package/dist/adapters/express/index.js.map +1 -1
  7. package/dist/checkout-configurator.d.ts +18 -1
  8. package/dist/checkout-configurator.d.ts.map +1 -1
  9. package/dist/checkout-configurator.js +58 -72
  10. package/dist/checkout-configurator.js.map +1 -1
  11. package/dist/events/checkout-event-bus.d.ts +20 -1
  12. package/dist/events/checkout-event-bus.d.ts.map +1 -1
  13. package/dist/events/checkout-event-bus.js +18 -9
  14. package/dist/events/checkout-event-bus.js.map +1 -1
  15. package/dist/index.d.ts +2 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +5 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/models/errors.d.ts +1 -1
  20. package/dist/models/errors.d.ts.map +1 -1
  21. package/dist/models/errors.js.map +1 -1
  22. package/dist/models/payment-result.model.d.ts +14 -1
  23. package/dist/models/payment-result.model.d.ts.map +1 -1
  24. package/dist/providers/nexi/nexi.provider.d.ts +3 -0
  25. package/dist/providers/nexi/nexi.provider.d.ts.map +1 -1
  26. package/dist/providers/nexi/nexi.provider.js +45 -5
  27. package/dist/providers/nexi/nexi.provider.js.map +1 -1
  28. package/dist/providers/paypal/paypal.provider.d.ts.map +1 -1
  29. package/dist/providers/paypal/paypal.provider.js +15 -2
  30. package/dist/providers/paypal/paypal.provider.js.map +1 -1
  31. package/dist/providers/satispay/satispay.provider.d.ts.map +1 -1
  32. package/dist/providers/satispay/satispay.provider.js +43 -4
  33. package/dist/providers/satispay/satispay.provider.js.map +1 -1
  34. package/dist/utils/ids.d.ts +10 -0
  35. package/dist/utils/ids.d.ts.map +1 -0
  36. package/dist/utils/ids.js +16 -0
  37. package/dist/utils/ids.js.map +1 -0
  38. package/dist/utils/money.d.ts +20 -0
  39. package/dist/utils/money.d.ts.map +1 -0
  40. package/dist/utils/money.js +68 -0
  41. package/dist/utils/money.js.map +1 -0
  42. package/dist/utils/parsing.util.d.ts +14 -4
  43. package/dist/utils/parsing.util.d.ts.map +1 -1
  44. package/dist/utils/parsing.util.js +32 -6
  45. package/dist/utils/parsing.util.js.map +1 -1
  46. package/package.json +1 -1
@@ -48,9 +48,26 @@ export declare class CheckoutConfigurator {
48
48
  getProvider(name: string): IPaymentProvider;
49
49
  /** Returns the names of all registered providers */
50
50
  getRegisteredProviders(): string[];
51
+ /**
52
+ * Normalizes a callback / redirect / execute outcome according to the single meaning of
53
+ * `verified` ("the outcome was authenticated by a signature/MAC or by an authenticated
54
+ * read from the provider API"):
55
+ * - `verified` is `true` only when the provider explicitly set it to `true` (fail closed);
56
+ * - an unverified outcome never reports `success: true`, and carries no `paymentId` / `orderId`;
57
+ * - a verified outcome takes `orderId` from the local paymentId -> orderId map (keyed on the
58
+ * provider-authenticated `paymentId`) or from the provider's own `orderId`, never from the
59
+ * request query or from unsigned body fields, whatever name the provider is registered under.
60
+ */
61
+ private normalizeOutcome;
51
62
  /** Create a new payment via the specified provider */
52
63
  createPayment(providerName: string, request: PaymentRequest): Promise<PaymentResult>;
53
- /** Execute/capture a previously created payment */
64
+ /**
65
+ * Execute/capture a previously created payment.
66
+ * The result and the emitted event are keyed on the `paymentId` authenticated by the
67
+ * provider (e.g. the MAC-covered Nexi `codTrans`), never on the caller's argument.
68
+ * When a non-empty `paymentId` argument differs from the authenticated one, the call fails
69
+ * with `success: false`, `verified: false`, error `'Payment id does not match the outcome'`.
70
+ */
54
71
  executePayment(providerName: string, paymentId: string, data?: Record<string, string>): Promise<PaymentResult>;
55
72
  /** Retrieve the current status and details of a payment */
56
73
  getPaymentDetails(providerName: string, paymentId: string): Promise<PaymentResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-configurator.d.ts","sourceRoot":"","sources":["../src/checkout-configurator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAA2C,MAAM,6BAA6B,CAAC;AAExG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,oBAAoB;IAQnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAEhE,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAA0B;gBAE9B,MAAM,GAAE,cAAmB;IAExD,0FAA0F;IAC1F,OAAO,CAAC,eAAe;IAUvB,8EAA8E;YAChE,IAAI;IASlB;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAalD;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAY3C,oDAAoD;IACpD,sBAAsB,IAAI,MAAM,EAAE;IAIlC,sDAAsD;IAChD,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAmB1F,mDAAmD;IAC7C,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,aAAa,CAAC;IAmBzB,2DAA2D;IACrD,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKxF,qCAAqC;IAC/B,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC;IAmBzB;;;OAGG;IACG,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,aAAa,CAAC;IA2DzB;;;OAGG;IACG,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,aAAa,CAAC;CA6C1B"}
1
+ {"version":3,"file":"checkout-configurator.d.ts","sourceRoot":"","sources":["../src/checkout-configurator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAA2C,MAAM,6BAA6B,CAAC;AAExG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,oBAAoB;IAQnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAEhE,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAA0B;gBAE9B,MAAM,GAAE,cAAmB;IAExD,0FAA0F;IAC1F,OAAO,CAAC,eAAe;IAUvB,8EAA8E;YAChE,IAAI;IASlB;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAalD;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAY3C,oDAAoD;IACpD,sBAAsB,IAAI,MAAM,EAAE;IAIlC;;;;;;;;;OASG;IACH,OAAO,CAAC,gBAAgB;IAiBxB,sDAAsD;IAChD,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAoB1F;;;;;;OAMG;IACG,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,aAAa,CAAC;IA8BzB,2DAA2D;IACrD,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAKxF,qCAAqC;IAC/B,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC;IAmBzB;;;OAGG;IACG,aAAa,CACjB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACpC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GACtE,OAAO,CAAC,aAAa,CAAC;IAyBzB;;;OAGG;IACG,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,aAAa,CAAC;CAuB1B"}
@@ -76,6 +76,33 @@ class CheckoutConfigurator {
76
76
  getRegisteredProviders() {
77
77
  return Array.from(this.providers.keys());
78
78
  }
79
+ /**
80
+ * Normalizes a callback / redirect / execute outcome according to the single meaning of
81
+ * `verified` ("the outcome was authenticated by a signature/MAC or by an authenticated
82
+ * read from the provider API"):
83
+ * - `verified` is `true` only when the provider explicitly set it to `true` (fail closed);
84
+ * - an unverified outcome never reports `success: true`, and carries no `paymentId` / `orderId`;
85
+ * - a verified outcome takes `orderId` from the local paymentId -> orderId map (keyed on the
86
+ * provider-authenticated `paymentId`) or from the provider's own `orderId`, never from the
87
+ * request query or from unsigned body fields, whatever name the provider is registered under.
88
+ */
89
+ normalizeOutcome(result) {
90
+ const verified = result.verified === true;
91
+ if (!verified) {
92
+ result.paymentId = undefined;
93
+ result.orderId = undefined;
94
+ if (result.success) {
95
+ result.success = false;
96
+ result.error = result.error ?? 'Payment outcome could not be verified';
97
+ }
98
+ }
99
+ else {
100
+ result.orderId =
101
+ (result.paymentId ? this.paymentOrders.get(result.paymentId) : undefined) ?? result.orderId;
102
+ }
103
+ result.verified = verified;
104
+ return result;
105
+ }
79
106
  /** Create a new payment via the specified provider */
80
107
  async createPayment(providerName, request) {
81
108
  const provider = this.getProvider(providerName);
@@ -90,26 +117,42 @@ class CheckoutConfigurator {
90
117
  orderId: request.orderId,
91
118
  status: result.status,
92
119
  error: result.error,
93
- verified: result.success,
120
+ // Creation reports no payment outcome: nothing has been authenticated yet.
121
+ verified: false,
94
122
  raw: result.raw,
95
123
  });
96
124
  return result;
97
125
  }
98
- /** Execute/capture a previously created payment */
126
+ /**
127
+ * Execute/capture a previously created payment.
128
+ * The result and the emitted event are keyed on the `paymentId` authenticated by the
129
+ * provider (e.g. the MAC-covered Nexi `codTrans`), never on the caller's argument.
130
+ * When a non-empty `paymentId` argument differs from the authenticated one, the call fails
131
+ * with `success: false`, `verified: false`, error `'Payment id does not match the outcome'`.
132
+ */
99
133
  async executePayment(providerName, paymentId, data) {
100
134
  const provider = this.getProvider(providerName);
101
- const result = await provider.executePayment(paymentId, data);
102
- const orderId = this.paymentOrders.get(paymentId);
103
- if (orderId && !result.orderId) {
104
- result.orderId = orderId;
135
+ let result = await provider.executePayment(paymentId, data);
136
+ if (result.verified === true &&
137
+ typeof paymentId === 'string' &&
138
+ paymentId !== '' &&
139
+ result.paymentId !== paymentId) {
140
+ result = {
141
+ success: false,
142
+ verified: false,
143
+ status: 'FAILED',
144
+ error: 'Payment id does not match the outcome',
145
+ raw: result.raw,
146
+ };
105
147
  }
148
+ this.normalizeOutcome(result);
106
149
  await this.emit(result.success ? 'payment.completed' : 'payment.failed', {
107
150
  provider: providerName,
108
- paymentId,
109
- orderId,
151
+ paymentId: result.paymentId,
152
+ orderId: result.orderId,
110
153
  status: result.status,
111
154
  error: result.error,
112
- verified: result.success,
155
+ verified: result.verified === true,
113
156
  raw: result.raw,
114
157
  });
115
158
  return result;
@@ -133,7 +176,7 @@ class CheckoutConfigurator {
133
176
  orderId,
134
177
  status: result.status,
135
178
  error: result.error,
136
- verified: result.success,
179
+ verified: result.verified === true,
137
180
  raw: result.raw,
138
181
  });
139
182
  return result;
@@ -148,48 +191,14 @@ class CheckoutConfigurator {
148
191
  throw new errors_1.CheckoutError(`Provider '${providerName}' does not support webhook handling`, 'WEBHOOK_NOT_SUPPORTED', providerName);
149
192
  }
150
193
  const result = await provider.handleWebhook(body, headers, query, context);
151
- const rawAny = result.raw;
152
- const method = context?.method?.toUpperCase();
153
- const isGetOrHead = method === 'GET' || method === 'HEAD';
154
- const isNexi = providerName.toLowerCase() === 'nexi';
155
- const isVerified = result.verified ?? result.success;
156
- let orderId;
157
- if (isVerified) {
158
- if (isNexi) {
159
- // For Nexi, orderId only from local map or codTrans (which is MAC-covered), never unsigned body or query
160
- orderId =
161
- (result.paymentId ? this.paymentOrders.get(result.paymentId) : undefined) ??
162
- rawAny?.codTrans ??
163
- result.orderId;
164
- result.orderId = orderId;
165
- }
166
- else {
167
- orderId =
168
- (result.paymentId ? this.paymentOrders.get(result.paymentId) : undefined) ??
169
- result.orderId ??
170
- (!isGetOrHead ? (rawAny?.orderId ?? rawAny?.order_id) : undefined) ??
171
- rawAny?.external_code ??
172
- (!isGetOrHead ? query?.order_id : undefined);
173
- if (orderId) {
174
- result.orderId = orderId;
175
- }
176
- }
177
- }
178
- else {
179
- // When verification failed, do not populate orderId from query or unsigned body fields
180
- orderId = undefined;
181
- result.orderId = undefined;
182
- }
183
- if (result.verified === undefined) {
184
- result.verified = isVerified;
185
- }
194
+ this.normalizeOutcome(result);
186
195
  await this.emit('webhook.received', {
187
196
  provider: providerName,
188
197
  paymentId: result.paymentId,
189
198
  orderId: result.orderId,
190
199
  status: result.status,
191
200
  error: result.error,
192
- verified: isVerified,
201
+ verified: result.verified,
193
202
  data: body ?? query,
194
203
  raw: result.raw,
195
204
  });
@@ -205,37 +214,14 @@ class CheckoutConfigurator {
205
214
  throw new errors_1.CheckoutError(`Provider '${providerName}' does not support redirect handling`, 'REDIRECT_NOT_SUPPORTED', providerName);
206
215
  }
207
216
  const result = await provider.handleRedirect(query);
208
- const isNexi = providerName.toLowerCase() === 'nexi';
209
- let orderId;
210
- if (result.success) {
211
- if (isNexi) {
212
- // For Nexi, orderId only from local map or codTrans (MAC-covered), never unsigned query order_id
213
- orderId =
214
- (result.paymentId ? this.paymentOrders.get(result.paymentId) : undefined) ??
215
- query?.codTrans ??
216
- result.orderId;
217
- }
218
- else {
219
- orderId =
220
- (result.paymentId ? this.paymentOrders.get(result.paymentId) : undefined) ??
221
- result.orderId ??
222
- query?.order_id ??
223
- query?.codTrans;
224
- }
225
- result.orderId = orderId;
226
- }
227
- else {
228
- // On failed verification or failed payment, never take orderId from query
229
- orderId = undefined;
230
- result.orderId = undefined;
231
- }
217
+ this.normalizeOutcome(result);
232
218
  await this.emit(result.success ? 'payment.completed' : 'payment.failed', {
233
219
  provider: providerName,
234
220
  paymentId: result.paymentId,
235
- orderId,
221
+ orderId: result.orderId,
236
222
  status: result.status,
237
223
  error: result.error,
238
- verified: result.success,
224
+ verified: result.verified === true,
239
225
  raw: result.raw,
240
226
  });
241
227
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-configurator.js","sourceRoot":"","sources":["../src/checkout-configurator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkout-configurator.js","sourceRoot":"","sources":["../src/checkout-configurator.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,31 @@ export interface CheckoutEventPayload {
5
5
  orderId?: string;
6
6
  status?: string;
7
7
  error?: string;
8
- /** True when the transaction / notification authenticity was verified */
8
+ /**
9
+ * True only when the outcome reported by this event was authenticated, either by a
10
+ * provider signature/MAC checked by the library or by an authenticated server-to-server
11
+ * read from the provider API. Always false for `payment.created` (no outcome exists yet)
12
+ * and for any outcome built from unauthenticated input. When false on
13
+ * `payment.completed` / `payment.failed` / `webhook.received`, `paymentId` and `orderId`
14
+ * are omitted.
15
+ */
9
16
  verified: boolean;
10
17
  data?: any;
11
18
  raw?: unknown;
12
19
  timestamp: Date;
13
20
  }
21
+ /**
22
+ * Wraps an error thrown (or a value rejected) by a consumer event listener.
23
+ * The consumer's original value is never mutated: it is available unchanged as `cause`,
24
+ * and `message` is copied from it (or `String(value)` for non-Error values).
25
+ */
26
+ export declare class CheckoutListenerError extends Error {
27
+ /** The original value thrown by the listener, untouched */
28
+ readonly cause: unknown;
29
+ /** The event whose listener threw */
30
+ readonly event: CheckoutEventName;
31
+ constructor(event: CheckoutEventName, cause: unknown);
32
+ }
14
33
  type EventListener = (payload: CheckoutEventPayload) => void | Promise<void>;
15
34
  /**
16
35
  * Simple event bus for checkout lifecycle events.
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-event-bus.d.ts","sourceRoot":"","sources":["../../src/events/checkout-event-bus.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,mBAAmB,GACnB,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7E;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsD;IAEhF,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAM3D,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAQtD,IAAI,CACR,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAC/C,OAAO,CAAC,IAAI,CAAC;CAoBjB"}
1
+ {"version":3,"file":"checkout-event-bus.d.ts","sourceRoot":"","sources":["../../src/events/checkout-event-bus.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,mBAAmB,GACnB,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;gBAEtB,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,OAAO;CAOrD;AAED,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7E;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsD;IAEhF,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAM3D,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAQtD,IAAI,CACR,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAC/C,OAAO,CAAC,IAAI,CAAC;CAcjB"}
@@ -1,6 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CheckoutEventBus = void 0;
3
+ exports.CheckoutEventBus = exports.CheckoutListenerError = void 0;
4
+ /**
5
+ * Wraps an error thrown (or a value rejected) by a consumer event listener.
6
+ * The consumer's original value is never mutated: it is available unchanged as `cause`,
7
+ * and `message` is copied from it (or `String(value)` for non-Error values).
8
+ */
9
+ class CheckoutListenerError extends Error {
10
+ constructor(event, cause) {
11
+ super(cause instanceof Error ? cause.message : String(cause));
12
+ this.name = 'CheckoutListenerError';
13
+ this.cause = cause;
14
+ this.event = event;
15
+ Object.setPrototypeOf(this, CheckoutListenerError.prototype);
16
+ }
17
+ }
18
+ exports.CheckoutListenerError = CheckoutListenerError;
4
19
  /**
5
20
  * Simple event bus for checkout lifecycle events.
6
21
  *
@@ -35,14 +50,8 @@ class CheckoutEventBus {
35
50
  await h(fullPayload);
36
51
  }
37
52
  catch (err) {
38
- if (err && typeof err === 'object') {
39
- err.__isEventListenerError = true;
40
- throw err;
41
- }
42
- const wrapped = new Error(String(err));
43
- wrapped.__isEventListenerError = true;
44
- wrapped.originalError = err;
45
- throw wrapped;
53
+ // Never mutate the consumer's error (it may be frozen): wrap it instead.
54
+ throw new CheckoutListenerError(event, err);
46
55
  }
47
56
  }));
48
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-event-bus.js","sourceRoot":"","sources":["../../src/events/checkout-event-bus.ts"],"names":[],"mappings":";;;AAsBA;;;;;;;;;GASG;AACH,MAAa,gBAAgB;IAA7B;QACmB,cAAS,GAA4C,IAAI,GAAG,EAAE,CAAC;IAuClF,CAAC;IArCC,EAAE,CAAC,KAAwB,EAAE,QAAuB;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAwB,EAAE,QAAuB;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAwB,EACxB,OAAgD;QAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,WAAW,GAAyB,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;QAChF,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAClC,GAAW,CAAC,sBAAsB,GAAG,IAAI,CAAC;oBAC3C,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,OAAe,CAAC,sBAAsB,GAAG,IAAI,CAAC;gBAC9C,OAAe,CAAC,aAAa,GAAG,GAAG,CAAC;gBACrC,MAAM,OAAO,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AAxCD,4CAwCC"}
1
+ {"version":3,"file":"checkout-event-bus.js","sourceRoot":"","sources":["../../src/events/checkout-event-bus.ts"],"names":[],"mappings":";;;AA2BA;;;;GAIG;AACH,MAAa,qBAAsB,SAAQ,KAAK;IAM9C,YAAY,KAAwB,EAAE,KAAc;QAClD,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;CACF;AAbD,sDAaC;AAID;;;;;;;;;GASG;AACH,MAAa,gBAAgB;IAA7B;QACmB,cAAS,GAA4C,IAAI,GAAG,EAAE,CAAC;IAiClF,CAAC;IA/BC,EAAE,CAAC,KAAwB,EAAE,QAAuB;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAwB,EAAE,QAAuB;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CACR,KAAwB,EACxB,OAAgD;QAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,WAAW,GAAyB,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;QAChF,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC;gBACH,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,yEAAyE;gBACzE,MAAM,IAAI,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AAlCD,4CAkCC"}
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export type { CheckoutConfig } from './models/checkout-config.model';
7
7
  export { CheckoutError } from './models/errors';
8
8
  export type { CheckoutErrorCode } from './models/errors';
9
9
  export { BasePaymentProvider } from './abstract/base-payment-provider.abstract';
10
- export { CheckoutEventBus } from './events/checkout-event-bus';
10
+ export { CheckoutEventBus, CheckoutListenerError } from './events/checkout-event-bus';
11
11
  export type { CheckoutEventName, CheckoutEventPayload } from './events/checkout-event-bus';
12
12
  export { InMemoryTransactionStore } from './stores/in-memory-transaction.store';
13
13
  export { PayPalProvider } from './providers/paypal/paypal.provider';
@@ -16,4 +16,5 @@ export { NexiProvider } from './providers/nexi/nexi.provider';
16
16
  export type { NexiProviderConfig } from './providers/nexi/nexi.provider';
17
17
  export { SatispayProvider } from './providers/satispay/satispay.provider';
18
18
  export type { SatispayProviderConfig } from './providers/satispay/satispay.provider';
19
+ export { ISO_4217_ALPHA3_CODES } from './utils/parsing.util';
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAC7F,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAGnG,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAClF,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAGhF,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAGhF,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAC7F,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAGnG,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAClF,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAGhF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACtF,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAGhF,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAGrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SatispayProvider = exports.NexiProvider = exports.PayPalProvider = exports.InMemoryTransactionStore = exports.CheckoutEventBus = exports.BasePaymentProvider = exports.CheckoutError = exports.CheckoutConfigurator = void 0;
3
+ exports.ISO_4217_ALPHA3_CODES = exports.SatispayProvider = exports.NexiProvider = exports.PayPalProvider = exports.InMemoryTransactionStore = exports.CheckoutListenerError = exports.CheckoutEventBus = exports.BasePaymentProvider = exports.CheckoutError = exports.CheckoutConfigurator = void 0;
4
4
  // ---- Configurator ----------------------------------------------------------
5
5
  var checkout_configurator_1 = require("./checkout-configurator");
6
6
  Object.defineProperty(exports, "CheckoutConfigurator", { enumerable: true, get: function () { return checkout_configurator_1.CheckoutConfigurator; } });
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "BasePaymentProvider", { enumerable: true, get: f
12
12
  // ---- Events ----------------------------------------------------------------
13
13
  var checkout_event_bus_1 = require("./events/checkout-event-bus");
14
14
  Object.defineProperty(exports, "CheckoutEventBus", { enumerable: true, get: function () { return checkout_event_bus_1.CheckoutEventBus; } });
15
+ Object.defineProperty(exports, "CheckoutListenerError", { enumerable: true, get: function () { return checkout_event_bus_1.CheckoutListenerError; } });
15
16
  // ---- Stores ----------------------------------------------------------------
16
17
  var in_memory_transaction_store_1 = require("./stores/in-memory-transaction.store");
17
18
  Object.defineProperty(exports, "InMemoryTransactionStore", { enumerable: true, get: function () { return in_memory_transaction_store_1.InMemoryTransactionStore; } });
@@ -22,4 +23,7 @@ var nexi_provider_1 = require("./providers/nexi/nexi.provider");
22
23
  Object.defineProperty(exports, "NexiProvider", { enumerable: true, get: function () { return nexi_provider_1.NexiProvider; } });
23
24
  var satispay_provider_1 = require("./providers/satispay/satispay.provider");
24
25
  Object.defineProperty(exports, "SatispayProvider", { enumerable: true, get: function () { return satispay_provider_1.SatispayProvider; } });
26
+ // ---- Utils -----------------------------------------------------------------
27
+ var parsing_util_1 = require("./utils/parsing.util");
28
+ Object.defineProperty(exports, "ISO_4217_ALPHA3_CODES", { enumerable: true, get: function () { return parsing_util_1.ISO_4217_ALPHA3_CODES; } });
25
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+EAA+E;AAC/E,iEAA+D;AAAtD,6HAAA,oBAAoB,OAAA;AAU7B,0CAAgD;AAAvC,uGAAA,aAAa,OAAA;AAGtB,+EAA+E;AAC/E,4FAAgF;AAAvE,qIAAA,mBAAmB,OAAA;AAE5B,+EAA+E;AAC/E,kEAA+D;AAAtD,sHAAA,gBAAgB,OAAA;AAGzB,+EAA+E;AAC/E,oFAAgF;AAAvE,uIAAA,wBAAwB,OAAA;AAEjC,+EAA+E;AAC/E,sEAAoE;AAA3D,iHAAA,cAAc,OAAA;AAGvB,gEAA8D;AAArD,6GAAA,YAAY,OAAA;AAGrB,4EAA0E;AAAjE,qHAAA,gBAAgB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+EAA+E;AAC/E,iEAA+D;AAAtD,6HAAA,oBAAoB,OAAA;AAU7B,0CAAgD;AAAvC,uGAAA,aAAa,OAAA;AAGtB,+EAA+E;AAC/E,4FAAgF;AAAvE,qIAAA,mBAAmB,OAAA;AAE5B,+EAA+E;AAC/E,kEAAsF;AAA7E,sHAAA,gBAAgB,OAAA;AAAE,2HAAA,qBAAqB,OAAA;AAGhD,+EAA+E;AAC/E,oFAAgF;AAAvE,uIAAA,wBAAwB,OAAA;AAEjC,+EAA+E;AAC/E,sEAAoE;AAA3D,iHAAA,cAAc,OAAA;AAGvB,gEAA8D;AAArD,6GAAA,YAAY,OAAA;AAGrB,4EAA0E;AAAjE,qHAAA,gBAAgB,OAAA;AAGzB,+EAA+E;AAC/E,qDAA6D;AAApD,qHAAA,qBAAqB,OAAA"}
@@ -1,4 +1,4 @@
1
- export type CheckoutErrorCode = 'PROVIDER_NOT_FOUND' | 'PROVIDER_ALREADY_REGISTERED' | 'PAYMENT_FAILED' | 'WEBHOOK_NOT_SUPPORTED' | 'REDIRECT_NOT_SUPPORTED' | 'TRANSACTION_NOT_FOUND';
1
+ export type CheckoutErrorCode = 'PROVIDER_NOT_FOUND' | 'PROVIDER_ALREADY_REGISTERED' | 'PAYMENT_FAILED' | 'WEBHOOK_NOT_SUPPORTED' | 'REDIRECT_NOT_SUPPORTED' | 'TRANSACTION_NOT_FOUND' | 'INSECURE_CONFIGURATION' | 'INVALID_AMOUNT';
2
2
  export declare class CheckoutError extends Error {
3
3
  readonly code: CheckoutErrorCode;
4
4
  readonly provider?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,6BAA6B,GAC7B,gBAAgB,GAChB,uBAAuB,GACvB,wBAAwB,GACxB,uBAAuB,CAAC;AAE5B,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,QAAQ,CAAC,EAAE,MAAM;gBAFjC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,CAAC,EAAE,MAAM,YAAA;CASpC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,oBAAoB,GACpB,6BAA6B,GAC7B,gBAAgB,GAChB,uBAAuB,GACvB,wBAAwB,GACxB,uBAAuB,GACvB,wBAAwB,GACxB,gBAAgB,CAAC;AAErB,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,QAAQ,CAAC,EAAE,MAAM;gBAFjC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,CAAC,EAAE,MAAM,YAAA;CASpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":";;;AAQA,MAAa,aAAc,SAAQ,KAAK;IACtC,YACE,OAAe,EACC,IAAuB,EACvB,QAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAmB;QACvB,aAAQ,GAAR,QAAQ,CAAS;QAGjC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,qCAAqC;QACrC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF;AAbD,sCAaC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/models/errors.ts"],"names":[],"mappings":";;;AAUA,MAAa,aAAc,SAAQ,KAAK;IACtC,YACE,OAAe,EACC,IAAuB,EACvB,QAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAmB;QACvB,aAAQ,GAAR,QAAQ,CAAS;QAGjC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,qCAAqC;QACrC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF;AAbD,sCAaC"}
@@ -18,6 +18,15 @@ export interface PaymentResult {
18
18
  orderId?: string;
19
19
  /** Error message if success is false */
20
20
  error?: string;
21
+ /**
22
+ * True only when this outcome was authenticated: by a provider signature/MAC checked by
23
+ * the library (e.g. the Nexi 7-field outcome MAC) or by an authenticated server-to-server
24
+ * read from the provider API (e.g. PayPal capture, Satispay `GET /payments/{id}`).
25
+ * `success: false` with `verified: true` is a genuine, authenticated failure (e.g. KO, CANCELED).
26
+ * Providers that do not set it are treated as unverified (fail closed).
27
+ * Not meaningful for `createPayment` (no outcome yet): the configurator does not trust it there.
28
+ */
29
+ verified?: boolean;
21
30
  /** Raw provider response — preserved in events and returned models, stripped from HTTP router responses */
22
31
  raw?: any;
23
32
  }
@@ -25,7 +34,11 @@ export interface PaymentResult {
25
34
  export interface WebhookResult {
26
35
  /** True when payment is confirmed/completed with a valid captured amount */
27
36
  success: boolean;
28
- /** True when the webhook authenticity (signature/MAC or API re-read) was verified */
37
+ /**
38
+ * True only when the notification's outcome was authenticated by a provider signature/MAC
39
+ * or by an authenticated server-to-server read from the provider API. Anything other than
40
+ * `true` is treated as unverified.
41
+ */
29
42
  verified: boolean;
30
43
  paymentId?: string;
31
44
  orderId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"payment-result.model.d.ts","sourceRoot":"","sources":["../../src/models/payment-result.model.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IAEjB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2GAA2G;IAC3G,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,GAAG,CAAC;CACX"}
1
+ {"version":3,"file":"payment-result.model.d.ts","sourceRoot":"","sources":["../../src/models/payment-result.model.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IAEjB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,2FAA2F;IAC3F,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,2GAA2G;IAC3G,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,GAAG,CAAC;CACX"}
@@ -63,6 +63,9 @@ export declare class NexiProvider extends BasePaymentProvider {
63
63
  * Validates the POST-back data from Nexi.
64
64
  * `data` is the query/body object sent by Nexi to the returnUrl.
65
65
  * The outcome MAC is mandatory and verified over all 7 fields before the result is considered authoritative.
66
+ * The result (`paymentId`, `orderId`) is keyed on the MAC-covered `codTrans`. When a non-empty
67
+ * `paymentId` argument is given and differs from the outcome's `codTrans`, the call fails
68
+ * (`success: false`, `verified: false`): a genuine outcome for one order cannot confirm another.
66
69
  */
67
70
  executePayment(paymentId: string, data?: Record<string, string>): Promise<PaymentResult>;
68
71
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"nexi.provider.d.ts","sourceRoot":"","sources":["../../../src/providers/nexi/nexi.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGjF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,mBAAmB;IAMvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,MAAM,EAAE,kBAAkB;IAQvD;;;;;OAKG;IACH,OAAO,CAAC,IAAI;IAIZ;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,qBAAqB;IAiBvB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAqCpE;;;;OAIG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAwD9F;;;OAGG;IACG,aAAa,CACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACpC,OAAO,CAAC,aAAa,CAAC;IAqDnB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA4G5D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAuC/E;;;;OAIG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;CAG5E"}
1
+ {"version":3,"file":"nexi.provider.d.ts","sourceRoot":"","sources":["../../../src/providers/nexi/nexi.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAGpF,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGjF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,WAAW,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,mBAAmB;IAMvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,MAAM,EAAE,kBAAkB;IAQvD;;;;;OAKG;IACH,OAAO,CAAC,IAAI;IAIZ;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,qBAAqB;IAiBvB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAmDpE;;;;;;;OAOG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAuE9F;;;OAGG;IACG,aAAa,CACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACpC,OAAO,CAAC,aAAa,CAAC;IAqDnB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6G5D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6C/E;;;;OAIG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;CAG5E"}
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.NexiProvider = void 0;
37
37
  const crypto = __importStar(require("crypto"));
38
38
  const base_payment_provider_abstract_1 = require("../../abstract/base-payment-provider.abstract");
39
+ const ids_1 = require("../../utils/ids");
40
+ const money_1 = require("../../utils/money");
39
41
  const parsing_util_1 = require("../../utils/parsing.util");
40
42
  /**
41
43
  * Nexi eCommerce provider.
@@ -123,8 +125,19 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
123
125
  }
124
126
  async createPayment(request) {
125
127
  try {
126
- const amountCents = Math.round(request.amount * 100);
127
- const orderId = request.orderId ?? `ORD-${Date.now()}`;
128
+ // Outcome amounts (redirect, webhook, details) and refunds are read and sent in hundredths:
129
+ // only 2-decimal currencies keep create, read-back and refund on the same scale.
130
+ // Numeric codes ('392') are normalised so they are checked like their alpha-3 code.
131
+ const currencyCode = (0, parsing_util_1.parseNexiCurrency)(request.currency) ?? request.currency;
132
+ if ((0, money_1.currencyExponent)(currencyCode) !== 2) {
133
+ return {
134
+ success: false,
135
+ error: 'Payment currency is not supported by Nexi: only currencies with 2 decimal places are accepted',
136
+ status: 'FAILED',
137
+ };
138
+ }
139
+ const amountCents = (0, money_1.toMinorUnits)(request.amount, currencyCode);
140
+ const orderId = request.orderId ?? (0, ids_1.generateOrderId)();
128
141
  const mac = this.generateMac(orderId, request.currency, amountCents);
129
142
  const params = {
130
143
  alias: this.config.merchantId,
@@ -150,6 +163,9 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
150
163
  };
151
164
  }
152
165
  catch (error) {
166
+ if ((0, money_1.isInvalidAmountError)(error)) {
167
+ return { success: false, error: error.message, status: 'FAILED' };
168
+ }
153
169
  return this.errorResult(error, 'Failed to create Nexi payment');
154
170
  }
155
171
  }
@@ -157,11 +173,15 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
157
173
  * Validates the POST-back data from Nexi.
158
174
  * `data` is the query/body object sent by Nexi to the returnUrl.
159
175
  * The outcome MAC is mandatory and verified over all 7 fields before the result is considered authoritative.
176
+ * The result (`paymentId`, `orderId`) is keyed on the MAC-covered `codTrans`. When a non-empty
177
+ * `paymentId` argument is given and differs from the outcome's `codTrans`, the call fails
178
+ * (`success: false`, `verified: false`): a genuine outcome for one order cannot confirm another.
160
179
  */
161
180
  async executePayment(paymentId, data) {
162
181
  try {
163
182
  const esito = data?.esito ?? '';
164
- const codTrans = data?.codTrans ?? paymentId;
183
+ const requestedId = typeof paymentId === 'string' && paymentId !== '' ? paymentId : undefined;
184
+ const codTrans = data?.codTrans ?? requestedId ?? '';
165
185
  const importo = data?.importo ?? '';
166
186
  const divisa = data?.divisa ?? '';
167
187
  const dataStr = data?.data ?? '';
@@ -171,6 +191,7 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
171
191
  if (!mac) {
172
192
  return {
173
193
  success: false,
194
+ verified: false,
174
195
  paymentId: undefined,
175
196
  status: 'FAILED',
176
197
  error: 'MAC missing',
@@ -179,17 +200,29 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
179
200
  if (!this.isValidHexMac(mac) || !this.safeVerifyResponseMac(codTrans, esito, importo, divisa, dataStr, orario, codAut, mac)) {
180
201
  return {
181
202
  success: false,
203
+ verified: false,
182
204
  paymentId: undefined,
183
205
  status: 'FAILED',
184
206
  error: 'MAC verification failed: response may have been tampered with',
185
207
  };
186
208
  }
209
+ if (requestedId !== undefined && requestedId !== codTrans) {
210
+ return {
211
+ success: false,
212
+ verified: false,
213
+ paymentId: undefined,
214
+ status: 'FAILED',
215
+ error: 'Payment id does not match the outcome',
216
+ };
217
+ }
187
218
  const amount = (0, parsing_util_1.parseAmountFromCents)(importo);
188
219
  const currency = (0, parsing_util_1.parseNexiCurrency)(divisa);
189
220
  const isPaid = esito === 'OK' && amount !== undefined && amount > 0 && !!currency && currency.trim() !== '';
190
221
  return {
191
222
  success: isPaid,
223
+ verified: true,
192
224
  paymentId: codTrans,
225
+ orderId: codTrans,
193
226
  status: esito === 'OK' ? 'COMPLETED' : 'FAILED',
194
227
  amount,
195
228
  currency,
@@ -206,7 +239,7 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
206
239
  };
207
240
  }
208
241
  catch (error) {
209
- return this.errorResult(error, 'Failed to execute Nexi payment');
242
+ return { ...this.errorResult(error, 'Failed to execute Nexi payment'), verified: false };
210
243
  }
211
244
  }
212
245
  /**
@@ -340,6 +373,7 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
340
373
  const isSuccess = isPaidStatus && amount !== undefined && amount > 0 && !!currency && currency.trim() !== '';
341
374
  return {
342
375
  success: isSuccess,
376
+ verified: true,
343
377
  paymentId,
344
378
  status: stato,
345
379
  amount,
@@ -363,7 +397,10 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
363
397
  async refundPayment(paymentId, amount) {
364
398
  try {
365
399
  const timestamp = new Date().toISOString();
366
- const importo = amount ? Math.round(amount * 100).toString() : '';
400
+ // The refund API carries no currency. createPayment accepts only 2-decimal currencies,
401
+ // so a partial amount is always in hundredths. Only an omitted (undefined) amount means a
402
+ // full refund, as in PayPal: 0 and null are rejected by toMinorUnits like any invalid amount.
403
+ const importo = amount !== undefined ? (0, money_1.toMinorUnits)(amount, 'EUR').toString() : '';
367
404
  const mac = this.generateRefundMac(this.config.merchantId, paymentId, importo, timestamp);
368
405
  const params = {
369
406
  alias: this.config.merchantId,
@@ -394,6 +431,9 @@ class NexiProvider extends base_payment_provider_abstract_1.BasePaymentProvider
394
431
  };
395
432
  }
396
433
  catch (error) {
434
+ if ((0, money_1.isInvalidAmountError)(error)) {
435
+ return { success: false, error: error.message, status: 'FAILED' };
436
+ }
397
437
  return this.errorResult(error, 'Failed to refund Nexi payment');
398
438
  }
399
439
  }