@webbers/pay-payments-medusa 2.2.43 → 2.2.46

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 (34) hide show
  1. package/.medusa/server/package.json +6 -2
  2. package/.medusa/server/src/admin/index.js +1 -1
  3. package/.medusa/server/src/admin/index.mjs +1 -1
  4. package/.medusa/server/src/api/hooks/pay/[provider]/route.d.ts.map +1 -1
  5. package/.medusa/server/src/api/hooks/pay/[provider]/route.js +29 -9
  6. package/.medusa/server/src/providers/pay/core/constants.d.ts +10 -1
  7. package/.medusa/server/src/providers/pay/core/constants.d.ts.map +1 -1
  8. package/.medusa/server/src/providers/pay/core/constants.js +16 -5
  9. package/.medusa/server/src/providers/pay/core/http-client.d.ts +0 -6
  10. package/.medusa/server/src/providers/pay/core/http-client.d.ts.map +1 -1
  11. package/.medusa/server/src/providers/pay/core/http-client.js +1 -19
  12. package/.medusa/server/src/providers/pay/core/pay-base.d.ts +9 -2
  13. package/.medusa/server/src/providers/pay/core/pay-base.d.ts.map +1 -1
  14. package/.medusa/server/src/providers/pay/core/pay-base.js +48 -11
  15. package/.medusa/server/src/providers/pay/core/pay-client.d.ts +18 -5
  16. package/.medusa/server/src/providers/pay/core/pay-client.d.ts.map +1 -1
  17. package/.medusa/server/src/providers/pay/core/pay-client.js +40 -12
  18. package/.medusa/server/src/providers/pay/services/pay-direct-debit.d.ts +47 -1
  19. package/.medusa/server/src/providers/pay/services/pay-direct-debit.d.ts.map +1 -1
  20. package/.medusa/server/src/providers/pay/services/pay-direct-debit.js +196 -1
  21. package/.medusa/server/src/providers/pay/types/order.d.ts +141 -72
  22. package/.medusa/server/src/providers/pay/types/order.d.ts.map +1 -1
  23. package/.medusa/server/src/subscribers/direct-debit-exchange.d.ts +12 -0
  24. package/.medusa/server/src/subscribers/direct-debit-exchange.d.ts.map +1 -0
  25. package/.medusa/server/src/subscribers/direct-debit-exchange.js +184 -0
  26. package/.medusa/server/src/subscribers/payment-canceled.d.ts.map +1 -1
  27. package/.medusa/server/src/subscribers/payment-canceled.js +17 -4
  28. package/.medusa/server/src/subscribers/payment-failed.d.ts +1 -0
  29. package/.medusa/server/src/subscribers/payment-failed.d.ts.map +1 -1
  30. package/.medusa/server/src/subscribers/payment-failed.js +13 -3
  31. package/.medusa/server/src/utils/directDebitExchange.d.ts +28 -0
  32. package/.medusa/server/src/utils/directDebitExchange.d.ts.map +1 -0
  33. package/.medusa/server/src/utils/directDebitExchange.js +108 -0
  34. package/package.json +6 -2
@@ -8,6 +8,7 @@ class PayClient {
8
8
  constructor(options, logger) {
9
9
  this.httpClient_ = new http_client_1.HttpClient({ options, logger });
10
10
  this.serviceId_ = options.slCode;
11
+ this.logger_ = logger;
11
12
  }
12
13
  /**
13
14
  * Create a new order.
@@ -84,35 +85,62 @@ class PayClient {
84
85
  });
85
86
  }
86
87
  /**
87
- * Create the one-off direct debit
88
+ * Create a one-off direct debit mandate
88
89
  * @param data
89
90
  */
90
91
  async createDirectDebit(data) {
91
92
  if (this.httpClient_.testMode) {
92
- console.log("createDirectDebit", data);
93
+ this.logger_.info(`createDirectDebit skipped ${JSON.stringify(data)}`);
93
94
  }
94
95
  else {
95
- return await this.httpClient_.restApiV3Request({
96
+ return await this.httpClient_.apiRequest({
96
97
  endpoint: constants_1.PayApiPath.DIRECT_DEBIT,
97
98
  data: {
98
99
  ...data,
99
100
  serviceId: this.serviceId_,
101
+ stats: {
102
+ object: `${package_json_1.displayName}|version ${package_json_1.version}`,
103
+ },
100
104
  },
101
105
  });
102
106
  }
103
107
  }
104
108
  /**
105
- * Create the one-off direct debit
106
- * @param data
109
+ * Retrieve a direct debit by its reference id. Unlike the mandate query this
110
+ * endpoint returns the direct debit object itself, not a paginated envelope.
111
+ * @param directDebitId
107
112
  */
108
- async getDirectDebitInfo(mandateId) {
109
- return await this.httpClient_.restApiV3Request({
110
- endpoint: constants_1.PayApiPath.DIRECT_DEBIT_INFO,
111
- data: {
112
- mandateId,
113
- },
113
+ async getDirectDebitInfo(directDebitId) {
114
+ return await this.httpClient_.apiRequest({
115
+ endpoint: constants_1.PayApiPath.DIRECT_DEBIT_INFO.replace("{id}", directDebitId),
116
+ method: "GET",
117
+ });
118
+ }
119
+ /**
120
+ * Retrieve direct debit info by the mandate code
121
+ * @param mandateId
122
+ */
123
+ async getDirectDebitInfoByMandate(mandateId) {
124
+ return await this.httpClient_.apiRequest({
125
+ endpoint: constants_1.PayApiPath.DIRECT_DEBIT_INFO_BY_MANDATE.replace("{id}", mandateId),
126
+ method: "GET",
127
+ });
128
+ }
129
+ /**
130
+ * Delete a mandate so no further direct debits can be executed on it. Test
131
+ * mode never creates a mandate, so there is nothing to delete there.
132
+ * @param mandateId
133
+ */
134
+ async deleteDirectDebitMandate(mandateId) {
135
+ if (this.httpClient_.testMode) {
136
+ this.logger_.info(`deleteDirectDebitMandate skipped for mandate ${mandateId}`);
137
+ return;
138
+ }
139
+ await this.httpClient_.apiRequest({
140
+ endpoint: constants_1.PayApiPath.DIRECT_DEBIT_MANDATE.replace("{id}", mandateId),
141
+ method: "DELETE",
114
142
  });
115
143
  }
116
144
  }
117
145
  exports.PayClient = PayClient;
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcGF5L2NvcmUvcGF5LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBd0M7QUFleEMsaURBQTRDO0FBQzVDLDJEQUE2RDtBQUc3RCxNQUFhLFNBQVM7SUFJcEIsWUFBWSxPQUF3QixFQUFFLE1BQWM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHdCQUFVLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUNmLElBQW9DO1FBRXBDLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxRQUFRLEVBQUUsc0JBQVUsQ0FBQyxZQUFZO1lBQ2pDLElBQUksRUFBRTtnQkFDSixHQUFHLElBQUk7Z0JBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMxQixLQUFLLEVBQUU7b0JBQ0wsTUFBTSxFQUFFLEdBQUcsMEJBQVcsWUFBWSxzQkFBTyxFQUFFO2lCQUM1QzthQUNGO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQ2YsT0FBZSxFQUNmLElBQWlCO1FBRWpCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxRQUFRLEVBQUUsc0JBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDMUQsSUFBSTtTQUNMLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQWU7UUFDNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMs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
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcGF5L2NvcmUvcGF5LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBd0M7QUFleEMsaURBQTRDO0FBQzVDLDJEQUE2RDtBQUc3RCxNQUFhLFNBQVM7SUFLcEIsWUFBWSxPQUF3QixFQUFFLE1BQWM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHdCQUFVLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUE7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUNmLElBQW9DO1FBRXBDLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxRQUFRLEVBQUUsc0JBQVUsQ0FBQyxZQUFZO1lBQ2pDLElBQUksRUFBRTtnQkFDSixHQUFHLElBQUk7Z0JBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMxQixLQUFLLEVBQUU7b0JBQ0wsTUFBTSxFQUFFLEdBQUcsMEJBQVcsWUFBWSxzQkFBTyxFQUFFO2lCQUM1QzthQUNGO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQ2YsT0FBZSxFQUNmLElBQWlCO1FBRWpCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxRQUFRLEVBQUUsc0JBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDMUQsSUFBSTtTQUNMLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQWU7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
@@ -1,8 +1,54 @@
1
+ import { CustomerDTO, OrderDTO, SalesChannelDTO } from "@medusajs/framework/types";
2
+ import { CancelPaymentInput, CancelPaymentOutput, CapturePaymentInput, CapturePaymentOutput, PaymentSessionDTO, RefundPaymentInput, RefundPaymentOutput, RetrievePaymentInput, RetrievePaymentOutput, UpdatePaymentInput, UpdatePaymentOutput } from "@medusajs/types";
1
3
  import PayBase from "../core/pay-base";
2
- import { PaymentOptions } from "../types";
4
+ import { CreateDirectDebitRequest, PaymentOptions } from "../types";
5
+ /**
6
+ * Direct debits are not created through the Pay. order API but through the
7
+ * mandate API (POST /directdebits/mandates). The mandate response is stored on
8
+ * the payment session data, its `code` is used to retrieve the authoritative
9
+ * direct debit state later. Collection status changes arrive through incasso
10
+ * exchanges handled by the direct-debit-exchange subscriber.
11
+ */
3
12
  declare class PayDirectDebitService extends PayBase {
4
13
  static identifier: string;
5
14
  get paymentCreateOptions(): PaymentOptions;
15
+ createPayOrderPayload(order: OrderDTO & {
16
+ customer: CustomerDTO;
17
+ sales_channel: SalesChannelDTO;
18
+ }, paymentSession: PaymentSessionDTO): Omit<CreateDirectDebitRequest, "serviceId">;
19
+ /**
20
+ * Creates the direct debit mandate when the payload is passed from the order
21
+ * created hook. The returned data replaces the session data wholesale, so the
22
+ * payload key is always stripped, persisting it back would create a second
23
+ * mandate on a later update.
24
+ */
25
+ updatePayment(input: UpdatePaymentInput): Promise<UpdatePaymentOutput>;
26
+ /**
27
+ * Retrieves payment details. Payments that hold a Pay. order or transaction
28
+ * id (created through the order API, or refunded) resolve through the base
29
+ * implementation, mandate based payments resolve through the mandate code.
30
+ */
31
+ retrievePayment(input: RetrievePaymentInput): Promise<RetrievePaymentOutput>;
32
+ /**
33
+ * A mandate based direct debit is revoked by deleting the mandate at Pay.,
34
+ * so a pending collection is never executed for a canceled payment. The
35
+ * order API abort only applies to payments that hold a Pay. order id.
36
+ */
37
+ cancelPayment(input: CancelPaymentInput): Promise<CancelPaymentOutput>;
38
+ /**
39
+ * A mandate based direct debit only counts as captured when Pay. reports the
40
+ * direct debit as collected. The state is always re-fetched from Pay., so a
41
+ * spoofed exchange cannot capture an uncollected payment.
42
+ */
43
+ capturePayment(input: CapturePaymentInput): Promise<CapturePaymentOutput>;
44
+ /**
45
+ * Refunds go through the regular transaction refund endpoint, using the Pay.
46
+ * transaction id of the collection. That id lives on the collected direct
47
+ * debit, not necessarily on the stored payment data, so it is resolved from
48
+ * the mandate when missing.
49
+ */
50
+ refundPayment(input: RefundPaymentInput): Promise<RefundPaymentOutput>;
51
+ protected readMandateId(data: Record<string, any>): string | undefined;
6
52
  }
7
53
  export default PayDirectDebitService;
8
54
  //# sourceMappingURL=pay-direct-debit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pay-direct-debit.d.ts","sourceRoot":"","sources":["../../../../../../src/providers/pay/services/pay-direct-debit.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAC,cAAc,EAAsB,MAAM,UAAU,CAAA;AAE5D,cAAM,qBAAsB,SAAQ,OAAO;IACzC,MAAM,CAAC,UAAU,SAAkC;IAEnD,IAAI,oBAAoB,IAAI,cAAc,CASzC;CACF;AAED,eAAe,qBAAqB,CAAA"}
1
+ {"version":3,"file":"pay-direct-debit.d.ts","sourceRoot":"","sources":["../../../../../../src/providers/pay/services/pay-direct-debit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAC,MAAM,2BAA2B,CAAA;AAChF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,EACL,wBAAwB,EAGxB,cAAc,EAEf,MAAM,UAAU,CAAA;AAGjB;;;;;;GAMG;AACH,cAAM,qBAAsB,SAAQ,OAAO;IACzC,MAAM,CAAC,UAAU,SAAkC;IAEnD,IAAI,oBAAoB,IAAI,cAAc,CASzC;IAED,qBAAqB,CACnB,KAAK,EAAE,QAAQ,GAAG;QAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,aAAa,EAAE,eAAe,CAAA;KAAC,EACzE,cAAc,EAAE,iBAAiB,GAChC,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC;IAqD9C;;;;;OAKG;IACG,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsC5E;;;;OAIG;IACG,eAAe,CACnB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC;IAqBjC;;;;OAIG;IACG,aAAa,CACjB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC;IA8B/B;;;;OAIG;IACG,cAAc,CAClB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC;IAqChC;;;;;OAKG;IACG,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyC5E,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS;CAOvE;AAED,eAAe,qBAAqB,CAAA"}
@@ -3,8 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const utils_1 = require("@medusajs/framework/utils");
6
7
  const pay_base_1 = __importDefault(require("../core/pay-base"));
7
8
  const types_1 = require("../types");
9
+ const constants_1 = require("../core/constants");
10
+ /**
11
+ * Direct debits are not created through the Pay. order API but through the
12
+ * mandate API (POST /directdebits/mandates). The mandate response is stored on
13
+ * the payment session data, its `code` is used to retrieve the authoritative
14
+ * direct debit state later. Collection status changes arrive through incasso
15
+ * exchanges handled by the direct-debit-exchange subscriber.
16
+ */
8
17
  class PayDirectDebitService extends pay_base_1.default {
9
18
  get paymentCreateOptions() {
10
19
  return {
@@ -15,7 +24,193 @@ class PayDirectDebitService extends pay_base_1.default {
15
24
  "_pay",
16
25
  };
17
26
  }
27
+ createPayOrderPayload(order, paymentSession) {
28
+ const paymentMethodInput = (paymentSession.data?.paymentMethodInput ??
29
+ {});
30
+ const iban = paymentMethodInput.iban?.replace(/\s/g, "");
31
+ if (!iban) {
32
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Bank account number is missing.");
33
+ }
34
+ const fullName = [
35
+ order.billing_address?.first_name?.trim(),
36
+ order.billing_address?.last_name?.trim(),
37
+ ]
38
+ .filter(Boolean)
39
+ .join(" ");
40
+ const owner = (paymentMethodInput.accountHolder?.trim() ||
41
+ order.billing_address?.company?.trim() ||
42
+ fullName).substring(0, 64);
43
+ const payload = {
44
+ reference: order.display_id.toString(),
45
+ description: this.getPaymentDescription(order),
46
+ type: "SINGLE",
47
+ exchangeUrl: this.paymentCreateOptions.webhookUrl,
48
+ amount: {
49
+ value: Math.round(paymentSession.amount.valueOf() * 100),
50
+ currency: order.currency_code.toUpperCase(),
51
+ },
52
+ customer: {
53
+ email: paymentMethodInput.email || order.email || "",
54
+ bankAccount: {
55
+ iban,
56
+ owner,
57
+ },
58
+ },
59
+ };
60
+ if (this.options_.debugMode) {
61
+ try {
62
+ this.logger_.info(JSON.stringify(payload));
63
+ }
64
+ catch (e) { }
65
+ }
66
+ return payload;
67
+ }
68
+ /**
69
+ * Creates the direct debit mandate when the payload is passed from the order
70
+ * created hook. The returned data replaces the session data wholesale, so the
71
+ * payload key is always stripped, persisting it back would create a second
72
+ * mandate on a later update.
73
+ */
74
+ async updatePayment(input) {
75
+ const { payload, ...data } = (input.data ?? {});
76
+ if (!payload) {
77
+ return { data };
78
+ }
79
+ // A retried order created hook must not create a second mandate
80
+ if (data.code) {
81
+ this.logger_.info(`Pay. direct debit mandate ${data.code} already exists, skipping creation`);
82
+ return { data };
83
+ }
84
+ try {
85
+ const response = await this.client_.createDirectDebit(payload);
86
+ if (!response) {
87
+ // Test mode does not create a mandate, keep the existing session data
88
+ return { data };
89
+ }
90
+ this.logger_.info(`Pay. direct debit mandate ${response.code} created for reference ${payload.reference} with amount ${payload.amount.currency} ${payload.amount.value}`);
91
+ return { data: response };
92
+ }
93
+ catch (error) {
94
+ this.logger_.error(`Error creating Pay. direct debit: ${error.message}`);
95
+ throw error;
96
+ }
97
+ }
98
+ /**
99
+ * Retrieves payment details. Payments that hold a Pay. order or transaction
100
+ * id (created through the order API, or refunded) resolve through the base
101
+ * implementation, mandate based payments resolve through the mandate code.
102
+ */
103
+ async retrievePayment(input) {
104
+ const data = (input.data ?? {});
105
+ if (data.id || data.orderId) {
106
+ return await super.retrievePayment({
107
+ ...input,
108
+ data: { ...data, id: data.id ?? data.orderId },
109
+ });
110
+ }
111
+ const mandateId = this.readMandateId(data);
112
+ if (!mandateId) {
113
+ return { data };
114
+ }
115
+ const info = await this.client_.getDirectDebitInfoByMandate(mandateId);
116
+ return { data: info };
117
+ }
118
+ /**
119
+ * A mandate based direct debit is revoked by deleting the mandate at Pay.,
120
+ * so a pending collection is never executed for a canceled payment. The
121
+ * order API abort only applies to payments that hold a Pay. order id.
122
+ */
123
+ async cancelPayment(input) {
124
+ const data = (input.data ?? {});
125
+ if (data.orderId) {
126
+ return await super.cancelPayment(input);
127
+ }
128
+ const mandateId = this.readMandateId(data);
129
+ if (!mandateId) {
130
+ // Nothing was created at Pay. (e.g. test mode), nothing to revoke
131
+ return { data };
132
+ }
133
+ try {
134
+ await this.client_.deleteDirectDebitMandate(mandateId);
135
+ this.logger_.info(`Pay. direct debit mandate ${mandateId} deleted, no further collections will be executed`);
136
+ return { data };
137
+ }
138
+ catch (error) {
139
+ this.logger_.error(`Error deleting Pay. direct debit mandate ${mandateId}: ${error.message}`);
140
+ throw error;
141
+ }
142
+ }
143
+ /**
144
+ * A mandate based direct debit only counts as captured when Pay. reports the
145
+ * direct debit as collected. The state is always re-fetched from Pay., so a
146
+ * spoofed exchange cannot capture an uncollected payment.
147
+ */
148
+ async capturePayment(input) {
149
+ const data = (input.data ?? {});
150
+ if (data.orderId) {
151
+ return await super.capturePayment(input);
152
+ }
153
+ const mandateId = this.readMandateId(data);
154
+ if (!mandateId) {
155
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "No mandate code found on the payment data");
156
+ }
157
+ const info = await this.client_.getDirectDebitInfoByMandate(mandateId);
158
+ const directDebit = info.directdebits[0];
159
+ if (directDebit?.status.code === constants_1.PayDirectDebitStatusCode.COLLECTED) {
160
+ return {
161
+ data: {
162
+ ...data,
163
+ orderId: directDebit.orderId,
164
+ amount: directDebit.amount,
165
+ status: directDebit.status,
166
+ directdebits: info.directdebits,
167
+ },
168
+ };
169
+ }
170
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR, "The payment could not be captured.");
171
+ }
172
+ /**
173
+ * Refunds go through the regular transaction refund endpoint, using the Pay.
174
+ * transaction id of the collection. That id lives on the collected direct
175
+ * debit, not necessarily on the stored payment data, so it is resolved from
176
+ * the mandate when missing.
177
+ */
178
+ async refundPayment(input) {
179
+ const data = (input.data ?? {});
180
+ let directDebit = data.directdebits?.[0];
181
+ let orderId = data.orderId ?? directDebit?.orderId;
182
+ if (!orderId) {
183
+ const mandateId = this.readMandateId(data);
184
+ if (mandateId) {
185
+ const info = await this.client_
186
+ .getDirectDebitInfoByMandate(mandateId)
187
+ .catch((error) => {
188
+ this.logger_.warn(`Could not retrieve direct debit mandate ${mandateId}: ${error.message}`);
189
+ return undefined;
190
+ });
191
+ directDebit = info?.directdebits[0];
192
+ orderId = directDebit?.orderId;
193
+ }
194
+ }
195
+ if (!orderId) {
196
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "No Pay. transaction found for this direct debit, cannot refund.");
197
+ }
198
+ return await super.refundPayment({
199
+ ...input,
200
+ data: {
201
+ ...data,
202
+ orderId,
203
+ amount: data.amount ?? directDebit?.amount,
204
+ },
205
+ });
206
+ }
207
+ readMandateId(data) {
208
+ const mandateId = data.code ?? data.directdebits?.[0]?.mandate.code;
209
+ return typeof mandateId === "string" && mandateId.trim()
210
+ ? mandateId.trim()
211
+ : undefined;
212
+ }
18
213
  }
19
214
  PayDirectDebitService.identifier = types_1.PaymentProviderKeys.DIRECTDEBIT;
20
215
  exports.default = PayDirectDebitService;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5LWRpcmVjdC1kZWJpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcGF5L3NlcnZpY2VzL3BheS1kaXJlY3QtZGViaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBc0M7QUFDdEMsb0NBQTREO0FBRTVELE1BQU0scUJBQXNCLFNBQVEsa0JBQU87SUFHekMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTztZQUNMLFFBQVEsRUFBRSxHQUFHO1lBQ2IsVUFBVSxFQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUztnQkFDdkIsYUFBYTtnQkFDYiwyQkFBbUIsQ0FBQyxXQUFXO2dCQUMvQixNQUFNO1NBQ1QsQ0FBQTtJQUNILENBQUM7O0FBWE0sZ0NBQVUsR0FBRywyQkFBbUIsQ0FBQyxXQUFXLENBQUE7QUFjckQsa0JBQWUscUJBQXFCLENBQUEifQ==
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5LWRpcmVjdC1kZWJpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcGF5L3NlcnZpY2VzL3BheS1kaXJlY3QtZGViaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSxxREFBcUQ7QUFDckQsZ0VBQXNDO0FBQ3RDLG9DQU1pQjtBQUNqQixpREFBMEQ7QUFFMUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxxQkFBc0IsU0FBUSxrQkFBTztJQUd6QyxJQUFJLG9CQUFvQjtRQUN0QixPQUFPO1lBQ0wsUUFBUSxFQUFFLEdBQUc7WUFDYixVQUFVLEVBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUN2QixhQUFhO2dCQUNiLDJCQUFtQixDQUFDLFdBQVc7Z0JBQy9CLE1BQU07U0FDVCxDQUFBO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUNuQixLQUF5RSxFQUN6RSxjQUFpQztRQUVqQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxrQkFBa0I7WUFDakUsRUFBRSxDQUE2QixDQUFBO1FBRWpDLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRXhELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGlDQUFpQyxDQUNsQyxDQUFBO1FBQ0gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHO1lBQ2YsS0FBSyxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO1lBQ3pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtTQUN6QzthQUNFLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFF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
@@ -10,12 +10,13 @@ export type PinPaymentMethod = {
10
10
  terminalCode: string;
11
11
  };
12
12
  export type DirectDebitPaymentMethod = {
13
- firstName: string | null;
14
- lastName: string | null;
13
+ firstName?: string | null;
14
+ lastName?: string | null;
15
+ accountHolder?: string | null;
15
16
  email: string | null;
16
17
  city: string | null;
17
18
  iban: string | null;
18
- bic: string | null;
19
+ bic?: string | null;
19
20
  permissionGiven?: boolean;
20
21
  };
21
22
  export type KlarnaPaymentMethod = {
@@ -70,87 +71,155 @@ export interface UpdateOrder {
70
71
  description?: string;
71
72
  reference?: string;
72
73
  }
73
- export interface DirectDebitInfoRequest {
74
- mandateId: string;
75
- referenceId?: string;
76
- }
77
74
  export interface DirectDebitInfoResponse {
78
- request: {
79
- result: "0" | "1";
80
- errorId: string;
81
- errorMessage: string;
82
- };
83
- result: {
84
- mandate: Mandate;
85
- directDebit: DirectDebit[];
86
- };
75
+ total: number;
76
+ count: number;
77
+ pages: number;
78
+ directdebits: DirectDebit[];
79
+ _links?: Record<string, {
80
+ href: string;
81
+ rel?: string;
82
+ type?: string;
83
+ }>;
87
84
  }
88
- interface Mandate {
89
- mandateId: string;
90
- type: MandateType;
91
- bankaccountNumber: string;
92
- bankaccounOwner: string;
93
- bankaccountBic: string;
94
- amount: string;
85
+ export interface DirectDebit {
86
+ id: string;
95
87
  description: string;
96
- intervalValue: string;
97
- intervalPeriod: string;
98
- intervalQuantity: string;
99
- state: MandateState;
100
- ipAddress: string;
101
- email: string;
102
- promotorId: string;
103
- tool: string;
104
- info: string;
105
- extra1: string;
106
- extra2: string;
107
- extra3: string;
108
- }
109
- interface DirectDebit {
110
- referenceId: string;
111
- bankaccountNumber: string;
112
- bankaccountHolder: string;
113
- bankaccountBic: string;
88
+ url: string;
89
+ processDate: string;
90
+ orderId: string;
114
91
  paymentSessionId: string;
115
- amount: string;
116
- description: string;
117
- sendDate: string;
118
- receiveDate: string;
119
- statusCode: string;
120
- statusName: string;
121
- declineCode: string;
122
- declineName: string;
123
- declineDate: string;
92
+ type: "SINGLE" | "RECURRING" | "FLEXIBLE";
93
+ amount: {
94
+ value: number;
95
+ currency: string;
96
+ };
97
+ status: {
98
+ code: number;
99
+ action: string;
100
+ phase: string;
101
+ };
102
+ declined: boolean;
103
+ decline: {
104
+ code: string;
105
+ reason: string;
106
+ date: string;
107
+ } | null;
108
+ bankAccount: {
109
+ iban: string;
110
+ bic: string;
111
+ owner: string;
112
+ };
113
+ mandate: {
114
+ code: string;
115
+ description: string;
116
+ reference: string;
117
+ };
118
+ service: {
119
+ code: string;
120
+ name: string;
121
+ };
122
+ merchant: {
123
+ code: string;
124
+ name: string;
125
+ status: "ACTIVE" | "INACTIVE";
126
+ incorporationCountry: string;
127
+ };
128
+ stats: DirectDebitStats;
129
+ createdAt: string;
130
+ createdBy: string;
131
+ modifiedAt: string;
132
+ modifiedBy: string;
133
+ deletedAt: string | null;
134
+ deletedBy: string | null;
135
+ }
136
+ interface DirectDebitStats {
137
+ info?: string | null;
138
+ tool?: string | null;
139
+ object?: string | null;
140
+ extra1?: string | null;
141
+ extra2?: string | null;
142
+ extra3?: string | null;
143
+ domainId?: string | null;
124
144
  }
125
- type MandateType = "single" | "recurring";
126
- type MandateState = "first" | "active" | "last" | "single";
127
145
  export interface CreateDirectDebitRequest {
128
- reference: string;
129
146
  serviceId: string;
130
- amount: number;
131
- bankaccountHolder: string;
132
- bankaccountNumber: string;
133
- processDate?: string;
147
+ reference: string;
134
148
  description?: string;
135
- currency?: string;
149
+ processDate?: string;
136
150
  exchangeUrl?: string;
137
- ipAddress?: string;
138
- email?: string;
139
- promotorId?: number;
140
- tool?: string;
141
- info?: string;
142
- object?: string;
143
- extra1?: string;
144
- extra2?: string;
145
- extra3?: string;
151
+ type?: "SINGLE" | "RECURRING" | "FLEXIBLE";
152
+ interval?: {
153
+ period?: "day" | "week" | "month" | "trimester" | "halfyear" | "year";
154
+ quantity?: number;
155
+ value?: number;
156
+ };
157
+ amount: {
158
+ value: number;
159
+ currency?: string;
160
+ };
161
+ customer: {
162
+ ipAddress?: string;
163
+ email: string;
164
+ bankAccount: {
165
+ iban: string;
166
+ bic?: string;
167
+ owner: string;
168
+ };
169
+ };
170
+ stats?: DirectDebitStats;
146
171
  }
147
172
  export interface CreateDirectDebitResponse {
148
- request: {
149
- result: "0" | "1";
150
- errorId: string;
151
- errorMessage: string;
173
+ code: string;
174
+ serviceId: string;
175
+ reference: string;
176
+ description: string;
177
+ processDate: string;
178
+ exchangeUrl: string | null;
179
+ type: "SINGLE" | "RECURRING" | "FLEXIBLE";
180
+ interval: {
181
+ value: number;
182
+ quantity: number;
183
+ period: string;
184
+ };
185
+ amount: {
186
+ value: number;
187
+ currency: string;
188
+ };
189
+ customer: {
190
+ email: string;
191
+ ipAddress: string;
192
+ bankAccount: {
193
+ iban: string;
194
+ bic: string;
195
+ owner: string;
196
+ };
152
197
  };
153
- result: string;
198
+ service: {
199
+ code: string;
200
+ name: string;
201
+ };
202
+ merchant: {
203
+ code: string;
204
+ name: string;
205
+ status: string;
206
+ incorporationCountry: string;
207
+ };
208
+ stats: DirectDebitStats;
209
+ lastDirectDebitDate: string | null;
210
+ nextDirectDebitDate: string | null;
211
+ actualDirectDebitDate: string | null;
212
+ createdAt: string;
213
+ createdBy: string;
214
+ modifiedAt: string;
215
+ modifiedBy: string;
216
+ deletedAt: string | null;
217
+ deletedBy: string | null;
218
+ _links?: {
219
+ href: string;
220
+ rel: string;
221
+ type: string;
222
+ }[];
154
223
  }
155
224
  export interface OrderResponse extends PayErrorResponse {
156
225
  id: string;