@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.
@@ -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
+ }