@nicogorga/medusa-payment-mercadopago 0.2.1 → 0.2.2

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.
@@ -74,9 +74,16 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
74
74
  throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.INVALID_DATA, "No payment session id found in data");
75
75
  }
76
76
  const payment = new mercadopago_1.Payment(this.client_);
77
- const results = (await payment.search({
78
- options: { external_reference: paymentSessionId },
79
- }))?.results ?? [];
77
+ const results = ((await payment.search({
78
+ options: {
79
+ external_reference: paymentSessionId,
80
+ sort: 'date_approved',
81
+ criteria: 'desc'
82
+ },
83
+ })
84
+ // Ideally, this would be done in the call to Mercado Pago, but they don't expose an option
85
+ // to filter based on status
86
+ )?.results ?? []).filter(payment => payment.status === 'approved');
80
87
  if (!results.length) {
81
88
  this.logger_.warn(`No payment found in Mercado Pago for payment session: ${paymentSessionId}\n This could be caused by lag in Mercado Pago's system and doesn't mean the payment was not created`);
82
89
  }
@@ -102,25 +109,24 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
102
109
  return { data: paymentData };
103
110
  }
104
111
  async getPaymentStatus(input) {
105
- let status = input.data?.status;
106
- if (!status) {
107
- const paymentId = input.data?.id;
108
- const payment = new mercadopago_1.Payment(this.client_);
109
- const paymentData = await payment.get({ id: paymentId });
110
- status = paymentData.status || "";
111
- }
112
- switch (status) {
112
+ const paymentId = input.data?.id;
113
+ const payment = new mercadopago_1.Payment(this.client_);
114
+ const paymentData = await payment.get({ id: paymentId });
115
+ switch (paymentData.status) {
113
116
  case "authorized":
114
- return { status: "authorized" };
117
+ return { status: "authorized", data: paymentData };
115
118
  case "approved":
116
- return { status: "captured" };
119
+ return { status: "captured", data: paymentData };
117
120
  case "cancelled":
118
121
  case "refunded":
119
- return { status: "canceled" };
122
+ return { status: "canceled", data: paymentData };
120
123
  case "rejected":
121
- return { status: "error" };
124
+ return { status: "error", data: {
125
+ ...paymentData,
126
+ error_message: this.sanitizeErrorMessage(paymentData)
127
+ } };
122
128
  default:
123
- return { status: "pending" };
129
+ return { status: "pending", data: paymentData };
124
130
  }
125
131
  }
126
132
  async refundPayment(input) {
@@ -193,28 +199,36 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
193
199
  if (!customer) {
194
200
  throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.INVALID_DATA, "No customer provided while creating account holder");
195
201
  }
202
+ const customerClient = new mercadopago_1.Customer(this.client_);
203
+ let mercadopagoCustomer;
196
204
  try {
197
- const customerClient = new mercadopago_1.Customer(this.client_);
198
205
  const body = {
199
206
  email: customer.email,
200
207
  first_name: customer.first_name || undefined,
201
208
  last_name: customer.last_name || undefined,
202
209
  date_registered: new Date().toISOString(),
203
210
  };
204
- const createdCustomer = await customerClient.create({
211
+ mercadopagoCustomer = await customerClient.create({
205
212
  body: body,
206
213
  requestOptions: {
207
214
  idempotencyKey: idempotency_key,
208
215
  },
209
216
  });
210
- return {
211
- id: createdCustomer.id,
212
- data: createdCustomer
213
- };
214
217
  }
215
- catch (error) {
216
- throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.UNEXPECTED_STATE, "An error occurred while trying to create a Mercado Pago customer");
218
+ catch (e) {
219
+ const error = e;
220
+ if (!!error.cause?.find(c => c.code === '101')) {
221
+ const { results } = await customerClient.search({ options: { email: customer.email } });
222
+ mercadopagoCustomer = results[0];
223
+ }
224
+ else {
225
+ throw new utils_1.MedusaError(utils_1.MedusaErrorTypes.UNEXPECTED_STATE, "An error occurred while trying to create a Mercado Pago customer");
226
+ }
217
227
  }
228
+ return {
229
+ id: mercadopagoCustomer.id,
230
+ data: mercadopagoCustomer
231
+ };
218
232
  }
219
233
  async updateAccountHolder({ context, }) {
220
234
  const { account_holder, customer, idempotency_key } = context;
@@ -373,4 +387,4 @@ class MercadopagoProviderService extends utils_1.AbstractPaymentProvider {
373
387
  }
374
388
  MercadopagoProviderService.identifier = "mercadopago";
375
389
  exports.default = MercadopagoProviderService;
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbWVyY2Fkby1wYWdvL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFPbUM7QUFnQ25DLDJEQUFnRztBQUloRyxtQ0FBb0M7QUFXcEMsTUFBTSwwQkFBMkIsU0FBUSwrQkFBMkM7SUFNbEYsWUFBWSxTQUErQixFQUFFLE9BQTJCO1FBQ3RFLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHFCQUFpQixDQUFDO1lBQ25DLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztTQUNqQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBeUI7UUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFBLGdCQUFRLEVBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLHdCQUFnQixDQUFDLFlBQVksRUFDN0IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ25CLEtBQTJCO1FBRTNCLE9BQU87WUFDTCxFQUFFLEVBQUUsRUFBRTtZQUNOLElBQUksRUFBRTtnQkFDSixVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVO2dCQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDckI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENB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
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvbWVyY2Fkby1wYWdvL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFPbUM7QUFnQ25DLDJEQUFnRztBQUloRyxtQ0FBb0M7QUFXcEMsTUFBTSwwQkFBMkIsU0FBUSwrQkFBMkM7SUFNbEYsWUFBWSxTQUErQixFQUFFLE9BQTJCO1FBQ3RFLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHFCQUFpQixDQUFDO1lBQ25DLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztTQUNqQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBeUI7UUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFBLGdCQUFRLEVBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLHdCQUFnQixDQUFDLFlBQVksRUFDN0IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ25CLEtBQTJCO1FBRTNCLE9BQU87WUFDTCxFQUFFLEVBQUUsRUFBRTtZQUNOLElBQUksRUFBRTtnQkFDSixVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVO2dCQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDckI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBeUI7UUFDM0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDakMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLEtBQTRCO1FBRTVCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFnQyxDQUFDO1FBQ3RFLElBQUksSUFBSSxHQUF3QixLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVqRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsd0JBQWdCLENBQUMsWUFBWSxFQUM3QixxQ0FBcUMsQ0FDdEMsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUNYLENBQUMsQ0FDQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDbkIsT0FBTyxFQUFFO2dCQUNQLGtCQUFrQixFQUFFLGdCQUFnQjtnQkFDcEMsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLFFBQVEsRUFBRSxNQUFNO2FBQ2pCO1NBQ0YsQ0FBQztRQUNGLDJGQUEyRjtRQUMzRiw0QkFBNEI7U0FDN0IsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLHlEQUF5RCxnQkFBZ0Isc0dBQXNHLENBQ2hMLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFMUIscUhBQXFIO1FBQ3JILHdIQUF3SDtRQUN4SCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsNEJBQW9CLENBQUMsUUFBUTtTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQ2xCLEtBQTBCO1FBRTFCLG9GQUFvRjtRQUNwRixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUF5QjtRQUMzQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBQSxnQkFBUSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sV0FBVyxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBaUQsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLEtBQTRCO1FBRTVCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQW1CLEVBQUUsQ0FBdUMsQ0FBQztRQUV6RyxRQUFRLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3JELEtBQUssVUFBVTtnQkFDYixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDbkQsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxVQUFVO2dCQUNiLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNuRCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFO3dCQUM5QixHQUFHLFdBQVc7d0JBQ2QsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUF5QyxDQUFDO3FCQUNwRixFQUFDLENBQUE7WUFDSjtnQkFDRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQXlCO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFekQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLFNBQVMsR0FDYixDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxVQUFVLEVBQUUsU0FBUztZQUNyQixJQUFJLEVBQUU7Z0JBQ0osTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQ3JEO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFnRCxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ25CLEtBQTJCO1FBRTNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFpRCxFQUFFLENBQUM7SUFDckUsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUF5QjtRQUNyQyw4SkFBOEo7UUFDOUosMkNBQTJDO1FBQzNDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixDQUMzQixPQUEwQztRQUUxQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLElBQWlDLENBQUM7UUFDbEUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUV6QyxJQUFJLENBQUM7WUFDSCxRQUFRLFNBQVMsRUFBRSxDQUFDO2dCQUNsQixLQUFLLGlCQUFpQixDQUFDO2dCQUN2QixLQUFLLGlCQUFpQjtvQkFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO3dCQUNwQyxFQUFFLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFZO3FCQUN0QyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUM7b0JBRXhELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUN0QixNQUFNLElBQUksS0FBSyxDQUNiLG9HQUFvRyxDQUNyRyxDQUFDO29CQUNKLENBQUM7b0JBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUNsRSxPQUFPOzRCQUNMLE1BQU0sRUFDSixXQUFXLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0NBQy9CLENBQUMsQ0FBQyxzQkFBYyxDQUFDLFVBQVU7Z0NBQzNCLENBQUMsQ0FBQyxzQkFBYyxDQUFDLFVBQVU7NEJBQy9CLElBQUksRUFBRTtnQ0FDSixVQUFVLEVBQUUsZ0JBQWdCO2dDQUM1QixNQUFNLEVBQUUsV0FBVyxDQUFDLGtCQUFtQjs2QkFDeEM7eUJBQ0YsQ0FBQztvQkFDSixDQUFDO2dCQUNIO29CQUNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBRSxFQUN6QixPQUFPLEVBQ2tCO1FBRXpCLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUU3RCxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsSUFBSSxDQUFDLEVBQXdCLENBQUE7UUFFeEQsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQTtRQUNmLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksbUJBQVcsQ0FBQyx3QkFBZ0IsQ0FBQyxZQUFZLEVBQUUsb0RBQW9ELENBQUMsQ0FBQTtRQUM1RyxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxzQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxJQUFJLG1CQUFpRCxDQUFBO1FBRXJELElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUF3QjtnQkFDaEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxTQUFTO2dCQUM1QyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsSUFBSSxTQUFTO2dCQUMxQyxlQUFlLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDMUMsQ0FBQztZQUVGLG1CQUFtQixHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQztnQkFDaEQsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsY0FBYyxFQUFFO29CQUNkLGNBQWMsRUFBRSxlQUFlO2lCQUNoQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxLQUFLLEdBQUcsQ0FBcUIsQ0FBQTtZQUVuQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFDLEVBQUMsQ0FBQyxDQUFBO2dCQUNyRixtQkFBbUIsR0FBRyxPQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDbkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxtQkFBVyxDQUFDLHdCQUFnQixDQUFDLGdCQUFnQixFQUFFLGtFQUFrRSxDQUFDLENBQUE7WUFDOUgsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLG1CQUFvQixDQUFDLEVBQUc7WUFDNUIsSUFBSSxFQUFFLG1CQUF5RDtTQUNoRSxDQUFBO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUN4QixPQUFPLEdBQ2tCO1FBQ3pCLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUU3RCxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLEVBQXdCLENBQUE7UUFFckUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxtQkFBVyxDQUFDLHdCQUFnQixDQUFDLFlBQVksRUFBRSwwREFBMEQsQ0FBQyxDQUFBO1FBQ2xILENBQUM7UUFFRCxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxzQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRCxNQUFNLElBQUksR0FBd0I7Z0JBQ2hDLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLFNBQVM7Z0JBQzVDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVM7Z0JBQzFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRTtnQkFDOUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLFNBQVM7YUFDaEUsQ0FBQTtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUE7WUFDN0IsQ0FBQztZQUVELE1BQU0sT0FBTyxHQUF1QjtnQkFDbEMsVUFBVSxFQUFFLGVBQWU7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLGNBQWMsRUFBRTtvQkFDZCxjQUFjLEVBQUUsZUFBZTtpQkFDaEM7YUFDRixDQUFBO1lBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTdELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLGVBQXFEO2FBQzVELENBQUE7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUFDLHdCQUFnQixDQUFDLGdCQUFnQixFQUFFLDBFQUEwRSxDQUFDLENBQUE7UUFDdEksQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFDdEIsT0FBTyxFQUNQLElBQUksR0FDbUI7UUFDdkIsTUFBTSxlQUFlLEdBQUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsRUFFMUMsQ0FBQTtRQUViLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksbUJBQVcsQ0FBQyx3QkFBZ0IsQ0FBQyxZQUFZLEVBQUUsc0RBQXNELENBQUMsQ0FBQTtRQUM5RyxDQUFDO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxJQUE0QixDQUFBO1FBRXRELE1BQU0sSUFBSSxHQUFHLElBQUksMEJBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFM0MsdUZBQXVGO1FBQ3ZGLGlIQUFpSDtRQUNqSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDaEMsVUFBVSxFQUFFLGVBQWU7WUFDM0IsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxLQUFLO2FBQy9CO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLGNBQWMsRUFBRSxPQUFPLEVBQUUsZUFBZTthQUN6QztTQUNGLENBQUMsQ0FBQTtRQUVGLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUcsRUFBRSxJQUFJLEVBQUUsT0FBNkMsRUFBRSxDQUFBO0lBQ2pGLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFDdkIsT0FBTyxHQUNpQjtRQUN4QixNQUFNLGVBQWUsR0FBRyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxFQUUxQyxDQUFBO1FBQ2IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksMEJBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFakQsTUFBTSxjQUFjLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzNDLFVBQVUsRUFBRSxlQUFlO1NBQzVCLENBQUMsQ0FBQTtRQUVGLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUc7WUFDZCxJQUFJLEVBQUUsTUFBNEM7U0FDbkQsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUNsQixnQkFBZ0IsRUFDaEIsT0FBTyxHQUlSO1FBQ0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDM0MsSUFBSSxFQUFFO2dCQUNKLEdBQUcsT0FBTztnQkFDVixrQkFBa0IsRUFBRSxnQkFBZ0I7YUFDckM7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDL0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixlQUFlLENBQUMsZUFBZSxDQUFDLEdBQUcsWUFBWSxDQUFBO1FBQ2pELENBQUM7UUFDRCxPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO0lBRVMsb0JBQW9CLENBQUMsT0FBd0I7UUFDckQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzNDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELFFBQVEsWUFBWSxFQUFFLENBQUM7WUFDckIsS0FBSyxvQ0FBb0M7Z0JBQ3ZDLE9BQU8sK0JBQStCLENBQUM7WUFDekMsS0FBSyw2QkFBNkI7Z0JBQ2hDLE9BQU8sa0NBQWtDLENBQUM7WUFDNUMsS0FBSyxzQ0FBc0M7Z0JBQ3pDLE9BQU8saUNBQWlDLENBQUM7WUFDM0MsS0FBSyxpQ0FBaUMsQ0FBQztZQUN2QyxLQUFLLHFCQUFxQjtnQkFDeEIsT0FBTyxxQkFBcUIsQ0FBQztZQUMvQixLQUFLLDBCQUEwQjtnQkFDN0IsT0FBTywwREFBMEQsQ0FBQztZQUNwRSxLQUFLLGtCQUFrQjtnQkFDckIsT0FBTyxnQ0FBZ0MsQ0FBQztZQUMxQztnQkFDRSxPQUFPLDZFQUE2RSxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRVMsd0JBQXdCLENBQUMsSUFBdUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDM0MsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU3QixNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxNQUFNLENBQVcsQ0FBQztRQUNoRSxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxNQUFNLENBQVcsQ0FBQztRQUNqRSxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBaUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBVyxDQUFDO1FBRW5ELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxTQUE2QixDQUFDO1FBQ2xDLElBQUksSUFBd0IsQ0FBQztRQUU3QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzFELElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUN4QixTQUFTLEdBQUcsVUFBVSxDQUFDO2dCQUN6QixDQUFDO3FCQUFNLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUMvQixJQUFJLEdBQUcsVUFBVSxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLGVBQWUsVUFBVSxPQUFPLFNBQVMsR0FBRyxDQUFDO1FBQzFFLE1BQU0sSUFBSSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPO2lCQUNULElBQUksQ0FBQztrQkFDSSxPQUFPO2FBQ1osQ0FBQyxDQUFDO1lBQ1QsTUFBTSxJQUFJLG1CQUFXLENBQUMsd0JBQWdCLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsSUFBOEI7UUFDekMsTUFBTSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBQSxnQkFBUSxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLHdCQUFnQixDQUFDLFlBQVksRUFDN0Isd0RBQXdELENBQ3pELENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxFQUFZLENBQUM7SUFDdEIsQ0FBQzs7QUFwY00scUNBQVUsR0FBRyxhQUFhLENBQUM7QUF1Y3BDLGtCQUFlLDBCQUEwQixDQUFDIn0=
package/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 0.2.2 - 2025-05-13
11
+ ### Added
12
+ - Check if creating customer in MP fails because it already exists and if so, store it in Medusa
13
+
14
+ ### Fixed
15
+ - Fix authorizePayment, getting the approved payment in case of multiple attempts
16
+
10
17
  ## 0.2.1 - 2025-05-12
11
18
  ### Added
12
19
  - New function to get a sanitized error message, based on the status and status_detail retuned in Mercado Pago PaymentResponse object
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nicogorga/medusa-payment-mercadopago",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Mercado Pago payment provider plugin for MedusaJS",
5
5
  "author": "Nicolas Gorga",
6
6
  "license": "MIT",
@@ -40,10 +40,10 @@ import {
40
40
  import MercadoPagoConfig, { Customer, CustomerCard, Payment, PaymentRefund } from "mercadopago";
41
41
  import { PaymentCreateRequest } from "mercadopago/dist/clients/payment/create/types";
42
42
  import { PaymentSearchResult } from "mercadopago/dist/clients/payment/search/types";
43
- import { MercadopagoOptions, MercadopagoWebhookPayload } from "../../types";
43
+ import { MercadopagoError, MercadopagoOptions, MercadopagoWebhookPayload } from "../../types";
44
44
  import { createHmac } from "crypto";
45
45
  import { Logger } from "@medusajs/medusa";
46
- import { CustomerRequestBody } from "mercadopago/dist/clients/customer/commonTypes";
46
+ import { CustomerRequestBody, CustomerResponse } from "mercadopago/dist/clients/customer/commonTypes";
47
47
  import { CustomerUpdateData } from "mercadopago/dist/clients/customer/update/types";
48
48
  import { PostStoreMercadopagoPaymentType } from "../../api/store/mercadopago/payment/validators";
49
49
  import { PaymentResponse } from "mercadopago/dist/clients/payment/commonTypes";
@@ -113,11 +113,17 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
113
113
 
114
114
  const payment = new Payment(this.client_);
115
115
  const results =
116
- (
116
+ ((
117
117
  await payment.search({
118
- options: { external_reference: paymentSessionId },
118
+ options: {
119
+ external_reference: paymentSessionId,
120
+ sort: 'date_approved',
121
+ criteria: 'desc'
122
+ },
119
123
  })
120
- )?.results ?? [];
124
+ // Ideally, this would be done in the call to Mercado Pago, but they don't expose an option
125
+ // to filter based on status
126
+ )?.results ?? []).filter(payment => payment.status === 'approved');
121
127
  if (!results.length) {
122
128
  this.logger_.warn(
123
129
  `No payment found in Mercado Pago for payment session: ${paymentSessionId}\n This could be caused by lag in Mercado Pago's system and doesn't mean the payment was not created`
@@ -153,27 +159,25 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
153
159
  async getPaymentStatus(
154
160
  input: GetPaymentStatusInput
155
161
  ): Promise<GetPaymentStatusOutput> {
156
- let status = input.data?.status as string;
157
-
158
- if (!status) {
159
- const paymentId = input.data?.id;
160
- const payment = new Payment(this.client_);
161
- const paymentData = await payment.get({ id: paymentId as string });
162
- status = paymentData.status || ""
163
- }
162
+ const paymentId = input.data?.id;
163
+ const payment = new Payment(this.client_);
164
+ const paymentData = await payment.get({ id: paymentId as string }) as unknown as Record<string, unknown>;
164
165
 
165
- switch (status) {
166
+ switch (paymentData.status) {
166
167
  case "authorized":
167
- return { status: "authorized" };
168
+ return { status: "authorized", data: paymentData };
168
169
  case "approved":
169
- return { status: "captured" };
170
+ return { status: "captured", data: paymentData };
170
171
  case "cancelled":
171
172
  case "refunded":
172
- return { status: "canceled" };
173
+ return { status: "canceled", data: paymentData };
173
174
  case "rejected":
174
- return { status: "error"}
175
+ return { status: "error", data: {
176
+ ...paymentData,
177
+ error_message: this.sanitizeErrorMessage(paymentData as unknown as PaymentResponse)
178
+ }}
175
179
  default:
176
- return { status: "pending" };
180
+ return { status: "pending", data: paymentData };
177
181
  }
178
182
  }
179
183
 
@@ -269,8 +273,10 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
269
273
  throw new MedusaError(MedusaErrorTypes.INVALID_DATA, "No customer provided while creating account holder")
270
274
  }
271
275
 
276
+ const customerClient = new Customer(this.client_);
277
+ let mercadopagoCustomer: CustomerResponse | undefined
278
+
272
279
  try {
273
- const customerClient = new Customer(this.client_);
274
280
  const body: CustomerRequestBody = {
275
281
  email: customer.email,
276
282
  first_name: customer.first_name || undefined,
@@ -278,19 +284,26 @@ class MercadopagoProviderService extends AbstractPaymentProvider<MercadopagoOpti
278
284
  date_registered: new Date().toISOString(),
279
285
  };
280
286
 
281
- const createdCustomer = await customerClient.create({
287
+ mercadopagoCustomer = await customerClient.create({
282
288
  body: body,
283
289
  requestOptions: {
284
290
  idempotencyKey: idempotency_key,
285
291
  },
286
292
  });
293
+ } catch (e) {
294
+ const error = e as MercadopagoError
287
295
 
288
- return {
289
- id: createdCustomer.id!,
290
- data: createdCustomer as unknown as Record<string, unknown>
296
+ if (!!error.cause?.find(c => c.code === '101')) {
297
+ const { results } = await customerClient.search({ options: { email: customer.email}})
298
+ mercadopagoCustomer = results![0]
299
+ } else {
300
+ throw new MedusaError(MedusaErrorTypes.UNEXPECTED_STATE, "An error occurred while trying to create a Mercado Pago customer")
291
301
  }
292
- } catch (error) {
293
- throw new MedusaError(MedusaErrorTypes.UNEXPECTED_STATE, "An error occurred while trying to create a Mercado Pago customer")
302
+ }
303
+
304
+ return {
305
+ id: mercadopagoCustomer!.id!,
306
+ data: mercadopagoCustomer as unknown as Record<string, unknown>
294
307
  }
295
308
  }
296
309
 
@@ -15,4 +15,14 @@ export type MercadopagoWebhookPayload = {
15
15
  data: {
16
16
  id: string;
17
17
  }
18
+ }
19
+
20
+ export type MercadopagoError = {
21
+ error: string
22
+ message: string
23
+ status: string
24
+ cause: {
25
+ code: string
26
+ description: string
27
+ }[] | undefined
18
28
  }