@paykit-sdk/razorpay 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,167 @@
1
+ 'use strict';
2
+
3
+ var core = require('@paykit-sdk/core');
4
+
5
+ // src/utils/mapper.ts
6
+ var paymentStatusMap = {
7
+ created: "pending",
8
+ authorized: "requires_capture",
9
+ captured: "succeeded",
10
+ refunded: "succeeded",
11
+ failed: "failed"
12
+ };
13
+ var subscriptionStatusMap = {
14
+ created: "pending",
15
+ authenticated: "pending",
16
+ active: "active",
17
+ pending: "past_due",
18
+ halted: "past_due",
19
+ cancelled: "canceled",
20
+ completed: "canceled",
21
+ expired: "expired",
22
+ paused: "canceled"
23
+ };
24
+ var resolveCustomerFromEmail = (email) => email ? { email } : null;
25
+ var Payment$inboundSchema = (data, overridePaymentUrl) => {
26
+ const rawMeta = data.notes ?? {};
27
+ const metadata = core.omitInternalMetadata(rawMeta);
28
+ let itemId = null;
29
+ const paykitMeta = core.parseJSON(
30
+ rawMeta[core.PAYKIT_METADATA_KEY],
31
+ core.Schema.object({ item_id: core.Schema.string().optional() })
32
+ );
33
+ if (paykitMeta) itemId = paykitMeta.item_id ?? null;
34
+ const status = paymentStatusMap[data.status] ?? "pending";
35
+ return {
36
+ id: data.id,
37
+ amount: data.amount,
38
+ currency: data.currency,
39
+ customer: resolveCustomerFromEmail(data.email),
40
+ status,
41
+ metadata,
42
+ item_id: itemId,
43
+ requires_action: status === "pending",
44
+ payment_url: overridePaymentUrl ?? null
45
+ };
46
+ };
47
+ var Checkout$inboundSchema = (data) => {
48
+ const rawMeta = data.notes ?? {};
49
+ const metadata = core.omitInternalMetadata(rawMeta);
50
+ let itemId = "";
51
+ let quantity = 1;
52
+ let type = null;
53
+ const paykitMeta = core.parseJSON(
54
+ rawMeta[core.PAYKIT_METADATA_KEY],
55
+ core.Schema.object({
56
+ item_id: core.Schema.string().optional(),
57
+ quantity: core.Schema.number().optional(),
58
+ type: core.billingModeSchema.optional()
59
+ })
60
+ );
61
+ if (paykitMeta) {
62
+ itemId = paykitMeta.item_id ?? "";
63
+ quantity = paykitMeta.quantity ?? 1;
64
+ type = paykitMeta.type ?? null;
65
+ }
66
+ return {
67
+ id: data.id,
68
+ customer: resolveCustomerFromEmail(data.customer?.email ?? null),
69
+ payment_url: data.short_url,
70
+ metadata: Object.keys(metadata).length > 0 ? metadata : null,
71
+ session_type: type ?? "one_time",
72
+ products: [{ id: itemId, quantity }],
73
+ currency: data.currency,
74
+ amount: data.amount
75
+ };
76
+ };
77
+ var Customer$inboundSchema = (data) => {
78
+ const rawMeta = data.notes ?? {};
79
+ const metadata = core.omitInternalMetadata(rawMeta);
80
+ return {
81
+ id: data.id,
82
+ email: data.email,
83
+ name: data.name,
84
+ phone: data.contact,
85
+ metadata,
86
+ created_at: new Date(data.created_at * 1e3),
87
+ updated_at: null,
88
+ custom_fields: { gstin: data.gstin }
89
+ };
90
+ };
91
+ var Subscription$inboundSchema = (data, plan) => {
92
+ const rawMeta = data.notes ?? {};
93
+ const metadata = core.omitInternalMetadata(rawMeta);
94
+ const intervalUnitMap = {
95
+ daily: "day",
96
+ weekly: "week",
97
+ monthly: "month",
98
+ quarterly: "month",
99
+ yearly: "year"
100
+ };
101
+ const status = subscriptionStatusMap[data.status] ?? "pending";
102
+ return {
103
+ id: data.id,
104
+ customer: data.customer_id ? { id: data.customer_id } : null,
105
+ amount: plan.item.amount * data.quantity,
106
+ currency: plan.item.currency,
107
+ status,
108
+ current_period_start: data.current_start ? new Date(data.current_start * 1e3) : /* @__PURE__ */ new Date(0),
109
+ current_period_end: data.current_end ? new Date(data.current_end * 1e3) : /* @__PURE__ */ new Date(0),
110
+ item_id: plan.item.id,
111
+ billing_interval: intervalUnitMap[plan.period],
112
+ metadata: Object.keys(metadata).length > 0 ? metadata : null,
113
+ custom_fields: {
114
+ source: data.source,
115
+ total_count: data.total_count,
116
+ paid_count: data.paid_count,
117
+ remaining_count: data.remaining_count,
118
+ has_scheduled_changes: data.has_scheduled_changes
119
+ },
120
+ requires_action: status === "pending",
121
+ payment_url: data.short_url
122
+ };
123
+ };
124
+ var Refund$inboundSchema = (data) => {
125
+ const rawMeta = data.notes ?? {};
126
+ const metadata = core.omitInternalMetadata(rawMeta);
127
+ return {
128
+ id: data.id,
129
+ amount: data.amount,
130
+ currency: data.currency,
131
+ reason: null,
132
+ metadata: Object.keys(metadata).length > 0 ? metadata : null
133
+ };
134
+ };
135
+ var Invoice$inboundSchema = (data) => {
136
+ const rawMeta = data.notes ?? {};
137
+ const metadata = core.omitInternalMetadata(rawMeta);
138
+ return {
139
+ id: data.id,
140
+ customer: resolveCustomerFromEmail(data.email),
141
+ subscription_id: null,
142
+ billing_mode: "one_time",
143
+ amount_paid: data.amount,
144
+ currency: data.currency,
145
+ status: "paid",
146
+ paid_at: new Date(data.created_at * 1e3).toISOString(),
147
+ line_items: null,
148
+ metadata: Object.keys(metadata).length > 0 ? metadata : null,
149
+ // Razorpay-native fields with no PayKit core equivalent.
150
+ custom_fields: {
151
+ method: data.method,
152
+ bank: data.bank,
153
+ wallet: data.wallet,
154
+ vpa: data.vpa,
155
+ fee: data.fee,
156
+ tax: data.tax,
157
+ acquirer_data: data.acquirer_data
158
+ }
159
+ };
160
+ };
161
+
162
+ exports.Checkout$inboundSchema = Checkout$inboundSchema;
163
+ exports.Customer$inboundSchema = Customer$inboundSchema;
164
+ exports.Invoice$inboundSchema = Invoice$inboundSchema;
165
+ exports.Payment$inboundSchema = Payment$inboundSchema;
166
+ exports.Refund$inboundSchema = Refund$inboundSchema;
167
+ exports.Subscription$inboundSchema = Subscription$inboundSchema;
@@ -0,0 +1,160 @@
1
+ import { omitInternalMetadata, parseJSON, PAYKIT_METADATA_KEY, Schema, billingModeSchema } from '@paykit-sdk/core';
2
+
3
+ // src/utils/mapper.ts
4
+ var paymentStatusMap = {
5
+ created: "pending",
6
+ authorized: "requires_capture",
7
+ captured: "succeeded",
8
+ refunded: "succeeded",
9
+ failed: "failed"
10
+ };
11
+ var subscriptionStatusMap = {
12
+ created: "pending",
13
+ authenticated: "pending",
14
+ active: "active",
15
+ pending: "past_due",
16
+ halted: "past_due",
17
+ cancelled: "canceled",
18
+ completed: "canceled",
19
+ expired: "expired",
20
+ paused: "canceled"
21
+ };
22
+ var resolveCustomerFromEmail = (email) => email ? { email } : null;
23
+ var Payment$inboundSchema = (data, overridePaymentUrl) => {
24
+ const rawMeta = data.notes ?? {};
25
+ const metadata = omitInternalMetadata(rawMeta);
26
+ let itemId = null;
27
+ const paykitMeta = parseJSON(
28
+ rawMeta[PAYKIT_METADATA_KEY],
29
+ Schema.object({ item_id: Schema.string().optional() })
30
+ );
31
+ if (paykitMeta) itemId = paykitMeta.item_id ?? null;
32
+ const status = paymentStatusMap[data.status] ?? "pending";
33
+ return {
34
+ id: data.id,
35
+ amount: data.amount,
36
+ currency: data.currency,
37
+ customer: resolveCustomerFromEmail(data.email),
38
+ status,
39
+ metadata,
40
+ item_id: itemId,
41
+ requires_action: status === "pending",
42
+ payment_url: overridePaymentUrl ?? null
43
+ };
44
+ };
45
+ var Checkout$inboundSchema = (data) => {
46
+ const rawMeta = data.notes ?? {};
47
+ const metadata = omitInternalMetadata(rawMeta);
48
+ let itemId = "";
49
+ let quantity = 1;
50
+ let type = null;
51
+ const paykitMeta = parseJSON(
52
+ rawMeta[PAYKIT_METADATA_KEY],
53
+ Schema.object({
54
+ item_id: Schema.string().optional(),
55
+ quantity: Schema.number().optional(),
56
+ type: billingModeSchema.optional()
57
+ })
58
+ );
59
+ if (paykitMeta) {
60
+ itemId = paykitMeta.item_id ?? "";
61
+ quantity = paykitMeta.quantity ?? 1;
62
+ type = paykitMeta.type ?? null;
63
+ }
64
+ return {
65
+ id: data.id,
66
+ customer: resolveCustomerFromEmail(data.customer?.email ?? null),
67
+ payment_url: data.short_url,
68
+ metadata: Object.keys(metadata).length > 0 ? metadata : null,
69
+ session_type: type ?? "one_time",
70
+ products: [{ id: itemId, quantity }],
71
+ currency: data.currency,
72
+ amount: data.amount
73
+ };
74
+ };
75
+ var Customer$inboundSchema = (data) => {
76
+ const rawMeta = data.notes ?? {};
77
+ const metadata = omitInternalMetadata(rawMeta);
78
+ return {
79
+ id: data.id,
80
+ email: data.email,
81
+ name: data.name,
82
+ phone: data.contact,
83
+ metadata,
84
+ created_at: new Date(data.created_at * 1e3),
85
+ updated_at: null,
86
+ custom_fields: { gstin: data.gstin }
87
+ };
88
+ };
89
+ var Subscription$inboundSchema = (data, plan) => {
90
+ const rawMeta = data.notes ?? {};
91
+ const metadata = omitInternalMetadata(rawMeta);
92
+ const intervalUnitMap = {
93
+ daily: "day",
94
+ weekly: "week",
95
+ monthly: "month",
96
+ quarterly: "month",
97
+ yearly: "year"
98
+ };
99
+ const status = subscriptionStatusMap[data.status] ?? "pending";
100
+ return {
101
+ id: data.id,
102
+ customer: data.customer_id ? { id: data.customer_id } : null,
103
+ amount: plan.item.amount * data.quantity,
104
+ currency: plan.item.currency,
105
+ status,
106
+ current_period_start: data.current_start ? new Date(data.current_start * 1e3) : /* @__PURE__ */ new Date(0),
107
+ current_period_end: data.current_end ? new Date(data.current_end * 1e3) : /* @__PURE__ */ new Date(0),
108
+ item_id: plan.item.id,
109
+ billing_interval: intervalUnitMap[plan.period],
110
+ metadata: Object.keys(metadata).length > 0 ? metadata : null,
111
+ custom_fields: {
112
+ source: data.source,
113
+ total_count: data.total_count,
114
+ paid_count: data.paid_count,
115
+ remaining_count: data.remaining_count,
116
+ has_scheduled_changes: data.has_scheduled_changes
117
+ },
118
+ requires_action: status === "pending",
119
+ payment_url: data.short_url
120
+ };
121
+ };
122
+ var Refund$inboundSchema = (data) => {
123
+ const rawMeta = data.notes ?? {};
124
+ const metadata = omitInternalMetadata(rawMeta);
125
+ return {
126
+ id: data.id,
127
+ amount: data.amount,
128
+ currency: data.currency,
129
+ reason: null,
130
+ metadata: Object.keys(metadata).length > 0 ? metadata : null
131
+ };
132
+ };
133
+ var Invoice$inboundSchema = (data) => {
134
+ const rawMeta = data.notes ?? {};
135
+ const metadata = omitInternalMetadata(rawMeta);
136
+ return {
137
+ id: data.id,
138
+ customer: resolveCustomerFromEmail(data.email),
139
+ subscription_id: null,
140
+ billing_mode: "one_time",
141
+ amount_paid: data.amount,
142
+ currency: data.currency,
143
+ status: "paid",
144
+ paid_at: new Date(data.created_at * 1e3).toISOString(),
145
+ line_items: null,
146
+ metadata: Object.keys(metadata).length > 0 ? metadata : null,
147
+ // Razorpay-native fields with no PayKit core equivalent.
148
+ custom_fields: {
149
+ method: data.method,
150
+ bank: data.bank,
151
+ wallet: data.wallet,
152
+ vpa: data.vpa,
153
+ fee: data.fee,
154
+ tax: data.tax,
155
+ acquirer_data: data.acquirer_data
156
+ }
157
+ };
158
+ };
159
+
160
+ 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/razorpay",
3
+ "version": "1.0.0",
4
+ "description": "Razorpay 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
+ "razorpay",
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/razorpay/src",
44
+ "typecheck": "tsc --noEmit"
45
+ }
46
+ }