razorpay-expo 1.0.1 → 1.0.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.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- var j=Object.create;var{getPrototypeOf:y,defineProperty:x,getOwnPropertyNames:D}=Object;var p=Object.prototype.hasOwnProperty;var h=(f,d,g)=>{g=f!=null?j(y(f)):{};let _=d||!f||!f.__esModule?x(g,"default",{value:f,enumerable:!0}):g;for(let T of D(f))if(!p.call(_,T))x(_,T,{get:()=>f[T],enumerable:!0});return _};var Z=(f,d)=>()=>(d||f((d={exports:{}}).exports,d),d.exports);var F=((f)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(f,{get:(d,g)=>(typeof require<"u"?require:d)[g]}):f)(function(f){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+f+'" is not supported')});var H=Z((s,J)=>{function C(f){return f&&f.__esModule?f:{default:f}}J.exports=C,J.exports.__esModule=!0,J.exports.default=J.exports});var m=Z((N)=>{Object.defineProperty(N,"__esModule",{value:!0});N.default=void 0;var k=F("react-native"),u=k.StyleSheet.create({container:{flex:1,overflow:"hidden"},loadingOrErrorView:{position:"absolute",flex:1,justifyContent:"center",alignItems:"center",height:"100%",width:"100%",backgroundColor:"white"},loadingProgressBar:{height:20},errorText:{fontSize:14,textAlign:"center",marginBottom:2},errorTextTitle:{fontSize:15,fontWeight:"500",marginBottom:10},webView:{backgroundColor:"#ffffff"},flexStart:{alignSelf:"flex-start"},colorRed:{color:"red"}}),e=N.default=u});import*as l from"react";import*as $ from"react/jsx-runtime";var w=Z((U)=>{var A=H();Object.defineProperty(U,"__esModule",{value:!0});U.default=U.WebView=void 0;var df=A(l),q=F("react-native"),z=A(m()),V=U.WebView=function(){return $.jsx(q.View,{style:z.default.flexStart,children:$.jsx(q.Text,{style:z.default.colorRed,children:"React Native WebView does not support this platform."})})},gf=U.default=V});import{createContext as t,useContext as c,useState as L}from"react";import{StyleSheet as I,View as S,ActivityIndicator as n,Linking as o,Modal as i}from"react-native";var G=h(w(),1);import{jsxDEV as K}from"react/jsx-dev-runtime";var R=({options:f,onSuccess:d,onFailure:g,onClose:_})=>{let{handler:T,...M}=f,Y=`
1
+ import{createContext as z,useContext as I,useState as L}from"react";import{StyleSheet as P,View as q,ActivityIndicator as W,Linking as A,Modal as O}from"react-native";import{WebView as R}from"react-native-webview";import{jsxDEV as Y}from"react/jsx-dev-runtime";var F=({options:B,onSuccess:_,onFailure:Q,onClose:U})=>{let{handler:N,...J}=B,G=`
2
2
  <html>
3
3
  <head>
4
4
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -10,7 +10,7 @@ var j=Object.create;var{getPrototypeOf:y,defineProperty:x,getOwnPropertyNames:D}
10
10
  <script src="https://checkout.razorpay.com/v1/checkout.js"></script>
11
11
  <script>
12
12
  // 1. Parse the options passed from React Native
13
- var options = ${JSON.stringify(M)};
13
+ var options = ${JSON.stringify(J)};
14
14
 
15
15
  // 2. Attach the Success Handler
16
16
  options.handler = function (response){
@@ -44,6 +44,4 @@ var j=Object.create;var{getPrototypeOf:y,defineProperty:x,getOwnPropertyNames:D}
44
44
  </script>
45
45
  </body>
46
46
  </html>
47
- `,Q=(r)=>{let B=JSON.parse(r.nativeEvent.data);if(B.type==="PAYMENT_SUCCESS")d(B.data);else if(B.type==="PAYMENT_FAILED")g(B.error);else if(B.type==="PAYMENT_CLOSED")_()},P=(r)=>{let{url:B}=r;if(!B.startsWith("http")&&!B.startsWith("https")&&!B.startsWith("about:blank"))return o.openURL(B).catch((E)=>{console.error("Couldn't open UPI app",E)}),!1;return!0};return K(i,{visible:!0,transparent:!0,animationType:"slide",onRequestClose:_,children:K(S,{style:{...I.absoluteFillObject,zIndex:1000,backgroundColor:"rgba(0,0,0,0.5)"},children:K(G.default,{originWhitelist:["*","http://*","https://*","upi://*","tez://*","phonepe://*"],source:{html:Y},onMessage:Q,onShouldStartLoadWithRequest:P,javaScriptEnabled:!0,style:{flex:1,backgroundColor:"transparent"},startInLoadingState:!0,renderLoading:()=>K(S,{style:{flex:1,justifyContent:"center",alignItems:"center",backgroundColor:"transparent",zIndex:1001,...I.absoluteFillObject},children:K(n,{size:"large",color:f.theme?.color||"#3399cc"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as W}from"react/jsx-dev-runtime";var v=t(void 0),Yf=({children:f})=>{let[d,g]=L(!1),[_,T]=L(null),[M,X]=L(null),Y=(P,r)=>{T(P),X(r),g(!0)},Q=()=>{if(g(!1),M?.onClose)M.onClose();X(null)};return W(v.Provider,{value:{openCheckout:Y,closeCheckout:Q},children:[f,d&&_&&M&&W(R,{options:_,onSuccess:(P)=>{M.onSuccess(P),g(!1)},onFailure:(P)=>{M.onFailure(P.error),g(!1)},onClose:()=>{Q()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},Zf=()=>{let f=c(v);if(!f)throw Error("useRazorpay must be used within a RazorpayProvider");return f};export{Zf as useRazorpay,Yf as RazorpayProvider,R as RazorpayCheckout};
48
-
49
- //# debugId=74A338E7CE466FDB64756E2164756E21
47
+ `,Z=(X)=>{let f=JSON.parse(X.nativeEvent.data);if(f.type==="PAYMENT_SUCCESS")_(f.data);else if(f.type==="PAYMENT_FAILED")Q(f.error);else if(f.type==="PAYMENT_CLOSED")U()},K=(X)=>{let{url:f}=X;if(!f.startsWith("http")&&!f.startsWith("https")&&!f.startsWith("about:blank"))return A.openURL(f).catch((T)=>{console.error("Couldn't open UPI app",T)}),!1;return!0};return Y(O,{visible:!0,transparent:!0,animationType:"slide",onRequestClose:U,children:Y(q,{style:{...P.absoluteFillObject,zIndex:1000,backgroundColor:"rgba(0,0,0,0.5)"},children:Y(R,{originWhitelist:["*","http://*","https://*","upi://*","tez://*","phonepe://*"],source:{html:G},onMessage:Z,onShouldStartLoadWithRequest:K,javaScriptEnabled:!0,style:{flex:1,backgroundColor:"transparent"},startInLoadingState:!0,renderLoading:()=>Y(q,{style:{flex:1,justifyContent:"center",alignItems:"center",backgroundColor:"transparent",zIndex:1001,...P.absoluteFillObject},children:Y(W,{size:"large",color:B.theme?.color||"#3399cc"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as H}from"react/jsx-dev-runtime";var M=z(void 0),y=({children:B})=>{let[_,Q]=L(!1),[U,N]=L(null),[J,$]=L(null),G=(K,X)=>{N(K),$(X),Q(!0)},Z=()=>{if(Q(!1),J?.onClose)J.onClose();$(null)};return H(M.Provider,{value:{openCheckout:G,closeCheckout:Z},children:[B,_&&U&&J&&H(F,{options:U,onSuccess:(K)=>{J.onSuccess(K),Q(!1)},onFailure:(K)=>{J.onFailure(K.error),Q(!1)},onClose:()=>{Z()}},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},x=()=>{let B=I(M);if(!B)throw Error("useRazorpay must be used within a RazorpayProvider");return B};export{x as useRazorpay,y as RazorpayProvider,F as RazorpayCheckout};
package/package.json CHANGED
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "name": "razorpay-expo",
3
3
  "type": "module",
4
- "version": "1.0.1",
5
- "main": "./dist/index.cjs",
4
+ "version": "1.0.2",
6
5
  "module": "./dist/index.js",
7
6
  "types": "./dist/index.d.ts",
8
7
  "license": "MIT",
@@ -12,6 +11,17 @@
12
11
  "default": "./dist/index.js"
13
12
  }
14
13
  },
14
+ "keywords": [
15
+ "razorpay",
16
+ "react-native",
17
+ "expo",
18
+ "payment",
19
+ "checkout",
20
+ "razorpay-expo",
21
+ "expo-razorpay",
22
+ "react-native-razorpay",
23
+ "react-native-razorpay-expo"
24
+ ],
15
25
  "scripts": {
16
26
  "build": "bun ./builder.ts && bun run generate-types",
17
27
  "prepublishOnly": "bun run build",
@@ -34,13 +44,13 @@
34
44
  "devDependencies": {
35
45
  "@types/bun": "^1.2.20",
36
46
  "tslib": "^2.8.1",
37
- "typedoc": "^0.28.10"
47
+ "typedoc": "^0.28.10",
48
+ "typescript": ">=5.0.0"
38
49
  },
39
50
  "peerDependencies": {
40
51
  "react": ">=18.0.0",
41
52
  "react-dom": ">=18.0.0",
42
- "react-native": ">=0.72.0",
43
- "typescript": ">=5.0.0"
53
+ "react-native": ">=0.72.0"
44
54
  },
45
55
  "dependencies": {
46
56
  "react-native-webview": "^13.16.0"
package/dist/index.js.map DELETED
@@ -1,15 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["..\\node_modules\\@babel\\runtime\\helpers\\interopRequireDefault.js", "..\\node_modules\\react-native-webview\\lib\\WebView.styles.js", "..\\node_modules\\react-native-webview\\lib\\WebView.js", "..\\src\\components\\provider.tsx", "..\\src\\components\\razorpayCheckout.tsx", "..\\node_modules\\react-native-webview\\index.js"],
4
- "sourcesContent": [
5
- "function _interopRequireDefault(e) {\n return e && e.__esModule ? e : {\n \"default\": e\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;",
6
- "Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _reactNative=require(\"react-native\");var styles=_reactNative.StyleSheet.create({container:{flex:1,overflow:'hidden'},loadingOrErrorView:{position:'absolute',flex:1,justifyContent:'center',alignItems:'center',height:'100%',width:'100%',backgroundColor:'white'},loadingProgressBar:{height:20},errorText:{fontSize:14,textAlign:'center',marginBottom:2},errorTextTitle:{fontSize:15,fontWeight:'500',marginBottom:10},webView:{backgroundColor:'#ffffff'},flexStart:{alignSelf:'flex-start'},colorRed:{color:'red'}});var _default=exports.default=styles;",
7
- "var _interopRequireDefault=require(\"@babel/runtime/helpers/interopRequireDefault\");Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=exports.WebView=void 0;var _react=_interopRequireDefault(require(\"react\"));var _reactNative=require(\"react-native\");var _WebView=_interopRequireDefault(require(\"./WebView.styles\"));var _jsxRuntime=require(\"react/jsx-runtime\");var _this=this,_jsxFileName=\"/home/circleci/code/src/WebView.tsx\";var WebView=exports.WebView=function WebView(){return(0,_jsxRuntime.jsx)(_reactNative.View,{style:_WebView.default.flexStart,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:_WebView.default.colorRed,children:\"React Native WebView does not support this platform.\"})});};var _default=exports.default=WebView;",
8
- "import React, { createContext, useContext, useState, ReactNode } from \"react\";\r\nimport { RazorpayCheckout } from \"./razorpayCheckout\"; // The component we made earlier\r\nimport {\r\n RazorpayOptions,\r\n RazorpaySuccessResponse,\r\n RazorpayErrorResponse,\r\n} from \"../types\";\r\n\r\n// Define the shape of our callbacks\r\ninterface CheckoutCallbacks {\r\n onSuccess: (data: RazorpaySuccessResponse) => void;\r\n onFailure: (error: RazorpayErrorResponse[\"error\"]) => void;\r\n onClose?: () => void;\r\n}\r\n\r\ninterface RazorpayContextType {\r\n openCheckout: (\r\n options: RazorpayOptions,\r\n callbacks: CheckoutCallbacks,\r\n ) => void;\r\n closeCheckout: () => void;\r\n}\r\n\r\nconst RazorpayContext = createContext<RazorpayContextType | undefined>(\r\n undefined,\r\n);\r\n\r\nexport const RazorpayProvider = ({ children }: { children: ReactNode }) => {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [checkoutOptions, setCheckoutOptions] =\r\n useState<RazorpayOptions | null>(null);\r\n const [callbacks, setCallbacks] = useState<CheckoutCallbacks | null>(null);\r\n\r\n const openCheckout = (options: RazorpayOptions, cbs: CheckoutCallbacks) => {\r\n setCheckoutOptions(options);\r\n setCallbacks(cbs);\r\n setIsVisible(true);\r\n };\r\n\r\n const closeCheckout = () => {\r\n setIsVisible(false);\r\n // Optional: Clear options after a delay if needed\r\n if (callbacks?.onClose) {\r\n callbacks.onClose();\r\n }\r\n setCallbacks(null);\r\n };\r\n\r\n return (\r\n <RazorpayContext.Provider value={{ openCheckout, closeCheckout }}>\r\n {children}\r\n\r\n {/* The Global Payment Overlay */}\r\n {isVisible && checkoutOptions && callbacks && (\r\n <RazorpayCheckout\r\n options={checkoutOptions}\r\n onSuccess={(data) => {\r\n callbacks.onSuccess(data);\r\n setIsVisible(false); // Auto close on success\r\n }}\r\n onFailure={(error) => {\r\n callbacks.onFailure(error.error);\r\n setIsVisible(false); // Auto close on failure\r\n }}\r\n onClose={() => {\r\n closeCheckout();\r\n }}\r\n />\r\n )}\r\n </RazorpayContext.Provider>\r\n );\r\n};\r\n\r\n// The Hook\r\nexport const useRazorpay = () => {\r\n const context = useContext(RazorpayContext);\r\n if (!context) {\r\n throw new Error(\"useRazorpay must be used within a RazorpayProvider\");\r\n }\r\n return context;\r\n};\r\n",
9
- "import React from \"react\";\r\nimport {\r\n StyleSheet,\r\n View,\r\n ActivityIndicator,\r\n Linking,\r\n Modal,\r\n} from \"react-native\";\r\nimport { WebView } from \"react-native-webview\";\r\nimport {\r\n RazorpayErrorResponse,\r\n RazorpayOptions,\r\n RazorpaySuccessResponse,\r\n} from \"../types\";\r\n\r\ninterface RazorpayCheckoutProps {\r\n options: RazorpayOptions; // The exact options object you listed in your prompt\r\n onSuccess: (data: RazorpaySuccessResponse) => void;\r\n onFailure: (error: RazorpayErrorResponse) => void;\r\n onClose: () => void;\r\n}\r\n\r\nconst RazorpayCheckout = ({\r\n options,\r\n onSuccess,\r\n onFailure,\r\n onClose,\r\n}: RazorpayCheckoutProps) => {\r\n // We inject your specific options into the HTML\r\n // We remove 'handler' from your options because functions can't be passed to WebView\r\n // We will re-attach our own handler inside the HTML\r\n const { handler, ...optionsWithoutHandler } = options;\r\n const optionsString = JSON.stringify(optionsWithoutHandler);\r\n\r\n const htmlContent = `\r\n <html>\r\n <head>\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <style>\r\n body { display: flex; justify-content: center; align-items: center; background-color: transparent; }\r\n </style>\r\n </head>\r\n <body>\r\n <script src=\"https://checkout.razorpay.com/v1/checkout.js\"></script>\r\n <script>\r\n // 1. Parse the options passed from React Native\r\n var options = ${optionsString};\r\n\r\n // 2. Attach the Success Handler\r\n options.handler = function (response){\r\n window.ReactNativeWebView.postMessage(JSON.stringify({\r\n type: 'PAYMENT_SUCCESS',\r\n data: response\r\n }));\r\n };\r\n\r\n // 3. Attach Modal Dismiss (User closed the popup)\r\n options.modal = {\r\n ondismiss: function(){\r\n window.ReactNativeWebView.postMessage(JSON.stringify({\r\n type: 'PAYMENT_CLOSED'\r\n }));\r\n }\r\n };\r\n\r\n var rzp1 = new Razorpay(options);\r\n\r\n // 4. Attach Failure Handler (as per your documentation)\r\n rzp1.on('payment.failed', function (response){\r\n window.ReactNativeWebView.postMessage(JSON.stringify({\r\n type: 'PAYMENT_FAILED',\r\n error: response.error\r\n }));\r\n });\r\n\r\n // 5. Open Widget\r\n rzp1.open();\r\n </script> \r\n </body>\r\n </html>\r\n `;\r\n\r\n const handleMessage = (event: any) => {\r\n const message = JSON.parse(event.nativeEvent.data);\r\n\r\n if (message.type === \"PAYMENT_SUCCESS\") {\r\n onSuccess(message.data);\r\n } else if (message.type === \"PAYMENT_FAILED\") {\r\n onFailure(message.error);\r\n } else if (message.type === \"PAYMENT_CLOSED\") {\r\n onClose();\r\n }\r\n };\r\n\r\n const handleNavigation = (request: any) => {\r\n const { url } = request;\r\n\r\n // Handle UPI Deep Linking (GPay, PhonePe, Paytm, etc.)\r\n // If the URL is not http/https, it's likely a scheme for another app\r\n if (\r\n !url.startsWith(\"http\") &&\r\n !url.startsWith(\"https\") &&\r\n !url.startsWith(\"about:blank\")\r\n ) {\r\n Linking.openURL(url).catch((err) => {\r\n console.error(\"Couldn't open UPI app\", err);\r\n });\r\n return false; // Stop WebView from trying to load it\r\n }\r\n return true; // Allow normal loading\r\n };\r\n\r\n return (\r\n <Modal\r\n visible={true}\r\n transparent={true}\r\n animationType=\"slide\" // Slide up effect like a native sheet\r\n onRequestClose={onClose}\r\n >\r\n <View\r\n style={{\r\n ...StyleSheet.absoluteFillObject,\r\n zIndex: 1000,\r\n backgroundColor: \"rgba(0,0,0,0.5)\",\r\n }}\r\n >\r\n <WebView\r\n originWhitelist={[\r\n \"*\",\r\n \"http://*\",\r\n \"https://*\",\r\n \"upi://*\",\r\n \"tez://*\",\r\n \"phonepe://*\",\r\n ]}\r\n source={{ html: htmlContent }}\r\n onMessage={handleMessage}\r\n onShouldStartLoadWithRequest={handleNavigation}\r\n javaScriptEnabled={true}\r\n style={{ flex: 1, backgroundColor: \"transparent\" }}\r\n startInLoadingState={true}\r\n renderLoading={() => (\r\n <View\r\n style={{\r\n flex: 1,\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n backgroundColor: \"transparent\",\r\n zIndex: 1001,\r\n ...StyleSheet.absoluteFillObject,\r\n }}\r\n >\r\n <ActivityIndicator\r\n size=\"large\"\r\n color={options.theme?.color || \"#3399cc\"}\r\n />\r\n </View>\r\n )}\r\n />\r\n </View>\r\n </Modal>\r\n );\r\n};\r\n\r\nexport { RazorpayCheckout };\r\n",
10
- "import WebView from './lib/WebView';\n\nexport { WebView };\nexport default WebView;\n"
11
- ],
12
- "mappings": "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",
13
- "debugId": "74A338E7CE466FDB64756E2164756E21",
14
- "names": []
15
- }