@webbers/pay-payments-medusa 2.2.51 → 2.2.53

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 (45) hide show
  1. package/.medusa/server/package.json +1 -1
  2. package/.medusa/server/src/admin/index.js +233 -11
  3. package/.medusa/server/src/admin/index.mjs +234 -12
  4. package/.medusa/server/src/api/admin/pay/orders/[id]/direct-debit/exchange/route.d.ts +12 -0
  5. package/.medusa/server/src/api/admin/pay/orders/[id]/direct-debit/exchange/route.d.ts.map +1 -0
  6. package/.medusa/server/src/api/admin/pay/orders/[id]/direct-debit/exchange/route.js +42 -0
  7. package/.medusa/server/src/api/admin/pay/orders/[id]/direct-debit/route.d.ts +9 -0
  8. package/.medusa/server/src/api/admin/pay/orders/[id]/direct-debit/route.d.ts.map +1 -0
  9. package/.medusa/server/src/api/admin/pay/orders/[id]/direct-debit/route.js +19 -0
  10. package/.medusa/server/src/api/admin/pay/orders/[id]/reversal/route.d.ts +7 -0
  11. package/.medusa/server/src/api/admin/pay/orders/[id]/reversal/route.d.ts.map +1 -0
  12. package/.medusa/server/src/api/admin/pay/orders/[id]/reversal/route.js +17 -0
  13. package/.medusa/server/src/api/admin/pay/settings/route.d.ts +12 -0
  14. package/.medusa/server/src/api/admin/pay/settings/route.d.ts.map +1 -0
  15. package/.medusa/server/src/api/admin/pay/settings/route.js +24 -0
  16. package/.medusa/server/src/providers/pay/core/pay-base.d.ts +6 -0
  17. package/.medusa/server/src/providers/pay/core/pay-base.d.ts.map +1 -1
  18. package/.medusa/server/src/providers/pay/core/pay-base.js +24 -1
  19. package/.medusa/server/src/providers/pay/services/pay-direct-debit.d.ts +6 -1
  20. package/.medusa/server/src/providers/pay/services/pay-direct-debit.d.ts.map +1 -1
  21. package/.medusa/server/src/providers/pay/services/pay-direct-debit.js +34 -15
  22. package/.medusa/server/src/providers/pay/types/index.d.ts +6 -5
  23. package/.medusa/server/src/providers/pay/types/index.d.ts.map +1 -1
  24. package/.medusa/server/src/providers/pay/types/index.js +1 -1
  25. package/.medusa/server/src/subscribers/direct-debit-exchange.d.ts.map +1 -1
  26. package/.medusa/server/src/subscribers/direct-debit-exchange.js +96 -24
  27. package/.medusa/server/src/subscribers/payment-failed.d.ts.map +1 -1
  28. package/.medusa/server/src/subscribers/payment-failed.js +24 -4
  29. package/.medusa/server/src/utils/directDebitExchange.d.ts +15 -0
  30. package/.medusa/server/src/utils/directDebitExchange.d.ts.map +1 -1
  31. package/.medusa/server/src/utils/directDebitExchange.js +59 -2
  32. package/.medusa/server/src/utils/directDebitSimulation.d.ts +93 -0
  33. package/.medusa/server/src/utils/directDebitSimulation.d.ts.map +1 -0
  34. package/.medusa/server/src/utils/directDebitSimulation.js +170 -0
  35. package/.medusa/server/src/utils/index.d.ts +2 -0
  36. package/.medusa/server/src/utils/index.d.ts.map +1 -1
  37. package/.medusa/server/src/utils/index.js +3 -1
  38. package/.medusa/server/src/utils/paymentReversal.d.ts +24 -0
  39. package/.medusa/server/src/utils/paymentReversal.d.ts.map +1 -0
  40. package/.medusa/server/src/utils/paymentReversal.js +80 -0
  41. package/.medusa/server/src/utils/reverseCapturedPayment.d.ts +43 -0
  42. package/.medusa/server/src/utils/reverseCapturedPayment.d.ts.map +1 -0
  43. package/.medusa/server/src/utils/reverseCapturedPayment.js +100 -0
  44. package/README.md +51 -0
  45. package/package.json +1 -1
@@ -8,6 +8,7 @@ exports.default = payDirectDebitExchangeHandler;
8
8
  const utils_1 = require("@medusajs/framework/utils");
9
9
  const core_flows_1 = require("@medusajs/core-flows");
10
10
  const getPayPaymentSession_1 = __importDefault(require("../utils/getPayPaymentSession"));
11
+ const reverseCapturedPayment_1 = require("../utils/reverseCapturedPayment");
11
12
  const types_1 = require("../providers/pay/types");
12
13
  const pay_client_1 = require("../providers/pay/core/pay-client");
13
14
  const constants_1 = require("../providers/pay/core/constants");
@@ -20,7 +21,33 @@ const getPayClient = (container, logger) => {
20
21
  logger.warn("Pay. - Ignoring direct debit exchange: no Pay. provider options found");
21
22
  return null;
22
23
  }
23
- return new pay_client_1.PayClient(payModuleConfig.options, logger);
24
+ const options = payModuleConfig.options;
25
+ return { client: new pay_client_1.PayClient(options, logger), options };
26
+ };
27
+ /**
28
+ * The order display id a simulated exchange belongs to: the body's
29
+ * `reference`, or the order behind the payment session encoded in the
30
+ * simulated mandate code.
31
+ */
32
+ const resolveSimulatedDisplayId = async (container, payload, mandateId) => {
33
+ const fromPayload = (0, directDebitExchange_1.readPayloadString)(payload.reference);
34
+ if (fromPayload) {
35
+ return fromPayload;
36
+ }
37
+ const sessionId = (0, directDebitExchange_1.readSimulatedMandateSessionId)(mandateId);
38
+ if (!sessionId) {
39
+ return null;
40
+ }
41
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
42
+ const { data: [session], } = await query.graph({
43
+ entity: "payment_session",
44
+ fields: ["id", "payment_collection.order.display_id"],
45
+ filters: { id: sessionId },
46
+ });
47
+ const displayId = session?.payment_collection?.order?.display_id;
48
+ return displayId !== undefined && displayId !== null
49
+ ? String(displayId)
50
+ : null;
24
51
  };
25
52
  /**
26
53
  * Handles the incasso exchanges Pay. sends for direct debits created via the
@@ -33,36 +60,52 @@ async function payDirectDebitExchangeHandler({ event: { data }, container, }) {
33
60
  const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
34
61
  const payload = data.payload ?? {};
35
62
  const action = (0, directDebitExchange_1.normalizeAction)(payload.action);
36
- const client = getPayClient(container, logger);
37
- if (!client) {
63
+ const pay = getPayClient(container, logger);
64
+ if (!pay) {
38
65
  return;
39
66
  }
67
+ const { client, options } = pay;
68
+ // Same default as the HTTP client: an unset testMode means test mode
69
+ const testMode = options.testMode ?? true;
40
70
  let info = null;
41
71
  let displayId = null;
72
+ // Set when the exchange describes a mandate that only exists on this test
73
+ // server, the body is then the only source of the direct debit state
74
+ let simulatedMandateId = null;
42
75
  if ((0, directDebitExchange_1.isLegacyDirectDebitAction)(action)) {
43
76
  const referenceId = (0, directDebitExchange_1.readDirectDebitReferenceId)(payload);
44
77
  const mandateId = (0, directDebitExchange_1.readDirectDebitMandateId)(payload);
45
- if (referenceId) {
78
+ if (testMode && (0, directDebitExchange_1.isSimulatedDirectDebitMandate)(mandateId)) {
79
+ simulatedMandateId = mandateId;
80
+ displayId = await resolveSimulatedDisplayId(container, payload, mandateId);
81
+ if (!displayId) {
82
+ logger.warn(`Pay. - Ignoring simulated direct debit exchange ${action} for ${mandateId}: order reference missing`);
83
+ return;
84
+ }
85
+ }
86
+ if (!simulatedMandateId && referenceId) {
46
87
  info = await client.getDirectDebitInfo(referenceId).catch((err) => {
47
88
  logger.warn(`Pay. - Could not retrieve direct debit ${referenceId}: ${err.message ?? err}`);
48
89
  return null;
49
90
  });
50
91
  }
51
- if (!(0, directDebitExchange_1.extractDirectDebit)(info) && mandateId) {
92
+ if (!simulatedMandateId && !(0, directDebitExchange_1.extractDirectDebit)(info) && mandateId) {
52
93
  info = await client.getDirectDebitInfoByMandate(mandateId).catch((err) => {
53
94
  logger.warn(`Pay. - Could not retrieve direct debit mandate ${mandateId}: ${err.message ?? err}`);
54
95
  return null;
55
96
  });
56
97
  }
57
- const directDebit = (0, directDebitExchange_1.extractDirectDebit)(info);
58
- if (!directDebit) {
59
- logger.warn(`Pay. - Ignoring direct debit exchange ${action}: direct debit not found`);
60
- return;
61
- }
62
- displayId = (0, directDebitExchange_1.extractDirectDebitReference)(info, directDebit);
63
- if (!displayId) {
64
- logger.warn(`Pay. - Ignoring direct debit exchange ${action}: order reference missing`);
65
- return;
98
+ if (!simulatedMandateId) {
99
+ const directDebit = (0, directDebitExchange_1.extractDirectDebit)(info);
100
+ if (!directDebit) {
101
+ logger.warn(`Pay. - Ignoring direct debit exchange ${action}: direct debit not found`);
102
+ return;
103
+ }
104
+ displayId = (0, directDebitExchange_1.extractDirectDebitReference)(info, directDebit);
105
+ if (!displayId) {
106
+ logger.warn(`Pay. - Ignoring direct debit exchange ${action}: order reference missing`);
107
+ return;
108
+ }
66
109
  }
67
110
  }
68
111
  else {
@@ -72,6 +115,10 @@ async function payDirectDebitExchangeHandler({ event: { data }, container, }) {
72
115
  return;
73
116
  }
74
117
  }
118
+ if (!displayId) {
119
+ logger.warn(`Pay. - Ignoring direct debit exchange ${action}: order reference missing`);
120
+ return;
121
+ }
75
122
  const { data: [order], } = await query.graph({
76
123
  entity: "order",
77
124
  fields: [
@@ -106,10 +153,23 @@ async function payDirectDebitExchangeHandler({ event: { data }, container, }) {
106
153
  logger.warn(`Pay. - Ignoring direct debit exchange for #${displayId}: mandate code missing on payment`);
107
154
  return;
108
155
  }
109
- info = await client.getDirectDebitInfoByMandate(mandateId).catch((err) => {
110
- logger.warn(`Pay. - Could not retrieve direct debit mandate ${mandateId} for #${displayId}: ${err.message ?? err}`);
111
- return null;
112
- });
156
+ if (simulatedMandateId && mandateId !== simulatedMandateId) {
157
+ logger.warn(`Pay. - Ignoring simulated direct debit exchange for #${displayId}: mandate ${simulatedMandateId} does not belong to this order`);
158
+ return;
159
+ }
160
+ if (testMode &&
161
+ sessionData.testMode === true &&
162
+ (0, directDebitExchange_1.isSimulatedDirectDebitMandate)(mandateId)) {
163
+ // Nothing to re-fetch, the mandate only exists on this test server
164
+ logger.info(`Pay. - Simulating direct debit exchange for #${displayId} with mandate ${mandateId}`);
165
+ info = { directdebits: [(0, directDebitExchange_1.buildSimulatedDirectDebit)(payload, mandateId, displayId)] };
166
+ }
167
+ else {
168
+ info = await client.getDirectDebitInfoByMandate(mandateId).catch((err) => {
169
+ logger.warn(`Pay. - Could not retrieve direct debit mandate ${mandateId} for #${displayId}: ${err.message ?? err}`);
170
+ return null;
171
+ });
172
+ }
113
173
  }
114
174
  const directDebit = (0, directDebitExchange_1.extractDirectDebit)(info);
115
175
  if (!directDebit) {
@@ -146,11 +206,23 @@ async function payDirectDebitExchangeHandler({ event: { data }, container, }) {
146
206
  if (directDebitExchange_1.DIRECT_DEBIT_FAILED_CODES.has(statusCode) ||
147
207
  declined ||
148
208
  statusAction === "storno") {
149
- // A storno legitimately reverses a collected payment, so the collection is
150
- // marked failed even when a captured payment exists
151
- await paymentModuleService.updatePaymentCollections(paymentCollectionId, {
152
- status: utils_1.PaymentCollectionStatus.FAILED,
153
- });
209
+ if (payment?.captured_at && payment.id) {
210
+ // A storno reverses a collected payment: the money went back to the
211
+ // customer, so the order is made payable again
212
+ await (0, reverseCapturedPayment_1.reverseCapturedPayment)(container, {
213
+ orderId: order.id,
214
+ paymentId: payment.id,
215
+ paymentCollectionId,
216
+ kind: statusCode === constants_1.PayDirectDebitStatusCode.STORNO ||
217
+ statusAction === "storno"
218
+ ? "storno"
219
+ : "failure",
220
+ statusCode: statusLabel,
221
+ });
222
+ }
223
+ else {
224
+ await paymentModuleService.updatePaymentCollections(paymentCollectionId, { status: utils_1.PaymentCollectionStatus.FAILED });
225
+ }
154
226
  // Same signal the order API chargeback path emits, so consuming projects
155
227
  // can follow up on the order and subscription
156
228
  const eventBusService = container.resolve(utils_1.Modules.EVENT_BUS);
@@ -181,4 +253,4 @@ async function payDirectDebitExchangeHandler({ event: { data }, container, }) {
181
253
  exports.config = {
182
254
  event: directDebitExchange_1.PAY_DIRECT_DEBIT_EXCHANGE_EVENT,
183
255
  };
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0LWRlYml0LWV4Y2hhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL2RpcmVjdC1kZWJpdC1leGNoYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFpRUEsZ0RBb1BDO0FBblRELHFEQUlrQztBQUNsQyxxREFBMkQ7QUFPM0QseUZBQWdFO0FBQ2hFLGtEQUkrQjtBQUMvQixpRUFBMEQ7QUFFMUQsK0RBQXdFO0FBQ3hFLHNFQWFxQztBQUVyQyxNQUFNLFlBQVksR0FBRyxDQUNuQixTQUEwQixFQUMxQixNQUFjLEVBQ0ksRUFBRTtJQUNwQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7SUFFRCxNQUFNLGVBQWUsR0FBSSxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQWUsRUFBRSxPQUFPO1FBQ3JFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQTtJQUUxQyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsdUVBQXVFLENBQ3hFLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPLElBQUksc0JBQVMsQ0FBQyxlQUFlLENBQUMsT0FBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUMxRSxDQUFDLENBQUE7QUFFRDs7Ozs7R0FLRztBQUNZLEtBQUssVUFBVSw2QkFBNkIsQ0FBQyxFQUMxRCxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUMsRUFDYixTQUFTLEdBQ3NDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDMUMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFD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
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0LWRlYml0LWV4Y2hhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL2RpcmVjdC1kZWJpdC1leGNoYW5nZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUE2R0EsZ0RBa1RDO0FBN1pELHFEQUlrQztBQUNsQyxxREFBMkQ7QUFPM0QseUZBQWdFO0FBQ2hFLDRFQUFzRTtBQUN0RSxrREFJK0I7QUFDL0IsaUVBQTBEO0FBRTFELCtEQUF3RTtBQUN4RSxzRUFnQnFDO0FBRXJDLE1BQU0sWUFBWSxHQUFHLENBQ25CLFNBQTBCLEVBQzFCLE1BQWMsRUFDd0MsRUFBRTtJQUN4RCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7SUFFRCxNQUFNLGVBQWUsR0FBSSxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQWUsRUFBRSxPQUFPO1FBQ3JFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQTtJQUUxQyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsdUVBQXVFLENBQ3hFLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBMEIsQ0FBQTtJQUUxRCxPQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksc0JBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFDLENBQUE7QUFDMUQsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0seUJBQXlCLEdBQUcsS0FBSyxFQUNyQyxTQUEwQixFQUMxQixPQUE0QixFQUM1QixTQUFpQixFQUNPLEVBQUU7SUFDMUIsTUFBTSxX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
@@ -1 +1 @@
1
- {"version":3,"file":"payment-failed.d.ts","sourceRoot":"","sources":["../../../../src/subscribers/payment-failed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAYpE,wBAA8B,uBAAuB,CAAC,EACpD,KAAK,EAAE,EAAC,IAAI,EAAC,EACb,SAAS,GACV,EAAE,cAAc,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,iBA6DnD;AAED,eAAO,MAAM,MAAM,EAAE,gBAEpB,CAAA"}
1
+ {"version":3,"file":"payment-failed.d.ts","sourceRoot":"","sources":["../../../../src/subscribers/payment-failed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAapE,wBAA8B,uBAAuB,CAAC,EACpD,KAAK,EAAE,EAAC,IAAI,EAAC,EACb,SAAS,GACV,EAAE,cAAc,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAC,CAAC,iBAmFnD;AAED,eAAO,MAAM,MAAM,EAAE,gBAEpB,CAAA"}
@@ -7,6 +7,7 @@ exports.config = void 0;
7
7
  exports.default = payPaymentFailedHandler;
8
8
  const utils_1 = require("@medusajs/framework/utils");
9
9
  const getPayPaymentSession_1 = __importDefault(require("../utils/getPayPaymentSession"));
10
+ const reverseCapturedPayment_1 = require("../utils/reverseCapturedPayment");
10
11
  const constants_1 = require("../providers/pay/core/constants");
11
12
  async function payPaymentFailedHandler({ event: { data }, container, }) {
12
13
  const logger = container.resolve("logger");
@@ -21,6 +22,8 @@ async function payPaymentFailedHandler({ event: { data }, container, }) {
21
22
  "payment_collections.*",
22
23
  "payment_collections.payments.captured_at",
23
24
  "payment_collections.payment_sessions.*",
25
+ "payment_collections.payment_sessions.payment.id",
26
+ "payment_collections.payment_sessions.payment.captured_at",
24
27
  ],
25
28
  filters: {
26
29
  display_id: data.id,
@@ -38,11 +41,28 @@ async function payPaymentFailedHandler({ event: { data }, container, }) {
38
41
  return;
39
42
  }
40
43
  const payPaymentSession = (0, getPayPaymentSession_1.default)(order);
41
- if (payPaymentSession) {
42
- await paymentModuleService.updatePaymentCollections(payPaymentSession.payment_collection_id, {
43
- status: utils_1.PaymentCollectionStatus.FAILED,
44
+ if (!payPaymentSession) {
45
+ logger.warn(`No Pay. payment session found for order ${order.id}, ignoring failed payment`);
46
+ return;
47
+ }
48
+ const paymentCollectionId = payPaymentSession.payment_collection_id;
49
+ const capturedPayment = payPaymentSession.payment?.captured_at
50
+ ? payPaymentSession.payment
51
+ : undefined;
52
+ if (data.statusCode === constants_1.PayPaymentStatus.CHARGEBACK && capturedPayment) {
53
+ // The money went back to the customer, make the order payable again
54
+ await (0, reverseCapturedPayment_1.reverseCapturedPayment)(container, {
55
+ orderId: order.id,
56
+ paymentId: capturedPayment.id,
57
+ paymentCollectionId,
58
+ kind: "chargeback",
59
+ statusCode: data.statusCode,
44
60
  });
61
+ return;
45
62
  }
63
+ await paymentModuleService.updatePaymentCollections(paymentCollectionId, {
64
+ status: utils_1.PaymentCollectionStatus.FAILED,
65
+ });
46
66
  }
47
67
  catch (e) {
48
68
  logger.error(e);
@@ -52,4 +72,4 @@ async function payPaymentFailedHandler({ event: { data }, container, }) {
52
72
  exports.config = {
53
73
  event: ["pay_payment.failed"],
54
74
  };
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1mYWlsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcGF5bWVudC1mYWlsZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBWUEsMENBZ0VDO0FBMUVELHFEQUtrQztBQUVsQyx5RkFBZ0U7QUFDaEUsK0RBQWdFO0FBRWpELEtBQUssVUFBVSx1QkFBdUIsQ0FBQyxFQUNwRCxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUMsRUFDYixTQUFTLEdBQ3lDO0lBQ2xELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDMUMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRSxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzVDLGVBQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUE7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUE7SUFFMUMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNkLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFO2dCQUNOLElBQUk7Z0JBQ0osdUJBQXVCO2dCQUN2QiwwQ0FBMEM7Z0JBQzFDLHdDQUF3QzthQUN6QztZQUNELE9BQU8sRUFBRTtnQkFDUCxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUU7YUFDcEI7U0FDRixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixxQ0FBcUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUMvQyxDQUFBO1FBQ0gsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSw4RUFBOEU7UUFDOUUsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQy9ELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDTCxFQUFFLENBQUMsTUFBTSxLQUFLLCtCQUF1QixDQUFDLFNBQVM7WUFDL0MsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FDL0QsQ0FBQTtRQUVELElBQUksa0JBQWtCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyw0QkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMxRSxNQUFNLENBQUMsSUFBSSxDQUNULG9DQUFvQyxLQUFLLENBQUMsRUFBRSw2QkFBNkIsQ0FDMUUsQ0FBQTtZQUNELE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLDhCQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXJELElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0QixNQUFNLG9CQUFvQixDQUFDLHdCQUF3QixDQUNqRCxpQkFBaUIsQ0FBQyxxQkFBK0IsRUFDakQ7Z0JBQ0UsTUFBTSxFQUFFLCtCQUF1QixDQUFDLE1BQU07YUFDdkMsQ0FDRixDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNmLE1BQU0sQ0FBQyxDQUFBO0lBQ1QsQ0FBQztBQUNILENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFLENBQUMsb0JBQW9CLENBQUM7Q0FDOUIsQ0FBQSJ9
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1mYWlsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcGF5bWVudC1mYWlsZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBYUEsMENBc0ZDO0FBakdELHFEQUtrQztBQUVsQyx5RkFBZ0U7QUFDaEUsNEVBQXNFO0FBQ3RFLCtEQUFnRTtBQUVqRCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsRUFDcEQsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQ2IsU0FBUyxHQUN5QztJQUNsRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM1QyxlQUFPLENBQUMsT0FBTyxDQUNoQixDQUFBO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0lBRTFDLElBQUksQ0FBQztRQUNILE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FDZCxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNwQixNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRTtnQkFDTixJQUFJO2dCQUNKLHVCQUF1QjtnQkFDdkIsMENBQTBDO2dCQUMxQyx3Q0FBd0M7Z0JBQ3hDLGlEQUFpRDtnQkFDakQsMERBQTBEO2FBQzNEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTthQUNwQjtTQUNGLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLHFDQUFxQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQy9DLENBQUE7UUFDSCxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLDhFQUE4RTtRQUM5RSxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDL0QsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNMLEVBQUUsQ0FBQyxNQUFNLEtBQUssK0JBQXVCLENBQUMsU0FBUztZQUMvQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUMvRCxDQUFBO1FBRUQsSUFBSSxrQkFBa0IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLDRCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLDZCQUE2QixDQUMxRSxDQUFBO1lBQ0QsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUEsOEJBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFFckQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLElBQUksQ0FDVCwyQ0FBMkMsS0FBSyxDQUFDLEVBQUUsMkJBQTJCLENBQy9FLENBQUE7WUFDRCxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQ3ZCLGlCQUFpQixDQUFDLHFCQUErQixDQUFBO1FBQ25ELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxXQUFXO1lBQzVELENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPO1lBQzNCLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFYixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssNEJBQWdCLENBQUMsVUFBVSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3ZFLG9FQUFvRTtZQUNwRSxNQUFNLElBQUEsK0NBQXNCLEVBQUMsU0FBUyxFQUFFO2dCQUN0QyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLFNBQVMsRUFBRSxlQUFlLENBQUMsRUFBRTtnQkFDN0IsbUJBQW1CO2dCQUNuQixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzVCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxvQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsRUFBRTtZQUN2RSxNQUFNLEVBQUUsK0JBQXVCLENBQUMsTUFBTTtTQUN2QyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDZixNQUFNLENBQUMsQ0FBQTtJQUNULENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxDQUFDLG9CQUFvQixDQUFDO0NBQzlCLENBQUEifQ==
@@ -25,4 +25,19 @@ export declare function parseDirectDebitDisplayId(payload: Record<string, any>):
25
25
  export declare function extractDirectDebit(info?: DirectDebitInfoResponse | DirectDebit | Record<string, any> | null): DirectDebit | null;
26
26
  export declare function extractDirectDebitReference(info: DirectDebitInfoResponse | DirectDebit | Record<string, any> | null, directDebit: DirectDebit | Record<string, any> | null): string | null;
27
27
  export declare function normalizeDirectDebitStatusAction(payloadAction: string, statusAction?: string): string;
28
+ /**
29
+ * Mandates created while the provider runs in test mode are not known at
30
+ * Pay. (see PayDirectDebitService.updatePayment), their code is
31
+ * `TEST-<payment session id>`.
32
+ */
33
+ export declare const SIMULATED_MANDATE_PREFIX = "TEST-";
34
+ export declare function isSimulatedDirectDebitMandate(code: unknown): code is string;
35
+ export declare function readSimulatedMandateSessionId(code: string): string | null;
36
+ /**
37
+ * Builds the direct debit a simulated exchange describes, so a test server can
38
+ * walk through the collection flow (collected, storno, ...) without Pay. The
39
+ * status comes from `status.code` in the body when present, otherwise from the
40
+ * legacy action. Only used for simulated mandates while test mode is active.
41
+ */
42
+ export declare function buildSimulatedDirectDebit(payload: Record<string, any>, mandateId: string, reference: string): DirectDebit;
28
43
  //# sourceMappingURL=directDebitExchange.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"directDebitExchange.d.ts","sourceRoot":"","sources":["../../../../src/utils/directDebitExchange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,uBAAuB,EAAC,MAAM,wBAAwB,CAAA;AAG3E,eAAO,MAAM,+BAA+B,sCACP,CAAA;AASrC,eAAO,MAAM,yBAAyB,aAGpC,CAAA;AAEF,eAAO,MAAM,2BAA2B,aAItC,CAAA;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE/D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAElE;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,GAAG,IAAI,CAIf;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,GAAG,IAAI,CAIf;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAgBtE;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,GAAG,IAAI,CAYf;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,CAAC,EAAE,uBAAuB,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GACxE,WAAW,GAAG,IAAI,CAgBpB;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,uBAAuB,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EACxE,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GACpD,MAAM,GAAG,IAAI,CASf;AAED,wBAAgB,gCAAgC,CAC9C,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAQR"}
1
+ {"version":3,"file":"directDebitExchange.d.ts","sourceRoot":"","sources":["../../../../src/utils/directDebitExchange.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,uBAAuB,EAAC,MAAM,wBAAwB,CAAA;AAG3E,eAAO,MAAM,+BAA+B,sCACP,CAAA;AASrC,eAAO,MAAM,yBAAyB,aAGpC,CAAA;AAEF,eAAO,MAAM,2BAA2B,aAItC,CAAA;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE/D;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAElE;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,GAAG,IAAI,CAIf;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,GAAG,IAAI,CAIf;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAgBtE;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,MAAM,GAAG,IAAI,CAYf;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,CAAC,EAAE,uBAAuB,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GACxE,WAAW,GAAG,IAAI,CAgBpB;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,uBAAuB,GAAG,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EACxE,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GACpD,MAAM,GAAG,IAAI,CASf;AAED,wBAAgB,gCAAgC,CAC9C,aAAa,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAQR;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,UAAU,CAAA;AAE/C,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAE3E;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzE;AASD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,WAAW,CAgCb"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DIRECT_DEBIT_AWAITING_CODES = exports.DIRECT_DEBIT_FAILED_CODES = exports.PAY_DIRECT_DEBIT_EXCHANGE_EVENT = void 0;
3
+ exports.SIMULATED_MANDATE_PREFIX = exports.DIRECT_DEBIT_AWAITING_CODES = exports.DIRECT_DEBIT_FAILED_CODES = exports.PAY_DIRECT_DEBIT_EXCHANGE_EVENT = void 0;
4
4
  exports.normalizeAction = normalizeAction;
5
5
  exports.readPayloadString = readPayloadString;
6
6
  exports.isLegacyDirectDebitAction = isLegacyDirectDebitAction;
@@ -11,6 +11,9 @@ exports.parseDirectDebitDisplayId = parseDirectDebitDisplayId;
11
11
  exports.extractDirectDebit = extractDirectDebit;
12
12
  exports.extractDirectDebitReference = extractDirectDebitReference;
13
13
  exports.normalizeDirectDebitStatusAction = normalizeDirectDebitStatusAction;
14
+ exports.isSimulatedDirectDebitMandate = isSimulatedDirectDebitMandate;
15
+ exports.readSimulatedMandateSessionId = readSimulatedMandateSessionId;
16
+ exports.buildSimulatedDirectDebit = buildSimulatedDirectDebit;
14
17
  const constants_1 = require("../providers/pay/core/constants");
15
18
  exports.PAY_DIRECT_DEBIT_EXCHANGE_EVENT = "pay_payment.direct_debit_exchange";
16
19
  const LEGACY_DIRECT_DEBIT_ACTIONS = new Set([
@@ -105,4 +108,58 @@ function normalizeDirectDebitStatusAction(payloadAction, statusAction) {
105
108
  }
106
109
  return payloadAction.replace(/^incasso/, "");
107
110
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0RGViaXRFeGNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9kaXJlY3REZWJpdEV4Y2hhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQSwwQ0FFQztBQUVELDhDQUVDO0FBRUQsOERBRUM7QUFFRCxnRUFNQztBQUVELDREQU1DO0FBV0QsNEVBZ0JDO0FBRUQsOERBY0M7QUFNRCxnREFrQkM7QUFFRCxrRUFZQztBQUVELDRFQVdDO0FBL0lELCtEQUF3RTtBQUUzRCxRQUFBLCtCQUErQixHQUMxQyxtQ0FBbUMsQ0FBQTtBQUVyQyxNQUFNLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzFDLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLGVBQWU7Q0FDaEIsQ0FBQyxDQUFBO0FBRVcsUUFBQSx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsQ0FBUztJQUN2RCxvQ0FBd0IsQ0FBQyxNQUFNO0lBQy9CLG9DQUF3QixDQUFDLE1BQU07Q0FDaEMsQ0FBQyxDQUFBO0FBRVcsUUFBQSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBUztJQUN6RCxvQ0FBd0IsQ0FBQyxPQUFPO0lBQ2hDLG9DQUF3QixDQUFDLElBQUk7SUFDN0Isb0NBQXdCLENBQUMsVUFBVTtDQUNwQyxDQUFDLENBQUE7QUFFRixTQUFnQixlQUFlLENBQUMsTUFBZTtJQUM3QyxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFDdEUsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLEtBQWM7SUFDOUMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FB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
111
+ /**
112
+ * Mandates created while the provider runs in test mode are not known at
113
+ * Pay. (see PayDirectDebitService.updatePayment), their code is
114
+ * `TEST-<payment session id>`.
115
+ */
116
+ exports.SIMULATED_MANDATE_PREFIX = "TEST-";
117
+ function isSimulatedDirectDebitMandate(code) {
118
+ return typeof code === "string" && code.startsWith(exports.SIMULATED_MANDATE_PREFIX);
119
+ }
120
+ function readSimulatedMandateSessionId(code) {
121
+ return readPayloadString(code.slice(exports.SIMULATED_MANDATE_PREFIX.length));
122
+ }
123
+ const LEGACY_ACTION_STATUS_CODES = {
124
+ incassopending: constants_1.PayDirectDebitStatusCode.PENDING,
125
+ incassosend: constants_1.PayDirectDebitStatusCode.SENT,
126
+ incassocollected: constants_1.PayDirectDebitStatusCode.COLLECTED,
127
+ incassostorno: constants_1.PayDirectDebitStatusCode.STORNO,
128
+ };
129
+ /**
130
+ * Builds the direct debit a simulated exchange describes, so a test server can
131
+ * walk through the collection flow (collected, storno, ...) without Pay. The
132
+ * status comes from `status.code` in the body when present, otherwise from the
133
+ * legacy action. Only used for simulated mandates while test mode is active.
134
+ */
135
+ function buildSimulatedDirectDebit(payload, mandateId, reference) {
136
+ const action = normalizeAction(payload.action);
137
+ const bodyCode = payload.status?.code ?? payload.statusCode;
138
+ const code = bodyCode !== undefined && bodyCode !== null && bodyCode !== ""
139
+ ? Number(bodyCode)
140
+ : LEGACY_ACTION_STATUS_CODES[action] ?? NaN;
141
+ return {
142
+ id: mandateId,
143
+ description: `Simulated direct debit exchange for #${reference}`,
144
+ url: "",
145
+ processDate: new Date().toISOString(),
146
+ orderId: "",
147
+ paymentSessionId: readSimulatedMandateSessionId(mandateId) ?? "",
148
+ type: "SINGLE",
149
+ amount: {
150
+ value: Number(payload.amount?.value ?? 0),
151
+ currency: String(payload.amount?.currency ?? ""),
152
+ },
153
+ status: {
154
+ code,
155
+ action: readPayloadString(payload.status?.action) ??
156
+ action.replace(/^incasso/, ""),
157
+ phase: "",
158
+ },
159
+ declined: payload.declined === true,
160
+ decline: null,
161
+ bankAccount: { iban: "", bic: "", owner: "" },
162
+ mandate: { code: mandateId, reference, description: "" },
163
+ };
164
+ }
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0RGViaXRFeGNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9kaXJlY3REZWJpdEV4Y2hhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQSwwQ0FFQztBQUVELDhDQUVDO0FBRUQsOERBRUM7QUFFRCxnRUFNQztBQUVELDREQU1DO0FBV0QsNEVBZ0JDO0FBRUQsOERBY0M7QUFNRCxnREFrQkM7QUFFRCxrRUFZQztBQUVELDRFQVdDO0FBU0Qsc0VBRUM7QUFFRCxzRUFFQztBQWVELDhEQW9DQztBQWpORCwrREFBd0U7QUFFM0QsUUFBQSwrQkFBK0IsR0FDMUMsbUNBQW1DLENBQUE7QUFFckMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMxQyxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLGtCQUFrQjtJQUNsQixlQUFlO0NBQ2hCLENBQUMsQ0FBQTtBQUVXLFFBQUEseUJBQXlCLEdBQUcsSUFBSSxHQUFHLENBQVM7SUFDdkQsb0NBQXdCLENBQUMsTUFBTTtJQUMvQixvQ0FBd0IsQ0FBQyxNQUFNO0NBQ2hDLENBQUMsQ0FBQTtBQUVXLFFBQUEsMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQVM7SUFDekQsb0NBQXdCLENBQUMsT0FBTztJQUNoQyxvQ0FBd0IsQ0FBQyxJQUFJO0lBQzdCLG9DQUF3QixDQUFDLFVBQVU7Q0FDcEMsQ0FBQyxDQUFBO0FBRUYsU0FBZ0IsZUFBZSxDQUFDLE1BQWU7SUFDN0MsT0FBTyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0FBQ3RFLENBQUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxLQUFjO0lBQzlDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFD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
@@ -0,0 +1,93 @@
1
+ import { MedusaContainer } from "@medusajs/types";
2
+ import { ProviderOptions } from "../providers/pay/types";
3
+ /**
4
+ * The exchanges a test server can simulate for a direct debit that only exists
5
+ * locally (see README "Testing direct debits locally"). Each preset is the body
6
+ * Pay. would send, minus the mandate and order reference that are filled in
7
+ * from the order.
8
+ */
9
+ export declare const SIMULATED_EXCHANGE_PRESETS: {
10
+ readonly pending: {
11
+ readonly label: "Pending";
12
+ readonly description: "The debit is scheduled, the collection stays awaiting.";
13
+ readonly payload: {
14
+ readonly action: "incassopending";
15
+ };
16
+ };
17
+ readonly sent: {
18
+ readonly label: "Sent to bank";
19
+ readonly description: "The debit was sent to the bank, the collection stays awaiting.";
20
+ readonly payload: {
21
+ readonly action: "incassosend";
22
+ };
23
+ };
24
+ readonly collected: {
25
+ readonly label: "Collected";
26
+ readonly description: "The bank collected the money: the payment is captured.";
27
+ readonly payload: {
28
+ readonly action: "incassocollected";
29
+ };
30
+ };
31
+ readonly storno: {
32
+ readonly label: "Storno";
33
+ readonly description: "The customer reversed the debit after collection: the payment is refunded in Medusa and the order becomes payable again.";
34
+ readonly payload: {
35
+ readonly action: "incassostorno";
36
+ };
37
+ };
38
+ readonly failed: {
39
+ readonly label: "Failed";
40
+ readonly description: "The bank rejected the debit: the collection fails.";
41
+ readonly payload: {
42
+ readonly action: "incassosend";
43
+ readonly status: {
44
+ readonly code: 106;
45
+ };
46
+ };
47
+ };
48
+ readonly declined: {
49
+ readonly label: "Declined";
50
+ readonly description: "The debit was declined: the collection fails.";
51
+ readonly payload: {
52
+ readonly action: "incassosend";
53
+ readonly declined: true;
54
+ };
55
+ };
56
+ };
57
+ export type SimulatedExchangeKey = keyof typeof SIMULATED_EXCHANGE_PRESETS;
58
+ export declare const isSimulatedExchangeKey: (value: unknown) => value is SimulatedExchangeKey;
59
+ export type DirectDebitSimulationState = {
60
+ /** Whether exchanges can be simulated for this order */
61
+ available: boolean;
62
+ /** Why not, when unavailable */
63
+ reason?: "sepa_testing_off" | "test_mode_off" | "no_direct_debit" | "not_simulated";
64
+ testMode: boolean;
65
+ /** The "SEPA testing" switch on the Pay. settings page */
66
+ sepaTesting: boolean;
67
+ orderId: string;
68
+ displayId: string;
69
+ mandateCode: string | null;
70
+ paymentCollectionId: string | null;
71
+ paymentCollectionStatus: string | null;
72
+ captured: boolean;
73
+ presets: Record<SimulatedExchangeKey, {
74
+ label: string;
75
+ description: string;
76
+ }>;
77
+ };
78
+ export declare const getPayProviderOptions: (container: MedusaContainer) => ProviderOptions | null;
79
+ /**
80
+ * The "SEPA testing" switch on the Pay. settings page lives in the store's
81
+ * metadata, so it is shared by every admin user and needs no migration. Off by
82
+ * default: it is meant for staging servers only.
83
+ */
84
+ export declare const SEPA_TESTING_METADATA_KEY = "pay_sepa_testing";
85
+ export declare function isSepaTestingEnabled(container: MedusaContainer): Promise<boolean>;
86
+ export declare function setSepaTestingEnabled(container: MedusaContainer, enabled: boolean): Promise<boolean>;
87
+ export declare function getDirectDebitSimulationState(container: MedusaContainer, orderId: string): Promise<DirectDebitSimulationState | null>;
88
+ /**
89
+ * Builds the exchange body for a preset, as Pay. would send it for the order's
90
+ * simulated mandate.
91
+ */
92
+ export declare function buildSimulatedExchangePayload(key: SimulatedExchangeKey, state: Pick<DirectDebitSimulationState, "mandateCode" | "displayId">): Record<string, unknown>;
93
+ //# sourceMappingURL=directDebitSimulation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directDebitSimulation.d.ts","sourceRoot":"","sources":["../../../../src/utils/directDebitSimulation.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,eAAe,EAAC,MAAM,iBAAiB,CAAA;AAGpE,OAAO,EAAsB,eAAe,EAAC,MAAM,wBAAwB,CAAA;AAG3E;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC7B,CAAA;AAEV,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,0BAA0B,CAAA;AAE1E,eAAO,MAAM,sBAAsB,GACjC,OAAO,OAAO,KACb,KAAK,IAAI,oBAE6D,CAAA;AAEzE,MAAM,MAAM,0BAA0B,GAAG;IACvC,wDAAwD;IACxD,SAAS,EAAE,OAAO,CAAA;IAClB,gCAAgC;IAChC,MAAM,CAAC,EACH,kBAAkB,GAClB,eAAe,GACf,iBAAiB,GACjB,eAAe,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,0DAA0D;IAC1D,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,MAAM,CACb,oBAAoB,EACpB;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,CACrC,CAAA;CACF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAChC,WAAW,eAAe,KACzB,eAAe,GAAG,IASpB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,qBAAqB,CAAA;AAc3D,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,OAAO,CAAC,CAIlB;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAUD,wBAAsB,6BAA6B,CACjD,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CA6E5C;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,IAAI,CAAC,0BAA0B,EAAE,aAAa,GAAG,WAAW,CAAC,GACnE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB"}