@rownd/react-native 0.2.1 → 0.2.4

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.
@@ -54,7 +54,7 @@ function DefaultContext(_ref) {
54
54
  }).json();
55
55
 
56
56
  if (resp !== null && resp !== void 0 && (_resp$app = resp.app) !== null && _resp$app !== void 0 && _resp$app.icon) {
57
- const iconMeta = await _ky.default.head(resp.app.icon);
57
+ const iconMeta = await _ky.default.get(resp.app.icon);
58
58
  resp.app.icon_content_type = iconMeta.headers.get('content-type');
59
59
  }
60
60
 
@@ -1 +1 @@
1
- {"version":3,"names":["DefaultContext","config","state","dispatch","useGlobalContext","client","api","useApi","useDeviceFingerprint","useEffect","resp","get","headers","appKey","json","app","icon","iconMeta","ky","head","icon_content_type","type","ActionType","SET_APP_CONFIG","payload","err","console","error","auth","access_token","id","authData","authLink","Linking","getInitialURL","Clipboard","getString","includes","CHANGE_ROUTE","route","opts","DEFAULT_USER_AGENT","startsWith","authStr","split","JSON","parse","base64","decode","setString","LOGIN_SUCCESS","retrieveUserInfo","useCallback","userInfo","Authorization","LOAD_USER","UPDATE_LOCAL_ACLS","redacted","reduce","acc","field","shared","retrieveAcls","appUserAcls","acls","Error","user","needs_refresh","SET_REFRESH_USER_DATA","saveAclsDebounced","useDebounce","saveAcls","local_acls","put","localAclsRef","useRef","current","isEqual","saveUserDataDebounced","saveUserData","data","SET_IS_SAVING_USER_DATA","saving","eventDetails","events","EventType","USER_DATA_SAVED","userDataRef","email","phone_number"],"sources":["DefaultContext.tsx"],"sourcesContent":["import { useEffect, useCallback, useRef } from 'react';\nimport isEqual from 'lodash-es/isEqual';\nimport { useDebounce, useApi, useDeviceFingerprint } from '../hooks';\nimport { DEFAULT_USER_AGENT } from '../hooks/api';\nimport { IConfig } from '../utils/config';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport ky from 'ky';\nimport Clipboard from '@react-native-clipboard/clipboard';\nimport base64 from 'react-native-base64';\nimport { Linking } from 'react-native';\nimport { events, EventType } from '../utils/events';\n\nexport type UserInfoResp = {\n data: {\n [key: string]: any;\n };\n redacted: string[];\n};\n\ninterface UserAclsResponse {\n acls: Record<string, { shared: boolean }>;\n}\n\ntype DefaultContextProps = {\n config: IConfig;\n};\n\nexport function DefaultContext({ config }: DefaultContextProps) {\n const { state, dispatch } = useGlobalContext();\n const { client: api } = useApi();\n useDeviceFingerprint();\n\n // Fetch app schema and config\n useEffect(() => {\n (async () => {\n try {\n const resp: any = await api\n .get('hub/app-config', {\n headers: {\n 'x-rownd-app-key': config.appKey,\n },\n })\n .json();\n\n if (resp?.app?.icon) {\n const iconMeta = await ky.head(resp.app.icon);\n resp.app.icon_content_type = iconMeta.headers.get('content-type');\n }\n\n dispatch({\n type: ActionType.SET_APP_CONFIG,\n payload: resp.app,\n });\n } catch (err) {\n console.error('Failed to fetch app config:', err);\n }\n })();\n }, [api, config.appKey, dispatch]);\n\n /**\n * If not signed in, check the clipboard for an init hash or auth link we can use to auto-auth the user\n */\n useEffect(() => {\n if (state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n try {\n let authData = null;\n\n let authLink =\n (await Linking.getInitialURL()) || (await Clipboard.getString());\n if (authLink.includes('rownd.link')) {\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/account/auto-signin',\n opts: {\n type: 'sign-in',\n },\n },\n });\n\n authData = await ky\n .get(authLink, {\n headers: {\n 'User-Agent': DEFAULT_USER_AGENT,\n },\n })\n .json();\n } else if (authLink.startsWith('rph_init=')) {\n const authStr = authLink.split('rph_init=')[1];\n authData = JSON.parse(base64.decode(authStr));\n } else {\n return;\n }\n\n // Clear the clipboard value so we don't leak any creds\n Clipboard.setString('');\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: authData,\n });\n } catch (err) {\n console.error(\n 'We found an auth link or string, but failed to authenticate with it because:',\n err\n );\n }\n })();\n }, [state.auth.access_token, state.app.id, dispatch]);\n\n const retrieveUserInfo = useCallback(() => {\n if (!state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n const userInfo: UserInfoResp = await api\n .get(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.LOAD_USER,\n payload: userInfo,\n });\n\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: userInfo.redacted.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = { shared: false };\n return acc;\n },\n {}\n ),\n });\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n const retrieveAcls = useCallback(() => {\n if (!state.app.id || !state.auth.access_token) {\n return;\n }\n\n (async () => {\n try {\n const appUserAcls: UserAclsResponse = await api\n .get(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: appUserAcls.acls,\n });\n } catch (err) {\n if (err instanceof Error) {\n // const unsharedAcls = reduceSchemaToUnsharedAcls();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: {},\n });\n }\n }\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n useEffect(retrieveUserInfo, [retrieveUserInfo]);\n useEffect(retrieveAcls, [retrieveAcls]);\n\n useEffect(() => {\n if (!state.user.needs_refresh) {\n return;\n }\n retrieveUserInfo();\n dispatch({\n type: ActionType.SET_REFRESH_USER_DATA,\n payload: { needs_refresh: false },\n });\n }, [dispatch, retrieveUserInfo, state.user.needs_refresh]);\n\n const saveAclsDebounced = useDebounce(saveAcls, 2000); // 2s\n\n async function saveAcls() {\n if (state.app.id && state.local_acls) {\n await api\n .put(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n acls: state.local_acls,\n },\n })\n .json();\n }\n }\n\n const localAclsRef = useRef(state.local_acls);\n useEffect(() => {\n // Don't save acls if they were just loaded for the first time or they haven't changed\n if (\n !localAclsRef.current ||\n isEqual(localAclsRef.current, state.local_acls)\n ) {\n return;\n }\n saveAclsDebounced();\n }, [saveAclsDebounced, state.local_acls]);\n\n const saveUserDataDebounced = useDebounce(saveUserData, 2000); // 2s\n\n // Save user data in the application state to the API server\n async function saveUserData() {\n if (state.app.id && state.user.data && state.auth.access_token) {\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: true,\n },\n });\n\n const eventDetails: Record<string, any> = {};\n try {\n eventDetails.data = await api\n .put(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n data: state.user.data,\n },\n })\n .json();\n } catch (err) {\n eventDetails.error = err;\n // Get the latest user info from Rownd. Something was probably bad\n // with the data we just tried to save.\n // This is a bit hacky. We should be able to reset the state without\n // calling rownd again by rolling back to a previously good state...\n retrieveUserInfo();\n // TODO: Set some error state\n } finally {\n events.dispatch(EventType.USER_DATA_SAVED, eventDetails);\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: false,\n },\n });\n }\n }\n }\n\n const userDataRef = useRef(state.user.data);\n useEffect(() => {\n // Don't update the user data in the API server if the email is unknown or the data hasn't changed\n if (\n (!state.user.data?.email && !state.user.data.phone_number) ||\n isEqual(userDataRef.current, state.user.data)\n ) {\n return;\n }\n saveUserDataDebounced();\n userDataRef.current = state.user.data;\n }, [dispatch, saveUserDataDebounced, state.user.data]);\n\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["DefaultContext","config","state","dispatch","useGlobalContext","client","api","useApi","useDeviceFingerprint","useEffect","resp","get","headers","appKey","json","app","icon","iconMeta","ky","icon_content_type","type","ActionType","SET_APP_CONFIG","payload","err","console","error","auth","access_token","id","authData","authLink","Linking","getInitialURL","Clipboard","getString","includes","CHANGE_ROUTE","route","opts","DEFAULT_USER_AGENT","startsWith","authStr","split","JSON","parse","base64","decode","setString","LOGIN_SUCCESS","retrieveUserInfo","useCallback","userInfo","Authorization","LOAD_USER","UPDATE_LOCAL_ACLS","redacted","reduce","acc","field","shared","retrieveAcls","appUserAcls","acls","Error","user","needs_refresh","SET_REFRESH_USER_DATA","saveAclsDebounced","useDebounce","saveAcls","local_acls","put","localAclsRef","useRef","current","isEqual","saveUserDataDebounced","saveUserData","data","SET_IS_SAVING_USER_DATA","saving","eventDetails","events","EventType","USER_DATA_SAVED","userDataRef","email","phone_number"],"sources":["DefaultContext.tsx"],"sourcesContent":["import { useEffect, useCallback, useRef } from 'react';\nimport isEqual from 'lodash-es/isEqual';\nimport { useDebounce, useApi, useDeviceFingerprint } from '../hooks';\nimport { DEFAULT_USER_AGENT } from '../hooks/api';\nimport { IConfig } from '../utils/config';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport ky from 'ky';\nimport Clipboard from '@react-native-clipboard/clipboard';\nimport base64 from 'react-native-base64';\nimport { Linking } from 'react-native';\nimport { events, EventType } from '../utils/events';\n\nexport type UserInfoResp = {\n data: {\n [key: string]: any;\n };\n redacted: string[];\n};\n\ninterface UserAclsResponse {\n acls: Record<string, { shared: boolean }>;\n}\n\ntype DefaultContextProps = {\n config: IConfig;\n};\n\nexport function DefaultContext({ config }: DefaultContextProps) {\n const { state, dispatch } = useGlobalContext();\n const { client: api } = useApi();\n useDeviceFingerprint();\n\n // Fetch app schema and config\n useEffect(() => {\n (async () => {\n try {\n const resp: any = await api\n .get('hub/app-config', {\n headers: {\n 'x-rownd-app-key': config.appKey,\n },\n })\n .json();\n\n if (resp?.app?.icon) {\n const iconMeta = await ky.get(resp.app.icon);\n resp.app.icon_content_type = iconMeta.headers.get('content-type');\n }\n\n dispatch({\n type: ActionType.SET_APP_CONFIG,\n payload: resp.app,\n });\n } catch (err) {\n console.error('Failed to fetch app config:', err);\n }\n })();\n }, [api, config.appKey, dispatch]);\n\n /**\n * If not signed in, check the clipboard for an init hash or auth link we can use to auto-auth the user\n */\n useEffect(() => {\n if (state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n try {\n let authData = null;\n\n let authLink =\n (await Linking.getInitialURL()) || (await Clipboard.getString());\n if (authLink.includes('rownd.link')) {\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/account/auto-signin',\n opts: {\n type: 'sign-in',\n },\n },\n });\n\n authData = await ky\n .get(authLink, {\n headers: {\n 'User-Agent': DEFAULT_USER_AGENT,\n },\n })\n .json();\n } else if (authLink.startsWith('rph_init=')) {\n const authStr = authLink.split('rph_init=')[1];\n authData = JSON.parse(base64.decode(authStr));\n } else {\n return;\n }\n\n // Clear the clipboard value so we don't leak any creds\n Clipboard.setString('');\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: authData,\n });\n } catch (err) {\n console.error(\n 'We found an auth link or string, but failed to authenticate with it because:',\n err\n );\n }\n })();\n }, [state.auth.access_token, state.app.id, dispatch]);\n\n const retrieveUserInfo = useCallback(() => {\n if (!state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n const userInfo: UserInfoResp = await api\n .get(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.LOAD_USER,\n payload: userInfo,\n });\n\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: userInfo.redacted.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = { shared: false };\n return acc;\n },\n {}\n ),\n });\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n const retrieveAcls = useCallback(() => {\n if (!state.app.id || !state.auth.access_token) {\n return;\n }\n\n (async () => {\n try {\n const appUserAcls: UserAclsResponse = await api\n .get(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: appUserAcls.acls,\n });\n } catch (err) {\n if (err instanceof Error) {\n // const unsharedAcls = reduceSchemaToUnsharedAcls();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: {},\n });\n }\n }\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n useEffect(retrieveUserInfo, [retrieveUserInfo]);\n useEffect(retrieveAcls, [retrieveAcls]);\n\n useEffect(() => {\n if (!state.user.needs_refresh) {\n return;\n }\n retrieveUserInfo();\n dispatch({\n type: ActionType.SET_REFRESH_USER_DATA,\n payload: { needs_refresh: false },\n });\n }, [dispatch, retrieveUserInfo, state.user.needs_refresh]);\n\n const saveAclsDebounced = useDebounce(saveAcls, 2000); // 2s\n\n async function saveAcls() {\n if (state.app.id && state.local_acls) {\n await api\n .put(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n acls: state.local_acls,\n },\n })\n .json();\n }\n }\n\n const localAclsRef = useRef(state.local_acls);\n useEffect(() => {\n // Don't save acls if they were just loaded for the first time or they haven't changed\n if (\n !localAclsRef.current ||\n isEqual(localAclsRef.current, state.local_acls)\n ) {\n return;\n }\n saveAclsDebounced();\n }, [saveAclsDebounced, state.local_acls]);\n\n const saveUserDataDebounced = useDebounce(saveUserData, 2000); // 2s\n\n // Save user data in the application state to the API server\n async function saveUserData() {\n if (state.app.id && state.user.data && state.auth.access_token) {\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: true,\n },\n });\n\n const eventDetails: Record<string, any> = {};\n try {\n eventDetails.data = await api\n .put(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n data: state.user.data,\n },\n })\n .json();\n } catch (err) {\n eventDetails.error = err;\n // Get the latest user info from Rownd. Something was probably bad\n // with the data we just tried to save.\n // This is a bit hacky. We should be able to reset the state without\n // calling rownd again by rolling back to a previously good state...\n retrieveUserInfo();\n // TODO: Set some error state\n } finally {\n events.dispatch(EventType.USER_DATA_SAVED, eventDetails);\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: false,\n },\n });\n }\n }\n }\n\n const userDataRef = useRef(state.user.data);\n useEffect(() => {\n // Don't update the user data in the API server if the email is unknown or the data hasn't changed\n if (\n (!state.user.data?.email && !state.user.data.phone_number) ||\n isEqual(userDataRef.current, state.user.data)\n ) {\n return;\n }\n saveUserDataDebounced();\n userDataRef.current = state.user.data;\n }, [dispatch, saveUserDataDebounced, state.user.data]);\n\n return null;\n}\n"],"mappings":"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"}
@@ -15,8 +15,6 @@ var _GlobalContext = require("./GlobalContext");
15
15
 
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
- // import { useDeviceContext } from 'twrnc';
19
- // import tw from '../utils/tailwind';
20
18
  function RowndComponents() {
21
19
  const {
22
20
  state
@@ -1 +1 @@
1
- {"version":3,"names":["RowndComponents","state","useGlobalContext","nav","current_route"],"sources":["RowndComponents.tsx"],"sourcesContent":["import React from 'react';\n// import { useDeviceContext } from 'twrnc';\n\n// import tw from '../utils/tailwind';\nimport { SignIn } from './SignIn';\nimport { AutoSigninDialog } from './AutoSigninDialog';\nimport { useGlobalContext } from './GlobalContext';\n\nexport function RowndComponents() {\n const { state } = useGlobalContext();\n // useDeviceContext(tw);\n\n return (\n <>\n {state.nav.current_route === '/account/login' && <SignIn />}\n {state.nav.current_route === '/account/auto-signin' && (\n <AutoSigninDialog />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;AACA;;;;AALA;AAEA;AAKO,SAASA,eAAT,GAA2B;EAChC,MAAM;IAAEC;EAAF,IAAY,IAAAC,+BAAA,GAAlB,CADgC,CAEhC;;EAEA,oBACE,4DACGD,KAAK,CAACE,GAAN,CAAUC,aAAV,KAA4B,gBAA5B,iBAAgD,6BAAC,cAAD,OADnD,EAEGH,KAAK,CAACE,GAAN,CAAUC,aAAV,KAA4B,sBAA5B,iBACC,6BAAC,kCAAD,OAHJ,CADF;AAQD"}
1
+ {"version":3,"names":["RowndComponents","state","useGlobalContext","nav","current_route"],"sources":["RowndComponents.tsx"],"sourcesContent":["import React from 'react';\nimport { SignIn } from './SignIn';\nimport { AutoSigninDialog } from './AutoSigninDialog';\nimport { useGlobalContext } from './GlobalContext';\n\nexport function RowndComponents() {\n const { state } = useGlobalContext();\n // useDeviceContext(tw);\n\n return (\n <>\n {state.nav.current_route === '/account/login' && <SignIn />}\n {state.nav.current_route === '/account/auto-signin' && (\n <AutoSigninDialog />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;;;AAEO,SAASA,eAAT,GAA2B;EAChC,MAAM;IAAEC;EAAF,IAAY,IAAAC,+BAAA,GAAlB,CADgC,CAEhC;;EAEA,oBACE,4DACGD,KAAK,CAACE,GAAN,CAAUC,aAAV,KAA4B,gBAA5B,iBAAgD,6BAAC,cAAD,OADnD,EAEGH,KAAK,CAACE,GAAN,CAAUC,aAAV,KAA4B,sBAA5B,iBACC,6BAAC,kCAAD,OAHJ,CADF;AAQD"}
@@ -13,8 +13,6 @@ var _reactNative = require("react-native");
13
13
 
14
14
  var _reactNativeSvg = require("react-native-svg");
15
15
 
16
- var _tailwind = _interopRequireDefault(require("../utils/tailwind"));
17
-
18
16
  var _phone = _interopRequireDefault(require("phone"));
19
17
 
20
18
  var _jwtDecode = _interopRequireDefault(require("jwt-decode"));
@@ -443,9 +441,10 @@ function SignIn() {
443
441
  enablesReturnKeyAutomatically: true,
444
442
  autoCapitalize: "none",
445
443
  onChangeText: text => setUserIdentifier(text.trim()),
446
- onBlur: validateInput,
447
- value: userIdentifier,
448
- onSubmitEditing: initSignIn
444
+ onBlur: validateInput // value={userIdentifier}
445
+ ,
446
+ onSubmitEditing: initSignIn,
447
+ autoCorrect: false
449
448
  }), requiresAdditionalFields && (app === null || app === void 0 ? void 0 : (_app$config7 = app.config) === null || _app$config7 === void 0 ? void 0 : (_app$config7$hub = _app$config7.hub) === null || _app$config7$hub === void 0 ? void 0 : (_app$config7$hub$auth = _app$config7$hub.auth) === null || _app$config7$hub$auth === void 0 ? void 0 : _app$config7$hub$auth.additional_fields.map(field => {
450
449
  return (0, _form.renderField)({ ...field,
451
450
  value: addlFieldValues[field.name] || '',
@@ -474,9 +473,9 @@ function SignIn() {
474
473
  }, "By continuing, you're agreeing to the terms of service that govern this app and to receive email or text messages for verification purposes.")), step === LoginStep.WAITING && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
475
474
  style: styles.dialogHeading
476
475
  }, "Thanks! Verify your", ' ', loginType === 'phone' ? 'phone number' : 'email', " to finish"), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
477
- style: _tailwind.default.style('py-6')
476
+ style: styles.py6
478
477
  }, "Click the link in the message we just sent to", ' ', /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
479
- style: _tailwind.default.style('italic')
478
+ style: styles.italic
480
479
  }, userIdentifier), " to verify and finish.", /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
481
480
  style: [styles.link],
482
481
  onPress: () => setStep(LoginStep.INIT)
@@ -490,16 +489,16 @@ function SignIn() {
490
489
  }, "Try a different", ' ', loginType === 'phone' ? 'phone number' : 'email'))), step === LoginStep.SUCCESS && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
491
490
  style: styles.signInVerificationImage
492
491
  }, /*#__PURE__*/_react.default.createElement(_CheckmarkFilled.default, null))), step === LoginStep.FAILURE && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
493
- style: _tailwind.default.style('text-base')
492
+ style: styles.textBase
494
493
  }, "Whoops, that didn't work!"), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
495
494
  style: styles.button,
496
495
  onPress: () => setStep(LoginStep.INIT)
497
496
  }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
498
497
  style: styles.buttonContent
499
498
  }, "Try again"))), step === LoginStep.ERROR && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
500
- style: _tailwind.default.style('text-base')
499
+ style: styles.textBase
501
500
  }, "An error occurred while signing you in."), !!error && /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
502
- style: _tailwind.default.style('text-rose-800')
501
+ style: styles.textRose800
503
502
  }, error), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
504
503
  style: styles.button,
505
504
  onPress: () => setStep(LoginStep.INIT)
@@ -621,6 +620,19 @@ const styles = _reactNative.StyleSheet.create({
621
620
  },
622
621
  link: {
623
622
  color: '#6114e1'
623
+ },
624
+ py6: {
625
+ paddingVertical: 6
626
+ },
627
+ italic: {
628
+ fontStyle: 'italic'
629
+ },
630
+ textBase: {
631
+ fontSize: 16,
632
+ lineHeight: 24
633
+ },
634
+ textRose800: {
635
+ color: 'rgb(159, 18, 57)'
624
636
  }
625
637
  });
626
638
  //# sourceMappingURL=SignIn.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["LoginStep","LoginVerificationStatus","SignIn","navTo","useNav","getFingerprint","getChallengeIfPresent","clearFingerprint","useDeviceFingerprint","state","dispatch","useGlobalContext","config","nav","app","user","decodedAccessToken","auth","access_token","jwt_decode","userIdentifier","setUserIdentifier","useState","fieldError","setFieldError","step","setStep","SUCCESS","INIT","error","setError","allowedIdentifiers","useMemo","requestId","setRequestId","loginPollStart","setLoginPollStart","isSubmitting","setIsSubmitting","loginType","setLoginType","_phoneDetails","setPhoneDetails","isValidUserIdentifier","setIsValidUserIdentifier","requiresAdditionalFields","setRequiresAdditionalFields","options","init_data","bottomSheetModalRef","useRef","useEffect","current","present","addlFieldInit","useCallback","currentState","addlFields","hub","additional_fields","addlInputs","default_values","newState","length","field","name","value","fieldReducer","action","console","log","type","payload","addlFieldValues","addlFieldDispatch","useReducer","client","api","useApi","validateEmail","email","re","isValid","test","String","toLowerCase","isValidPhone","phoneResult","phone","phoneNumber","isValidEmail","emailAtIdx","indexOf","emailSuffixIdx","substring","validateInput","validations","includes","push","some","fn","pollLoginStatus","resp","post","headers","appKey","json","challenge_id","err","status","Error","code","PENDING","ActionType","LOGIN_SUCCESS","differenceInMinutes","Date","now","ERROR","FAILURE","useInterval","WAITING","post_login_redirect","postLoginUrl","Linking","openURL","CHANGE_ROUTE","route","is_verified_user","initSignIn","return_url","user_data","Object","values","data","f","undefined","default_user_id_format","user_id","fingerprint","challengeEntry","id","hash","visitorId","challenge","auth_tokens","app_id","response","message","launchRowndWebsite","handleAddlFieldChange","evt","target","handleClose","setTimeout","hide","snapPoints","renderBackdrop","cbProps","extraBottomSheetProps","bottomSheetMeta","version","startsWith","keyboardBehavior","android_keyboardInputMode","enablePanDownToClose","styles","bottomSheet","innerContainer","show_app_icon","icon","icon_content_type","appLogo","uri","dialogHeading","inputLabel","identifierInput","text","trim","map","renderField","button","buttonDisabled","buttonSubmitting","buttonText","buttonContent","buttonDisabledText","loadingIndicator","signInNoticeText","tw","style","link","signInVerificationImage","StyleSheet","create","modal","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","borderRadius","borderColor","borderWidth","padding","container","flex","header","alignItems","backgroundColor","paddingVertical","borderTopLeftRadius","borderTopRightRadius","panelHandle","resizeMode","textAlign","marginLeft","marginRight","marginBottom","fontSize","marginTop","color","display","justifyContent","buttonPressed","opacity","buttonTextInner"],"sources":["SignIn.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport { differenceInMinutes } from 'date-fns';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n Image,\n ActivityIndicator,\n Linking,\n Text,\n} from 'react-native';\n// import Text from './DarkText';\nimport { SvgCssUri } from 'react-native-svg';\nimport tw from '../utils/tailwind';\nimport phone, { PhoneResult } from 'phone';\nimport jwt_decode from 'jwt-decode';\nimport {\n BottomSheetBackdrop,\n BottomSheetBackdropProps,\n BottomSheetModal,\n} from '@gorhom/bottom-sheet';\nimport BottomSheetTextInput from './BottomSheetTextInput';\nimport bottomSheetMeta from '@gorhom/bottom-sheet/package.json';\n\nimport { useApi, useInterval, useNav, useDeviceFingerprint } from '../hooks';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport { renderField } from '../utils/form';\n\n// Image imports\nimport ImageEmailVerifyWaiting from './images/EmailVerifyWaiting';\nimport ImagePhoneVerifyWaiting from './images/PhoneVerifyWaiting';\nimport ImageCheckmarkFilled from './images/CheckmarkFilled';\n\nenum LoginStep {\n INIT = 'init',\n WAITING = 'waiting',\n SUCCESS = 'success',\n FAILURE = 'failure',\n ERROR = 'error',\n}\n\ntype LoginInitBody = {\n challenge_id: string;\n message: string;\n auth_tokens?: {\n access_token: string;\n refresh_token: string;\n };\n registration_status: string;\n init_data?: Record<string, any>;\n};\n\ntype LoginSuccessBody = {\n access_token: string;\n refresh_token: string;\n app_user_id: string;\n app_id: string;\n status: string;\n};\n\nenum LoginVerificationStatus {\n PENDING = 'pending',\n EXPIRED = 'expired',\n VERIFIED = 'verified',\n}\n\nexport function SignIn() {\n const navTo = useNav();\n const { getFingerprint, getChallengeIfPresent, clearFingerprint } =\n useDeviceFingerprint();\n const { state, dispatch } = useGlobalContext();\n const { config, nav, app, user } = state;\n\n let decodedAccessToken: any;\n if (state.auth.access_token) {\n decodedAccessToken = jwt_decode(state.auth.access_token);\n }\n\n const [userIdentifier, setUserIdentifier] = useState('');\n const [fieldError, setFieldError] = useState<string | null>(null);\n const [step, setStep] = useState(\n state.auth.access_token &&\n decodedAccessToken?.['https://auth.rownd.io/is_verified_user'] !== false\n ? LoginStep.SUCCESS\n : LoginStep.INIT\n );\n const [error, setError] = useState('');\n const allowedIdentifiers = useMemo(() => ['email', 'phone'], []);\n const [requestId, setRequestId] = useState<string | null>(null);\n const [loginPollStart, setLoginPollStart] = useState<number | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [loginType, setLoginType] = useState<'email' | 'phone' | null>(null);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_phoneDetails, setPhoneDetails] = useState<PhoneResult | null>(null); // TODO: For parity with web, need to use `phoneDetails` to update the input visuals\n const [isValidUserIdentifier, setIsValidUserIdentifier] = useState(false);\n const [requiresAdditionalFields, setRequiresAdditionalFields] = useState(\n nav?.options?.init_data\n );\n\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n useEffect(() => {\n if (bottomSheetModalRef.current) {\n bottomSheetModalRef.current.present();\n }\n }, []);\n\n const addlFieldInit = useCallback(\n (currentState: Record<string, string>) => {\n const addlFields = app?.config?.hub?.auth?.additional_fields;\n const addlInputs =\n nav?.options?.init_data || nav?.options?.default_values || {};\n\n const newState: Record<string, string> = {};\n if (addlFields?.length) {\n for (const field of addlFields) {\n if (field?.options) {\n newState[field.name] =\n addlInputs?.[field.name] || field.options[0].value;\n }\n }\n }\n\n return {\n ...currentState,\n ...newState,\n };\n },\n [\n app?.config?.hub?.auth?.additional_fields,\n nav?.options?.default_values,\n nav?.options?.init_data,\n ]\n );\n\n const fieldReducer = useCallback(\n (\n currentState: any,\n action: { type: string; payload?: Record<string, string> }\n ) => {\n console.log('fieldReducer', action);\n switch (action.type) {\n case 'reset':\n return addlFieldInit(currentState);\n\n default:\n return {\n ...currentState,\n ...action.payload,\n };\n }\n },\n [addlFieldInit]\n );\n\n const [addlFieldValues, addlFieldDispatch] = useReducer(\n fieldReducer,\n {},\n addlFieldInit\n );\n\n const { client: api } = useApi();\n\n function validateEmail(email: string): boolean {\n const re =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const isValid = re.test(String(email).toLowerCase());\n\n if (!isValid) {\n setFieldError('Invalid email address');\n return false;\n }\n\n setFieldError(null);\n return true;\n }\n\n const isValidPhone = useCallback((): boolean => {\n const phoneResult = phone(userIdentifier);\n if (!phoneResult.isValid) {\n setLoginType(null);\n setPhoneDetails(null);\n return false;\n }\n\n setLoginType('phone');\n setPhoneDetails(phoneResult);\n setUserIdentifier(phoneResult.phoneNumber);\n return true;\n }, [userIdentifier]);\n\n const isValidEmail = useCallback((): boolean => {\n const emailAtIdx = userIdentifier?.indexOf('@');\n const emailSuffixIdx = userIdentifier?.substring(emailAtIdx).indexOf('.');\n if (\n emailAtIdx > 0 &&\n emailSuffixIdx > 0 &&\n userIdentifier?.substring(emailAtIdx + emailSuffixIdx).length >= 3\n ) {\n return validateEmail(userIdentifier);\n }\n\n return false;\n }, [userIdentifier]);\n\n const validateInput = useCallback(() => {\n const validations = [];\n if (allowedIdentifiers.includes('phone')) {\n validations.push(isValidPhone);\n }\n\n if (allowedIdentifiers.includes('email')) {\n validations.push(isValidEmail);\n }\n\n if (!validations.some((fn) => fn())) {\n setIsValidUserIdentifier(false);\n } else {\n setIsValidUserIdentifier(true);\n }\n }, [allowedIdentifiers, isValidEmail, isValidPhone]);\n\n // Fire validation as data changes in field\n useEffect(validateInput, [validateInput]);\n\n const pollLoginStatus = useCallback(async () => {\n try {\n const resp: LoginSuccessBody = await api\n .post(`hub/auth/challenge_status`, {\n headers: {\n 'x-rownd-app-key': config?.appKey,\n },\n json: {\n challenge_id: requestId,\n [loginType === 'phone' ? 'phone' : 'email']: userIdentifier,\n },\n })\n .json();\n\n let err: any;\n switch (resp.status) {\n case 'pending':\n err = new Error('Login challenge is still pending');\n err.code = LoginVerificationStatus.PENDING;\n throw err;\n\n case 'expired':\n err = new Error('Login challenge is still pending');\n err.code = LoginVerificationStatus.PENDING;\n throw err;\n\n case 'verified':\n break;\n\n default:\n err = new Error('Unknown login challenge status');\n throw err;\n }\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: resp,\n });\n\n setStep(LoginStep.SUCCESS);\n } catch (err: any) {\n // logger.log('login poll error', err);\n\n // If network error, try again up to 1 minute, else fail\n if (!err.code && differenceInMinutes(Date.now(), loginPollStart!) > 0) {\n setStep(LoginStep.ERROR);\n setError('Network error. Please try again later.');\n return;\n }\n\n // If request expires, then fail (assume > 6 mins is a failure/expiration)\n if (\n (err.status || err.code) &&\n differenceInMinutes(Date.now(), loginPollStart!) > 6\n ) {\n setStep(LoginStep.ERROR);\n setError('The sign in request expired.');\n return;\n }\n\n if (err.status && err.status >= 400) {\n setStep(LoginStep.FAILURE);\n setError('Sign in unsuccessful.');\n }\n }\n }, [\n api,\n config?.appKey,\n dispatch,\n loginPollStart,\n loginType,\n requestId,\n userIdentifier,\n ]);\n\n // Polling when a login flow is in progress\n useInterval(pollLoginStatus, step === LoginStep.WAITING ? 5000 : null);\n\n // login polling manager\n useEffect(() => {\n if (step === LoginStep.SUCCESS) {\n if (nav?.options?.post_login_redirect || state.config?.postLoginUrl) {\n Linking.openURL(\n nav?.options?.post_login_redirect || state.config?.postLoginUrl\n );\n }\n\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/',\n },\n });\n\n // Reset modal state if this user is unverified, since we'll need to re-submit at some point\n if (!state.auth.is_verified_user) {\n setStep(LoginStep.INIT);\n }\n }\n }, [\n dispatch,\n nav?.options?.post_login_redirect,\n pollLoginStatus,\n state.auth.is_verified_user,\n state.config?.postLoginUrl,\n step,\n ]);\n\n const initSignIn = useCallback(async () => {\n if (step === LoginStep.WAITING) {\n return;\n }\n\n // Validation\n if (fieldError) {\n return;\n }\n\n const payload = {\n [loginType === 'phone' ? 'phone' : 'email']: userIdentifier,\n return_url:\n nav?.options?.post_login_redirect || state.config?.postLoginUrl,\n user_data: Object.values(user.data).some(\n (f) => f !== null && f !== undefined\n )\n ? user.data\n : {}, // Include user.data if at least one field is defined\n };\n\n // Set the user_id to the application's default user id format if it is defined\n if (app.config?.default_user_id_format) {\n payload.user_id = app.config?.default_user_id_format;\n }\n\n if (requiresAdditionalFields) {\n payload.user_data = {\n ...payload.user_data,\n ...addlFieldValues,\n };\n }\n\n // Submission\n try {\n setIsSubmitting(true);\n\n // Get the browser fingerprint for future sign-ins that don't require re-verification\n const fingerprint = await getFingerprint();\n const challengeEntry = await getChallengeIfPresent(app.id, [\n userIdentifier,\n ]);\n payload.fingerprint = {\n hash: fingerprint.visitorId,\n challenge: challengeEntry?.value,\n };\n\n const resp: LoginInitBody = await api\n .post('hub/auth/init', {\n headers: {\n 'x-rownd-app-key': config?.appKey,\n },\n json: payload,\n })\n .json();\n\n // This will only be true when a user is signing in for the very first time and\n // the app allows unverified users OR the user was successfully fingerprinted.\n if (resp.auth_tokens) {\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: {\n ...resp.auth_tokens,\n app_id: app.id,\n },\n });\n\n setStep(LoginStep.SUCCESS);\n return;\n } else if (payload?.fingerprint?.challenge) {\n // The fingerprint is probably expired, so delete the challenge for re-registration\n try {\n clearFingerprint(payload.fingerprint.challenge);\n } catch (err) {\n // no-op, but not likely to throw anyway\n }\n }\n\n setRequestId(resp.challenge_id);\n setStep(LoginStep.WAITING);\n setLoginPollStart(Date.now());\n } catch (err: any) {\n // logger.error(err);\n\n if (err.response.status === 400) {\n setStep(LoginStep.INIT);\n setRequiresAdditionalFields(true);\n return;\n }\n\n setStep(LoginStep.ERROR);\n setError(err.message);\n } finally {\n setIsSubmitting(false);\n }\n }, [\n step,\n fieldError,\n loginType,\n userIdentifier,\n nav?.options?.post_login_redirect,\n state.config?.postLoginUrl,\n user.data,\n app.config?.default_user_id_format,\n app.id,\n requiresAdditionalFields,\n addlFieldValues,\n getFingerprint,\n getChallengeIfPresent,\n api,\n config?.appKey,\n dispatch,\n clearFingerprint,\n ]);\n\n const launchRowndWebsite = () => {\n Linking.openURL('https://rownd.io');\n };\n\n const handleAddlFieldChange = (evt: Event) => {\n const target = evt.target as HTMLInputElement;\n const { value, name } = target;\n\n addlFieldDispatch({\n type: 'default',\n payload: {\n [name]: value,\n },\n });\n };\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n navTo({ hide: true });\n }, 150);\n }, [navTo]);\n\n const snapPoints = useMemo(() => ['25%', '70%'], []);\n\n const renderBackdrop = useCallback(\n (cbProps: BottomSheetBackdropProps) => (\n <BottomSheetBackdrop {...cbProps} pressBehavior=\"close\" />\n ),\n []\n );\n\n let extraBottomSheetProps: any = {};\n if (bottomSheetMeta.version.startsWith('4')) {\n extraBottomSheetProps.keyboardBehavior = 'fillParent';\n extraBottomSheetProps.android_keyboardInputMode = 'adjustResize';\n extraBottomSheetProps.enablePanDownToClose =\n state?.nav?.options?.type === 'error';\n }\n\n return (\n <BottomSheetModal\n snapPoints={snapPoints}\n index={1}\n backdropComponent={renderBackdrop}\n onDismiss={handleClose}\n style={styles.bottomSheet}\n ref={bottomSheetModalRef}\n {...extraBottomSheetProps}\n >\n <View style={styles.innerContainer}>\n {step === LoginStep.INIT && (\n <>\n {app?.config?.hub?.auth?.show_app_icon &&\n app?.icon &&\n (app.icon_content_type === 'image/svg+xml' ? (\n <SvgCssUri uri={app.icon} style={styles.appLogo} />\n ) : (\n <Image style={styles.appLogo} source={{ uri: app.icon }} />\n ))}\n <Text style={styles.dialogHeading}>Sign in or sign up</Text>\n <Text style={styles.inputLabel}>Email or phone number</Text>\n <BottomSheetTextInput\n style={styles.identifierInput}\n placeholder=\"Enter here\"\n keyboardType=\"email-address\"\n textContentType=\"emailAddress\"\n returnKeyLabel=\"Sign in\"\n returnKeyType=\"go\"\n enablesReturnKeyAutomatically={true}\n autoCapitalize=\"none\"\n onChangeText={(text: string) => setUserIdentifier(text.trim())}\n onBlur={validateInput}\n value={userIdentifier}\n onSubmitEditing={initSignIn}\n />\n {requiresAdditionalFields &&\n app?.config?.hub?.auth?.additional_fields.map((field) => {\n return renderField({\n ...field,\n value: addlFieldValues[field.name] || '',\n [['input', 'text', 'tel', 'email'].includes(field.type)\n ? 'onInput'\n : 'onChange']: handleAddlFieldChange,\n });\n })}\n <TouchableOpacity\n disabled={!isValidUserIdentifier || isSubmitting}\n onPress={initSignIn}\n >\n <View\n style={{\n ...styles.button,\n ...(!isValidUserIdentifier && styles.buttonDisabled),\n ...(isSubmitting && styles.buttonSubmitting),\n }}\n >\n <View style={styles.buttonText}>\n <Text\n style={\n isValidUserIdentifier\n ? styles.buttonContent\n : {\n ...styles.buttonContent,\n ...styles.buttonDisabledText,\n }\n }\n >\n {isSubmitting && (\n <ActivityIndicator\n size=\"small\"\n color=\"#efefef\"\n style={styles.loadingIndicator}\n />\n )}\n {isSubmitting ? 'Just a sec...' : 'Continue'}\n </Text>\n </View>\n </View>\n </TouchableOpacity>\n <Text style={styles.signInNoticeText}>\n By continuing, you're agreeing to the terms of service that govern\n this app and to receive email or text messages for verification\n purposes.\n </Text>\n </>\n )}\n\n {step === LoginStep.WAITING && (\n <>\n <Text style={styles.dialogHeading}>\n Thanks! Verify your{' '}\n {loginType === 'phone' ? 'phone number' : 'email'} to finish\n </Text>\n <Text style={tw.style('py-6')}>\n Click the link in the message we just sent to{' '}\n <Text style={tw.style('italic')}>{userIdentifier}</Text> to verify\n and finish.\n <Text\n style={[styles.link]}\n onPress={() => setStep(LoginStep.INIT)}\n >\n &nbsp;Re-send message\n </Text>\n </Text>\n\n <View style={styles.signInVerificationImage}>\n {loginType === 'phone' ? (\n <ImagePhoneVerifyWaiting />\n ) : (\n <ImageEmailVerifyWaiting />\n )}\n </View>\n\n <TouchableOpacity\n style={[styles.button]}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>\n Try a different{' '}\n {loginType === 'phone' ? 'phone number' : 'email'}\n </Text>\n </TouchableOpacity>\n </>\n )}\n\n {step === LoginStep.SUCCESS && (\n <>\n <View style={styles.signInVerificationImage}>\n <ImageCheckmarkFilled />\n </View>\n </>\n )}\n\n {step === LoginStep.FAILURE && (\n <>\n <Text style={tw.style('text-base')}>Whoops, that didn't work!</Text>\n <TouchableOpacity\n style={styles.button}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>Try again</Text>\n </TouchableOpacity>\n </>\n )}\n\n {step === LoginStep.ERROR && (\n <>\n <Text style={tw.style('text-base')}>\n An error occurred while signing you in.\n </Text>\n {!!error && <Text style={tw.style('text-rose-800')}>{error}</Text>}\n <TouchableOpacity\n style={styles.button}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>Try again</Text>\n </TouchableOpacity>\n </>\n )}\n <Text>\n Powered by{' '}\n <Text style={styles.link} onPress={launchRowndWebsite}>\n Rownd\n </Text>\n </Text>\n </View>\n </BottomSheetModal>\n );\n}\n\nconst styles = StyleSheet.create({\n modal: {\n // flex: 1,\n },\n bottomSheet: {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 12,\n },\n shadowOpacity: 0.58,\n shadowRadius: 16.0,\n\n elevation: 24,\n },\n innerContainer: {\n borderRadius: 20,\n borderColor: 'transparent',\n borderWidth: 0,\n padding: 25,\n },\n container: {\n flex: 1,\n padding: 24,\n },\n header: {\n alignItems: 'center',\n backgroundColor: 'white',\n paddingVertical: 20,\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n },\n panelHandle: {\n width: 40,\n height: 2,\n backgroundColor: 'rgba(0,0,0,0.3)',\n borderRadius: 4,\n },\n appLogo: {\n padding: 50,\n width: 75,\n height: 75,\n resizeMode: 'center',\n textAlign: 'center',\n marginLeft: 'auto',\n marginRight: 'auto',\n marginBottom: 20,\n },\n dialogHeading: {\n fontSize: 24,\n },\n inputLabel: {\n marginTop: 20,\n marginBottom: 5,\n },\n identifierInput: {\n backgroundColor: '#eee',\n borderRadius: 8,\n padding: 10,\n fontSize: 18,\n },\n button: {\n borderRadius: 10,\n padding: 10,\n marginTop: 20,\n marginBottom: 30,\n elevation: 0,\n backgroundColor: '#5b0ae0',\n color: '#fff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // height: 45,\n },\n buttonDisabled: {\n backgroundColor: '#eee',\n },\n buttonPressed: {\n opacity: 0.5,\n },\n buttonContent: {\n textAlign: 'center',\n fontSize: 18,\n color: '#fff',\n },\n buttonText: {\n // marginHorizontal: 10,\n // paddingHorizontal: 10,\n // fontSize: 18,\n // color: '#fff',\n },\n buttonTextInner: {\n fontSize: 18,\n },\n buttonDisabledText: {\n color: '#8e8e8e',\n },\n buttonSubmitting: {\n backgroundColor: '#2f0492',\n color: '#c7c7c7',\n },\n loadingIndicator: {\n marginRight: 10,\n },\n signInNoticeText: {\n fontSize: 12,\n marginBottom: 20,\n },\n signInVerificationImage: {\n alignItems: 'center',\n },\n link: {\n color: '#6114e1',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["LoginStep","LoginVerificationStatus","SignIn","navTo","useNav","getFingerprint","getChallengeIfPresent","clearFingerprint","useDeviceFingerprint","state","dispatch","useGlobalContext","config","nav","app","user","decodedAccessToken","auth","access_token","jwt_decode","userIdentifier","setUserIdentifier","useState","fieldError","setFieldError","step","setStep","SUCCESS","INIT","error","setError","allowedIdentifiers","useMemo","requestId","setRequestId","loginPollStart","setLoginPollStart","isSubmitting","setIsSubmitting","loginType","setLoginType","_phoneDetails","setPhoneDetails","isValidUserIdentifier","setIsValidUserIdentifier","requiresAdditionalFields","setRequiresAdditionalFields","options","init_data","bottomSheetModalRef","useRef","useEffect","current","present","addlFieldInit","useCallback","currentState","addlFields","hub","additional_fields","addlInputs","default_values","newState","length","field","name","value","fieldReducer","action","console","log","type","payload","addlFieldValues","addlFieldDispatch","useReducer","client","api","useApi","validateEmail","email","re","isValid","test","String","toLowerCase","isValidPhone","phoneResult","phone","phoneNumber","isValidEmail","emailAtIdx","indexOf","emailSuffixIdx","substring","validateInput","validations","includes","push","some","fn","pollLoginStatus","resp","post","headers","appKey","json","challenge_id","err","status","Error","code","PENDING","ActionType","LOGIN_SUCCESS","differenceInMinutes","Date","now","ERROR","FAILURE","useInterval","WAITING","post_login_redirect","postLoginUrl","Linking","openURL","CHANGE_ROUTE","route","is_verified_user","initSignIn","return_url","user_data","Object","values","data","f","undefined","default_user_id_format","user_id","fingerprint","challengeEntry","id","hash","visitorId","challenge","auth_tokens","app_id","response","message","launchRowndWebsite","handleAddlFieldChange","evt","target","handleClose","setTimeout","hide","snapPoints","renderBackdrop","cbProps","extraBottomSheetProps","bottomSheetMeta","version","startsWith","keyboardBehavior","android_keyboardInputMode","enablePanDownToClose","styles","bottomSheet","innerContainer","show_app_icon","icon","icon_content_type","appLogo","uri","dialogHeading","inputLabel","identifierInput","text","trim","map","renderField","button","buttonDisabled","buttonSubmitting","buttonText","buttonContent","buttonDisabledText","loadingIndicator","signInNoticeText","py6","italic","link","signInVerificationImage","textBase","textRose800","StyleSheet","create","modal","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","borderRadius","borderColor","borderWidth","padding","container","flex","header","alignItems","backgroundColor","paddingVertical","borderTopLeftRadius","borderTopRightRadius","panelHandle","resizeMode","textAlign","marginLeft","marginRight","marginBottom","fontSize","marginTop","color","display","justifyContent","buttonPressed","opacity","buttonTextInner","fontStyle","lineHeight"],"sources":["SignIn.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport { differenceInMinutes } from 'date-fns';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n Image,\n ActivityIndicator,\n Linking,\n Text,\n} from 'react-native';\n// import Text from './DarkText';\nimport { SvgCssUri } from 'react-native-svg';\nimport phone, { PhoneResult } from 'phone';\nimport jwt_decode from 'jwt-decode';\nimport {\n BottomSheetBackdrop,\n BottomSheetBackdropProps,\n BottomSheetModal,\n} from '@gorhom/bottom-sheet';\nimport BottomSheetTextInput from './BottomSheetTextInput';\nimport bottomSheetMeta from '@gorhom/bottom-sheet/package.json';\n\nimport { useApi, useInterval, useNav, useDeviceFingerprint } from '../hooks';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport { renderField } from '../utils/form';\n\n// Image imports\nimport ImageEmailVerifyWaiting from './images/EmailVerifyWaiting';\nimport ImagePhoneVerifyWaiting from './images/PhoneVerifyWaiting';\nimport ImageCheckmarkFilled from './images/CheckmarkFilled';\n\nenum LoginStep {\n INIT = 'init',\n WAITING = 'waiting',\n SUCCESS = 'success',\n FAILURE = 'failure',\n ERROR = 'error',\n}\n\ntype LoginInitBody = {\n challenge_id: string;\n message: string;\n auth_tokens?: {\n access_token: string;\n refresh_token: string;\n };\n registration_status: string;\n init_data?: Record<string, any>;\n};\n\ntype LoginSuccessBody = {\n access_token: string;\n refresh_token: string;\n app_user_id: string;\n app_id: string;\n status: string;\n};\n\nenum LoginVerificationStatus {\n PENDING = 'pending',\n EXPIRED = 'expired',\n VERIFIED = 'verified',\n}\n\nexport function SignIn() {\n const navTo = useNav();\n const { getFingerprint, getChallengeIfPresent, clearFingerprint } =\n useDeviceFingerprint();\n const { state, dispatch } = useGlobalContext();\n const { config, nav, app, user } = state;\n\n let decodedAccessToken: any;\n if (state.auth.access_token) {\n decodedAccessToken = jwt_decode(state.auth.access_token);\n }\n\n const [userIdentifier, setUserIdentifier] = useState('');\n const [fieldError, setFieldError] = useState<string | null>(null);\n const [step, setStep] = useState(\n state.auth.access_token &&\n decodedAccessToken?.['https://auth.rownd.io/is_verified_user'] !== false\n ? LoginStep.SUCCESS\n : LoginStep.INIT\n );\n const [error, setError] = useState('');\n const allowedIdentifiers = useMemo(() => ['email', 'phone'], []);\n const [requestId, setRequestId] = useState<string | null>(null);\n const [loginPollStart, setLoginPollStart] = useState<number | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [loginType, setLoginType] = useState<'email' | 'phone' | null>(null);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_phoneDetails, setPhoneDetails] = useState<PhoneResult | null>(null); // TODO: For parity with web, need to use `phoneDetails` to update the input visuals\n const [isValidUserIdentifier, setIsValidUserIdentifier] = useState(false);\n const [requiresAdditionalFields, setRequiresAdditionalFields] = useState(\n nav?.options?.init_data\n );\n\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n useEffect(() => {\n if (bottomSheetModalRef.current) {\n bottomSheetModalRef.current.present();\n }\n }, []);\n\n const addlFieldInit = useCallback(\n (currentState: Record<string, string>) => {\n const addlFields = app?.config?.hub?.auth?.additional_fields;\n const addlInputs =\n nav?.options?.init_data || nav?.options?.default_values || {};\n\n const newState: Record<string, string> = {};\n if (addlFields?.length) {\n for (const field of addlFields) {\n if (field?.options) {\n newState[field.name] =\n addlInputs?.[field.name] || field.options[0].value;\n }\n }\n }\n\n return {\n ...currentState,\n ...newState,\n };\n },\n [\n app?.config?.hub?.auth?.additional_fields,\n nav?.options?.default_values,\n nav?.options?.init_data,\n ]\n );\n\n const fieldReducer = useCallback(\n (\n currentState: any,\n action: { type: string; payload?: Record<string, string> }\n ) => {\n console.log('fieldReducer', action);\n switch (action.type) {\n case 'reset':\n return addlFieldInit(currentState);\n\n default:\n return {\n ...currentState,\n ...action.payload,\n };\n }\n },\n [addlFieldInit]\n );\n\n const [addlFieldValues, addlFieldDispatch] = useReducer(\n fieldReducer,\n {},\n addlFieldInit\n );\n\n const { client: api } = useApi();\n\n function validateEmail(email: string): boolean {\n const re =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const isValid = re.test(String(email).toLowerCase());\n\n if (!isValid) {\n setFieldError('Invalid email address');\n return false;\n }\n\n setFieldError(null);\n return true;\n }\n\n const isValidPhone = useCallback((): boolean => {\n const phoneResult = phone(userIdentifier);\n if (!phoneResult.isValid) {\n setLoginType(null);\n setPhoneDetails(null);\n return false;\n }\n\n setLoginType('phone');\n setPhoneDetails(phoneResult);\n setUserIdentifier(phoneResult.phoneNumber);\n return true;\n }, [userIdentifier]);\n\n const isValidEmail = useCallback((): boolean => {\n const emailAtIdx = userIdentifier?.indexOf('@');\n const emailSuffixIdx = userIdentifier?.substring(emailAtIdx).indexOf('.');\n if (\n emailAtIdx > 0 &&\n emailSuffixIdx > 0 &&\n userIdentifier?.substring(emailAtIdx + emailSuffixIdx).length >= 3\n ) {\n return validateEmail(userIdentifier);\n }\n\n return false;\n }, [userIdentifier]);\n\n const validateInput = useCallback(() => {\n const validations = [];\n if (allowedIdentifiers.includes('phone')) {\n validations.push(isValidPhone);\n }\n\n if (allowedIdentifiers.includes('email')) {\n validations.push(isValidEmail);\n }\n\n if (!validations.some((fn) => fn())) {\n setIsValidUserIdentifier(false);\n } else {\n setIsValidUserIdentifier(true);\n }\n }, [allowedIdentifiers, isValidEmail, isValidPhone]);\n\n // Fire validation as data changes in field\n useEffect(validateInput, [validateInput]);\n\n const pollLoginStatus = useCallback(async () => {\n try {\n const resp: LoginSuccessBody = await api\n .post(`hub/auth/challenge_status`, {\n headers: {\n 'x-rownd-app-key': config?.appKey,\n },\n json: {\n challenge_id: requestId,\n [loginType === 'phone' ? 'phone' : 'email']: userIdentifier,\n },\n })\n .json();\n\n let err: any;\n switch (resp.status) {\n case 'pending':\n err = new Error('Login challenge is still pending');\n err.code = LoginVerificationStatus.PENDING;\n throw err;\n\n case 'expired':\n err = new Error('Login challenge is still pending');\n err.code = LoginVerificationStatus.PENDING;\n throw err;\n\n case 'verified':\n break;\n\n default:\n err = new Error('Unknown login challenge status');\n throw err;\n }\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: resp,\n });\n\n setStep(LoginStep.SUCCESS);\n } catch (err: any) {\n // logger.log('login poll error', err);\n\n // If network error, try again up to 1 minute, else fail\n if (!err.code && differenceInMinutes(Date.now(), loginPollStart!) > 0) {\n setStep(LoginStep.ERROR);\n setError('Network error. Please try again later.');\n return;\n }\n\n // If request expires, then fail (assume > 6 mins is a failure/expiration)\n if (\n (err.status || err.code) &&\n differenceInMinutes(Date.now(), loginPollStart!) > 6\n ) {\n setStep(LoginStep.ERROR);\n setError('The sign in request expired.');\n return;\n }\n\n if (err.status && err.status >= 400) {\n setStep(LoginStep.FAILURE);\n setError('Sign in unsuccessful.');\n }\n }\n }, [\n api,\n config?.appKey,\n dispatch,\n loginPollStart,\n loginType,\n requestId,\n userIdentifier,\n ]);\n\n // Polling when a login flow is in progress\n useInterval(pollLoginStatus, step === LoginStep.WAITING ? 5000 : null);\n\n // login polling manager\n useEffect(() => {\n if (step === LoginStep.SUCCESS) {\n if (nav?.options?.post_login_redirect || state.config?.postLoginUrl) {\n Linking.openURL(\n nav?.options?.post_login_redirect || state.config?.postLoginUrl\n );\n }\n\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/',\n },\n });\n\n // Reset modal state if this user is unverified, since we'll need to re-submit at some point\n if (!state.auth.is_verified_user) {\n setStep(LoginStep.INIT);\n }\n }\n }, [\n dispatch,\n nav?.options?.post_login_redirect,\n pollLoginStatus,\n state.auth.is_verified_user,\n state.config?.postLoginUrl,\n step,\n ]);\n\n const initSignIn = useCallback(async () => {\n if (step === LoginStep.WAITING) {\n return;\n }\n\n // Validation\n if (fieldError) {\n return;\n }\n\n const payload = {\n [loginType === 'phone' ? 'phone' : 'email']: userIdentifier,\n return_url:\n nav?.options?.post_login_redirect || state.config?.postLoginUrl,\n user_data: Object.values(user.data).some(\n (f) => f !== null && f !== undefined\n )\n ? user.data\n : {}, // Include user.data if at least one field is defined\n };\n\n // Set the user_id to the application's default user id format if it is defined\n if (app.config?.default_user_id_format) {\n payload.user_id = app.config?.default_user_id_format;\n }\n\n if (requiresAdditionalFields) {\n payload.user_data = {\n ...payload.user_data,\n ...addlFieldValues,\n };\n }\n\n // Submission\n try {\n setIsSubmitting(true);\n\n // Get the browser fingerprint for future sign-ins that don't require re-verification\n const fingerprint = await getFingerprint();\n const challengeEntry = await getChallengeIfPresent(app.id, [\n userIdentifier,\n ]);\n payload.fingerprint = {\n hash: fingerprint.visitorId,\n challenge: challengeEntry?.value,\n };\n\n const resp: LoginInitBody = await api\n .post('hub/auth/init', {\n headers: {\n 'x-rownd-app-key': config?.appKey,\n },\n json: payload,\n })\n .json();\n\n // This will only be true when a user is signing in for the very first time and\n // the app allows unverified users OR the user was successfully fingerprinted.\n if (resp.auth_tokens) {\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: {\n ...resp.auth_tokens,\n app_id: app.id,\n },\n });\n\n setStep(LoginStep.SUCCESS);\n return;\n } else if (payload?.fingerprint?.challenge) {\n // The fingerprint is probably expired, so delete the challenge for re-registration\n try {\n clearFingerprint(payload.fingerprint.challenge);\n } catch (err) {\n // no-op, but not likely to throw anyway\n }\n }\n\n setRequestId(resp.challenge_id);\n setStep(LoginStep.WAITING);\n setLoginPollStart(Date.now());\n } catch (err: any) {\n // logger.error(err);\n\n if (err.response.status === 400) {\n setStep(LoginStep.INIT);\n setRequiresAdditionalFields(true);\n return;\n }\n\n setStep(LoginStep.ERROR);\n setError(err.message);\n } finally {\n setIsSubmitting(false);\n }\n }, [\n step,\n fieldError,\n loginType,\n userIdentifier,\n nav?.options?.post_login_redirect,\n state.config?.postLoginUrl,\n user.data,\n app.config?.default_user_id_format,\n app.id,\n requiresAdditionalFields,\n addlFieldValues,\n getFingerprint,\n getChallengeIfPresent,\n api,\n config?.appKey,\n dispatch,\n clearFingerprint,\n ]);\n\n const launchRowndWebsite = () => {\n Linking.openURL('https://rownd.io');\n };\n\n const handleAddlFieldChange = (evt: Event) => {\n const target = evt.target as HTMLInputElement;\n const { value, name } = target;\n\n addlFieldDispatch({\n type: 'default',\n payload: {\n [name]: value,\n },\n });\n };\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n navTo({ hide: true });\n }, 150);\n }, [navTo]);\n\n const snapPoints = useMemo(() => ['25%', '70%'], []);\n\n const renderBackdrop = useCallback(\n (cbProps: BottomSheetBackdropProps) => (\n <BottomSheetBackdrop {...cbProps} pressBehavior=\"close\" />\n ),\n []\n );\n\n let extraBottomSheetProps: any = {};\n if (bottomSheetMeta.version.startsWith('4')) {\n extraBottomSheetProps.keyboardBehavior = 'fillParent';\n extraBottomSheetProps.android_keyboardInputMode = 'adjustResize';\n extraBottomSheetProps.enablePanDownToClose =\n state?.nav?.options?.type === 'error';\n }\n\n return (\n <BottomSheetModal\n snapPoints={snapPoints}\n index={1}\n backdropComponent={renderBackdrop}\n onDismiss={handleClose}\n style={styles.bottomSheet}\n ref={bottomSheetModalRef}\n {...extraBottomSheetProps}\n >\n <View style={styles.innerContainer}>\n {step === LoginStep.INIT && (\n <>\n {app?.config?.hub?.auth?.show_app_icon &&\n app?.icon &&\n (app.icon_content_type === 'image/svg+xml' ? (\n <SvgCssUri uri={app.icon} style={styles.appLogo} />\n ) : (\n <Image style={styles.appLogo} source={{ uri: app.icon }} />\n ))}\n <Text style={styles.dialogHeading}>Sign in or sign up</Text>\n <Text style={styles.inputLabel}>Email or phone number</Text>\n <BottomSheetTextInput\n style={styles.identifierInput}\n placeholder=\"Enter here\"\n keyboardType=\"email-address\"\n textContentType=\"emailAddress\"\n returnKeyLabel=\"Sign in\"\n returnKeyType=\"go\"\n enablesReturnKeyAutomatically={true}\n autoCapitalize=\"none\"\n onChangeText={(text: string) => setUserIdentifier(text.trim())}\n onBlur={validateInput}\n // value={userIdentifier}\n onSubmitEditing={initSignIn}\n autoCorrect={false}\n />\n {requiresAdditionalFields &&\n app?.config?.hub?.auth?.additional_fields.map((field) => {\n return renderField({\n ...field,\n value: addlFieldValues[field.name] || '',\n [['input', 'text', 'tel', 'email'].includes(field.type)\n ? 'onInput'\n : 'onChange']: handleAddlFieldChange,\n });\n })}\n <TouchableOpacity\n disabled={!isValidUserIdentifier || isSubmitting}\n onPress={initSignIn}\n >\n <View\n style={{\n ...styles.button,\n ...(!isValidUserIdentifier && styles.buttonDisabled),\n ...(isSubmitting && styles.buttonSubmitting),\n }}\n >\n <View style={styles.buttonText}>\n <Text\n style={\n isValidUserIdentifier\n ? styles.buttonContent\n : {\n ...styles.buttonContent,\n ...styles.buttonDisabledText,\n }\n }\n >\n {isSubmitting && (\n <ActivityIndicator\n size=\"small\"\n color=\"#efefef\"\n style={styles.loadingIndicator}\n />\n )}\n {isSubmitting ? 'Just a sec...' : 'Continue'}\n </Text>\n </View>\n </View>\n </TouchableOpacity>\n <Text style={styles.signInNoticeText}>\n By continuing, you're agreeing to the terms of service that govern\n this app and to receive email or text messages for verification\n purposes.\n </Text>\n </>\n )}\n\n {step === LoginStep.WAITING && (\n <>\n <Text style={styles.dialogHeading}>\n Thanks! Verify your{' '}\n {loginType === 'phone' ? 'phone number' : 'email'} to finish\n </Text>\n <Text style={styles.py6}>\n Click the link in the message we just sent to{' '}\n <Text style={styles.italic}>{userIdentifier}</Text> to verify and\n finish.\n <Text\n style={[styles.link]}\n onPress={() => setStep(LoginStep.INIT)}\n >\n &nbsp;Re-send message\n </Text>\n </Text>\n\n <View style={styles.signInVerificationImage}>\n {loginType === 'phone' ? (\n <ImagePhoneVerifyWaiting />\n ) : (\n <ImageEmailVerifyWaiting />\n )}\n </View>\n\n <TouchableOpacity\n style={[styles.button]}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>\n Try a different{' '}\n {loginType === 'phone' ? 'phone number' : 'email'}\n </Text>\n </TouchableOpacity>\n </>\n )}\n\n {step === LoginStep.SUCCESS && (\n <>\n <View style={styles.signInVerificationImage}>\n <ImageCheckmarkFilled />\n </View>\n </>\n )}\n\n {step === LoginStep.FAILURE && (\n <>\n <Text style={styles.textBase}>Whoops, that didn't work!</Text>\n <TouchableOpacity\n style={styles.button}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>Try again</Text>\n </TouchableOpacity>\n </>\n )}\n\n {step === LoginStep.ERROR && (\n <>\n <Text style={styles.textBase}>\n An error occurred while signing you in.\n </Text>\n {!!error && <Text style={styles.textRose800}>{error}</Text>}\n <TouchableOpacity\n style={styles.button}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>Try again</Text>\n </TouchableOpacity>\n </>\n )}\n <Text>\n Powered by{' '}\n <Text style={styles.link} onPress={launchRowndWebsite}>\n Rownd\n </Text>\n </Text>\n </View>\n </BottomSheetModal>\n );\n}\n\nconst styles = StyleSheet.create({\n modal: {\n // flex: 1,\n },\n bottomSheet: {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 12,\n },\n shadowOpacity: 0.58,\n shadowRadius: 16.0,\n\n elevation: 24,\n },\n innerContainer: {\n borderRadius: 20,\n borderColor: 'transparent',\n borderWidth: 0,\n padding: 25,\n },\n container: {\n flex: 1,\n padding: 24,\n },\n header: {\n alignItems: 'center',\n backgroundColor: 'white',\n paddingVertical: 20,\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n },\n panelHandle: {\n width: 40,\n height: 2,\n backgroundColor: 'rgba(0,0,0,0.3)',\n borderRadius: 4,\n },\n appLogo: {\n padding: 50,\n width: 75,\n height: 75,\n resizeMode: 'center',\n textAlign: 'center',\n marginLeft: 'auto',\n marginRight: 'auto',\n marginBottom: 20,\n },\n dialogHeading: {\n fontSize: 24,\n },\n inputLabel: {\n marginTop: 20,\n marginBottom: 5,\n },\n identifierInput: {\n backgroundColor: '#eee',\n borderRadius: 8,\n padding: 10,\n fontSize: 18,\n },\n button: {\n borderRadius: 10,\n padding: 10,\n marginTop: 20,\n marginBottom: 30,\n elevation: 0,\n backgroundColor: '#5b0ae0',\n color: '#fff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // height: 45,\n },\n buttonDisabled: {\n backgroundColor: '#eee',\n },\n buttonPressed: {\n opacity: 0.5,\n },\n buttonContent: {\n textAlign: 'center',\n fontSize: 18,\n color: '#fff',\n },\n buttonText: {\n // marginHorizontal: 10,\n // paddingHorizontal: 10,\n // fontSize: 18,\n // color: '#fff',\n },\n buttonTextInner: {\n fontSize: 18,\n },\n buttonDisabledText: {\n color: '#8e8e8e',\n },\n buttonSubmitting: {\n backgroundColor: '#2f0492',\n color: '#c7c7c7',\n },\n loadingIndicator: {\n marginRight: 10,\n },\n signInNoticeText: {\n fontSize: 12,\n marginBottom: 20,\n },\n signInVerificationImage: {\n alignItems: 'center',\n },\n link: {\n color: '#6114e1',\n },\n py6: {\n paddingVertical: 6,\n },\n italic: {\n fontStyle: 'italic',\n },\n textBase: {\n fontSize: 16,\n lineHeight: 24,\n },\n textRose800: {\n color: 'rgb(159, 18, 57)',\n },\n});\n"],"mappings":"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"}
@@ -34,7 +34,7 @@ export function DefaultContext(_ref) {
34
34
  }).json();
35
35
 
36
36
  if (resp !== null && resp !== void 0 && (_resp$app = resp.app) !== null && _resp$app !== void 0 && _resp$app.icon) {
37
- const iconMeta = await ky.head(resp.app.icon);
37
+ const iconMeta = await ky.get(resp.app.icon);
38
38
  resp.app.icon_content_type = iconMeta.headers.get('content-type');
39
39
  }
40
40
 
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useCallback","useRef","isEqual","useDebounce","useApi","useDeviceFingerprint","DEFAULT_USER_AGENT","useGlobalContext","ActionType","ky","Clipboard","base64","Linking","events","EventType","DefaultContext","config","state","dispatch","client","api","resp","get","headers","appKey","json","app","icon","iconMeta","head","icon_content_type","type","SET_APP_CONFIG","payload","err","console","error","auth","access_token","id","authData","authLink","getInitialURL","getString","includes","CHANGE_ROUTE","route","opts","startsWith","authStr","split","JSON","parse","decode","setString","LOGIN_SUCCESS","retrieveUserInfo","userInfo","Authorization","LOAD_USER","UPDATE_LOCAL_ACLS","redacted","reduce","acc","field","shared","retrieveAcls","appUserAcls","acls","Error","user","needs_refresh","SET_REFRESH_USER_DATA","saveAclsDebounced","saveAcls","local_acls","put","localAclsRef","current","saveUserDataDebounced","saveUserData","data","SET_IS_SAVING_USER_DATA","saving","eventDetails","USER_DATA_SAVED","userDataRef","email","phone_number"],"sources":["DefaultContext.tsx"],"sourcesContent":["import { useEffect, useCallback, useRef } from 'react';\nimport isEqual from 'lodash-es/isEqual';\nimport { useDebounce, useApi, useDeviceFingerprint } from '../hooks';\nimport { DEFAULT_USER_AGENT } from '../hooks/api';\nimport { IConfig } from '../utils/config';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport ky from 'ky';\nimport Clipboard from '@react-native-clipboard/clipboard';\nimport base64 from 'react-native-base64';\nimport { Linking } from 'react-native';\nimport { events, EventType } from '../utils/events';\n\nexport type UserInfoResp = {\n data: {\n [key: string]: any;\n };\n redacted: string[];\n};\n\ninterface UserAclsResponse {\n acls: Record<string, { shared: boolean }>;\n}\n\ntype DefaultContextProps = {\n config: IConfig;\n};\n\nexport function DefaultContext({ config }: DefaultContextProps) {\n const { state, dispatch } = useGlobalContext();\n const { client: api } = useApi();\n useDeviceFingerprint();\n\n // Fetch app schema and config\n useEffect(() => {\n (async () => {\n try {\n const resp: any = await api\n .get('hub/app-config', {\n headers: {\n 'x-rownd-app-key': config.appKey,\n },\n })\n .json();\n\n if (resp?.app?.icon) {\n const iconMeta = await ky.head(resp.app.icon);\n resp.app.icon_content_type = iconMeta.headers.get('content-type');\n }\n\n dispatch({\n type: ActionType.SET_APP_CONFIG,\n payload: resp.app,\n });\n } catch (err) {\n console.error('Failed to fetch app config:', err);\n }\n })();\n }, [api, config.appKey, dispatch]);\n\n /**\n * If not signed in, check the clipboard for an init hash or auth link we can use to auto-auth the user\n */\n useEffect(() => {\n if (state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n try {\n let authData = null;\n\n let authLink =\n (await Linking.getInitialURL()) || (await Clipboard.getString());\n if (authLink.includes('rownd.link')) {\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/account/auto-signin',\n opts: {\n type: 'sign-in',\n },\n },\n });\n\n authData = await ky\n .get(authLink, {\n headers: {\n 'User-Agent': DEFAULT_USER_AGENT,\n },\n })\n .json();\n } else if (authLink.startsWith('rph_init=')) {\n const authStr = authLink.split('rph_init=')[1];\n authData = JSON.parse(base64.decode(authStr));\n } else {\n return;\n }\n\n // Clear the clipboard value so we don't leak any creds\n Clipboard.setString('');\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: authData,\n });\n } catch (err) {\n console.error(\n 'We found an auth link or string, but failed to authenticate with it because:',\n err\n );\n }\n })();\n }, [state.auth.access_token, state.app.id, dispatch]);\n\n const retrieveUserInfo = useCallback(() => {\n if (!state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n const userInfo: UserInfoResp = await api\n .get(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.LOAD_USER,\n payload: userInfo,\n });\n\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: userInfo.redacted.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = { shared: false };\n return acc;\n },\n {}\n ),\n });\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n const retrieveAcls = useCallback(() => {\n if (!state.app.id || !state.auth.access_token) {\n return;\n }\n\n (async () => {\n try {\n const appUserAcls: UserAclsResponse = await api\n .get(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: appUserAcls.acls,\n });\n } catch (err) {\n if (err instanceof Error) {\n // const unsharedAcls = reduceSchemaToUnsharedAcls();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: {},\n });\n }\n }\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n useEffect(retrieveUserInfo, [retrieveUserInfo]);\n useEffect(retrieveAcls, [retrieveAcls]);\n\n useEffect(() => {\n if (!state.user.needs_refresh) {\n return;\n }\n retrieveUserInfo();\n dispatch({\n type: ActionType.SET_REFRESH_USER_DATA,\n payload: { needs_refresh: false },\n });\n }, [dispatch, retrieveUserInfo, state.user.needs_refresh]);\n\n const saveAclsDebounced = useDebounce(saveAcls, 2000); // 2s\n\n async function saveAcls() {\n if (state.app.id && state.local_acls) {\n await api\n .put(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n acls: state.local_acls,\n },\n })\n .json();\n }\n }\n\n const localAclsRef = useRef(state.local_acls);\n useEffect(() => {\n // Don't save acls if they were just loaded for the first time or they haven't changed\n if (\n !localAclsRef.current ||\n isEqual(localAclsRef.current, state.local_acls)\n ) {\n return;\n }\n saveAclsDebounced();\n }, [saveAclsDebounced, state.local_acls]);\n\n const saveUserDataDebounced = useDebounce(saveUserData, 2000); // 2s\n\n // Save user data in the application state to the API server\n async function saveUserData() {\n if (state.app.id && state.user.data && state.auth.access_token) {\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: true,\n },\n });\n\n const eventDetails: Record<string, any> = {};\n try {\n eventDetails.data = await api\n .put(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n data: state.user.data,\n },\n })\n .json();\n } catch (err) {\n eventDetails.error = err;\n // Get the latest user info from Rownd. Something was probably bad\n // with the data we just tried to save.\n // This is a bit hacky. We should be able to reset the state without\n // calling rownd again by rolling back to a previously good state...\n retrieveUserInfo();\n // TODO: Set some error state\n } finally {\n events.dispatch(EventType.USER_DATA_SAVED, eventDetails);\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: false,\n },\n });\n }\n }\n }\n\n const userDataRef = useRef(state.user.data);\n useEffect(() => {\n // Don't update the user data in the API server if the email is unknown or the data hasn't changed\n if (\n (!state.user.data?.email && !state.user.data.phone_number) ||\n isEqual(userDataRef.current, state.user.data)\n ) {\n return;\n }\n saveUserDataDebounced();\n userDataRef.current = state.user.data;\n }, [dispatch, saveUserDataDebounced, state.user.data]);\n\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["useEffect","useCallback","useRef","isEqual","useDebounce","useApi","useDeviceFingerprint","DEFAULT_USER_AGENT","useGlobalContext","ActionType","ky","Clipboard","base64","Linking","events","EventType","DefaultContext","config","state","dispatch","client","api","resp","get","headers","appKey","json","app","icon","iconMeta","icon_content_type","type","SET_APP_CONFIG","payload","err","console","error","auth","access_token","id","authData","authLink","getInitialURL","getString","includes","CHANGE_ROUTE","route","opts","startsWith","authStr","split","JSON","parse","decode","setString","LOGIN_SUCCESS","retrieveUserInfo","userInfo","Authorization","LOAD_USER","UPDATE_LOCAL_ACLS","redacted","reduce","acc","field","shared","retrieveAcls","appUserAcls","acls","Error","user","needs_refresh","SET_REFRESH_USER_DATA","saveAclsDebounced","saveAcls","local_acls","put","localAclsRef","current","saveUserDataDebounced","saveUserData","data","SET_IS_SAVING_USER_DATA","saving","eventDetails","USER_DATA_SAVED","userDataRef","email","phone_number"],"sources":["DefaultContext.tsx"],"sourcesContent":["import { useEffect, useCallback, useRef } from 'react';\nimport isEqual from 'lodash-es/isEqual';\nimport { useDebounce, useApi, useDeviceFingerprint } from '../hooks';\nimport { DEFAULT_USER_AGENT } from '../hooks/api';\nimport { IConfig } from '../utils/config';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport ky from 'ky';\nimport Clipboard from '@react-native-clipboard/clipboard';\nimport base64 from 'react-native-base64';\nimport { Linking } from 'react-native';\nimport { events, EventType } from '../utils/events';\n\nexport type UserInfoResp = {\n data: {\n [key: string]: any;\n };\n redacted: string[];\n};\n\ninterface UserAclsResponse {\n acls: Record<string, { shared: boolean }>;\n}\n\ntype DefaultContextProps = {\n config: IConfig;\n};\n\nexport function DefaultContext({ config }: DefaultContextProps) {\n const { state, dispatch } = useGlobalContext();\n const { client: api } = useApi();\n useDeviceFingerprint();\n\n // Fetch app schema and config\n useEffect(() => {\n (async () => {\n try {\n const resp: any = await api\n .get('hub/app-config', {\n headers: {\n 'x-rownd-app-key': config.appKey,\n },\n })\n .json();\n\n if (resp?.app?.icon) {\n const iconMeta = await ky.get(resp.app.icon);\n resp.app.icon_content_type = iconMeta.headers.get('content-type');\n }\n\n dispatch({\n type: ActionType.SET_APP_CONFIG,\n payload: resp.app,\n });\n } catch (err) {\n console.error('Failed to fetch app config:', err);\n }\n })();\n }, [api, config.appKey, dispatch]);\n\n /**\n * If not signed in, check the clipboard for an init hash or auth link we can use to auto-auth the user\n */\n useEffect(() => {\n if (state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n try {\n let authData = null;\n\n let authLink =\n (await Linking.getInitialURL()) || (await Clipboard.getString());\n if (authLink.includes('rownd.link')) {\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/account/auto-signin',\n opts: {\n type: 'sign-in',\n },\n },\n });\n\n authData = await ky\n .get(authLink, {\n headers: {\n 'User-Agent': DEFAULT_USER_AGENT,\n },\n })\n .json();\n } else if (authLink.startsWith('rph_init=')) {\n const authStr = authLink.split('rph_init=')[1];\n authData = JSON.parse(base64.decode(authStr));\n } else {\n return;\n }\n\n // Clear the clipboard value so we don't leak any creds\n Clipboard.setString('');\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: authData,\n });\n } catch (err) {\n console.error(\n 'We found an auth link or string, but failed to authenticate with it because:',\n err\n );\n }\n })();\n }, [state.auth.access_token, state.app.id, dispatch]);\n\n const retrieveUserInfo = useCallback(() => {\n if (!state.auth.access_token || !state.app.id) {\n return;\n }\n\n (async () => {\n const userInfo: UserInfoResp = await api\n .get(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.LOAD_USER,\n payload: userInfo,\n });\n\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: userInfo.redacted.reduce(\n (acc: Record<string, any>, field: string) => {\n acc[field] = { shared: false };\n return acc;\n },\n {}\n ),\n });\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n const retrieveAcls = useCallback(() => {\n if (!state.app.id || !state.auth.access_token) {\n return;\n }\n\n (async () => {\n try {\n const appUserAcls: UserAclsResponse = await api\n .get(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n })\n .json();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: appUserAcls.acls,\n });\n } catch (err) {\n if (err instanceof Error) {\n // const unsharedAcls = reduceSchemaToUnsharedAcls();\n dispatch({\n type: ActionType.UPDATE_LOCAL_ACLS,\n payload: {},\n });\n }\n }\n })();\n }, [api, dispatch, state.app.id, state.auth.access_token]);\n\n useEffect(retrieveUserInfo, [retrieveUserInfo]);\n useEffect(retrieveAcls, [retrieveAcls]);\n\n useEffect(() => {\n if (!state.user.needs_refresh) {\n return;\n }\n retrieveUserInfo();\n dispatch({\n type: ActionType.SET_REFRESH_USER_DATA,\n payload: { needs_refresh: false },\n });\n }, [dispatch, retrieveUserInfo, state.user.needs_refresh]);\n\n const saveAclsDebounced = useDebounce(saveAcls, 2000); // 2s\n\n async function saveAcls() {\n if (state.app.id && state.local_acls) {\n await api\n .put(`me/applications/${state.app.id}/acls`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n acls: state.local_acls,\n },\n })\n .json();\n }\n }\n\n const localAclsRef = useRef(state.local_acls);\n useEffect(() => {\n // Don't save acls if they were just loaded for the first time or they haven't changed\n if (\n !localAclsRef.current ||\n isEqual(localAclsRef.current, state.local_acls)\n ) {\n return;\n }\n saveAclsDebounced();\n }, [saveAclsDebounced, state.local_acls]);\n\n const saveUserDataDebounced = useDebounce(saveUserData, 2000); // 2s\n\n // Save user data in the application state to the API server\n async function saveUserData() {\n if (state.app.id && state.user.data && state.auth.access_token) {\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: true,\n },\n });\n\n const eventDetails: Record<string, any> = {};\n try {\n eventDetails.data = await api\n .put(`me/applications/${state.app.id}/data`, {\n headers: {\n Authorization: `Bearer ${state.auth.access_token}`,\n },\n json: {\n data: state.user.data,\n },\n })\n .json();\n } catch (err) {\n eventDetails.error = err;\n // Get the latest user info from Rownd. Something was probably bad\n // with the data we just tried to save.\n // This is a bit hacky. We should be able to reset the state without\n // calling rownd again by rolling back to a previously good state...\n retrieveUserInfo();\n // TODO: Set some error state\n } finally {\n events.dispatch(EventType.USER_DATA_SAVED, eventDetails);\n dispatch({\n type: ActionType.SET_IS_SAVING_USER_DATA,\n payload: {\n saving: false,\n },\n });\n }\n }\n }\n\n const userDataRef = useRef(state.user.data);\n useEffect(() => {\n // Don't update the user data in the API server if the email is unknown or the data hasn't changed\n if (\n (!state.user.data?.email && !state.user.data.phone_number) ||\n isEqual(userDataRef.current, state.user.data)\n ) {\n return;\n }\n saveUserDataDebounced();\n userDataRef.current = state.user.data;\n }, [dispatch, saveUserDataDebounced, state.user.data]);\n\n return null;\n}\n"],"mappings":"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"}
@@ -1,6 +1,4 @@
1
- import React from 'react'; // import { useDeviceContext } from 'twrnc';
2
- // import tw from '../utils/tailwind';
3
-
1
+ import React from 'react';
4
2
  import { SignIn } from './SignIn';
5
3
  import { AutoSigninDialog } from './AutoSigninDialog';
6
4
  import { useGlobalContext } from './GlobalContext';
@@ -1 +1 @@
1
- {"version":3,"names":["React","SignIn","AutoSigninDialog","useGlobalContext","RowndComponents","state","nav","current_route"],"sources":["RowndComponents.tsx"],"sourcesContent":["import React from 'react';\n// import { useDeviceContext } from 'twrnc';\n\n// import tw from '../utils/tailwind';\nimport { SignIn } from './SignIn';\nimport { AutoSigninDialog } from './AutoSigninDialog';\nimport { useGlobalContext } from './GlobalContext';\n\nexport function RowndComponents() {\n const { state } = useGlobalContext();\n // useDeviceContext(tw);\n\n return (\n <>\n {state.nav.current_route === '/account/login' && <SignIn />}\n {state.nav.current_route === '/account/auto-signin' && (\n <AutoSigninDialog />\n )}\n </>\n );\n}\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB,C,CACA;AAEA;;AACA,SAASC,MAAT,QAAuB,UAAvB;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,gBAAT,QAAiC,iBAAjC;AAEA,OAAO,SAASC,eAAT,GAA2B;EAChC,MAAM;IAAEC;EAAF,IAAYF,gBAAgB,EAAlC,CADgC,CAEhC;;EAEA,oBACE,0CACGE,KAAK,CAACC,GAAN,CAAUC,aAAV,KAA4B,gBAA5B,iBAAgD,oBAAC,MAAD,OADnD,EAEGF,KAAK,CAACC,GAAN,CAAUC,aAAV,KAA4B,sBAA5B,iBACC,oBAAC,gBAAD,OAHJ,CADF;AAQD"}
1
+ {"version":3,"names":["React","SignIn","AutoSigninDialog","useGlobalContext","RowndComponents","state","nav","current_route"],"sources":["RowndComponents.tsx"],"sourcesContent":["import React from 'react';\nimport { SignIn } from './SignIn';\nimport { AutoSigninDialog } from './AutoSigninDialog';\nimport { useGlobalContext } from './GlobalContext';\n\nexport function RowndComponents() {\n const { state } = useGlobalContext();\n // useDeviceContext(tw);\n\n return (\n <>\n {state.nav.current_route === '/account/login' && <SignIn />}\n {state.nav.current_route === '/account/auto-signin' && (\n <AutoSigninDialog />\n )}\n </>\n );\n}\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,MAAT,QAAuB,UAAvB;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,gBAAT,QAAiC,iBAAjC;AAEA,OAAO,SAASC,eAAT,GAA2B;EAChC,MAAM;IAAEC;EAAF,IAAYF,gBAAgB,EAAlC,CADgC,CAEhC;;EAEA,oBACE,0CACGE,KAAK,CAACC,GAAN,CAAUC,aAAV,KAA4B,gBAA5B,iBAAgD,oBAAC,MAAD,OADnD,EAEGF,KAAK,CAACC,GAAN,CAAUC,aAAV,KAA4B,sBAA5B,iBACC,oBAAC,gBAAD,OAHJ,CADF;AAQD"}
@@ -5,7 +5,6 @@ import { differenceInMinutes } from 'date-fns';
5
5
  import { View, StyleSheet, TouchableOpacity, Image, ActivityIndicator, Linking, Text } from 'react-native'; // import Text from './DarkText';
6
6
 
7
7
  import { SvgCssUri } from 'react-native-svg';
8
- import tw from '../utils/tailwind';
9
8
  import phone from 'phone';
10
9
  import jwt_decode from 'jwt-decode';
11
10
  import { BottomSheetBackdrop, BottomSheetModal } from '@gorhom/bottom-sheet';
@@ -415,9 +414,10 @@ export function SignIn() {
415
414
  enablesReturnKeyAutomatically: true,
416
415
  autoCapitalize: "none",
417
416
  onChangeText: text => setUserIdentifier(text.trim()),
418
- onBlur: validateInput,
419
- value: userIdentifier,
420
- onSubmitEditing: initSignIn
417
+ onBlur: validateInput // value={userIdentifier}
418
+ ,
419
+ onSubmitEditing: initSignIn,
420
+ autoCorrect: false
421
421
  }), requiresAdditionalFields && (app === null || app === void 0 ? void 0 : (_app$config7 = app.config) === null || _app$config7 === void 0 ? void 0 : (_app$config7$hub = _app$config7.hub) === null || _app$config7$hub === void 0 ? void 0 : (_app$config7$hub$auth = _app$config7$hub.auth) === null || _app$config7$hub$auth === void 0 ? void 0 : _app$config7$hub$auth.additional_fields.map(field => {
422
422
  return renderField({ ...field,
423
423
  value: addlFieldValues[field.name] || '',
@@ -446,9 +446,9 @@ export function SignIn() {
446
446
  }, "By continuing, you're agreeing to the terms of service that govern this app and to receive email or text messages for verification purposes.")), step === LoginStep.WAITING && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
447
447
  style: styles.dialogHeading
448
448
  }, "Thanks! Verify your", ' ', loginType === 'phone' ? 'phone number' : 'email', " to finish"), /*#__PURE__*/React.createElement(Text, {
449
- style: tw.style('py-6')
449
+ style: styles.py6
450
450
  }, "Click the link in the message we just sent to", ' ', /*#__PURE__*/React.createElement(Text, {
451
- style: tw.style('italic')
451
+ style: styles.italic
452
452
  }, userIdentifier), " to verify and finish.", /*#__PURE__*/React.createElement(Text, {
453
453
  style: [styles.link],
454
454
  onPress: () => setStep(LoginStep.INIT)
@@ -462,16 +462,16 @@ export function SignIn() {
462
462
  }, "Try a different", ' ', loginType === 'phone' ? 'phone number' : 'email'))), step === LoginStep.SUCCESS && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(View, {
463
463
  style: styles.signInVerificationImage
464
464
  }, /*#__PURE__*/React.createElement(ImageCheckmarkFilled, null))), step === LoginStep.FAILURE && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
465
- style: tw.style('text-base')
465
+ style: styles.textBase
466
466
  }, "Whoops, that didn't work!"), /*#__PURE__*/React.createElement(TouchableOpacity, {
467
467
  style: styles.button,
468
468
  onPress: () => setStep(LoginStep.INIT)
469
469
  }, /*#__PURE__*/React.createElement(Text, {
470
470
  style: styles.buttonContent
471
471
  }, "Try again"))), step === LoginStep.ERROR && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
472
- style: tw.style('text-base')
472
+ style: styles.textBase
473
473
  }, "An error occurred while signing you in."), !!error && /*#__PURE__*/React.createElement(Text, {
474
- style: tw.style('text-rose-800')
474
+ style: styles.textRose800
475
475
  }, error), /*#__PURE__*/React.createElement(TouchableOpacity, {
476
476
  style: styles.button,
477
477
  onPress: () => setStep(LoginStep.INIT)
@@ -592,6 +592,19 @@ const styles = StyleSheet.create({
592
592
  },
593
593
  link: {
594
594
  color: '#6114e1'
595
+ },
596
+ py6: {
597
+ paddingVertical: 6
598
+ },
599
+ italic: {
600
+ fontStyle: 'italic'
601
+ },
602
+ textBase: {
603
+ fontSize: 16,
604
+ lineHeight: 24
605
+ },
606
+ textRose800: {
607
+ color: 'rgb(159, 18, 57)'
595
608
  }
596
609
  });
597
610
  //# sourceMappingURL=SignIn.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useReducer","useRef","useState","differenceInMinutes","View","StyleSheet","TouchableOpacity","Image","ActivityIndicator","Linking","Text","SvgCssUri","tw","phone","jwt_decode","BottomSheetBackdrop","BottomSheetModal","BottomSheetTextInput","bottomSheetMeta","useApi","useInterval","useNav","useDeviceFingerprint","useGlobalContext","ActionType","renderField","ImageEmailVerifyWaiting","ImagePhoneVerifyWaiting","ImageCheckmarkFilled","LoginStep","LoginVerificationStatus","SignIn","navTo","getFingerprint","getChallengeIfPresent","clearFingerprint","state","dispatch","config","nav","app","user","decodedAccessToken","auth","access_token","userIdentifier","setUserIdentifier","fieldError","setFieldError","step","setStep","SUCCESS","INIT","error","setError","allowedIdentifiers","requestId","setRequestId","loginPollStart","setLoginPollStart","isSubmitting","setIsSubmitting","loginType","setLoginType","_phoneDetails","setPhoneDetails","isValidUserIdentifier","setIsValidUserIdentifier","requiresAdditionalFields","setRequiresAdditionalFields","options","init_data","bottomSheetModalRef","current","present","addlFieldInit","currentState","addlFields","hub","additional_fields","addlInputs","default_values","newState","length","field","name","value","fieldReducer","action","console","log","type","payload","addlFieldValues","addlFieldDispatch","client","api","validateEmail","email","re","isValid","test","String","toLowerCase","isValidPhone","phoneResult","phoneNumber","isValidEmail","emailAtIdx","indexOf","emailSuffixIdx","substring","validateInput","validations","includes","push","some","fn","pollLoginStatus","resp","post","headers","appKey","json","challenge_id","err","status","Error","code","PENDING","LOGIN_SUCCESS","Date","now","ERROR","FAILURE","WAITING","post_login_redirect","postLoginUrl","openURL","CHANGE_ROUTE","route","is_verified_user","initSignIn","return_url","user_data","Object","values","data","f","undefined","default_user_id_format","user_id","fingerprint","challengeEntry","id","hash","visitorId","challenge","auth_tokens","app_id","response","message","launchRowndWebsite","handleAddlFieldChange","evt","target","handleClose","setTimeout","hide","snapPoints","renderBackdrop","cbProps","extraBottomSheetProps","version","startsWith","keyboardBehavior","android_keyboardInputMode","enablePanDownToClose","styles","bottomSheet","innerContainer","show_app_icon","icon","icon_content_type","appLogo","uri","dialogHeading","inputLabel","identifierInput","text","trim","map","button","buttonDisabled","buttonSubmitting","buttonText","buttonContent","buttonDisabledText","loadingIndicator","signInNoticeText","style","link","signInVerificationImage","create","modal","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","borderRadius","borderColor","borderWidth","padding","container","flex","header","alignItems","backgroundColor","paddingVertical","borderTopLeftRadius","borderTopRightRadius","panelHandle","resizeMode","textAlign","marginLeft","marginRight","marginBottom","fontSize","marginTop","color","display","justifyContent","buttonPressed","opacity","buttonTextInner"],"sources":["SignIn.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport { differenceInMinutes } from 'date-fns';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n Image,\n ActivityIndicator,\n Linking,\n Text,\n} from 'react-native';\n// import Text from './DarkText';\nimport { SvgCssUri } from 'react-native-svg';\nimport tw from '../utils/tailwind';\nimport phone, { PhoneResult } from 'phone';\nimport jwt_decode from 'jwt-decode';\nimport {\n BottomSheetBackdrop,\n BottomSheetBackdropProps,\n BottomSheetModal,\n} from '@gorhom/bottom-sheet';\nimport BottomSheetTextInput from './BottomSheetTextInput';\nimport bottomSheetMeta from '@gorhom/bottom-sheet/package.json';\n\nimport { useApi, useInterval, useNav, useDeviceFingerprint } from '../hooks';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport { renderField } from '../utils/form';\n\n// Image imports\nimport ImageEmailVerifyWaiting from './images/EmailVerifyWaiting';\nimport ImagePhoneVerifyWaiting from './images/PhoneVerifyWaiting';\nimport ImageCheckmarkFilled from './images/CheckmarkFilled';\n\nenum LoginStep {\n INIT = 'init',\n WAITING = 'waiting',\n SUCCESS = 'success',\n FAILURE = 'failure',\n ERROR = 'error',\n}\n\ntype LoginInitBody = {\n challenge_id: string;\n message: string;\n auth_tokens?: {\n access_token: string;\n refresh_token: string;\n };\n registration_status: string;\n init_data?: Record<string, any>;\n};\n\ntype LoginSuccessBody = {\n access_token: string;\n refresh_token: string;\n app_user_id: string;\n app_id: string;\n status: string;\n};\n\nenum LoginVerificationStatus {\n PENDING = 'pending',\n EXPIRED = 'expired',\n VERIFIED = 'verified',\n}\n\nexport function SignIn() {\n const navTo = useNav();\n const { getFingerprint, getChallengeIfPresent, clearFingerprint } =\n useDeviceFingerprint();\n const { state, dispatch } = useGlobalContext();\n const { config, nav, app, user } = state;\n\n let decodedAccessToken: any;\n if (state.auth.access_token) {\n decodedAccessToken = jwt_decode(state.auth.access_token);\n }\n\n const [userIdentifier, setUserIdentifier] = useState('');\n const [fieldError, setFieldError] = useState<string | null>(null);\n const [step, setStep] = useState(\n state.auth.access_token &&\n decodedAccessToken?.['https://auth.rownd.io/is_verified_user'] !== false\n ? LoginStep.SUCCESS\n : LoginStep.INIT\n );\n const [error, setError] = useState('');\n const allowedIdentifiers = useMemo(() => ['email', 'phone'], []);\n const [requestId, setRequestId] = useState<string | null>(null);\n const [loginPollStart, setLoginPollStart] = useState<number | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [loginType, setLoginType] = useState<'email' | 'phone' | null>(null);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_phoneDetails, setPhoneDetails] = useState<PhoneResult | null>(null); // TODO: For parity with web, need to use `phoneDetails` to update the input visuals\n const [isValidUserIdentifier, setIsValidUserIdentifier] = useState(false);\n const [requiresAdditionalFields, setRequiresAdditionalFields] = useState(\n nav?.options?.init_data\n );\n\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n useEffect(() => {\n if (bottomSheetModalRef.current) {\n bottomSheetModalRef.current.present();\n }\n }, []);\n\n const addlFieldInit = useCallback(\n (currentState: Record<string, string>) => {\n const addlFields = app?.config?.hub?.auth?.additional_fields;\n const addlInputs =\n nav?.options?.init_data || nav?.options?.default_values || {};\n\n const newState: Record<string, string> = {};\n if (addlFields?.length) {\n for (const field of addlFields) {\n if (field?.options) {\n newState[field.name] =\n addlInputs?.[field.name] || field.options[0].value;\n }\n }\n }\n\n return {\n ...currentState,\n ...newState,\n };\n },\n [\n app?.config?.hub?.auth?.additional_fields,\n nav?.options?.default_values,\n nav?.options?.init_data,\n ]\n );\n\n const fieldReducer = useCallback(\n (\n currentState: any,\n action: { type: string; payload?: Record<string, string> }\n ) => {\n console.log('fieldReducer', action);\n switch (action.type) {\n case 'reset':\n return addlFieldInit(currentState);\n\n default:\n return {\n ...currentState,\n ...action.payload,\n };\n }\n },\n [addlFieldInit]\n );\n\n const [addlFieldValues, addlFieldDispatch] = useReducer(\n fieldReducer,\n {},\n addlFieldInit\n );\n\n const { client: api } = useApi();\n\n function validateEmail(email: string): boolean {\n const re =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const isValid = re.test(String(email).toLowerCase());\n\n if (!isValid) {\n setFieldError('Invalid email address');\n return false;\n }\n\n setFieldError(null);\n return true;\n }\n\n const isValidPhone = useCallback((): boolean => {\n const phoneResult = phone(userIdentifier);\n if (!phoneResult.isValid) {\n setLoginType(null);\n setPhoneDetails(null);\n return false;\n }\n\n setLoginType('phone');\n setPhoneDetails(phoneResult);\n setUserIdentifier(phoneResult.phoneNumber);\n return true;\n }, [userIdentifier]);\n\n const isValidEmail = useCallback((): boolean => {\n const emailAtIdx = userIdentifier?.indexOf('@');\n const emailSuffixIdx = userIdentifier?.substring(emailAtIdx).indexOf('.');\n if (\n emailAtIdx > 0 &&\n emailSuffixIdx > 0 &&\n userIdentifier?.substring(emailAtIdx + emailSuffixIdx).length >= 3\n ) {\n return validateEmail(userIdentifier);\n }\n\n return false;\n }, [userIdentifier]);\n\n const validateInput = useCallback(() => {\n const validations = [];\n if (allowedIdentifiers.includes('phone')) {\n validations.push(isValidPhone);\n }\n\n if (allowedIdentifiers.includes('email')) {\n validations.push(isValidEmail);\n }\n\n if (!validations.some((fn) => fn())) {\n setIsValidUserIdentifier(false);\n } else {\n setIsValidUserIdentifier(true);\n }\n }, [allowedIdentifiers, isValidEmail, isValidPhone]);\n\n // Fire validation as data changes in field\n useEffect(validateInput, [validateInput]);\n\n const pollLoginStatus = useCallback(async () => {\n try {\n const resp: LoginSuccessBody = await api\n .post(`hub/auth/challenge_status`, {\n headers: {\n 'x-rownd-app-key': config?.appKey,\n },\n json: {\n challenge_id: requestId,\n [loginType === 'phone' ? 'phone' : 'email']: userIdentifier,\n },\n })\n .json();\n\n let err: any;\n switch (resp.status) {\n case 'pending':\n err = new Error('Login challenge is still pending');\n err.code = LoginVerificationStatus.PENDING;\n throw err;\n\n case 'expired':\n err = new Error('Login challenge is still pending');\n err.code = LoginVerificationStatus.PENDING;\n throw err;\n\n case 'verified':\n break;\n\n default:\n err = new Error('Unknown login challenge status');\n throw err;\n }\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: resp,\n });\n\n setStep(LoginStep.SUCCESS);\n } catch (err: any) {\n // logger.log('login poll error', err);\n\n // If network error, try again up to 1 minute, else fail\n if (!err.code && differenceInMinutes(Date.now(), loginPollStart!) > 0) {\n setStep(LoginStep.ERROR);\n setError('Network error. Please try again later.');\n return;\n }\n\n // If request expires, then fail (assume > 6 mins is a failure/expiration)\n if (\n (err.status || err.code) &&\n differenceInMinutes(Date.now(), loginPollStart!) > 6\n ) {\n setStep(LoginStep.ERROR);\n setError('The sign in request expired.');\n return;\n }\n\n if (err.status && err.status >= 400) {\n setStep(LoginStep.FAILURE);\n setError('Sign in unsuccessful.');\n }\n }\n }, [\n api,\n config?.appKey,\n dispatch,\n loginPollStart,\n loginType,\n requestId,\n userIdentifier,\n ]);\n\n // Polling when a login flow is in progress\n useInterval(pollLoginStatus, step === LoginStep.WAITING ? 5000 : null);\n\n // login polling manager\n useEffect(() => {\n if (step === LoginStep.SUCCESS) {\n if (nav?.options?.post_login_redirect || state.config?.postLoginUrl) {\n Linking.openURL(\n nav?.options?.post_login_redirect || state.config?.postLoginUrl\n );\n }\n\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/',\n },\n });\n\n // Reset modal state if this user is unverified, since we'll need to re-submit at some point\n if (!state.auth.is_verified_user) {\n setStep(LoginStep.INIT);\n }\n }\n }, [\n dispatch,\n nav?.options?.post_login_redirect,\n pollLoginStatus,\n state.auth.is_verified_user,\n state.config?.postLoginUrl,\n step,\n ]);\n\n const initSignIn = useCallback(async () => {\n if (step === LoginStep.WAITING) {\n return;\n }\n\n // Validation\n if (fieldError) {\n return;\n }\n\n const payload = {\n [loginType === 'phone' ? 'phone' : 'email']: userIdentifier,\n return_url:\n nav?.options?.post_login_redirect || state.config?.postLoginUrl,\n user_data: Object.values(user.data).some(\n (f) => f !== null && f !== undefined\n )\n ? user.data\n : {}, // Include user.data if at least one field is defined\n };\n\n // Set the user_id to the application's default user id format if it is defined\n if (app.config?.default_user_id_format) {\n payload.user_id = app.config?.default_user_id_format;\n }\n\n if (requiresAdditionalFields) {\n payload.user_data = {\n ...payload.user_data,\n ...addlFieldValues,\n };\n }\n\n // Submission\n try {\n setIsSubmitting(true);\n\n // Get the browser fingerprint for future sign-ins that don't require re-verification\n const fingerprint = await getFingerprint();\n const challengeEntry = await getChallengeIfPresent(app.id, [\n userIdentifier,\n ]);\n payload.fingerprint = {\n hash: fingerprint.visitorId,\n challenge: challengeEntry?.value,\n };\n\n const resp: LoginInitBody = await api\n .post('hub/auth/init', {\n headers: {\n 'x-rownd-app-key': config?.appKey,\n },\n json: payload,\n })\n .json();\n\n // This will only be true when a user is signing in for the very first time and\n // the app allows unverified users OR the user was successfully fingerprinted.\n if (resp.auth_tokens) {\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: {\n ...resp.auth_tokens,\n app_id: app.id,\n },\n });\n\n setStep(LoginStep.SUCCESS);\n return;\n } else if (payload?.fingerprint?.challenge) {\n // The fingerprint is probably expired, so delete the challenge for re-registration\n try {\n clearFingerprint(payload.fingerprint.challenge);\n } catch (err) {\n // no-op, but not likely to throw anyway\n }\n }\n\n setRequestId(resp.challenge_id);\n setStep(LoginStep.WAITING);\n setLoginPollStart(Date.now());\n } catch (err: any) {\n // logger.error(err);\n\n if (err.response.status === 400) {\n setStep(LoginStep.INIT);\n setRequiresAdditionalFields(true);\n return;\n }\n\n setStep(LoginStep.ERROR);\n setError(err.message);\n } finally {\n setIsSubmitting(false);\n }\n }, [\n step,\n fieldError,\n loginType,\n userIdentifier,\n nav?.options?.post_login_redirect,\n state.config?.postLoginUrl,\n user.data,\n app.config?.default_user_id_format,\n app.id,\n requiresAdditionalFields,\n addlFieldValues,\n getFingerprint,\n getChallengeIfPresent,\n api,\n config?.appKey,\n dispatch,\n clearFingerprint,\n ]);\n\n const launchRowndWebsite = () => {\n Linking.openURL('https://rownd.io');\n };\n\n const handleAddlFieldChange = (evt: Event) => {\n const target = evt.target as HTMLInputElement;\n const { value, name } = target;\n\n addlFieldDispatch({\n type: 'default',\n payload: {\n [name]: value,\n },\n });\n };\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n navTo({ hide: true });\n }, 150);\n }, [navTo]);\n\n const snapPoints = useMemo(() => ['25%', '70%'], []);\n\n const renderBackdrop = useCallback(\n (cbProps: BottomSheetBackdropProps) => (\n <BottomSheetBackdrop {...cbProps} pressBehavior=\"close\" />\n ),\n []\n );\n\n let extraBottomSheetProps: any = {};\n if (bottomSheetMeta.version.startsWith('4')) {\n extraBottomSheetProps.keyboardBehavior = 'fillParent';\n extraBottomSheetProps.android_keyboardInputMode = 'adjustResize';\n extraBottomSheetProps.enablePanDownToClose =\n state?.nav?.options?.type === 'error';\n }\n\n return (\n <BottomSheetModal\n snapPoints={snapPoints}\n index={1}\n backdropComponent={renderBackdrop}\n onDismiss={handleClose}\n style={styles.bottomSheet}\n ref={bottomSheetModalRef}\n {...extraBottomSheetProps}\n >\n <View style={styles.innerContainer}>\n {step === LoginStep.INIT && (\n <>\n {app?.config?.hub?.auth?.show_app_icon &&\n app?.icon &&\n (app.icon_content_type === 'image/svg+xml' ? (\n <SvgCssUri uri={app.icon} style={styles.appLogo} />\n ) : (\n <Image style={styles.appLogo} source={{ uri: app.icon }} />\n ))}\n <Text style={styles.dialogHeading}>Sign in or sign up</Text>\n <Text style={styles.inputLabel}>Email or phone number</Text>\n <BottomSheetTextInput\n style={styles.identifierInput}\n placeholder=\"Enter here\"\n keyboardType=\"email-address\"\n textContentType=\"emailAddress\"\n returnKeyLabel=\"Sign in\"\n returnKeyType=\"go\"\n enablesReturnKeyAutomatically={true}\n autoCapitalize=\"none\"\n onChangeText={(text: string) => setUserIdentifier(text.trim())}\n onBlur={validateInput}\n value={userIdentifier}\n onSubmitEditing={initSignIn}\n />\n {requiresAdditionalFields &&\n app?.config?.hub?.auth?.additional_fields.map((field) => {\n return renderField({\n ...field,\n value: addlFieldValues[field.name] || '',\n [['input', 'text', 'tel', 'email'].includes(field.type)\n ? 'onInput'\n : 'onChange']: handleAddlFieldChange,\n });\n })}\n <TouchableOpacity\n disabled={!isValidUserIdentifier || isSubmitting}\n onPress={initSignIn}\n >\n <View\n style={{\n ...styles.button,\n ...(!isValidUserIdentifier && styles.buttonDisabled),\n ...(isSubmitting && styles.buttonSubmitting),\n }}\n >\n <View style={styles.buttonText}>\n <Text\n style={\n isValidUserIdentifier\n ? styles.buttonContent\n : {\n ...styles.buttonContent,\n ...styles.buttonDisabledText,\n }\n }\n >\n {isSubmitting && (\n <ActivityIndicator\n size=\"small\"\n color=\"#efefef\"\n style={styles.loadingIndicator}\n />\n )}\n {isSubmitting ? 'Just a sec...' : 'Continue'}\n </Text>\n </View>\n </View>\n </TouchableOpacity>\n <Text style={styles.signInNoticeText}>\n By continuing, you're agreeing to the terms of service that govern\n this app and to receive email or text messages for verification\n purposes.\n </Text>\n </>\n )}\n\n {step === LoginStep.WAITING && (\n <>\n <Text style={styles.dialogHeading}>\n Thanks! Verify your{' '}\n {loginType === 'phone' ? 'phone number' : 'email'} to finish\n </Text>\n <Text style={tw.style('py-6')}>\n Click the link in the message we just sent to{' '}\n <Text style={tw.style('italic')}>{userIdentifier}</Text> to verify\n and finish.\n <Text\n style={[styles.link]}\n onPress={() => setStep(LoginStep.INIT)}\n >\n &nbsp;Re-send message\n </Text>\n </Text>\n\n <View style={styles.signInVerificationImage}>\n {loginType === 'phone' ? (\n <ImagePhoneVerifyWaiting />\n ) : (\n <ImageEmailVerifyWaiting />\n )}\n </View>\n\n <TouchableOpacity\n style={[styles.button]}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>\n Try a different{' '}\n {loginType === 'phone' ? 'phone number' : 'email'}\n </Text>\n </TouchableOpacity>\n </>\n )}\n\n {step === LoginStep.SUCCESS && (\n <>\n <View style={styles.signInVerificationImage}>\n <ImageCheckmarkFilled />\n </View>\n </>\n )}\n\n {step === LoginStep.FAILURE && (\n <>\n <Text style={tw.style('text-base')}>Whoops, that didn't work!</Text>\n <TouchableOpacity\n style={styles.button}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>Try again</Text>\n </TouchableOpacity>\n </>\n )}\n\n {step === LoginStep.ERROR && (\n <>\n <Text style={tw.style('text-base')}>\n An error occurred while signing you in.\n </Text>\n {!!error && <Text style={tw.style('text-rose-800')}>{error}</Text>}\n <TouchableOpacity\n style={styles.button}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>Try again</Text>\n </TouchableOpacity>\n </>\n )}\n <Text>\n Powered by{' '}\n <Text style={styles.link} onPress={launchRowndWebsite}>\n Rownd\n </Text>\n </Text>\n </View>\n </BottomSheetModal>\n );\n}\n\nconst styles = StyleSheet.create({\n modal: {\n // flex: 1,\n },\n bottomSheet: {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 12,\n },\n shadowOpacity: 0.58,\n shadowRadius: 16.0,\n\n elevation: 24,\n },\n innerContainer: {\n borderRadius: 20,\n borderColor: 'transparent',\n borderWidth: 0,\n padding: 25,\n },\n container: {\n flex: 1,\n padding: 24,\n },\n header: {\n alignItems: 'center',\n backgroundColor: 'white',\n paddingVertical: 20,\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n },\n panelHandle: {\n width: 40,\n height: 2,\n backgroundColor: 'rgba(0,0,0,0.3)',\n borderRadius: 4,\n },\n appLogo: {\n padding: 50,\n width: 75,\n height: 75,\n resizeMode: 'center',\n textAlign: 'center',\n marginLeft: 'auto',\n marginRight: 'auto',\n marginBottom: 20,\n },\n dialogHeading: {\n fontSize: 24,\n },\n inputLabel: {\n marginTop: 20,\n marginBottom: 5,\n },\n identifierInput: {\n backgroundColor: '#eee',\n borderRadius: 8,\n padding: 10,\n fontSize: 18,\n },\n button: {\n borderRadius: 10,\n padding: 10,\n marginTop: 20,\n marginBottom: 30,\n elevation: 0,\n backgroundColor: '#5b0ae0',\n color: '#fff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // height: 45,\n },\n buttonDisabled: {\n backgroundColor: '#eee',\n },\n buttonPressed: {\n opacity: 0.5,\n },\n buttonContent: {\n textAlign: 'center',\n fontSize: 18,\n color: '#fff',\n },\n buttonText: {\n // marginHorizontal: 10,\n // paddingHorizontal: 10,\n // fontSize: 18,\n // color: '#fff',\n },\n buttonTextInner: {\n fontSize: 18,\n },\n buttonDisabledText: {\n color: '#8e8e8e',\n },\n buttonSubmitting: {\n backgroundColor: '#2f0492',\n color: '#c7c7c7',\n },\n loadingIndicator: {\n marginRight: 10,\n },\n signInNoticeText: {\n fontSize: 12,\n marginBottom: 20,\n },\n signInVerificationImage: {\n alignItems: 'center',\n },\n link: {\n color: '#6114e1',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useReducer","useRef","useState","differenceInMinutes","View","StyleSheet","TouchableOpacity","Image","ActivityIndicator","Linking","Text","SvgCssUri","phone","jwt_decode","BottomSheetBackdrop","BottomSheetModal","BottomSheetTextInput","bottomSheetMeta","useApi","useInterval","useNav","useDeviceFingerprint","useGlobalContext","ActionType","renderField","ImageEmailVerifyWaiting","ImagePhoneVerifyWaiting","ImageCheckmarkFilled","LoginStep","LoginVerificationStatus","SignIn","navTo","getFingerprint","getChallengeIfPresent","clearFingerprint","state","dispatch","config","nav","app","user","decodedAccessToken","auth","access_token","userIdentifier","setUserIdentifier","fieldError","setFieldError","step","setStep","SUCCESS","INIT","error","setError","allowedIdentifiers","requestId","setRequestId","loginPollStart","setLoginPollStart","isSubmitting","setIsSubmitting","loginType","setLoginType","_phoneDetails","setPhoneDetails","isValidUserIdentifier","setIsValidUserIdentifier","requiresAdditionalFields","setRequiresAdditionalFields","options","init_data","bottomSheetModalRef","current","present","addlFieldInit","currentState","addlFields","hub","additional_fields","addlInputs","default_values","newState","length","field","name","value","fieldReducer","action","console","log","type","payload","addlFieldValues","addlFieldDispatch","client","api","validateEmail","email","re","isValid","test","String","toLowerCase","isValidPhone","phoneResult","phoneNumber","isValidEmail","emailAtIdx","indexOf","emailSuffixIdx","substring","validateInput","validations","includes","push","some","fn","pollLoginStatus","resp","post","headers","appKey","json","challenge_id","err","status","Error","code","PENDING","LOGIN_SUCCESS","Date","now","ERROR","FAILURE","WAITING","post_login_redirect","postLoginUrl","openURL","CHANGE_ROUTE","route","is_verified_user","initSignIn","return_url","user_data","Object","values","data","f","undefined","default_user_id_format","user_id","fingerprint","challengeEntry","id","hash","visitorId","challenge","auth_tokens","app_id","response","message","launchRowndWebsite","handleAddlFieldChange","evt","target","handleClose","setTimeout","hide","snapPoints","renderBackdrop","cbProps","extraBottomSheetProps","version","startsWith","keyboardBehavior","android_keyboardInputMode","enablePanDownToClose","styles","bottomSheet","innerContainer","show_app_icon","icon","icon_content_type","appLogo","uri","dialogHeading","inputLabel","identifierInput","text","trim","map","button","buttonDisabled","buttonSubmitting","buttonText","buttonContent","buttonDisabledText","loadingIndicator","signInNoticeText","py6","italic","link","signInVerificationImage","textBase","textRose800","create","modal","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","borderRadius","borderColor","borderWidth","padding","container","flex","header","alignItems","backgroundColor","paddingVertical","borderTopLeftRadius","borderTopRightRadius","panelHandle","resizeMode","textAlign","marginLeft","marginRight","marginBottom","fontSize","marginTop","color","display","justifyContent","buttonPressed","opacity","buttonTextInner","fontStyle","lineHeight"],"sources":["SignIn.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport { differenceInMinutes } from 'date-fns';\nimport {\n View,\n StyleSheet,\n TouchableOpacity,\n Image,\n ActivityIndicator,\n Linking,\n Text,\n} from 'react-native';\n// import Text from './DarkText';\nimport { SvgCssUri } from 'react-native-svg';\nimport phone, { PhoneResult } from 'phone';\nimport jwt_decode from 'jwt-decode';\nimport {\n BottomSheetBackdrop,\n BottomSheetBackdropProps,\n BottomSheetModal,\n} from '@gorhom/bottom-sheet';\nimport BottomSheetTextInput from './BottomSheetTextInput';\nimport bottomSheetMeta from '@gorhom/bottom-sheet/package.json';\n\nimport { useApi, useInterval, useNav, useDeviceFingerprint } from '../hooks';\nimport { useGlobalContext } from './GlobalContext';\nimport { ActionType } from '../data/actions';\nimport { renderField } from '../utils/form';\n\n// Image imports\nimport ImageEmailVerifyWaiting from './images/EmailVerifyWaiting';\nimport ImagePhoneVerifyWaiting from './images/PhoneVerifyWaiting';\nimport ImageCheckmarkFilled from './images/CheckmarkFilled';\n\nenum LoginStep {\n INIT = 'init',\n WAITING = 'waiting',\n SUCCESS = 'success',\n FAILURE = 'failure',\n ERROR = 'error',\n}\n\ntype LoginInitBody = {\n challenge_id: string;\n message: string;\n auth_tokens?: {\n access_token: string;\n refresh_token: string;\n };\n registration_status: string;\n init_data?: Record<string, any>;\n};\n\ntype LoginSuccessBody = {\n access_token: string;\n refresh_token: string;\n app_user_id: string;\n app_id: string;\n status: string;\n};\n\nenum LoginVerificationStatus {\n PENDING = 'pending',\n EXPIRED = 'expired',\n VERIFIED = 'verified',\n}\n\nexport function SignIn() {\n const navTo = useNav();\n const { getFingerprint, getChallengeIfPresent, clearFingerprint } =\n useDeviceFingerprint();\n const { state, dispatch } = useGlobalContext();\n const { config, nav, app, user } = state;\n\n let decodedAccessToken: any;\n if (state.auth.access_token) {\n decodedAccessToken = jwt_decode(state.auth.access_token);\n }\n\n const [userIdentifier, setUserIdentifier] = useState('');\n const [fieldError, setFieldError] = useState<string | null>(null);\n const [step, setStep] = useState(\n state.auth.access_token &&\n decodedAccessToken?.['https://auth.rownd.io/is_verified_user'] !== false\n ? LoginStep.SUCCESS\n : LoginStep.INIT\n );\n const [error, setError] = useState('');\n const allowedIdentifiers = useMemo(() => ['email', 'phone'], []);\n const [requestId, setRequestId] = useState<string | null>(null);\n const [loginPollStart, setLoginPollStart] = useState<number | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [loginType, setLoginType] = useState<'email' | 'phone' | null>(null);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_phoneDetails, setPhoneDetails] = useState<PhoneResult | null>(null); // TODO: For parity with web, need to use `phoneDetails` to update the input visuals\n const [isValidUserIdentifier, setIsValidUserIdentifier] = useState(false);\n const [requiresAdditionalFields, setRequiresAdditionalFields] = useState(\n nav?.options?.init_data\n );\n\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n useEffect(() => {\n if (bottomSheetModalRef.current) {\n bottomSheetModalRef.current.present();\n }\n }, []);\n\n const addlFieldInit = useCallback(\n (currentState: Record<string, string>) => {\n const addlFields = app?.config?.hub?.auth?.additional_fields;\n const addlInputs =\n nav?.options?.init_data || nav?.options?.default_values || {};\n\n const newState: Record<string, string> = {};\n if (addlFields?.length) {\n for (const field of addlFields) {\n if (field?.options) {\n newState[field.name] =\n addlInputs?.[field.name] || field.options[0].value;\n }\n }\n }\n\n return {\n ...currentState,\n ...newState,\n };\n },\n [\n app?.config?.hub?.auth?.additional_fields,\n nav?.options?.default_values,\n nav?.options?.init_data,\n ]\n );\n\n const fieldReducer = useCallback(\n (\n currentState: any,\n action: { type: string; payload?: Record<string, string> }\n ) => {\n console.log('fieldReducer', action);\n switch (action.type) {\n case 'reset':\n return addlFieldInit(currentState);\n\n default:\n return {\n ...currentState,\n ...action.payload,\n };\n }\n },\n [addlFieldInit]\n );\n\n const [addlFieldValues, addlFieldDispatch] = useReducer(\n fieldReducer,\n {},\n addlFieldInit\n );\n\n const { client: api } = useApi();\n\n function validateEmail(email: string): boolean {\n const re =\n /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const isValid = re.test(String(email).toLowerCase());\n\n if (!isValid) {\n setFieldError('Invalid email address');\n return false;\n }\n\n setFieldError(null);\n return true;\n }\n\n const isValidPhone = useCallback((): boolean => {\n const phoneResult = phone(userIdentifier);\n if (!phoneResult.isValid) {\n setLoginType(null);\n setPhoneDetails(null);\n return false;\n }\n\n setLoginType('phone');\n setPhoneDetails(phoneResult);\n setUserIdentifier(phoneResult.phoneNumber);\n return true;\n }, [userIdentifier]);\n\n const isValidEmail = useCallback((): boolean => {\n const emailAtIdx = userIdentifier?.indexOf('@');\n const emailSuffixIdx = userIdentifier?.substring(emailAtIdx).indexOf('.');\n if (\n emailAtIdx > 0 &&\n emailSuffixIdx > 0 &&\n userIdentifier?.substring(emailAtIdx + emailSuffixIdx).length >= 3\n ) {\n return validateEmail(userIdentifier);\n }\n\n return false;\n }, [userIdentifier]);\n\n const validateInput = useCallback(() => {\n const validations = [];\n if (allowedIdentifiers.includes('phone')) {\n validations.push(isValidPhone);\n }\n\n if (allowedIdentifiers.includes('email')) {\n validations.push(isValidEmail);\n }\n\n if (!validations.some((fn) => fn())) {\n setIsValidUserIdentifier(false);\n } else {\n setIsValidUserIdentifier(true);\n }\n }, [allowedIdentifiers, isValidEmail, isValidPhone]);\n\n // Fire validation as data changes in field\n useEffect(validateInput, [validateInput]);\n\n const pollLoginStatus = useCallback(async () => {\n try {\n const resp: LoginSuccessBody = await api\n .post(`hub/auth/challenge_status`, {\n headers: {\n 'x-rownd-app-key': config?.appKey,\n },\n json: {\n challenge_id: requestId,\n [loginType === 'phone' ? 'phone' : 'email']: userIdentifier,\n },\n })\n .json();\n\n let err: any;\n switch (resp.status) {\n case 'pending':\n err = new Error('Login challenge is still pending');\n err.code = LoginVerificationStatus.PENDING;\n throw err;\n\n case 'expired':\n err = new Error('Login challenge is still pending');\n err.code = LoginVerificationStatus.PENDING;\n throw err;\n\n case 'verified':\n break;\n\n default:\n err = new Error('Unknown login challenge status');\n throw err;\n }\n\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: resp,\n });\n\n setStep(LoginStep.SUCCESS);\n } catch (err: any) {\n // logger.log('login poll error', err);\n\n // If network error, try again up to 1 minute, else fail\n if (!err.code && differenceInMinutes(Date.now(), loginPollStart!) > 0) {\n setStep(LoginStep.ERROR);\n setError('Network error. Please try again later.');\n return;\n }\n\n // If request expires, then fail (assume > 6 mins is a failure/expiration)\n if (\n (err.status || err.code) &&\n differenceInMinutes(Date.now(), loginPollStart!) > 6\n ) {\n setStep(LoginStep.ERROR);\n setError('The sign in request expired.');\n return;\n }\n\n if (err.status && err.status >= 400) {\n setStep(LoginStep.FAILURE);\n setError('Sign in unsuccessful.');\n }\n }\n }, [\n api,\n config?.appKey,\n dispatch,\n loginPollStart,\n loginType,\n requestId,\n userIdentifier,\n ]);\n\n // Polling when a login flow is in progress\n useInterval(pollLoginStatus, step === LoginStep.WAITING ? 5000 : null);\n\n // login polling manager\n useEffect(() => {\n if (step === LoginStep.SUCCESS) {\n if (nav?.options?.post_login_redirect || state.config?.postLoginUrl) {\n Linking.openURL(\n nav?.options?.post_login_redirect || state.config?.postLoginUrl\n );\n }\n\n dispatch({\n type: ActionType.CHANGE_ROUTE,\n payload: {\n route: '/',\n },\n });\n\n // Reset modal state if this user is unverified, since we'll need to re-submit at some point\n if (!state.auth.is_verified_user) {\n setStep(LoginStep.INIT);\n }\n }\n }, [\n dispatch,\n nav?.options?.post_login_redirect,\n pollLoginStatus,\n state.auth.is_verified_user,\n state.config?.postLoginUrl,\n step,\n ]);\n\n const initSignIn = useCallback(async () => {\n if (step === LoginStep.WAITING) {\n return;\n }\n\n // Validation\n if (fieldError) {\n return;\n }\n\n const payload = {\n [loginType === 'phone' ? 'phone' : 'email']: userIdentifier,\n return_url:\n nav?.options?.post_login_redirect || state.config?.postLoginUrl,\n user_data: Object.values(user.data).some(\n (f) => f !== null && f !== undefined\n )\n ? user.data\n : {}, // Include user.data if at least one field is defined\n };\n\n // Set the user_id to the application's default user id format if it is defined\n if (app.config?.default_user_id_format) {\n payload.user_id = app.config?.default_user_id_format;\n }\n\n if (requiresAdditionalFields) {\n payload.user_data = {\n ...payload.user_data,\n ...addlFieldValues,\n };\n }\n\n // Submission\n try {\n setIsSubmitting(true);\n\n // Get the browser fingerprint for future sign-ins that don't require re-verification\n const fingerprint = await getFingerprint();\n const challengeEntry = await getChallengeIfPresent(app.id, [\n userIdentifier,\n ]);\n payload.fingerprint = {\n hash: fingerprint.visitorId,\n challenge: challengeEntry?.value,\n };\n\n const resp: LoginInitBody = await api\n .post('hub/auth/init', {\n headers: {\n 'x-rownd-app-key': config?.appKey,\n },\n json: payload,\n })\n .json();\n\n // This will only be true when a user is signing in for the very first time and\n // the app allows unverified users OR the user was successfully fingerprinted.\n if (resp.auth_tokens) {\n dispatch({\n type: ActionType.LOGIN_SUCCESS,\n payload: {\n ...resp.auth_tokens,\n app_id: app.id,\n },\n });\n\n setStep(LoginStep.SUCCESS);\n return;\n } else if (payload?.fingerprint?.challenge) {\n // The fingerprint is probably expired, so delete the challenge for re-registration\n try {\n clearFingerprint(payload.fingerprint.challenge);\n } catch (err) {\n // no-op, but not likely to throw anyway\n }\n }\n\n setRequestId(resp.challenge_id);\n setStep(LoginStep.WAITING);\n setLoginPollStart(Date.now());\n } catch (err: any) {\n // logger.error(err);\n\n if (err.response.status === 400) {\n setStep(LoginStep.INIT);\n setRequiresAdditionalFields(true);\n return;\n }\n\n setStep(LoginStep.ERROR);\n setError(err.message);\n } finally {\n setIsSubmitting(false);\n }\n }, [\n step,\n fieldError,\n loginType,\n userIdentifier,\n nav?.options?.post_login_redirect,\n state.config?.postLoginUrl,\n user.data,\n app.config?.default_user_id_format,\n app.id,\n requiresAdditionalFields,\n addlFieldValues,\n getFingerprint,\n getChallengeIfPresent,\n api,\n config?.appKey,\n dispatch,\n clearFingerprint,\n ]);\n\n const launchRowndWebsite = () => {\n Linking.openURL('https://rownd.io');\n };\n\n const handleAddlFieldChange = (evt: Event) => {\n const target = evt.target as HTMLInputElement;\n const { value, name } = target;\n\n addlFieldDispatch({\n type: 'default',\n payload: {\n [name]: value,\n },\n });\n };\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n navTo({ hide: true });\n }, 150);\n }, [navTo]);\n\n const snapPoints = useMemo(() => ['25%', '70%'], []);\n\n const renderBackdrop = useCallback(\n (cbProps: BottomSheetBackdropProps) => (\n <BottomSheetBackdrop {...cbProps} pressBehavior=\"close\" />\n ),\n []\n );\n\n let extraBottomSheetProps: any = {};\n if (bottomSheetMeta.version.startsWith('4')) {\n extraBottomSheetProps.keyboardBehavior = 'fillParent';\n extraBottomSheetProps.android_keyboardInputMode = 'adjustResize';\n extraBottomSheetProps.enablePanDownToClose =\n state?.nav?.options?.type === 'error';\n }\n\n return (\n <BottomSheetModal\n snapPoints={snapPoints}\n index={1}\n backdropComponent={renderBackdrop}\n onDismiss={handleClose}\n style={styles.bottomSheet}\n ref={bottomSheetModalRef}\n {...extraBottomSheetProps}\n >\n <View style={styles.innerContainer}>\n {step === LoginStep.INIT && (\n <>\n {app?.config?.hub?.auth?.show_app_icon &&\n app?.icon &&\n (app.icon_content_type === 'image/svg+xml' ? (\n <SvgCssUri uri={app.icon} style={styles.appLogo} />\n ) : (\n <Image style={styles.appLogo} source={{ uri: app.icon }} />\n ))}\n <Text style={styles.dialogHeading}>Sign in or sign up</Text>\n <Text style={styles.inputLabel}>Email or phone number</Text>\n <BottomSheetTextInput\n style={styles.identifierInput}\n placeholder=\"Enter here\"\n keyboardType=\"email-address\"\n textContentType=\"emailAddress\"\n returnKeyLabel=\"Sign in\"\n returnKeyType=\"go\"\n enablesReturnKeyAutomatically={true}\n autoCapitalize=\"none\"\n onChangeText={(text: string) => setUserIdentifier(text.trim())}\n onBlur={validateInput}\n // value={userIdentifier}\n onSubmitEditing={initSignIn}\n autoCorrect={false}\n />\n {requiresAdditionalFields &&\n app?.config?.hub?.auth?.additional_fields.map((field) => {\n return renderField({\n ...field,\n value: addlFieldValues[field.name] || '',\n [['input', 'text', 'tel', 'email'].includes(field.type)\n ? 'onInput'\n : 'onChange']: handleAddlFieldChange,\n });\n })}\n <TouchableOpacity\n disabled={!isValidUserIdentifier || isSubmitting}\n onPress={initSignIn}\n >\n <View\n style={{\n ...styles.button,\n ...(!isValidUserIdentifier && styles.buttonDisabled),\n ...(isSubmitting && styles.buttonSubmitting),\n }}\n >\n <View style={styles.buttonText}>\n <Text\n style={\n isValidUserIdentifier\n ? styles.buttonContent\n : {\n ...styles.buttonContent,\n ...styles.buttonDisabledText,\n }\n }\n >\n {isSubmitting && (\n <ActivityIndicator\n size=\"small\"\n color=\"#efefef\"\n style={styles.loadingIndicator}\n />\n )}\n {isSubmitting ? 'Just a sec...' : 'Continue'}\n </Text>\n </View>\n </View>\n </TouchableOpacity>\n <Text style={styles.signInNoticeText}>\n By continuing, you're agreeing to the terms of service that govern\n this app and to receive email or text messages for verification\n purposes.\n </Text>\n </>\n )}\n\n {step === LoginStep.WAITING && (\n <>\n <Text style={styles.dialogHeading}>\n Thanks! Verify your{' '}\n {loginType === 'phone' ? 'phone number' : 'email'} to finish\n </Text>\n <Text style={styles.py6}>\n Click the link in the message we just sent to{' '}\n <Text style={styles.italic}>{userIdentifier}</Text> to verify and\n finish.\n <Text\n style={[styles.link]}\n onPress={() => setStep(LoginStep.INIT)}\n >\n &nbsp;Re-send message\n </Text>\n </Text>\n\n <View style={styles.signInVerificationImage}>\n {loginType === 'phone' ? (\n <ImagePhoneVerifyWaiting />\n ) : (\n <ImageEmailVerifyWaiting />\n )}\n </View>\n\n <TouchableOpacity\n style={[styles.button]}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>\n Try a different{' '}\n {loginType === 'phone' ? 'phone number' : 'email'}\n </Text>\n </TouchableOpacity>\n </>\n )}\n\n {step === LoginStep.SUCCESS && (\n <>\n <View style={styles.signInVerificationImage}>\n <ImageCheckmarkFilled />\n </View>\n </>\n )}\n\n {step === LoginStep.FAILURE && (\n <>\n <Text style={styles.textBase}>Whoops, that didn't work!</Text>\n <TouchableOpacity\n style={styles.button}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>Try again</Text>\n </TouchableOpacity>\n </>\n )}\n\n {step === LoginStep.ERROR && (\n <>\n <Text style={styles.textBase}>\n An error occurred while signing you in.\n </Text>\n {!!error && <Text style={styles.textRose800}>{error}</Text>}\n <TouchableOpacity\n style={styles.button}\n onPress={() => setStep(LoginStep.INIT)}\n >\n <Text style={styles.buttonContent}>Try again</Text>\n </TouchableOpacity>\n </>\n )}\n <Text>\n Powered by{' '}\n <Text style={styles.link} onPress={launchRowndWebsite}>\n Rownd\n </Text>\n </Text>\n </View>\n </BottomSheetModal>\n );\n}\n\nconst styles = StyleSheet.create({\n modal: {\n // flex: 1,\n },\n bottomSheet: {\n shadowColor: '#000',\n shadowOffset: {\n width: 0,\n height: 12,\n },\n shadowOpacity: 0.58,\n shadowRadius: 16.0,\n\n elevation: 24,\n },\n innerContainer: {\n borderRadius: 20,\n borderColor: 'transparent',\n borderWidth: 0,\n padding: 25,\n },\n container: {\n flex: 1,\n padding: 24,\n },\n header: {\n alignItems: 'center',\n backgroundColor: 'white',\n paddingVertical: 20,\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n },\n panelHandle: {\n width: 40,\n height: 2,\n backgroundColor: 'rgba(0,0,0,0.3)',\n borderRadius: 4,\n },\n appLogo: {\n padding: 50,\n width: 75,\n height: 75,\n resizeMode: 'center',\n textAlign: 'center',\n marginLeft: 'auto',\n marginRight: 'auto',\n marginBottom: 20,\n },\n dialogHeading: {\n fontSize: 24,\n },\n inputLabel: {\n marginTop: 20,\n marginBottom: 5,\n },\n identifierInput: {\n backgroundColor: '#eee',\n borderRadius: 8,\n padding: 10,\n fontSize: 18,\n },\n button: {\n borderRadius: 10,\n padding: 10,\n marginTop: 20,\n marginBottom: 30,\n elevation: 0,\n backgroundColor: '#5b0ae0',\n color: '#fff',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // height: 45,\n },\n buttonDisabled: {\n backgroundColor: '#eee',\n },\n buttonPressed: {\n opacity: 0.5,\n },\n buttonContent: {\n textAlign: 'center',\n fontSize: 18,\n color: '#fff',\n },\n buttonText: {\n // marginHorizontal: 10,\n // paddingHorizontal: 10,\n // fontSize: 18,\n // color: '#fff',\n },\n buttonTextInner: {\n fontSize: 18,\n },\n buttonDisabledText: {\n color: '#8e8e8e',\n },\n buttonSubmitting: {\n backgroundColor: '#2f0492',\n color: '#c7c7c7',\n },\n loadingIndicator: {\n marginRight: 10,\n },\n signInNoticeText: {\n fontSize: 12,\n marginBottom: 20,\n },\n signInVerificationImage: {\n alignItems: 'center',\n },\n link: {\n color: '#6114e1',\n },\n py6: {\n paddingVertical: 6,\n },\n italic: {\n fontStyle: 'italic',\n },\n textBase: {\n fontSize: 16,\n lineHeight: 24,\n },\n textRose800: {\n color: 'rgb(159, 18, 57)',\n },\n});\n"],"mappings":"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"}
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rownd/react-native",
3
- "version": "0.2.1",
3
+ "version": "0.2.4",
4
4
  "description": "Rownd bindings for React Native",
5
5
  "private": false,
6
6
  "main": "lib/commonjs/index",
@@ -168,8 +168,6 @@
168
168
  "lodash-es": "^4.17.21",
169
169
  "phone": "^3.1.20",
170
170
  "react-native-base64": "^0.2.1",
171
- "tailwind-rn": "^4.2.0",
172
- "twrnc": "^3.3.2",
173
171
  "usehooks-ts": "^2.5.4"
174
172
  }
175
173
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rownd/react-native",
3
- "version": "0.2.1",
3
+ "version": "0.2.4",
4
4
  "description": "Rownd bindings for React Native",
5
5
  "private": false,
6
6
  "main": "lib/commonjs/index",
@@ -168,8 +168,6 @@
168
168
  "lodash-es": "^4.17.21",
169
169
  "phone": "^3.1.20",
170
170
  "react-native-base64": "^0.2.1",
171
- "tailwind-rn": "^4.2.0",
172
- "twrnc": "^3.3.2",
173
171
  "usehooks-ts": "^2.5.4"
174
172
  }
175
173
  }
@@ -44,7 +44,7 @@ export function DefaultContext({ config }: DefaultContextProps) {
44
44
  .json();
45
45
 
46
46
  if (resp?.app?.icon) {
47
- const iconMeta = await ky.head(resp.app.icon);
47
+ const iconMeta = await ky.get(resp.app.icon);
48
48
  resp.app.icon_content_type = iconMeta.headers.get('content-type');
49
49
  }
50
50
 
@@ -1,7 +1,4 @@
1
1
  import React from 'react';
2
- // import { useDeviceContext } from 'twrnc';
3
-
4
- // import tw from '../utils/tailwind';
5
2
  import { SignIn } from './SignIn';
6
3
  import { AutoSigninDialog } from './AutoSigninDialog';
7
4
  import { useGlobalContext } from './GlobalContext';
@@ -18,7 +18,6 @@ import {
18
18
  } from 'react-native';
19
19
  // import Text from './DarkText';
20
20
  import { SvgCssUri } from 'react-native-svg';
21
- import tw from '../utils/tailwind';
22
21
  import phone, { PhoneResult } from 'phone';
23
22
  import jwt_decode from 'jwt-decode';
24
23
  import {
@@ -525,8 +524,9 @@ export function SignIn() {
525
524
  autoCapitalize="none"
526
525
  onChangeText={(text: string) => setUserIdentifier(text.trim())}
527
526
  onBlur={validateInput}
528
- value={userIdentifier}
527
+ // value={userIdentifier}
529
528
  onSubmitEditing={initSignIn}
529
+ autoCorrect={false}
530
530
  />
531
531
  {requiresAdditionalFields &&
532
532
  app?.config?.hub?.auth?.additional_fields.map((field) => {
@@ -586,10 +586,10 @@ export function SignIn() {
586
586
  Thanks! Verify your{' '}
587
587
  {loginType === 'phone' ? 'phone number' : 'email'} to finish
588
588
  </Text>
589
- <Text style={tw.style('py-6')}>
589
+ <Text style={styles.py6}>
590
590
  Click the link in the message we just sent to{' '}
591
- <Text style={tw.style('italic')}>{userIdentifier}</Text> to verify
592
- and finish.
591
+ <Text style={styles.italic}>{userIdentifier}</Text> to verify and
592
+ finish.
593
593
  <Text
594
594
  style={[styles.link]}
595
595
  onPress={() => setStep(LoginStep.INIT)}
@@ -628,7 +628,7 @@ export function SignIn() {
628
628
 
629
629
  {step === LoginStep.FAILURE && (
630
630
  <>
631
- <Text style={tw.style('text-base')}>Whoops, that didn't work!</Text>
631
+ <Text style={styles.textBase}>Whoops, that didn't work!</Text>
632
632
  <TouchableOpacity
633
633
  style={styles.button}
634
634
  onPress={() => setStep(LoginStep.INIT)}
@@ -640,10 +640,10 @@ export function SignIn() {
640
640
 
641
641
  {step === LoginStep.ERROR && (
642
642
  <>
643
- <Text style={tw.style('text-base')}>
643
+ <Text style={styles.textBase}>
644
644
  An error occurred while signing you in.
645
645
  </Text>
646
- {!!error && <Text style={tw.style('text-rose-800')}>{error}</Text>}
646
+ {!!error && <Text style={styles.textRose800}>{error}</Text>}
647
647
  <TouchableOpacity
648
648
  style={styles.button}
649
649
  onPress={() => setStep(LoginStep.INIT)}
@@ -777,4 +777,17 @@ const styles = StyleSheet.create({
777
777
  link: {
778
778
  color: '#6114e1',
779
779
  },
780
+ py6: {
781
+ paddingVertical: 6,
782
+ },
783
+ italic: {
784
+ fontStyle: 'italic',
785
+ },
786
+ textBase: {
787
+ fontSize: 16,
788
+ lineHeight: 24,
789
+ },
790
+ textRose800: {
791
+ color: 'rgb(159, 18, 57)',
792
+ },
780
793
  });
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _default = {
8
- content: ['./src/**/*.{js,jsx,ts,tsx}'],
9
- theme: {
10
- extend: {}
11
- },
12
- plugins: [],
13
- variants: ['dark'],
14
- corePlugins: require('tailwind-rn/unsupported-core-plugins')
15
- };
16
- exports.default = _default;
17
- //# sourceMappingURL=tailwind.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["content","theme","extend","plugins","variants","corePlugins","require"],"sources":["tailwind.config.ts"],"sourcesContent":["export default {\n content: ['./src/**/*.{js,jsx,ts,tsx}'],\n theme: {\n extend: {},\n },\n plugins: [],\n variants: ['dark'],\n corePlugins: require('tailwind-rn/unsupported-core-plugins'),\n};\n"],"mappings":";;;;;;eAAe;EACbA,OAAO,EAAE,CAAC,4BAAD,CADI;EAEbC,KAAK,EAAE;IACLC,MAAM,EAAE;EADH,CAFM;EAKbC,OAAO,EAAE,EALI;EAMbC,QAAQ,EAAE,CAAC,MAAD,CANG;EAObC,WAAW,EAAEC,OAAO,CAAC,sCAAD;AAPP,C"}
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _twrnc = require("twrnc");
9
-
10
- var _tailwind = _interopRequireDefault(require("../tailwind.config"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- const tw = (0, _twrnc.create)(_tailwind.default);
15
- var _default = tw;
16
- exports.default = _default;
17
- //# sourceMappingURL=tailwind.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["tw","create","twConfig"],"sources":["tailwind.ts"],"sourcesContent":["import { create } from 'twrnc';\nimport twConfig from '../tailwind.config';\n\nconst tw = create(twConfig);\n\nexport default tw;\n"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,MAAMA,EAAE,GAAG,IAAAC,aAAA,EAAOC,iBAAP,CAAX;eAEeF,E"}
@@ -1,10 +0,0 @@
1
- export default {
2
- content: ['./src/**/*.{js,jsx,ts,tsx}'],
3
- theme: {
4
- extend: {}
5
- },
6
- plugins: [],
7
- variants: ['dark'],
8
- corePlugins: require('tailwind-rn/unsupported-core-plugins')
9
- };
10
- //# sourceMappingURL=tailwind.config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["content","theme","extend","plugins","variants","corePlugins","require"],"sources":["tailwind.config.ts"],"sourcesContent":["export default {\n content: ['./src/**/*.{js,jsx,ts,tsx}'],\n theme: {\n extend: {},\n },\n plugins: [],\n variants: ['dark'],\n corePlugins: require('tailwind-rn/unsupported-core-plugins'),\n};\n"],"mappings":"AAAA,eAAe;EACbA,OAAO,EAAE,CAAC,4BAAD,CADI;EAEbC,KAAK,EAAE;IACLC,MAAM,EAAE;EADH,CAFM;EAKbC,OAAO,EAAE,EALI;EAMbC,QAAQ,EAAE,CAAC,MAAD,CANG;EAObC,WAAW,EAAEC,OAAO,CAAC,sCAAD;AAPP,CAAf"}
@@ -1,5 +0,0 @@
1
- import { create } from 'twrnc';
2
- import twConfig from '../tailwind.config';
3
- const tw = create(twConfig);
4
- export default tw;
5
- //# sourceMappingURL=tailwind.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["create","twConfig","tw"],"sources":["tailwind.ts"],"sourcesContent":["import { create } from 'twrnc';\nimport twConfig from '../tailwind.config';\n\nconst tw = create(twConfig);\n\nexport default tw;\n"],"mappings":"AAAA,SAASA,MAAT,QAAuB,OAAvB;AACA,OAAOC,QAAP,MAAqB,oBAArB;AAEA,MAAMC,EAAE,GAAGF,MAAM,CAACC,QAAD,CAAjB;AAEA,eAAeC,EAAf"}
@@ -1,10 +0,0 @@
1
- declare const _default: {
2
- content: string[];
3
- theme: {
4
- extend: {};
5
- };
6
- plugins: never[];
7
- variants: string[];
8
- corePlugins: any;
9
- };
10
- export default _default;
@@ -1,2 +0,0 @@
1
- declare const tw: import("twrnc").TailwindFn;
2
- export default tw;
@@ -1,9 +0,0 @@
1
- export default {
2
- content: ['./src/**/*.{js,jsx,ts,tsx}'],
3
- theme: {
4
- extend: {},
5
- },
6
- plugins: [],
7
- variants: ['dark'],
8
- corePlugins: require('tailwind-rn/unsupported-core-plugins'),
9
- };
@@ -1,6 +0,0 @@
1
- import { create } from 'twrnc';
2
- import twConfig from '../tailwind.config';
3
-
4
- const tw = create(twConfig);
5
-
6
- export default tw;