@quiltt/react-native 3.2.2 → 3.3.1
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/CHANGELOG.md +21 -0
- package/README.md +37 -6
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/components/QuilttConnector.tsx +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @quiltt/react-native
|
|
2
2
|
|
|
3
|
+
## 3.3.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9bfbc03: Match eventType with MessageType in react native sdk
|
|
8
|
+
- Updated dependencies [9bfbc03]
|
|
9
|
+
- @quiltt/core@3.3.1
|
|
10
|
+
- @quiltt/react@3.3.1
|
|
11
|
+
|
|
12
|
+
## 3.3.0
|
|
13
|
+
|
|
14
|
+
### Minor Changes
|
|
15
|
+
|
|
16
|
+
- 2a6410f: Add profileId to ConnectorSDKCallbackMetadata
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [2a6410f]
|
|
21
|
+
- @quiltt/core@3.3.0
|
|
22
|
+
- @quiltt/react@3.3.0
|
|
23
|
+
|
|
3
24
|
## 3.2.2
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,10 +1,39 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @quiltt/react-native
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/js/@quiltt%2Freact-native)
|
|
4
|
+
[](https://github.com/quiltt/quiltt-public/actions/workflows/ci.yml)
|
|
5
|
+
|
|
6
|
+
`@quiltt/react-native` provides React Native Components for integrating Quiltt Connector into React Native and Expo applications.
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
```shell
|
|
11
|
+
$ npm install @quiltt/react
|
|
12
|
+
# or
|
|
13
|
+
$ yarn add @quiltt/react
|
|
14
|
+
# or
|
|
15
|
+
# Please note that you will need to add `node-linker=hoisted` in `.npmrc` if you are using pnpm in expo app.`
|
|
16
|
+
$ pnpm add @quiltt/react
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### QuilttConnector
|
|
20
|
+
|
|
21
|
+
Launch the [Quiltt Connector](https://www.quiltt.dev/guides/connector) in a webview.
|
|
22
|
+
|
|
23
|
+
`@quiltt/react-native` does not include any navigation library, you might want to navigate to a new "page" when using QuilttConnector to get the best result.
|
|
24
|
+
|
|
25
|
+
For simple usage of `react-navigation`, please see [App.tsx](ECMAScript/react-native/example/App.tsx) and [ConnectorScreen.tsx](ECMAScript/react-native/example/screens/ConnectorScreen.tsx).
|
|
26
|
+
|
|
27
|
+
#### Example
|
|
2
28
|
|
|
3
29
|
```typescript
|
|
4
30
|
import { useState } from 'react'
|
|
31
|
+
import { QuilttProvider } from '@quiltt/react'
|
|
5
32
|
import { QuilttConnector } from '@quiltt/react-native'
|
|
6
33
|
|
|
7
34
|
export const App = () => {
|
|
35
|
+
// See: https://www.quiltt.dev/api-reference/rest/auth#/paths/~1v1~1users~1sessions/post
|
|
36
|
+
const token = 'GET_THIS_TOKEN_FROM_YOUR_SERVER'
|
|
8
37
|
const [connectionId, setConnectionId] = useState<string>()
|
|
9
38
|
const oAuthRedirectUrl = "quilttexample://open.reactnative.app"
|
|
10
39
|
const handleExitSuccess = (metadata) => {
|
|
@@ -12,11 +41,13 @@ export const App = () => {
|
|
|
12
41
|
}
|
|
13
42
|
|
|
14
43
|
return (
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
44
|
+
<QuilttProvider token={token}>
|
|
45
|
+
<QuilttConnector
|
|
46
|
+
connectorId="<CONNECTOR_ID>"
|
|
47
|
+
oAuthRedirectUrl={oAuthRedirectUrl}
|
|
48
|
+
onExitSuccess={handleExitSuccess}
|
|
49
|
+
/>
|
|
50
|
+
</QuilttProvider>
|
|
20
51
|
)
|
|
21
52
|
}
|
|
22
53
|
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var h=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var Q=(r,a)=>{for(var s in a)h(r,s,{get:a[s],enumerable:!0})},T=(r,a,s,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let c of D(a))!L.call(r,c)&&c!==s&&h(r,c,{get:()=>a[c],enumerable:!(t=W(a,c))||t.enumerable});return r};var K=r=>T(h({},"__esModule",{value:!0}),r);var M={};Q(M,{QuilttConnector:()=>k,default:()=>j});module.exports=K(M);var F=require("core-js/stable/atob"),G=require("core-js/stable/url");var p=require("@quiltt/core"),n=require("react"),y=require("react-native"),A=require("react-native-webview");var l=require("react-native"),C=require("react/jsx-runtime"),g=({children:r})=>(0,C.jsx)(l.SafeAreaView,{style:U.AndroidSafeArea,children:r}),U=l.StyleSheet.create({AndroidSafeArea:{flex:1,backgroundColor:"white",paddingTop:l.Platform.OS==="android"?l.StatusBar.currentHeight:0}});var P=require("@quiltt/react"),w=require("react/jsx-runtime"),$=({connectorId:r,connectionId:a,oauthRedirectUrl:s,onEvent:t,onLoad:c,onExit:i,onExitSuccess:u,onExitAbort:m,onExitError:f})=>{let S=(0,n.useRef)(null),{session:d}=(0,P.useQuilttSession)();s=encodeURIComponent(s);let R=`https://${r}.quiltt.app/?mode=webview&oauth_redirect_url=${s}&sdk=react-native`,V=(0,n.useCallback)(()=>{var e;let o=` const options = { source: 'quiltt', type: 'Options', token: '${d==null?void 0:d.token}', connectorId: '${r}', connectionId: '${a}', }; const compactedOptions = Object.keys(options).reduce((acc, key) => { if (options[key] !== 'undefined') { acc[key] = options[key]; } return acc; }, {}); window.postMessage(compactedOptions); `;(e=S.current)==null||e.injectJavaScript(o)},[a,r,d==null?void 0:d.token]),q=o=>{let e=new URL(o.url);return e.protocol==="quilttconnector:"?(O(e),!1):!0},b=()=>{var e;let o="localStorage.clear();";(e=S.current)==null||e.injectJavaScript(o)},O=o=>{o.searchParams.delete("source"),o.searchParams.append("connectorId",r);let e=Object.fromEntries(o.searchParams);switch(o.host){case"
|
|
1
|
+
"use strict";var h=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var Q=(r,a)=>{for(var s in a)h(r,s,{get:a[s],enumerable:!0})},T=(r,a,s,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let c of D(a))!L.call(r,c)&&c!==s&&h(r,c,{get:()=>a[c],enumerable:!(t=W(a,c))||t.enumerable});return r};var K=r=>T(h({},"__esModule",{value:!0}),r);var M={};Q(M,{QuilttConnector:()=>k,default:()=>j});module.exports=K(M);var F=require("core-js/stable/atob"),G=require("core-js/stable/url");var p=require("@quiltt/core"),n=require("react"),y=require("react-native"),A=require("react-native-webview");var l=require("react-native"),C=require("react/jsx-runtime"),g=({children:r})=>(0,C.jsx)(l.SafeAreaView,{style:U.AndroidSafeArea,children:r}),U=l.StyleSheet.create({AndroidSafeArea:{flex:1,backgroundColor:"white",paddingTop:l.Platform.OS==="android"?l.StatusBar.currentHeight:0}});var P=require("@quiltt/react"),w=require("react/jsx-runtime"),$=({connectorId:r,connectionId:a,oauthRedirectUrl:s,onEvent:t,onLoad:c,onExit:i,onExitSuccess:u,onExitAbort:m,onExitError:f})=>{let S=(0,n.useRef)(null),{session:d}=(0,P.useQuilttSession)();s=encodeURIComponent(s);let R=`https://${r}.quiltt.app/?mode=webview&oauth_redirect_url=${s}&sdk=react-native`,V=(0,n.useCallback)(()=>{var e;let o=` const options = { source: 'quiltt', type: 'Options', token: '${d==null?void 0:d.token}', connectorId: '${r}', connectionId: '${a}', }; const compactedOptions = Object.keys(options).reduce((acc, key) => { if (options[key] !== 'undefined') { acc[key] = options[key]; } return acc; }, {}); window.postMessage(compactedOptions); `;(e=S.current)==null||e.injectJavaScript(o)},[a,r,d==null?void 0:d.token]),q=o=>{let e=new URL(o.url);return e.protocol==="quilttconnector:"?(O(e),!1):!0},b=()=>{var e;let o="localStorage.clear();";(e=S.current)==null||e.injectJavaScript(o)},O=o=>{o.searchParams.delete("source"),o.searchParams.append("connectorId",r);let e=Object.fromEntries(o.searchParams);switch(o.host){case"Load":V(),t==null||t(p.ConnectorSDKEventType.Load,e),c==null||c(e);break;case"ExitAbort":b(),t==null||t(p.ConnectorSDKEventType.ExitAbort,e),i==null||i(p.ConnectorSDKEventType.ExitAbort,e),m==null||m(e);break;case"ExitError":b(),t==null||t(p.ConnectorSDKEventType.ExitError,e),i==null||i(p.ConnectorSDKEventType.ExitError,e),f==null||f(e);break;case"ExitSuccess":b(),t==null||t(p.ConnectorSDKEventType.ExitSuccess,e),i==null||i(p.ConnectorSDKEventType.ExitSuccess,e),u==null||u(e);break;case"OauthRequested":y.Linking.openURL(o.searchParams.get("oauthUrl"));break;default:console.log("unhandled event",o);break}};return(0,w.jsx)(g,{children:(0,w.jsx)(A.WebView,{ref:S,originWhitelist:["https://*","quilttconnector://*"],source:{uri:R},onShouldStartLoadWithRequest:q,javaScriptEnabled:!0,domStorageEnabled:!0,webviewDebuggingEnabled:!0})})},k=$;var j=k;0&&(module.exports={QuilttConnector});
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/QuilttConnector.tsx","../src/components/AndroidSafeAreaView.tsx"],"sourcesContent":["// Hermes doesn't have atob\n// https://github.com/facebook/hermes/issues/1178\nimport 'core-js/stable/atob'\n// React Native's URL implementation is incomplete\n// https://github.com/facebook/react-native/issues/16434\nimport 'core-js/stable/url'\nimport QuilttConnector from './components/QuilttConnector'\n\nexport { QuilttConnector }\nexport default QuilttConnector\n","import {\n ConnectorSDKCallbackMetadata,\n ConnectorSDKCallbacks,\n ConnectorSDKEventType,\n} from '@quiltt/core'\nimport { useCallback, useRef } from 'react'\nimport { Linking } from 'react-native'\nimport { WebView } from 'react-native-webview'\nimport { AndroidSafeAreaView } from './AndroidSafeAreaView'\nimport type { ShouldStartLoadRequest } from 'react-native-webview/lib/WebViewTypes'\nimport { useQuilttSession } from '@quiltt/react'\n\ntype QuilttConnectorProps = {\n connectorId: string\n connectionId?: string\n oauthRedirectUrl: string\n} & ConnectorSDKCallbacks\n\nexport const QuilttConnector = ({\n connectorId,\n connectionId,\n oauthRedirectUrl,\n onEvent,\n onLoad,\n onExit,\n onExitSuccess,\n onExitAbort,\n onExitError,\n}: QuilttConnectorProps) => {\n const webViewRef = useRef<WebView>(null)\n const { session } = useQuilttSession()\n oauthRedirectUrl = encodeURIComponent(oauthRedirectUrl)\n const connectorUrl = `https://${connectorId}.quiltt.app/?mode=webview&oauth_redirect_url=${oauthRedirectUrl}&sdk=react-native` // @todo append version from package.json\n\n const initInjectedJavaScript = useCallback(() => {\n const script = `\\\n const options = {\\\n source: 'quiltt',\\\n type: 'Options',\\\n token: '${session?.token}',\\\n connectorId: '${connectorId}',\\\n connectionId: '${connectionId}',\\\n };\\\n const compactedOptions = Object.keys(options).reduce((acc, key) => {\\\n if (options[key] !== 'undefined') {\\\n acc[key] = options[key];\\\n }\\\n return acc;\\\n }, {});\\\n window.postMessage(compactedOptions);\\\n `\n webViewRef.current?.injectJavaScript(script)\n }, [connectionId, connectorId, session?.token])\n\n const eventHandler = (request: ShouldStartLoadRequest) => {\n const url = new URL(request.url)\n if (url.protocol === 'quilttconnector:') {\n handleQuilttEvent(url)\n return false\n }\n return true\n }\n\n const clearLocalStorage = () => {\n const script = 'localStorage.clear();'\n webViewRef.current?.injectJavaScript(script)\n }\n\n const handleQuilttEvent = (url: URL) => {\n url.searchParams.delete('source')\n url.searchParams.append('connectorId', connectorId)\n const metadata = Object.fromEntries(url.searchParams) as ConnectorSDKCallbackMetadata\n\n const eventType = url.host\n switch (eventType) {\n case '
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/QuilttConnector.tsx","../src/components/AndroidSafeAreaView.tsx"],"sourcesContent":["// Hermes doesn't have atob\n// https://github.com/facebook/hermes/issues/1178\nimport 'core-js/stable/atob'\n// React Native's URL implementation is incomplete\n// https://github.com/facebook/react-native/issues/16434\nimport 'core-js/stable/url'\nimport QuilttConnector from './components/QuilttConnector'\n\nexport { QuilttConnector }\nexport default QuilttConnector\n","import {\n ConnectorSDKCallbackMetadata,\n ConnectorSDKCallbacks,\n ConnectorSDKEventType,\n} from '@quiltt/core'\nimport { useCallback, useRef } from 'react'\nimport { Linking } from 'react-native'\nimport { WebView } from 'react-native-webview'\nimport { AndroidSafeAreaView } from './AndroidSafeAreaView'\nimport type { ShouldStartLoadRequest } from 'react-native-webview/lib/WebViewTypes'\nimport { useQuilttSession } from '@quiltt/react'\n\ntype QuilttConnectorProps = {\n connectorId: string\n connectionId?: string\n oauthRedirectUrl: string\n} & ConnectorSDKCallbacks\n\nexport const QuilttConnector = ({\n connectorId,\n connectionId,\n oauthRedirectUrl,\n onEvent,\n onLoad,\n onExit,\n onExitSuccess,\n onExitAbort,\n onExitError,\n}: QuilttConnectorProps) => {\n const webViewRef = useRef<WebView>(null)\n const { session } = useQuilttSession()\n oauthRedirectUrl = encodeURIComponent(oauthRedirectUrl)\n const connectorUrl = `https://${connectorId}.quiltt.app/?mode=webview&oauth_redirect_url=${oauthRedirectUrl}&sdk=react-native` // @todo append version from package.json\n\n const initInjectedJavaScript = useCallback(() => {\n const script = `\\\n const options = {\\\n source: 'quiltt',\\\n type: 'Options',\\\n token: '${session?.token}',\\\n connectorId: '${connectorId}',\\\n connectionId: '${connectionId}',\\\n };\\\n const compactedOptions = Object.keys(options).reduce((acc, key) => {\\\n if (options[key] !== 'undefined') {\\\n acc[key] = options[key];\\\n }\\\n return acc;\\\n }, {});\\\n window.postMessage(compactedOptions);\\\n `\n webViewRef.current?.injectJavaScript(script)\n }, [connectionId, connectorId, session?.token])\n\n const eventHandler = (request: ShouldStartLoadRequest) => {\n const url = new URL(request.url)\n if (url.protocol === 'quilttconnector:') {\n handleQuilttEvent(url)\n return false\n }\n return true\n }\n\n const clearLocalStorage = () => {\n const script = 'localStorage.clear();'\n webViewRef.current?.injectJavaScript(script)\n }\n\n const handleQuilttEvent = (url: URL) => {\n url.searchParams.delete('source')\n url.searchParams.append('connectorId', connectorId)\n const metadata = Object.fromEntries(url.searchParams) as ConnectorSDKCallbackMetadata\n\n const eventType = url.host\n switch (eventType) {\n case 'Load':\n initInjectedJavaScript()\n onEvent?.(ConnectorSDKEventType.Load, metadata)\n onLoad?.(metadata)\n break\n case 'ExitAbort':\n clearLocalStorage()\n onEvent?.(ConnectorSDKEventType.ExitAbort, metadata)\n onExit?.(ConnectorSDKEventType.ExitAbort, metadata)\n onExitAbort?.(metadata)\n break\n case 'ExitError':\n clearLocalStorage()\n onEvent?.(ConnectorSDKEventType.ExitError, metadata)\n onExit?.(ConnectorSDKEventType.ExitError, metadata)\n onExitError?.(metadata)\n break\n case 'ExitSuccess':\n clearLocalStorage()\n onEvent?.(ConnectorSDKEventType.ExitSuccess, metadata)\n onExit?.(ConnectorSDKEventType.ExitSuccess, metadata)\n onExitSuccess?.(metadata)\n break\n case 'OauthRequested':\n Linking.openURL(url.searchParams.get('oauthUrl') as string)\n break\n default:\n console.log('unhandled event', url)\n break\n }\n }\n\n return (\n <AndroidSafeAreaView>\n <WebView\n ref={webViewRef}\n originWhitelist={['https://*', 'quilttconnector://*']} // Maybe relax this to *?\n source={{ uri: connectorUrl }}\n onShouldStartLoadWithRequest={eventHandler}\n javaScriptEnabled\n domStorageEnabled // To enable localStorage in Android webview\n webviewDebuggingEnabled // Not sure if this works\n />\n </AndroidSafeAreaView>\n )\n}\n\nexport default QuilttConnector\n","import { SafeAreaView, StyleSheet, Platform, StatusBar } from 'react-native'\nimport { PropsWithChildren } from 'react'\n\nexport const AndroidSafeAreaView = ({ children }: PropsWithChildren) => (\n <SafeAreaView style={styles.AndroidSafeArea}>{children}</SafeAreaView>\n)\n\nconst styles = StyleSheet.create({\n AndroidSafeArea: {\n flex: 1,\n backgroundColor: 'white',\n paddingTop: Platform.OS === 'android' ? StatusBar.currentHeight : 0,\n },\n})\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAEA,IAAAK,EAAO,+BAGPC,EAAO,8BCLP,IAAAC,EAIO,wBACPC,EAAoC,iBACpCC,EAAwB,wBACxBC,EAAwB,gCCPxB,IAAAC,EAA8D,wBAI5DC,EAAA,6BADWC,EAAsB,CAAC,CAAE,SAAAC,CAAS,OAC7C,OAAC,gBAAa,MAAOC,EAAO,gBAAkB,SAAAD,EAAS,EAGnDC,EAAS,aAAW,OAAO,CAC/B,gBAAiB,CACf,KAAM,EACN,gBAAiB,QACjB,WAAY,WAAS,KAAO,UAAY,YAAU,cAAgB,CACpE,CACF,CAAC,EDHD,IAAAC,EAAiC,yBAmG3BC,EAAA,6BA3FOC,EAAkB,CAAC,CAC9B,YAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,QAAAC,EACA,OAAAC,EACA,OAAAC,EACA,cAAAC,EACA,YAAAC,EACA,YAAAC,CACF,IAA4B,CAC1B,IAAMC,KAAa,UAAgB,IAAI,EACjC,CAAE,QAAAC,CAAQ,KAAI,oBAAiB,EACrCR,EAAmB,mBAAmBA,CAAgB,EACtD,IAAMS,EAAe,WAAWX,iDAA2DE,qBAErFU,KAAyB,eAAY,IAAM,CAlCnD,IAAAC,EAmCI,IAAMC,EAAS,2FAIDJ,GAAA,YAAAA,EAAS,gCACHV,6BACCC,8PAUrBY,EAAAJ,EAAW,UAAX,MAAAI,EAAoB,iBAAiBC,EACvC,EAAG,CAACb,EAAcD,EAAaU,GAAA,YAAAA,EAAS,KAAK,CAAC,EAExCK,EAAgBC,GAAoC,CACxD,IAAMC,EAAM,IAAI,IAAID,EAAQ,GAAG,EAC/B,OAAIC,EAAI,WAAa,oBACnBC,EAAkBD,CAAG,EACd,IAEF,EACT,EAEME,EAAoB,IAAM,CA/DlC,IAAAN,EAgEI,IAAMC,EAAS,yBACfD,EAAAJ,EAAW,UAAX,MAAAI,EAAoB,iBAAiBC,EACvC,EAEMI,EAAqBD,GAAa,CACtCA,EAAI,aAAa,OAAO,QAAQ,EAChCA,EAAI,aAAa,OAAO,cAAejB,CAAW,EAClD,IAAMoB,EAAW,OAAO,YAAYH,EAAI,YAAY,EAGpD,OADkBA,EAAI,KACH,CACjB,IAAK,OACHL,EAAuB,EACvBT,GAAA,MAAAA,EAAU,wBAAsB,KAAMiB,GACtChB,GAAA,MAAAA,EAASgB,GACT,MACF,IAAK,YACHD,EAAkB,EAClBhB,GAAA,MAAAA,EAAU,wBAAsB,UAAWiB,GAC3Cf,GAAA,MAAAA,EAAS,wBAAsB,UAAWe,GAC1Cb,GAAA,MAAAA,EAAca,GACd,MACF,IAAK,YACHD,EAAkB,EAClBhB,GAAA,MAAAA,EAAU,wBAAsB,UAAWiB,GAC3Cf,GAAA,MAAAA,EAAS,wBAAsB,UAAWe,GAC1CZ,GAAA,MAAAA,EAAcY,GACd,MACF,IAAK,cACHD,EAAkB,EAClBhB,GAAA,MAAAA,EAAU,wBAAsB,YAAaiB,GAC7Cf,GAAA,MAAAA,EAAS,wBAAsB,YAAae,GAC5Cd,GAAA,MAAAA,EAAgBc,GAChB,MACF,IAAK,iBACH,UAAQ,QAAQH,EAAI,aAAa,IAAI,UAAU,CAAW,EAC1D,MACF,QACE,QAAQ,IAAI,kBAAmBA,CAAG,EAClC,KACJ,CACF,EAEA,SACE,OAACI,EAAA,CACC,mBAAC,WACC,IAAKZ,EACL,gBAAiB,CAAC,YAAa,qBAAqB,EACpD,OAAQ,CAAE,IAAKE,CAAa,EAC5B,6BAA8BI,EAC9B,kBAAiB,GACjB,kBAAiB,GACjB,wBAAuB,GACzB,EACF,CAEJ,EAEOO,EAAQvB,EDjHf,IAAOwB,EAAQC","names":["src_exports","__export","QuilttConnector_default","src_default","__toCommonJS","import_atob","import_url","import_core","import_react","import_react_native","import_react_native_webview","import_react_native","import_jsx_runtime","AndroidSafeAreaView","children","styles","import_react","import_jsx_runtime","QuilttConnector","connectorId","connectionId","oauthRedirectUrl","onEvent","onLoad","onExit","onExitSuccess","onExitAbort","onExitError","webViewRef","session","connectorUrl","initInjectedJavaScript","_a","script","eventHandler","request","url","handleQuilttEvent","clearLocalStorage","metadata","AndroidSafeAreaView","QuilttConnector_default","src_default","QuilttConnector_default"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"core-js/stable/atob";import"core-js/stable/url";import{ConnectorSDKEventType as o}from"@quiltt/core";import{useCallback as O,useRef as W}from"react";import{Linking as D}from"react-native";import{WebView as L}from"react-native-webview";import{SafeAreaView as y,StyleSheet as A,Platform as P,StatusBar as R}from"react-native";import{jsx as q}from"react/jsx-runtime";var S=({children:c})=>q(y,{style:V.AndroidSafeArea,children:c}),V=A.create({AndroidSafeArea:{flex:1,backgroundColor:"white",paddingTop:P.OS==="android"?R.currentHeight:0}});import{useQuilttSession as Q}from"@quiltt/react";import{jsx as b}from"react/jsx-runtime";var T=({connectorId:c,connectionId:f,oauthRedirectUrl:s,onEvent:t,onLoad:l,onExit:a,onExitSuccess:p,onExitAbort:d,onExitError:n})=>{let u=W(null),{session:i}=Q();s=encodeURIComponent(s);let w=`https://${c}.quiltt.app/?mode=webview&oauth_redirect_url=${s}&sdk=react-native`,k=O(()=>{var e;let r=` const options = { source: 'quiltt', type: 'Options', token: '${i==null?void 0:i.token}', connectorId: '${c}', connectionId: '${f}', }; const compactedOptions = Object.keys(options).reduce((acc, key) => { if (options[key] !== 'undefined') { acc[key] = options[key]; } return acc; }, {}); window.postMessage(compactedOptions); `;(e=u.current)==null||e.injectJavaScript(r)},[f,c,i==null?void 0:i.token]),g=r=>{let e=new URL(r.url);return e.protocol==="quilttconnector:"?(C(e),!1):!0},m=()=>{var e;let r="localStorage.clear();";(e=u.current)==null||e.injectJavaScript(r)},C=r=>{r.searchParams.delete("source"),r.searchParams.append("connectorId",c);let e=Object.fromEntries(r.searchParams);switch(r.host){case"
|
|
1
|
+
import"core-js/stable/atob";import"core-js/stable/url";import{ConnectorSDKEventType as o}from"@quiltt/core";import{useCallback as O,useRef as W}from"react";import{Linking as D}from"react-native";import{WebView as L}from"react-native-webview";import{SafeAreaView as y,StyleSheet as A,Platform as P,StatusBar as R}from"react-native";import{jsx as q}from"react/jsx-runtime";var S=({children:c})=>q(y,{style:V.AndroidSafeArea,children:c}),V=A.create({AndroidSafeArea:{flex:1,backgroundColor:"white",paddingTop:P.OS==="android"?R.currentHeight:0}});import{useQuilttSession as Q}from"@quiltt/react";import{jsx as b}from"react/jsx-runtime";var T=({connectorId:c,connectionId:f,oauthRedirectUrl:s,onEvent:t,onLoad:l,onExit:a,onExitSuccess:p,onExitAbort:d,onExitError:n})=>{let u=W(null),{session:i}=Q();s=encodeURIComponent(s);let w=`https://${c}.quiltt.app/?mode=webview&oauth_redirect_url=${s}&sdk=react-native`,k=O(()=>{var e;let r=` const options = { source: 'quiltt', type: 'Options', token: '${i==null?void 0:i.token}', connectorId: '${c}', connectionId: '${f}', }; const compactedOptions = Object.keys(options).reduce((acc, key) => { if (options[key] !== 'undefined') { acc[key] = options[key]; } return acc; }, {}); window.postMessage(compactedOptions); `;(e=u.current)==null||e.injectJavaScript(r)},[f,c,i==null?void 0:i.token]),g=r=>{let e=new URL(r.url);return e.protocol==="quilttconnector:"?(C(e),!1):!0},m=()=>{var e;let r="localStorage.clear();";(e=u.current)==null||e.injectJavaScript(r)},C=r=>{r.searchParams.delete("source"),r.searchParams.append("connectorId",c);let e=Object.fromEntries(r.searchParams);switch(r.host){case"Load":k(),t==null||t(o.Load,e),l==null||l(e);break;case"ExitAbort":m(),t==null||t(o.ExitAbort,e),a==null||a(o.ExitAbort,e),d==null||d(e);break;case"ExitError":m(),t==null||t(o.ExitError,e),a==null||a(o.ExitError,e),n==null||n(e);break;case"ExitSuccess":m(),t==null||t(o.ExitSuccess,e),a==null||a(o.ExitSuccess,e),p==null||p(e);break;case"OauthRequested":D.openURL(r.searchParams.get("oauthUrl"));break;default:console.log("unhandled event",r);break}};return b(S,{children:b(L,{ref:u,originWhitelist:["https://*","quilttconnector://*"],source:{uri:w},onShouldStartLoadWithRequest:g,javaScriptEnabled:!0,domStorageEnabled:!0,webviewDebuggingEnabled:!0})})},h=T;var v=h;export{h as QuilttConnector,v as default};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/QuilttConnector.tsx","../src/components/AndroidSafeAreaView.tsx"],"sourcesContent":["// Hermes doesn't have atob\n// https://github.com/facebook/hermes/issues/1178\nimport 'core-js/stable/atob'\n// React Native's URL implementation is incomplete\n// https://github.com/facebook/react-native/issues/16434\nimport 'core-js/stable/url'\nimport QuilttConnector from './components/QuilttConnector'\n\nexport { QuilttConnector }\nexport default QuilttConnector\n","import {\n ConnectorSDKCallbackMetadata,\n ConnectorSDKCallbacks,\n ConnectorSDKEventType,\n} from '@quiltt/core'\nimport { useCallback, useRef } from 'react'\nimport { Linking } from 'react-native'\nimport { WebView } from 'react-native-webview'\nimport { AndroidSafeAreaView } from './AndroidSafeAreaView'\nimport type { ShouldStartLoadRequest } from 'react-native-webview/lib/WebViewTypes'\nimport { useQuilttSession } from '@quiltt/react'\n\ntype QuilttConnectorProps = {\n connectorId: string\n connectionId?: string\n oauthRedirectUrl: string\n} & ConnectorSDKCallbacks\n\nexport const QuilttConnector = ({\n connectorId,\n connectionId,\n oauthRedirectUrl,\n onEvent,\n onLoad,\n onExit,\n onExitSuccess,\n onExitAbort,\n onExitError,\n}: QuilttConnectorProps) => {\n const webViewRef = useRef<WebView>(null)\n const { session } = useQuilttSession()\n oauthRedirectUrl = encodeURIComponent(oauthRedirectUrl)\n const connectorUrl = `https://${connectorId}.quiltt.app/?mode=webview&oauth_redirect_url=${oauthRedirectUrl}&sdk=react-native` // @todo append version from package.json\n\n const initInjectedJavaScript = useCallback(() => {\n const script = `\\\n const options = {\\\n source: 'quiltt',\\\n type: 'Options',\\\n token: '${session?.token}',\\\n connectorId: '${connectorId}',\\\n connectionId: '${connectionId}',\\\n };\\\n const compactedOptions = Object.keys(options).reduce((acc, key) => {\\\n if (options[key] !== 'undefined') {\\\n acc[key] = options[key];\\\n }\\\n return acc;\\\n }, {});\\\n window.postMessage(compactedOptions);\\\n `\n webViewRef.current?.injectJavaScript(script)\n }, [connectionId, connectorId, session?.token])\n\n const eventHandler = (request: ShouldStartLoadRequest) => {\n const url = new URL(request.url)\n if (url.protocol === 'quilttconnector:') {\n handleQuilttEvent(url)\n return false\n }\n return true\n }\n\n const clearLocalStorage = () => {\n const script = 'localStorage.clear();'\n webViewRef.current?.injectJavaScript(script)\n }\n\n const handleQuilttEvent = (url: URL) => {\n url.searchParams.delete('source')\n url.searchParams.append('connectorId', connectorId)\n const metadata = Object.fromEntries(url.searchParams) as ConnectorSDKCallbackMetadata\n\n const eventType = url.host\n switch (eventType) {\n case '
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/QuilttConnector.tsx","../src/components/AndroidSafeAreaView.tsx"],"sourcesContent":["// Hermes doesn't have atob\n// https://github.com/facebook/hermes/issues/1178\nimport 'core-js/stable/atob'\n// React Native's URL implementation is incomplete\n// https://github.com/facebook/react-native/issues/16434\nimport 'core-js/stable/url'\nimport QuilttConnector from './components/QuilttConnector'\n\nexport { QuilttConnector }\nexport default QuilttConnector\n","import {\n ConnectorSDKCallbackMetadata,\n ConnectorSDKCallbacks,\n ConnectorSDKEventType,\n} from '@quiltt/core'\nimport { useCallback, useRef } from 'react'\nimport { Linking } from 'react-native'\nimport { WebView } from 'react-native-webview'\nimport { AndroidSafeAreaView } from './AndroidSafeAreaView'\nimport type { ShouldStartLoadRequest } from 'react-native-webview/lib/WebViewTypes'\nimport { useQuilttSession } from '@quiltt/react'\n\ntype QuilttConnectorProps = {\n connectorId: string\n connectionId?: string\n oauthRedirectUrl: string\n} & ConnectorSDKCallbacks\n\nexport const QuilttConnector = ({\n connectorId,\n connectionId,\n oauthRedirectUrl,\n onEvent,\n onLoad,\n onExit,\n onExitSuccess,\n onExitAbort,\n onExitError,\n}: QuilttConnectorProps) => {\n const webViewRef = useRef<WebView>(null)\n const { session } = useQuilttSession()\n oauthRedirectUrl = encodeURIComponent(oauthRedirectUrl)\n const connectorUrl = `https://${connectorId}.quiltt.app/?mode=webview&oauth_redirect_url=${oauthRedirectUrl}&sdk=react-native` // @todo append version from package.json\n\n const initInjectedJavaScript = useCallback(() => {\n const script = `\\\n const options = {\\\n source: 'quiltt',\\\n type: 'Options',\\\n token: '${session?.token}',\\\n connectorId: '${connectorId}',\\\n connectionId: '${connectionId}',\\\n };\\\n const compactedOptions = Object.keys(options).reduce((acc, key) => {\\\n if (options[key] !== 'undefined') {\\\n acc[key] = options[key];\\\n }\\\n return acc;\\\n }, {});\\\n window.postMessage(compactedOptions);\\\n `\n webViewRef.current?.injectJavaScript(script)\n }, [connectionId, connectorId, session?.token])\n\n const eventHandler = (request: ShouldStartLoadRequest) => {\n const url = new URL(request.url)\n if (url.protocol === 'quilttconnector:') {\n handleQuilttEvent(url)\n return false\n }\n return true\n }\n\n const clearLocalStorage = () => {\n const script = 'localStorage.clear();'\n webViewRef.current?.injectJavaScript(script)\n }\n\n const handleQuilttEvent = (url: URL) => {\n url.searchParams.delete('source')\n url.searchParams.append('connectorId', connectorId)\n const metadata = Object.fromEntries(url.searchParams) as ConnectorSDKCallbackMetadata\n\n const eventType = url.host\n switch (eventType) {\n case 'Load':\n initInjectedJavaScript()\n onEvent?.(ConnectorSDKEventType.Load, metadata)\n onLoad?.(metadata)\n break\n case 'ExitAbort':\n clearLocalStorage()\n onEvent?.(ConnectorSDKEventType.ExitAbort, metadata)\n onExit?.(ConnectorSDKEventType.ExitAbort, metadata)\n onExitAbort?.(metadata)\n break\n case 'ExitError':\n clearLocalStorage()\n onEvent?.(ConnectorSDKEventType.ExitError, metadata)\n onExit?.(ConnectorSDKEventType.ExitError, metadata)\n onExitError?.(metadata)\n break\n case 'ExitSuccess':\n clearLocalStorage()\n onEvent?.(ConnectorSDKEventType.ExitSuccess, metadata)\n onExit?.(ConnectorSDKEventType.ExitSuccess, metadata)\n onExitSuccess?.(metadata)\n break\n case 'OauthRequested':\n Linking.openURL(url.searchParams.get('oauthUrl') as string)\n break\n default:\n console.log('unhandled event', url)\n break\n }\n }\n\n return (\n <AndroidSafeAreaView>\n <WebView\n ref={webViewRef}\n originWhitelist={['https://*', 'quilttconnector://*']} // Maybe relax this to *?\n source={{ uri: connectorUrl }}\n onShouldStartLoadWithRequest={eventHandler}\n javaScriptEnabled\n domStorageEnabled // To enable localStorage in Android webview\n webviewDebuggingEnabled // Not sure if this works\n />\n </AndroidSafeAreaView>\n )\n}\n\nexport default QuilttConnector\n","import { SafeAreaView, StyleSheet, Platform, StatusBar } from 'react-native'\nimport { PropsWithChildren } from 'react'\n\nexport const AndroidSafeAreaView = ({ children }: PropsWithChildren) => (\n <SafeAreaView style={styles.AndroidSafeArea}>{children}</SafeAreaView>\n)\n\nconst styles = StyleSheet.create({\n AndroidSafeArea: {\n flex: 1,\n backgroundColor: 'white',\n paddingTop: Platform.OS === 'android' ? StatusBar.currentHeight : 0,\n },\n})\n"],"mappings":"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","names":["ConnectorSDKEventType","useCallback","useRef","Linking","WebView","SafeAreaView","StyleSheet","Platform","StatusBar","jsx","AndroidSafeAreaView","children","styles","useQuilttSession","jsx","QuilttConnector","connectorId","connectionId","oauthRedirectUrl","onEvent","onLoad","onExit","onExitSuccess","onExitAbort","onExitError","webViewRef","useRef","session","connectorUrl","initInjectedJavaScript","useCallback","_a","script","eventHandler","request","url","handleQuilttEvent","clearLocalStorage","metadata","ConnectorSDKEventType","Linking","AndroidSafeAreaView","WebView","QuilttConnector_default","src_default","QuilttConnector_default"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quiltt/react-native",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"description": "React Native components for Quiltt Connector",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"core-js": "3.33.2",
|
|
25
25
|
"react-native-webview": "13.6.2",
|
|
26
|
-
"@quiltt/core": "3.
|
|
27
|
-
"@quiltt/react": "3.
|
|
26
|
+
"@quiltt/core": "3.3.1",
|
|
27
|
+
"@quiltt/react": "3.3.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@apollo/client": "3.7.16",
|