razorpay-react-checkout 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 ADDED
@@ -0,0 +1,127 @@
1
+ # Razorpay React Checkout
2
+
3
+ A TypeScript-first, SSR-safe React SDK for Razorpay with hooks and first-class Next.js support.
4
+
5
+ ## Features
6
+
7
+ - 🔒 **TypeScript First**: Fully typed options and responses.
8
+ - âš¡ **SSR Safe**: Works seamlessly with Next.js and other SSR frameworks.
9
+ - 🎣 **Hooks**: `useRazorpay` hook for easy integration.
10
+ - 📦 **Lightweight**: Minimal dependencies.
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install razorpay-react-checkout
16
+ # or
17
+ yarn add razorpay-react-checkout
18
+ # or
19
+ pnpm add razorpay-react-checkout
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ ### Using Provider (Recommended)
25
+
26
+ Wrap your application with `RazorpayProvider` to load the script globally.
27
+
28
+ ```tsx
29
+ import { RazorpayProvider } from 'razorpay-react-checkout';
30
+
31
+ const App = () => (
32
+ <RazorpayProvider>
33
+ <Checkout />
34
+ </RazorpayProvider>
35
+ );
36
+ ```
37
+
38
+ ### Using Hook
39
+
40
+ ```tsx
41
+ import { useRazorpay, RazorpayOptions } from 'razorpay-react-checkout';
42
+
43
+ const Checkout = () => {
44
+ const { isLoading, isLoaded, error, openRazorpay } = useRazorpay();
45
+
46
+ const handlePayment = () => {
47
+ const options: RazorpayOptions = {
48
+ key: 'YOUR_KEY_ID',
49
+ amount: 50000, // Amount in paise
50
+ currency: 'INR',
51
+ name: 'Acme Corp',
52
+ description: 'Test Transaction',
53
+ image: 'https://example.com/your_logo',
54
+ order_id: 'order_9A33XWu170g81s', // Generate order_id on server
55
+ handler: (response) => {
56
+ alert(response.razorpay_payment_id);
57
+ alert(response.razorpay_order_id);
58
+ alert(response.razorpay_signature);
59
+ },
60
+ prefill: {
61
+ name: 'John Doe',
62
+ email: 'youremail@example.com',
63
+ contact: '9999999999',
64
+ },
65
+ notes: {
66
+ address: 'Razorpay Corporate Office',
67
+ },
68
+ theme: {
69
+ color: '#3399cc',
70
+ },
71
+ };
72
+
73
+ const rzp = openRazorpay(options);
74
+
75
+ if (rzp) {
76
+ rzp.on('payment.failed', function (response: any) {
77
+ alert(response.error.code);
78
+ alert(response.error.description);
79
+ alert(response.error.source);
80
+ alert(response.error.step);
81
+ alert(response.error.reason);
82
+ alert(response.error.metadata.order_id);
83
+ alert(response.error.metadata.payment_id);
84
+ });
85
+ }
86
+ };
87
+
88
+ if (isLoading) {
89
+ return <div>Loading Razorpay SDK...</div>;
90
+ }
91
+
92
+ if (error) {
93
+ return <div>Error loading Razorpay SDK</div>;
94
+ }
95
+
96
+ return (
97
+ <div>
98
+ <h1>Razorpay React Checkout Example</h1>
99
+ <button onClick={handlePayment} disabled={!isLoaded}>
100
+ Pay Now
101
+ </button>
102
+ </div>
103
+ );
104
+ };
105
+
106
+ export default App;
107
+ ```
108
+
109
+ ### Next.js Usage
110
+
111
+ The SDK is SSR-safe out of the box. You can use it in your Next.js pages or components without any special configuration. The script is loaded lazily on the client side when the hook is used.
112
+
113
+ ## API
114
+
115
+ ### `useRazorpay`
116
+
117
+ Returns an object with the following properties:
118
+
119
+ - `isLoaded`: `boolean` - Indicates if the Razorpay SDK script has loaded.
120
+ - `isLoading`: `boolean` - Indicates if the Razorpay SDK script is currently loading.
121
+ - `error`: `Error | null` - Error object if the script failed to load.
122
+ - `Razorpay`: `RazorpayConstructor | null` - The raw Razorpay constructor (available on `window`).
123
+ - `openRazorpay`: `(options: RazorpayOptions) => RazorpayInstance | null` - Helper function to initialize and open the checkout.
124
+
125
+ ## License
126
+
127
+ MIT
@@ -0,0 +1,15 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { RazorpayConstructor } from '../types';
3
+ interface RazorpayContextType {
4
+ isLoaded: boolean;
5
+ isLoading: boolean;
6
+ error: Error | null;
7
+ Razorpay: RazorpayConstructor | null;
8
+ }
9
+ interface RazorpayProviderProps {
10
+ children: ReactNode;
11
+ }
12
+ export declare const RazorpayProvider: React.FC<RazorpayProviderProps>;
13
+ export declare const useRazorpayContext: () => RazorpayContextType | undefined;
14
+ export {};
15
+ //# sourceMappingURL=RazorpayProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RazorpayProvider.d.ts","sourceRoot":"","sources":["../../src/components/RazorpayProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAkD,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACtC;AAID,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAwB5D,CAAC;AAEF,eAAO,MAAM,kBAAkB,uCAE9B,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useEffect, useState } from 'react';
3
+ import { loadRazorpayScript } from '../lib/script-loader';
4
+ const RazorpayContext = createContext(undefined);
5
+ export const RazorpayProvider = ({ children }) => {
6
+ const [isLoaded, setIsLoaded] = useState(false);
7
+ const [isLoading, setIsLoading] = useState(true);
8
+ const [error, setError] = useState(null);
9
+ useEffect(() => {
10
+ loadRazorpayScript()
11
+ .then(() => {
12
+ setIsLoaded(true);
13
+ setIsLoading(false);
14
+ })
15
+ .catch((err) => {
16
+ setError(err);
17
+ setIsLoading(false);
18
+ });
19
+ }, []);
20
+ const Razorpay = typeof window !== 'undefined' ? window.Razorpay : null;
21
+ return (_jsx(RazorpayContext.Provider, { value: { isLoaded, isLoading, error, Razorpay: Razorpay || null }, children: children }));
22
+ };
23
+ export const useRazorpayContext = () => {
24
+ return useContext(RazorpayContext);
25
+ };
26
+ //# sourceMappingURL=RazorpayProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RazorpayProvider.js","sourceRoot":"","sources":["../../src/components/RazorpayProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAa,MAAM,OAAO,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAU1D,MAAM,eAAe,GAAG,aAAa,CAAkC,SAAS,CAAC,CAAC;AAMlF,MAAM,CAAC,MAAM,gBAAgB,GAAoC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,EAAE;aACjB,IAAI,CAAC,GAAG,EAAE;YACT,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE,YACxF,QAAQ,GACgB,CAC5B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,OAAO,UAAU,CAAC,eAAe,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { RazorpayOptions, RazorpayInstance } from '../types';
2
+ export declare const useRazorpay: () => {
3
+ openRazorpay: (options: RazorpayOptions) => RazorpayInstance | null;
4
+ isLoaded: boolean;
5
+ isLoading: boolean;
6
+ error: Error | null;
7
+ Razorpay: import("../types").RazorpayConstructor | null | undefined;
8
+ };
9
+ //# sourceMappingURL=useRazorpay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRazorpay.d.ts","sourceRoot":"","sources":["../../src/hooks/useRazorpay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG7D,eAAO,MAAM,WAAW;4BA6BV,eAAe,KAAG,gBAAgB,GAAG,IAAI;;;;;CActD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+ import { loadRazorpayScript } from '../lib/script-loader';
3
+ import { useRazorpayContext } from '../components/RazorpayProvider';
4
+ export const useRazorpay = () => {
5
+ const context = useRazorpayContext();
6
+ const [isLoaded, setIsLoaded] = useState(false);
7
+ const [isLoading, setIsLoading] = useState(true);
8
+ const [error, setError] = useState(null);
9
+ useEffect(() => {
10
+ if (context)
11
+ return;
12
+ loadRazorpayScript()
13
+ .then((loaded) => {
14
+ setIsLoaded(loaded);
15
+ setIsLoading(false);
16
+ })
17
+ .catch((err) => {
18
+ setError(err);
19
+ setIsLoading(false);
20
+ });
21
+ }, [context]);
22
+ const state = context || {
23
+ isLoaded,
24
+ isLoading,
25
+ error,
26
+ Razorpay: typeof window !== 'undefined' ? window.Razorpay : null,
27
+ };
28
+ const openRazorpay = useCallback((options) => {
29
+ if (!state.Razorpay) {
30
+ console.error('Razorpay SDK not loaded yet');
31
+ return null;
32
+ }
33
+ const rzp = new state.Razorpay(options);
34
+ rzp.open();
35
+ return rzp;
36
+ }, [state.Razorpay]);
37
+ return { ...state, openRazorpay };
38
+ };
39
+ //# sourceMappingURL=useRazorpay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRazorpay.js","sourceRoot":"","sources":["../../src/hooks/useRazorpay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IAErC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO;YAAE,OAAO;QAEpB,kBAAkB,EAAE;aACjB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,WAAW,CAAC,MAAM,CAAC,CAAC;YACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,MAAM,KAAK,GAAG,OAAO,IAAI;QACvB,QAAQ;QACR,SAAS;QACT,KAAK;QACL,QAAQ,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;KACjE,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,OAAwB,EAA2B,EAAE;QACpD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,OAAO,GAAG,CAAC;IACb,CAAC,EACD,CAAC,KAAK,CAAC,QAAQ,CAAC,CACjB,CAAC;IAEF,OAAO,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,CAAC;AACpC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './types';
2
+ export * from './hooks/useRazorpay';
3
+ export * from './components/RazorpayProvider';
4
+ export { loadRazorpayScript } from './lib/script-loader';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './types';
2
+ export * from './hooks/useRazorpay';
3
+ export * from './components/RazorpayProvider';
4
+ export { loadRazorpayScript } from './lib/script-loader';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const loadRazorpayScript: () => Promise<boolean>;
2
+ //# sourceMappingURL=script-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-loader.d.ts","sourceRoot":"","sources":["../../src/lib/script-loader.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,kBAAkB,QAAO,OAAO,CAAC,OAAO,CAgBpD,CAAC"}
@@ -0,0 +1,43 @@
1
+ const RAZORPAY_SCRIPT_URL = 'https://checkout.razorpay.com/v1/checkout.js';
2
+ let scriptLoaded = false;
3
+ let scriptLoadingPromise = null;
4
+ const loadScript = (retries = 3, delay = 1000) => {
5
+ return new Promise((resolve, reject) => {
6
+ const script = document.createElement('script');
7
+ script.src = RAZORPAY_SCRIPT_URL;
8
+ script.async = true;
9
+ script.onload = () => {
10
+ scriptLoaded = true;
11
+ resolve(true);
12
+ };
13
+ script.onerror = () => {
14
+ if (retries > 0) {
15
+ setTimeout(() => {
16
+ loadScript(retries - 1, delay * 2)
17
+ .then(resolve)
18
+ .catch(reject);
19
+ }, delay);
20
+ }
21
+ else {
22
+ scriptLoaded = false;
23
+ scriptLoadingPromise = null;
24
+ reject(new Error('Failed to load Razorpay SDK'));
25
+ }
26
+ };
27
+ document.body.appendChild(script);
28
+ });
29
+ };
30
+ export const loadRazorpayScript = () => {
31
+ if (typeof window === 'undefined') {
32
+ return Promise.resolve(false);
33
+ }
34
+ if (scriptLoaded) {
35
+ return Promise.resolve(true);
36
+ }
37
+ if (scriptLoadingPromise) {
38
+ return scriptLoadingPromise;
39
+ }
40
+ scriptLoadingPromise = loadScript();
41
+ return scriptLoadingPromise;
42
+ };
43
+ //# sourceMappingURL=script-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-loader.js","sourceRoot":"","sources":["../../src/lib/script-loader.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG,8CAA8C,CAAC;AAE3E,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,IAAI,oBAAoB,GAA4B,IAAI,CAAC;AAEzD,MAAM,UAAU,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,EAAoB,EAAE;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,mBAAmB,CAAC;QACjC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,YAAY,GAAG,IAAI,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;YACpB,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,UAAU,CAAC,GAAG,EAAE;oBACd,UAAU,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;yBAC/B,IAAI,CAAC,OAAO,CAAC;yBACb,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnB,CAAC,EAAE,KAAK,CAAC,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,KAAK,CAAC;gBACrB,oBAAoB,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAqB,EAAE;IACvD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,oBAAoB,GAAG,UAAU,EAAE,CAAC;IAEpC,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC"}
@@ -0,0 +1,93 @@
1
+ export interface RazorpayOptions {
2
+ key: string;
3
+ amount: number | string;
4
+ currency: string;
5
+ name?: string;
6
+ description?: string;
7
+ image?: string;
8
+ order_id?: string;
9
+ handler?: (response: RazorpayResponse) => void;
10
+ prefill?: {
11
+ name?: string;
12
+ email?: string;
13
+ contact?: string;
14
+ method?: 'card' | 'netbanking' | 'wallet' | 'emi' | 'upi';
15
+ };
16
+ notes?: Record<string, string>;
17
+ theme?: {
18
+ hide_topbar?: boolean;
19
+ color?: string;
20
+ backdrop_color?: string;
21
+ };
22
+ modal?: {
23
+ backdropclose?: boolean;
24
+ escape?: boolean;
25
+ handleback?: boolean;
26
+ confirm_close?: boolean;
27
+ ondismiss?: () => void;
28
+ animation?: boolean;
29
+ };
30
+ subscription_id?: string;
31
+ subscription_card_change?: boolean;
32
+ recurring?: boolean;
33
+ callback_url?: string;
34
+ redirect?: boolean;
35
+ customer_id?: string;
36
+ remember_customer?: boolean;
37
+ timeout?: number;
38
+ readonly?: {
39
+ contact?: boolean;
40
+ email?: boolean;
41
+ name?: boolean;
42
+ };
43
+ hidden?: {
44
+ contact?: boolean;
45
+ email?: boolean;
46
+ };
47
+ send_sms_hash?: boolean;
48
+ allow_rotation?: boolean;
49
+ retry?: {
50
+ enabled?: boolean;
51
+ max_count?: boolean;
52
+ };
53
+ config?: {
54
+ display?: {
55
+ language?: 'en' | 'ben' | 'hi' | 'mar' | 'guj' | 'tam' | 'tel';
56
+ };
57
+ };
58
+ }
59
+ export interface RazorpayResponse {
60
+ razorpay_payment_id: string;
61
+ razorpay_order_id?: string;
62
+ razorpay_signature?: string;
63
+ }
64
+ export interface RazorpayError {
65
+ code: string;
66
+ description: string;
67
+ source: string;
68
+ step: string;
69
+ reason: string;
70
+ metadata: {
71
+ order_id: string;
72
+ payment_id: string;
73
+ };
74
+ }
75
+ export interface RazorpayErrorResponse {
76
+ error: RazorpayError;
77
+ }
78
+ export interface RazorpayInstance {
79
+ open: () => void;
80
+ on: (event: string, callback: (response: RazorpayErrorResponse) => void) => void;
81
+ close: () => void;
82
+ }
83
+ export interface RazorpayConstructor {
84
+ new (options: RazorpayOptions): RazorpayInstance;
85
+ open: (options: RazorpayOptions) => void;
86
+ configure: (options: RazorpayOptions) => void;
87
+ }
88
+ declare global {
89
+ interface Window {
90
+ Razorpay?: RazorpayConstructor;
91
+ }
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "razorpay-react-checkout",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript-first, SSR-safe React SDK for Razorpay with hooks and Next.js support",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.mjs",
10
+ "require": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc --declaration",
19
+ "lint": "eslint src --fix",
20
+ "format": "prettier --write \"src/**/*.ts\" \"src/**/*.tsx\" \"test/**/*.ts\" \"test/**/*.tsx\"",
21
+ "test": "vitest",
22
+ "test:coverage": "vitest --coverage",
23
+ "prepublishOnly": "npm run build && npm run test && npm run lint",
24
+ "precommit": "lint-staged"
25
+ },
26
+ "keywords": [
27
+ "razorpay",
28
+ "react",
29
+ "sdk",
30
+ "hooks",
31
+ "ssr",
32
+ "nextjs",
33
+ "typescript"
34
+ ],
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "git+https://github.com/arsallanShahab/razorpay-react-checkout.git"
38
+ },
39
+ "author": "Arsallan Shahab",
40
+ "license": "MIT",
41
+ "bugs": {
42
+ "url": "https://github.com/arsallanShahab/razorpay-react-checkout/issues"
43
+ },
44
+ "homepage": "https://github.com/arsallanShahab/razorpay-react-checkout#readme",
45
+ "peerDependencies": {
46
+ "react": ">=16.8.0",
47
+ "react-dom": ">=16.8.0"
48
+ },
49
+ "devDependencies": {
50
+ "@testing-library/react": "^14.0.0",
51
+ "@types/node": "^25.0.3",
52
+ "@types/react": "^18.0.0",
53
+ "@types/react-dom": "^18.0.0",
54
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
55
+ "@typescript-eslint/parser": "^6.0.0",
56
+ "@vitest/coverage-v8": "^1.0.0",
57
+ "eslint": "^8.0.0",
58
+ "eslint-plugin-react": "^7.33.0",
59
+ "eslint-plugin-react-hooks": "^4.6.0",
60
+ "husky": "^8.0.0",
61
+ "jsdom": "^22.0.0",
62
+ "lint-staged": "^15.0.0",
63
+ "prettier": "^3.0.0",
64
+ "react": "^18.0.0",
65
+ "react-dom": "^18.0.0",
66
+ "typescript": "^5.0.0",
67
+ "vitest": "^1.0.0"
68
+ },
69
+ "engines": {
70
+ "node": ">=16.0.0",
71
+ "npm": ">=8.0.0"
72
+ }
73
+ }