@paykit-sdk/mercadopago 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +178 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +4932 -0
- package/dist/index.mjs +4928 -0
- package/dist/mercadopago-provider.d.mts +54 -0
- package/dist/mercadopago-provider.d.ts +54 -0
- package/dist/mercadopago-provider.js +4914 -0
- package/dist/mercadopago-provider.mjs +4912 -0
- package/dist/schema.d.mts +624 -0
- package/dist/schema.d.ts +624 -0
- package/dist/schema.js +2 -0
- package/dist/schema.mjs +1 -0
- package/dist/utils/mapper.d.mts +44 -0
- package/dist/utils/mapper.d.ts +44 -0
- package/dist/utils/mapper.js +169 -0
- package/dist/utils/mapper.mjs +162 -0
- package/package.json +46 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@paykit-sdk/core');
|
|
4
|
+
|
|
5
|
+
// src/utils/mapper.ts
|
|
6
|
+
var paymentStatusMap = {
|
|
7
|
+
pending: "pending",
|
|
8
|
+
in_process: "processing",
|
|
9
|
+
in_mediation: "processing",
|
|
10
|
+
authorized: "requires_capture",
|
|
11
|
+
approved: "succeeded",
|
|
12
|
+
refunded: "succeeded",
|
|
13
|
+
charged_back: "succeeded",
|
|
14
|
+
rejected: "failed",
|
|
15
|
+
cancelled: "canceled"
|
|
16
|
+
};
|
|
17
|
+
var subscriptionStatusMap = {
|
|
18
|
+
pending: "pending",
|
|
19
|
+
authorized: "active",
|
|
20
|
+
paused: "past_due",
|
|
21
|
+
cancelled: "canceled"
|
|
22
|
+
};
|
|
23
|
+
var resolveCustomerFromEmail = (email) => email ? { email } : null;
|
|
24
|
+
var Payment$inboundSchema = (data, overridePaymentUrl) => {
|
|
25
|
+
const rawMeta = data.metadata ?? {};
|
|
26
|
+
const metadata = core.omitInternalMetadata(rawMeta);
|
|
27
|
+
let itemId = null;
|
|
28
|
+
const paykitMeta = core.parseJSON(
|
|
29
|
+
rawMeta[core.PAYKIT_METADATA_KEY],
|
|
30
|
+
core.Schema.object({ item_id: core.Schema.string().optional() })
|
|
31
|
+
);
|
|
32
|
+
if (paykitMeta) itemId = paykitMeta.item_id ?? null;
|
|
33
|
+
const status = paymentStatusMap[data.status] ?? "pending";
|
|
34
|
+
return {
|
|
35
|
+
id: String(data.id),
|
|
36
|
+
amount: data.transaction_amount,
|
|
37
|
+
currency: data.currency_id,
|
|
38
|
+
customer: resolveCustomerFromEmail(data.payer?.email),
|
|
39
|
+
status,
|
|
40
|
+
metadata,
|
|
41
|
+
item_id: itemId,
|
|
42
|
+
requires_action: status === "pending",
|
|
43
|
+
payment_url: overridePaymentUrl ?? null
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
var Checkout$inboundSchema = (data) => {
|
|
47
|
+
const rawMeta = data.metadata ?? {};
|
|
48
|
+
const metadata = core.omitInternalMetadata(rawMeta);
|
|
49
|
+
let itemId = "";
|
|
50
|
+
let quantity = 1;
|
|
51
|
+
let type = null;
|
|
52
|
+
const paykitMeta = core.parseJSON(
|
|
53
|
+
rawMeta[core.PAYKIT_METADATA_KEY],
|
|
54
|
+
core.Schema.object({
|
|
55
|
+
item_id: core.Schema.string().optional(),
|
|
56
|
+
quantity: core.Schema.number().optional(),
|
|
57
|
+
type: core.billingModeSchema.optional()
|
|
58
|
+
})
|
|
59
|
+
);
|
|
60
|
+
if (paykitMeta) {
|
|
61
|
+
itemId = paykitMeta.item_id ?? "";
|
|
62
|
+
quantity = paykitMeta.quantity ?? 1;
|
|
63
|
+
type = paykitMeta.type ?? null;
|
|
64
|
+
}
|
|
65
|
+
const firstItem = data.items[0];
|
|
66
|
+
const amount = firstItem ? firstItem.unit_price * firstItem.quantity : 0;
|
|
67
|
+
return {
|
|
68
|
+
id: data.id,
|
|
69
|
+
customer: resolveCustomerFromEmail(data.payer?.email),
|
|
70
|
+
payment_url: data.init_point ?? data.sandbox_init_point ?? "",
|
|
71
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : null,
|
|
72
|
+
session_type: type ?? "one_time",
|
|
73
|
+
products: [{ id: itemId, quantity }],
|
|
74
|
+
currency: firstItem?.currency_id ?? "ARS",
|
|
75
|
+
amount
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
var Customer$inboundSchema = (data) => {
|
|
79
|
+
const rawMeta = data.metadata ?? {};
|
|
80
|
+
const metadata = core.omitInternalMetadata(rawMeta);
|
|
81
|
+
const name = [data.first_name, data.last_name].filter(Boolean).join(" ");
|
|
82
|
+
return {
|
|
83
|
+
id: data.id,
|
|
84
|
+
email: data.email,
|
|
85
|
+
name,
|
|
86
|
+
phone: data.phone?.number ?? null,
|
|
87
|
+
metadata,
|
|
88
|
+
created_at: data.date_created ? new Date(data.date_created) : /* @__PURE__ */ new Date(0),
|
|
89
|
+
updated_at: data.date_last_updated ? new Date(data.date_last_updated) : null,
|
|
90
|
+
// Mercado Pago-native fields with no PayKit core equivalent.
|
|
91
|
+
custom_fields: { identification: data.identification ?? null }
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
var Subscription$inboundSchema = (data) => {
|
|
95
|
+
let metadata = null;
|
|
96
|
+
if (data.external_reference) {
|
|
97
|
+
const parsed = core.parseJSON(
|
|
98
|
+
data.external_reference,
|
|
99
|
+
core.Schema.record(core.Schema.string(), core.Schema.string())
|
|
100
|
+
);
|
|
101
|
+
if (parsed) metadata = parsed;
|
|
102
|
+
}
|
|
103
|
+
const intervalUnitMap = {
|
|
104
|
+
days: "day",
|
|
105
|
+
weeks: "week",
|
|
106
|
+
months: "month",
|
|
107
|
+
years: "year"
|
|
108
|
+
};
|
|
109
|
+
const status = subscriptionStatusMap[data.status] ?? "pending";
|
|
110
|
+
return {
|
|
111
|
+
id: data.id,
|
|
112
|
+
customer: resolveCustomerFromEmail(data.payer_email),
|
|
113
|
+
amount: data.auto_recurring.transaction_amount ?? 0,
|
|
114
|
+
currency: data.auto_recurring.currency_id,
|
|
115
|
+
status,
|
|
116
|
+
current_period_start: data.next_payment_date ? new Date(data.next_payment_date) : /* @__PURE__ */ new Date(0),
|
|
117
|
+
current_period_end: data.next_payment_date ? new Date(data.next_payment_date) : /* @__PURE__ */ new Date(0),
|
|
118
|
+
item_id: data.preapproval_plan_id ?? "",
|
|
119
|
+
billing_interval: intervalUnitMap[data.auto_recurring.frequency_type] ?? "month",
|
|
120
|
+
metadata,
|
|
121
|
+
// Mercado Pago-native fields with no PayKit core equivalent.
|
|
122
|
+
custom_fields: {
|
|
123
|
+
payment_method_id: data.payment_method_id ?? null,
|
|
124
|
+
first_invoice_offset: data.first_invoice_offset ?? null
|
|
125
|
+
},
|
|
126
|
+
requires_action: status === "pending",
|
|
127
|
+
payment_url: data.init_point ?? data.sandbox_init_point ?? null
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
var Refund$inboundSchema = (data, context) => {
|
|
131
|
+
const rawMeta = data.metadata ?? {};
|
|
132
|
+
const metadata = core.omitInternalMetadata(rawMeta);
|
|
133
|
+
return {
|
|
134
|
+
id: String(data.id),
|
|
135
|
+
amount: data.amount,
|
|
136
|
+
currency: context.currency,
|
|
137
|
+
reason: data.reason ?? context.reason,
|
|
138
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : null
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
var Invoice$inboundSchema = (data) => {
|
|
142
|
+
const rawMeta = data.metadata ?? {};
|
|
143
|
+
const metadata = core.omitInternalMetadata(rawMeta);
|
|
144
|
+
return {
|
|
145
|
+
id: String(data.id),
|
|
146
|
+
customer: resolveCustomerFromEmail(data.payer?.email),
|
|
147
|
+
subscription_id: data.point_of_interaction?.transaction_data?.subscription_id ?? null,
|
|
148
|
+
billing_mode: data.point_of_interaction?.transaction_data?.subscription_id ? "recurring" : "one_time",
|
|
149
|
+
amount_paid: data.transaction_amount,
|
|
150
|
+
currency: data.currency_id,
|
|
151
|
+
status: "paid",
|
|
152
|
+
paid_at: data.date_approved ?? data.date_created ?? null,
|
|
153
|
+
line_items: null,
|
|
154
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : null,
|
|
155
|
+
// Mercado Pago-native fields with no PayKit core equivalent.
|
|
156
|
+
custom_fields: {
|
|
157
|
+
payment_method_id: data.payment_method_id ?? null,
|
|
158
|
+
payment_type_id: data.payment_type_id ?? null,
|
|
159
|
+
installments: data.installments ?? null
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
exports.Checkout$inboundSchema = Checkout$inboundSchema;
|
|
165
|
+
exports.Customer$inboundSchema = Customer$inboundSchema;
|
|
166
|
+
exports.Invoice$inboundSchema = Invoice$inboundSchema;
|
|
167
|
+
exports.Payment$inboundSchema = Payment$inboundSchema;
|
|
168
|
+
exports.Refund$inboundSchema = Refund$inboundSchema;
|
|
169
|
+
exports.Subscription$inboundSchema = Subscription$inboundSchema;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { omitInternalMetadata, parseJSON, PAYKIT_METADATA_KEY, Schema, billingModeSchema } from '@paykit-sdk/core';
|
|
2
|
+
|
|
3
|
+
// src/utils/mapper.ts
|
|
4
|
+
var paymentStatusMap = {
|
|
5
|
+
pending: "pending",
|
|
6
|
+
in_process: "processing",
|
|
7
|
+
in_mediation: "processing",
|
|
8
|
+
authorized: "requires_capture",
|
|
9
|
+
approved: "succeeded",
|
|
10
|
+
refunded: "succeeded",
|
|
11
|
+
charged_back: "succeeded",
|
|
12
|
+
rejected: "failed",
|
|
13
|
+
cancelled: "canceled"
|
|
14
|
+
};
|
|
15
|
+
var subscriptionStatusMap = {
|
|
16
|
+
pending: "pending",
|
|
17
|
+
authorized: "active",
|
|
18
|
+
paused: "past_due",
|
|
19
|
+
cancelled: "canceled"
|
|
20
|
+
};
|
|
21
|
+
var resolveCustomerFromEmail = (email) => email ? { email } : null;
|
|
22
|
+
var Payment$inboundSchema = (data, overridePaymentUrl) => {
|
|
23
|
+
const rawMeta = data.metadata ?? {};
|
|
24
|
+
const metadata = omitInternalMetadata(rawMeta);
|
|
25
|
+
let itemId = null;
|
|
26
|
+
const paykitMeta = parseJSON(
|
|
27
|
+
rawMeta[PAYKIT_METADATA_KEY],
|
|
28
|
+
Schema.object({ item_id: Schema.string().optional() })
|
|
29
|
+
);
|
|
30
|
+
if (paykitMeta) itemId = paykitMeta.item_id ?? null;
|
|
31
|
+
const status = paymentStatusMap[data.status] ?? "pending";
|
|
32
|
+
return {
|
|
33
|
+
id: String(data.id),
|
|
34
|
+
amount: data.transaction_amount,
|
|
35
|
+
currency: data.currency_id,
|
|
36
|
+
customer: resolveCustomerFromEmail(data.payer?.email),
|
|
37
|
+
status,
|
|
38
|
+
metadata,
|
|
39
|
+
item_id: itemId,
|
|
40
|
+
requires_action: status === "pending",
|
|
41
|
+
payment_url: overridePaymentUrl ?? null
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
var Checkout$inboundSchema = (data) => {
|
|
45
|
+
const rawMeta = data.metadata ?? {};
|
|
46
|
+
const metadata = omitInternalMetadata(rawMeta);
|
|
47
|
+
let itemId = "";
|
|
48
|
+
let quantity = 1;
|
|
49
|
+
let type = null;
|
|
50
|
+
const paykitMeta = parseJSON(
|
|
51
|
+
rawMeta[PAYKIT_METADATA_KEY],
|
|
52
|
+
Schema.object({
|
|
53
|
+
item_id: Schema.string().optional(),
|
|
54
|
+
quantity: Schema.number().optional(),
|
|
55
|
+
type: billingModeSchema.optional()
|
|
56
|
+
})
|
|
57
|
+
);
|
|
58
|
+
if (paykitMeta) {
|
|
59
|
+
itemId = paykitMeta.item_id ?? "";
|
|
60
|
+
quantity = paykitMeta.quantity ?? 1;
|
|
61
|
+
type = paykitMeta.type ?? null;
|
|
62
|
+
}
|
|
63
|
+
const firstItem = data.items[0];
|
|
64
|
+
const amount = firstItem ? firstItem.unit_price * firstItem.quantity : 0;
|
|
65
|
+
return {
|
|
66
|
+
id: data.id,
|
|
67
|
+
customer: resolveCustomerFromEmail(data.payer?.email),
|
|
68
|
+
payment_url: data.init_point ?? data.sandbox_init_point ?? "",
|
|
69
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : null,
|
|
70
|
+
session_type: type ?? "one_time",
|
|
71
|
+
products: [{ id: itemId, quantity }],
|
|
72
|
+
currency: firstItem?.currency_id ?? "ARS",
|
|
73
|
+
amount
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
var Customer$inboundSchema = (data) => {
|
|
77
|
+
const rawMeta = data.metadata ?? {};
|
|
78
|
+
const metadata = omitInternalMetadata(rawMeta);
|
|
79
|
+
const name = [data.first_name, data.last_name].filter(Boolean).join(" ");
|
|
80
|
+
return {
|
|
81
|
+
id: data.id,
|
|
82
|
+
email: data.email,
|
|
83
|
+
name,
|
|
84
|
+
phone: data.phone?.number ?? null,
|
|
85
|
+
metadata,
|
|
86
|
+
created_at: data.date_created ? new Date(data.date_created) : /* @__PURE__ */ new Date(0),
|
|
87
|
+
updated_at: data.date_last_updated ? new Date(data.date_last_updated) : null,
|
|
88
|
+
// Mercado Pago-native fields with no PayKit core equivalent.
|
|
89
|
+
custom_fields: { identification: data.identification ?? null }
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
var Subscription$inboundSchema = (data) => {
|
|
93
|
+
let metadata = null;
|
|
94
|
+
if (data.external_reference) {
|
|
95
|
+
const parsed = parseJSON(
|
|
96
|
+
data.external_reference,
|
|
97
|
+
Schema.record(Schema.string(), Schema.string())
|
|
98
|
+
);
|
|
99
|
+
if (parsed) metadata = parsed;
|
|
100
|
+
}
|
|
101
|
+
const intervalUnitMap = {
|
|
102
|
+
days: "day",
|
|
103
|
+
weeks: "week",
|
|
104
|
+
months: "month",
|
|
105
|
+
years: "year"
|
|
106
|
+
};
|
|
107
|
+
const status = subscriptionStatusMap[data.status] ?? "pending";
|
|
108
|
+
return {
|
|
109
|
+
id: data.id,
|
|
110
|
+
customer: resolveCustomerFromEmail(data.payer_email),
|
|
111
|
+
amount: data.auto_recurring.transaction_amount ?? 0,
|
|
112
|
+
currency: data.auto_recurring.currency_id,
|
|
113
|
+
status,
|
|
114
|
+
current_period_start: data.next_payment_date ? new Date(data.next_payment_date) : /* @__PURE__ */ new Date(0),
|
|
115
|
+
current_period_end: data.next_payment_date ? new Date(data.next_payment_date) : /* @__PURE__ */ new Date(0),
|
|
116
|
+
item_id: data.preapproval_plan_id ?? "",
|
|
117
|
+
billing_interval: intervalUnitMap[data.auto_recurring.frequency_type] ?? "month",
|
|
118
|
+
metadata,
|
|
119
|
+
// Mercado Pago-native fields with no PayKit core equivalent.
|
|
120
|
+
custom_fields: {
|
|
121
|
+
payment_method_id: data.payment_method_id ?? null,
|
|
122
|
+
first_invoice_offset: data.first_invoice_offset ?? null
|
|
123
|
+
},
|
|
124
|
+
requires_action: status === "pending",
|
|
125
|
+
payment_url: data.init_point ?? data.sandbox_init_point ?? null
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
var Refund$inboundSchema = (data, context) => {
|
|
129
|
+
const rawMeta = data.metadata ?? {};
|
|
130
|
+
const metadata = omitInternalMetadata(rawMeta);
|
|
131
|
+
return {
|
|
132
|
+
id: String(data.id),
|
|
133
|
+
amount: data.amount,
|
|
134
|
+
currency: context.currency,
|
|
135
|
+
reason: data.reason ?? context.reason,
|
|
136
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : null
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
var Invoice$inboundSchema = (data) => {
|
|
140
|
+
const rawMeta = data.metadata ?? {};
|
|
141
|
+
const metadata = omitInternalMetadata(rawMeta);
|
|
142
|
+
return {
|
|
143
|
+
id: String(data.id),
|
|
144
|
+
customer: resolveCustomerFromEmail(data.payer?.email),
|
|
145
|
+
subscription_id: data.point_of_interaction?.transaction_data?.subscription_id ?? null,
|
|
146
|
+
billing_mode: data.point_of_interaction?.transaction_data?.subscription_id ? "recurring" : "one_time",
|
|
147
|
+
amount_paid: data.transaction_amount,
|
|
148
|
+
currency: data.currency_id,
|
|
149
|
+
status: "paid",
|
|
150
|
+
paid_at: data.date_approved ?? data.date_created ?? null,
|
|
151
|
+
line_items: null,
|
|
152
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : null,
|
|
153
|
+
// Mercado Pago-native fields with no PayKit core equivalent.
|
|
154
|
+
custom_fields: {
|
|
155
|
+
payment_method_id: data.payment_method_id ?? null,
|
|
156
|
+
payment_type_id: data.payment_type_id ?? null,
|
|
157
|
+
installments: data.installments ?? null
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export { Checkout$inboundSchema, Customer$inboundSchema, Invoice$inboundSchema, Payment$inboundSchema, Refund$inboundSchema, Subscription$inboundSchema };
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@paykit-sdk/mercadopago",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Mercado Pago provider for PayKit",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.esm.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"paykit": {
|
|
12
|
+
"type": "provider"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"mercadopago",
|
|
16
|
+
"paykit",
|
|
17
|
+
"payment",
|
|
18
|
+
"typescript"
|
|
19
|
+
],
|
|
20
|
+
"author": "Emmanuel Odii",
|
|
21
|
+
"license": "ISC",
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"@paykit-sdk/core": "^1.2.3"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"tsup": "^8.5.0",
|
|
27
|
+
"typescript": "^5.9.2",
|
|
28
|
+
"zod": "^3.24.2",
|
|
29
|
+
"@paykit-sdk/core": "1.3.1"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/usepaykit/paykit-sdk.git"
|
|
37
|
+
},
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/usepaykit/paykit-sdk/issues"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsup",
|
|
43
|
+
"test": "vitest run --config ../../vitest.config.ts packages/mercadopago/src",
|
|
44
|
+
"typecheck": "tsc --noEmit"
|
|
45
|
+
}
|
|
46
|
+
}
|