diff --git a/frontend/.metro-cache/cache/0a/c9db79ecd574a1a490e79f827912d10c8715bb227521fe754e8e62cfbc3a15ad84032c b/frontend/.metro-cache/cache/0a/c9db79ecd574a1a490e79f827912d10c8715bb227521fe754e8e62cfbc3a15ad84032c
new file mode 100644
index 00000000..ec2cc965
--- /dev/null
+++ b/frontend/.metro-cache/cache/0a/c9db79ecd574a1a490e79f827912d10c8715bb227521fe754e8e62cfbc3a15ad84032c
@@ -0,0 +1 @@
+{"dependencies":[{"name":"react","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":48,"index":48}}],"key":"RtGiGa+/H7VrI7GDQDLhO1UbpU8=","exportNames":["*"],"imports":1}},{"name":"react-native-web/dist/exports/View","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"4kYBDC6LJJXoH7P9rWDi3vkLVB0=","exportNames":["*"],"imports":1}},{"name":"react-native-web/dist/exports/Text","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"JKIzsQ5YQ0gDj0MIyY0Q7F1zJtU=","exportNames":["*"],"imports":1}},{"name":"react-native-web/dist/exports/StyleSheet","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"MK7+k1V+KnvCVW7Kj2k/ydtjmVU=","exportNames":["*"],"imports":1}},{"name":"react-native-web/dist/exports/SafeAreaView","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"S6Dcm4vKatES0CiC0O7zdRDDseY=","exportNames":["*"],"imports":1}},{"name":"react-native-web/dist/exports/ActivityIndicator","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"bSAkUkqZq0shBb5bU6kCYXi4ciA=","exportNames":["*"],"imports":1}},{"name":"react-native-web/dist/exports/Alert","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"PEUC6jrQVoAGZ2qYkvimljMOyJI=","exportNames":["*"],"imports":1}},{"name":"react-native-webview","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":11,"column":0,"index":169},"end":{"line":11,"column":47,"index":216}}],"key":"YJc7i/oIweCWhKjzjfYLEcLeUJA=","exportNames":["*"],"imports":1}},{"name":"../config/api","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":12,"column":0,"index":217},"end":{"line":12,"column":46,"index":263}}],"key":"V94urzZZSfzzXHrNxWFShT8IuQo=","exportNames":["*"],"imports":1}},{"name":"react/jsx-dev-runtime","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"L9D70Z4hi4aGuui1ysja/oQ5ytI=","exportNames":["*"],"imports":1}}],"output":[{"data":{"code":"__d(function (global, require, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) {\n \"use strict\";\n\n var _jsxFileName = \"/app/frontend/src/screens/HumanVerificationScreen.tsx\",\n _s = $RefreshSig$();\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n function _interopDefault(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n Object.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return HumanVerificationScreen;\n }\n });\n var _react = require(_dependencyMap[0], \"react\");\n var _reactNativeWebDistExportsView = require(_dependencyMap[1], \"react-native-web/dist/exports/View\");\n var View = _interopDefault(_reactNativeWebDistExportsView);\n var _reactNativeWebDistExportsText = require(_dependencyMap[2], \"react-native-web/dist/exports/Text\");\n var Text = _interopDefault(_reactNativeWebDistExportsText);\n var _reactNativeWebDistExportsStyleSheet = require(_dependencyMap[3], \"react-native-web/dist/exports/StyleSheet\");\n var StyleSheet = _interopDefault(_reactNativeWebDistExportsStyleSheet);\n var _reactNativeWebDistExportsSafeAreaView = require(_dependencyMap[4], \"react-native-web/dist/exports/SafeAreaView\");\n var SafeAreaView = _interopDefault(_reactNativeWebDistExportsSafeAreaView);\n var _reactNativeWebDistExportsActivityIndicator = require(_dependencyMap[5], \"react-native-web/dist/exports/ActivityIndicator\");\n var ActivityIndicator = _interopDefault(_reactNativeWebDistExportsActivityIndicator);\n var _reactNativeWebDistExportsAlert = require(_dependencyMap[6], \"react-native-web/dist/exports/Alert\");\n var Alert = _interopDefault(_reactNativeWebDistExportsAlert);\n var _reactNativeWebview = require(_dependencyMap[7], \"react-native-webview\");\n var _configApi = require(_dependencyMap[8], \"../config/api\");\n var _reactJsxDevRuntime = require(_dependencyMap[9], \"react/jsx-dev-runtime\");\n const TURNSTILE_SITE_KEY = '1x00000000000000000000AA';\n function HumanVerificationScreen({\n navigation\n }) {\n _s();\n const [loading, setLoading] = (0, _react.useState)(true);\n const [verifying, setVerifying] = (0, _react.useState)(false);\n const [error, setError] = (0, _react.useState)(null);\n const webViewRef = (0, _react.useRef)(null);\n console.log('HumanVerificationScreen mounted');\n const handleTurnstileToken = async token => {\n setVerifying(true);\n try {\n // Verify token with backend\n const response = await fetch(_configApi.API_ENDPOINTS.VERIFY_TURNSTILE, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n token\n })\n });\n const result = await response.json();\n if (result.success) {\n navigation.navigate('Auth');\n } else {\n Alert.default.alert('Verification Failed', 'Please try again');\n // Reload Turnstile\n webViewRef.current?.reload();\n }\n } catch (error) {\n console.error('Verification error:', error);\n Alert.default.alert('Error', 'Verification failed. Please try again.');\n } finally {\n setVerifying(false);\n }\n };\n const handleMessage = event => {\n const data = JSON.parse(event.nativeEvent.data);\n if (data.type === 'turnstile-success') {\n handleTurnstileToken(data.token);\n } else if (data.type === 'turnstile-error') {\n Alert.default.alert('Error', 'Verification failed. Please try again.');\n setLoading(false);\n }\n };\n const turnstileHTML = `\n \n \n
\n \n \n \n \n \n \n
🛡️
\n
Human Verification
\n
Please complete the security check to continue
\n
\n
\n
\n \n \n \n `;\n return /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(SafeAreaView.default, {\n style: styles.container,\n children: [verifying && /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(View.default, {\n style: styles.overlay,\n children: [/*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(ActivityIndicator.default, {\n size: \"large\",\n color: \"#EE2A35\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 141,\n columnNumber: 11\n }, this), /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(Text.default, {\n style: styles.verifyingText,\n children: \"Verifying...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 142,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 140,\n columnNumber: 9\n }, this), /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNativeWebview.WebView, {\n ref: webViewRef,\n source: {\n html: turnstileHTML\n },\n onMessage: handleMessage,\n onLoadStart: () => console.log('WebView started loading'),\n onLoadEnd: () => {\n console.log('WebView finished loading');\n setLoading(false);\n },\n onError: syntheticEvent => {\n const {\n nativeEvent\n } = syntheticEvent;\n console.error('WebView error:', nativeEvent);\n setError(`WebView Error: ${nativeEvent.description}`);\n },\n style: styles.webview,\n javaScriptEnabled: true,\n domStorageEnabled: true,\n originWhitelist: ['*']\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 146,\n columnNumber: 7\n }, this), loading && /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(View.default, {\n style: styles.loadingOverlay,\n children: [/*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(ActivityIndicator.default, {\n size: \"large\",\n color: \"#EE2A35\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 168,\n columnNumber: 11\n }, this), /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(Text.default, {\n style: styles.loadingText,\n children: \"Loading verification...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 169,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 167,\n columnNumber: 9\n }, this), error && /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(View.default, {\n style: styles.errorOverlay,\n children: /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(Text.default, {\n style: styles.errorText,\n children: error\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 175,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 174,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 138,\n columnNumber: 5\n }, this);\n }\n _s(HumanVerificationScreen, \"u37N9BEWvt4dMJcY5wTNsDVMW9A=\");\n _c = HumanVerificationScreen;\n const styles = StyleSheet.default.create({\n container: {\n flex: 1,\n backgroundColor: '#F8F9FA'\n },\n webview: {\n flex: 1,\n backgroundColor: '#F8F9FA'\n },\n loadingOverlay: {\n ...StyleSheet.default.absoluteFillObject,\n backgroundColor: '#F8F9FA',\n justifyContent: 'center',\n alignItems: 'center'\n },\n overlay: {\n ...StyleSheet.default.absoluteFillObject,\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 999\n },\n verifyingText: {\n marginTop: 16,\n fontSize: 16,\n fontWeight: '600',\n color: '#FFF'\n },\n loadingText: {\n marginTop: 16,\n fontSize: 14,\n color: '#6B7280'\n },\n errorOverlay: {\n position: 'absolute',\n bottom: 20,\n left: 20,\n right: 20,\n backgroundColor: '#FEE2E2',\n padding: 16,\n borderRadius: 12,\n borderWidth: 1,\n borderColor: '#EE2A35'\n },\n errorText: {\n color: '#991B1B',\n fontSize: 14\n }\n });\n var _c;\n $RefreshReg$(_c, \"HumanVerificationScreen\");\n});","lineCount":298,"map":[[14,2,16,15,"Object"],[14,8,16,15],[14,9,16,15,"defineProperty"],[14,23,16,15],[14,24,16,15,"exports"],[14,31,16,15],[15,4,16,15,"enumerable"],[15,14,16,15],[16,4,16,15,"get"],[16,7,16,15],[16,18,16,15,"get"],[16,19,16,15],[17,6,16,15],[17,13,16,15,"HumanVerificationScreen"],[17,36,16,15],[18,4,16,15],[19,2,16,15],[20,2,1,0],[20,6,1,0,"_react"],[20,12,1,0],[20,15,1,0,"require"],[20,22,1,0],[20,23,1,0,"_dependencyMap"],[20,37,1,0],[21,2,1,48],[21,6,1,48,"_reactNativeWebDistExportsView"],[21,36,1,48],[21,39,1,48,"require"],[21,46,1,48],[21,47,1,48,"_dependencyMap"],[21,61,1,48],[22,2,1,48],[22,6,1,48,"View"],[22,10,1,48],[22,13,1,48,"_interopDefault"],[22,28,1,48],[22,29,1,48,"_reactNativeWebDistExportsView"],[22,59,1,48],[23,2,1,48],[23,6,1,48,"_reactNativeWebDistExportsText"],[23,36,1,48],[23,39,1,48,"require"],[23,46,1,48],[23,47,1,48,"_dependencyMap"],[23,61,1,48],[24,2,1,48],[24,6,1,48,"Text"],[24,10,1,48],[24,13,1,48,"_interopDefault"],[24,28,1,48],[24,29,1,48,"_reactNativeWebDistExportsText"],[24,59,1,48],[25,2,1,48],[25,6,1,48,"_reactNativeWebDistExportsStyleSheet"],[25,42,1,48],[25,45,1,48,"require"],[25,52,1,48],[25,53,1,48,"_dependencyMap"],[25,67,1,48],[26,2,1,48],[26,6,1,48,"StyleSheet"],[26,16,1,48],[26,19,1,48,"_interopDefault"],[26,34,1,48],[26,35,1,48,"_reactNativeWebDistExportsStyleSheet"],[26,71,1,48],[27,2,1,48],[27,6,1,48,"_reactNativeWebDistExportsSafeAreaView"],[27,44,1,48],[27,47,1,48,"require"],[27,54,1,48],[27,55,1,48,"_dependencyMap"],[27,69,1,48],[28,2,1,48],[28,6,1,48,"SafeAreaView"],[28,18,1,48],[28,21,1,48,"_interopDefault"],[28,36,1,48],[28,37,1,48,"_reactNativeWebDistExportsSafeAreaView"],[28,75,1,48],[29,2,1,48],[29,6,1,48,"_reactNativeWebDistExportsActivityIndicator"],[29,49,1,48],[29,52,1,48,"require"],[29,59,1,48],[29,60,1,48,"_dependencyMap"],[29,74,1,48],[30,2,1,48],[30,6,1,48,"ActivityIndicator"],[30,23,1,48],[30,26,1,48,"_interopDefault"],[30,41,1,48],[30,42,1,48,"_reactNativeWebDistExportsActivityIndicator"],[30,85,1,48],[31,2,1,48],[31,6,1,48,"_reactNativeWebDistExportsAlert"],[31,37,1,48],[31,40,1,48,"require"],[31,47,1,48],[31,48,1,48,"_dependencyMap"],[31,62,1,48],[32,2,1,48],[32,6,1,48,"Alert"],[32,11,1,48],[32,14,1,48,"_interopDefault"],[32,29,1,48],[32,30,1,48,"_reactNativeWebDistExportsAlert"],[32,61,1,48],[33,2,11,0],[33,6,11,0,"_reactNativeWebview"],[33,25,11,0],[33,28,11,0,"require"],[33,35,11,0],[33,36,11,0,"_dependencyMap"],[33,50,11,0],[34,2,12,0],[34,6,12,0,"_configApi"],[34,16,12,0],[34,19,12,0,"require"],[34,26,12,0],[34,27,12,0,"_dependencyMap"],[34,41,12,0],[35,2,12,46],[35,6,12,46,"_reactJsxDevRuntime"],[35,25,12,46],[35,28,12,46,"require"],[35,35,12,46],[35,36,12,46,"_dependencyMap"],[35,50,12,46],[36,2,14,0],[36,8,14,6,"TURNSTILE_SITE_KEY"],[36,26,14,24],[36,29,14,27],[36,55,14,53],[37,2,16,15],[37,11,16,24,"HumanVerificationScreen"],[37,34,16,47,"HumanVerificationScreen"],[37,35,16,48],[38,4,16,50,"navigation"],[39,2,16,66],[39,3,16,67],[39,5,16,69],[40,4,16,69,"_s"],[40,6,16,69],[41,4,17,2],[41,10,17,8],[41,11,17,9,"loading"],[41,18,17,16],[41,20,17,18,"setLoading"],[41,30,17,28],[41,31,17,29],[41,34,17,32],[41,38,17,32,"useState"],[41,44,17,40],[41,45,17,40,"useState"],[41,53,17,40],[41,55,17,41],[41,59,17,45],[41,60,17,46],[42,4,18,2],[42,10,18,8],[42,11,18,9,"verifying"],[42,20,18,18],[42,22,18,20,"setVerifying"],[42,34,18,32],[42,35,18,33],[42,38,18,36],[42,42,18,36,"useState"],[42,48,18,44],[42,49,18,44,"useState"],[42,57,18,44],[42,59,18,45],[42,64,18,50],[42,65,18,51],[43,4,19,2],[43,10,19,8],[43,11,19,9,"error"],[43,16,19,14],[43,18,19,16,"setError"],[43,26,19,24],[43,27,19,25],[43,30,19,28],[43,34,19,28,"useState"],[43,40,19,36],[43,41,19,36,"useState"],[43,49,19,36],[43,51,19,52],[43,55,19,56],[43,56,19,57],[44,4,20,2],[44,10,20,8,"webViewRef"],[44,20,20,18],[44,23,20,21],[44,27,20,21,"useRef"],[44,33,20,27],[44,34,20,27,"useRef"],[44,40,20,27],[44,42,20,37],[44,46,20,41],[44,47,20,42],[45,4,22,2,"console"],[45,11,22,9],[45,12,22,10,"log"],[45,15,22,13],[45,16,22,14],[45,49,22,47],[45,50,22,48],[46,4,24,2],[46,10,24,8,"handleTurnstileToken"],[46,30,24,28],[46,33,24,31],[46,39,24,38,"token"],[46,44,24,51],[46,48,24,56],[47,6,25,4,"setVerifying"],[47,18,25,16],[47,19,25,17],[47,23,25,21],[47,24,25,22],[48,6,27,4],[48,10,27,8],[49,8,28,6],[50,8,29,6],[50,14,29,12,"response"],[50,22,29,20],[50,25,29,23],[50,31,29,29,"fetch"],[50,36,29,34],[50,37,29,35,"API_ENDPOINTS"],[50,47,29,48],[50,48,29,48,"API_ENDPOINTS"],[50,61,29,48],[50,62,29,49,"VERIFY_TURNSTILE"],[50,78,29,65],[50,80,29,67],[51,10,30,8,"method"],[51,16,30,14],[51,18,30,16],[51,24,30,22],[52,10,31,8,"headers"],[52,17,31,15],[52,19,31,17],[53,12,32,10],[53,26,32,24],[53,28,32,26],[54,10,33,8],[54,11,33,9],[55,10,34,8,"body"],[55,14,34,12],[55,16,34,14,"JSON"],[55,20,34,18],[55,21,34,19,"stringify"],[55,30,34,28],[55,31,34,29],[56,12,34,31,"token"],[57,10,34,37],[57,11,34,38],[58,8,35,6],[58,9,35,7],[58,10,35,8],[59,8,37,6],[59,14,37,12,"result"],[59,20,37,18],[59,23,37,21],[59,29,37,27,"response"],[59,37,37,35],[59,38,37,36,"json"],[59,42,37,40],[59,43,37,41],[59,44,37,42],[60,8,39,6],[60,12,39,10,"result"],[60,18,39,16],[60,19,39,17,"success"],[60,26,39,24],[60,28,39,26],[61,10,40,8,"navigation"],[61,20,40,18],[61,21,40,19,"navigate"],[61,29,40,27],[61,30,40,28],[61,36,40,34],[61,37,40,35],[62,8,41,6],[62,9,41,7],[62,15,41,13],[63,10,42,8,"Alert"],[63,15,42,13],[63,16,42,13,"default"],[63,23,42,13],[63,24,42,14,"alert"],[63,29,42,19],[63,30,42,20],[63,51,42,41],[63,53,42,43],[63,71,42,61],[63,72,42,62],[64,10,43,8],[65,10,44,8,"webViewRef"],[65,20,44,18],[65,21,44,19,"current"],[65,28,44,26],[65,30,44,28,"reload"],[65,36,44,34],[65,37,44,35],[65,38,44,36],[66,8,45,6],[67,6,46,4],[67,7,46,5],[67,8,46,6],[67,15,46,13,"error"],[67,20,46,18],[67,22,46,20],[68,8,47,6,"console"],[68,15,47,13],[68,16,47,14,"error"],[68,21,47,19],[68,22,47,20],[68,43,47,41],[68,45,47,43,"error"],[68,50,47,48],[68,51,47,49],[69,8,48,6,"Alert"],[69,13,48,11],[69,14,48,11,"default"],[69,21,48,11],[69,22,48,12,"alert"],[69,27,48,17],[69,28,48,18],[69,35,48,25],[69,37,48,27],[69,77,48,67],[69,78,48,68],[70,6,49,4],[70,7,49,5],[70,16,49,14],[71,8,50,6,"setVerifying"],[71,20,50,18],[71,21,50,19],[71,26,50,24],[71,27,50,25],[72,6,51,4],[73,4,52,2],[73,5,52,3],[74,4,54,2],[74,10,54,8,"handleMessage"],[74,23,54,21],[74,26,54,25,"event"],[74,31,54,35],[74,35,54,40],[75,6,55,4],[75,12,55,10,"data"],[75,16,55,14],[75,19,55,17,"JSON"],[75,23,55,21],[75,24,55,22,"parse"],[75,29,55,27],[75,30,55,28,"event"],[75,35,55,33],[75,36,55,34,"nativeEvent"],[75,47,55,45],[75,48,55,46,"data"],[75,52,55,50],[75,53,55,51],[76,6,57,4],[76,10,57,8,"data"],[76,14,57,12],[76,15,57,13,"type"],[76,19,57,17],[76,24,57,22],[76,43,57,41],[76,45,57,43],[77,8,58,6,"handleTurnstileToken"],[77,28,58,26],[77,29,58,27,"data"],[77,33,58,31],[77,34,58,32,"token"],[77,39,58,37],[77,40,58,38],[78,6,59,4],[78,7,59,5],[78,13,59,11],[78,17,59,15,"data"],[78,21,59,19],[78,22,59,20,"type"],[78,26,59,24],[78,31,59,29],[78,48,59,46],[78,50,59,48],[79,8,60,6,"Alert"],[79,13,60,11],[79,14,60,11,"default"],[79,21,60,11],[79,22,60,12,"alert"],[79,27,60,17],[79,28,60,18],[79,35,60,25],[79,37,60,27],[79,77,60,67],[79,78,60,68],[80,8,61,6,"setLoading"],[80,18,61,16],[80,19,61,17],[80,24,61,22],[80,25,61,23],[81,6,62,4],[82,4,63,2],[82,5,63,3],[83,4,65,2],[83,10,65,8,"turnstileHTML"],[83,23,65,21],[83,26,65,24],[84,0,66,0],[85,0,67,0],[86,0,68,0],[87,0,69,0],[88,0,70,0],[89,0,71,0],[90,0,72,0],[91,0,73,0],[92,0,74,0],[93,0,75,0],[94,0,76,0],[95,0,77,0],[96,0,78,0],[97,0,79,0],[98,0,80,0],[99,0,81,0],[100,0,82,0],[101,0,83,0],[102,0,84,0],[103,0,85,0],[104,0,86,0],[105,0,87,0],[106,0,88,0],[107,0,89,0],[108,0,90,0],[109,0,91,0],[110,0,92,0],[111,0,93,0],[112,0,94,0],[113,0,95,0],[114,0,96,0],[115,0,97,0],[116,0,98,0],[117,0,99,0],[118,0,100,0],[119,0,101,0],[120,0,102,0],[121,0,103,0],[122,0,104,0],[123,0,105,0],[124,0,106,0],[125,0,107,0],[126,0,108,0],[127,0,109,0],[128,0,110,0],[129,0,111,0],[130,0,112,0],[131,0,113,0],[131,29,113,29,"TURNSTILE_SITE_KEY"],[131,47,113,47],[132,0,114,0],[133,0,115,0],[134,0,116,0],[135,0,117,0],[136,0,118,0],[137,0,119,0],[138,0,120,0],[139,0,121,0],[140,0,122,0],[141,0,123,0],[142,0,124,0],[143,0,125,0],[144,0,126,0],[145,0,127,0],[146,0,128,0],[147,0,129,0],[148,0,130,0],[149,0,131,0],[150,0,132,0],[151,0,133,0],[152,0,134,0],[153,0,135,0],[153,3,135,3],[154,4,137,2],[154,24,138,4],[154,28,138,4,"_reactJsxDevRuntime"],[154,47,138,4],[154,48,138,4,"jsxDEV"],[154,54,138,4],[154,56,138,5,"SafeAreaView"],[154,68,138,17],[154,69,138,17,"default"],[154,76,138,17],[155,6,138,18,"style"],[155,11,138,23],[155,13,138,25,"styles"],[155,19,138,31],[155,20,138,32,"container"],[155,29,138,42],[156,6,138,42,"children"],[156,14,138,42],[156,17,139,7,"verifying"],[156,26,139,16],[156,43,140,8],[156,47,140,8,"_reactJsxDevRuntime"],[156,66,140,8],[156,67,140,8,"jsxDEV"],[156,73,140,8],[156,75,140,9,"View"],[156,79,140,13],[156,80,140,13,"default"],[156,87,140,13],[157,8,140,14,"style"],[157,13,140,19],[157,15,140,21,"styles"],[157,21,140,27],[157,22,140,28,"overlay"],[157,29,140,36],[158,8,140,36,"children"],[158,16,140,36],[158,32,141,10],[158,36,141,10,"_reactJsxDevRuntime"],[158,55,141,10],[158,56,141,10,"jsxDEV"],[158,62,141,10],[158,64,141,11,"ActivityIndicator"],[158,81,141,28],[158,82,141,28,"default"],[158,89,141,28],[159,10,141,29,"size"],[159,14,141,33],[159,16,141,34],[159,23,141,41],[160,10,141,42,"color"],[160,15,141,47],[160,17,141,48],[161,8,141,57],[162,10,141,57,"fileName"],[162,18,141,57],[162,20,141,57,"_jsxFileName"],[162,32,141,57],[163,10,141,57,"lineNumber"],[163,20,141,57],[164,10,141,57,"columnNumber"],[164,22,141,57],[165,8,141,57],[165,15,141,59],[165,16,141,60],[165,31,142,10],[165,35,142,10,"_reactJsxDevRuntime"],[165,54,142,10],[165,55,142,10,"jsxDEV"],[165,61,142,10],[165,63,142,11,"Text"],[165,67,142,15],[165,68,142,15,"default"],[165,75,142,15],[166,10,142,16,"style"],[166,15,142,21],[166,17,142,23,"styles"],[166,23,142,29],[166,24,142,30,"verifyingText"],[166,37,142,44],[167,10,142,44,"children"],[167,18,142,44],[167,20,142,45],[168,8,142,57],[169,10,142,57,"fileName"],[169,18,142,57],[169,20,142,57,"_jsxFileName"],[169,32,142,57],[170,10,142,57,"lineNumber"],[170,20,142,57],[171,10,142,57,"columnNumber"],[171,22,142,57],[172,8,142,57],[172,15,142,63],[172,16,142,64],[173,6,142,64],[174,8,142,64,"fileName"],[174,16,142,64],[174,18,142,64,"_jsxFileName"],[174,30,142,64],[175,8,142,64,"lineNumber"],[175,18,142,64],[176,8,142,64,"columnNumber"],[176,20,142,64],[177,6,142,64],[177,13,143,14],[177,14,144,7],[177,29,146,6],[177,33,146,6,"_reactJsxDevRuntime"],[177,52,146,6],[177,53,146,6,"jsxDEV"],[177,59,146,6],[177,61,146,7,"_reactNativeWebview"],[177,80,146,14],[177,81,146,14,"WebView"],[177,88,146,14],[178,8,147,8,"ref"],[178,11,147,11],[178,13,147,13,"webViewRef"],[178,23,147,24],[179,8,148,8,"source"],[179,14,148,14],[179,16,148,16],[180,10,148,18,"html"],[180,14,148,22],[180,16,148,24,"turnstileHTML"],[181,8,148,38],[181,9,148,40],[182,8,149,8,"onMessage"],[182,17,149,17],[182,19,149,19,"handleMessage"],[182,32,149,33],[183,8,150,8,"onLoadStart"],[183,19,150,19],[183,21,150,21,"onLoadStart"],[183,22,150,21],[183,27,150,27,"console"],[183,34,150,34],[183,35,150,35,"log"],[183,38,150,38],[183,39,150,39],[183,64,150,64],[183,65,150,66],[184,8,151,8,"onLoadEnd"],[184,17,151,17],[184,19,151,19,"onLoadEnd"],[184,20,151,19],[184,25,151,25],[185,10,152,10,"console"],[185,17,152,17],[185,18,152,18,"log"],[185,21,152,21],[185,22,152,22],[185,48,152,48],[185,49,152,49],[186,10,153,10,"setLoading"],[186,20,153,20],[186,21,153,21],[186,26,153,26],[186,27,153,27],[187,8,154,8],[187,9,154,10],[188,8,155,8,"onError"],[188,15,155,15],[188,17,155,18,"syntheticEvent"],[188,31,155,32],[188,35,155,37],[189,10,156,10],[189,16,156,16],[190,12,156,18,"nativeEvent"],[191,10,156,30],[191,11,156,31],[191,14,156,34,"syntheticEvent"],[191,28,156,48],[192,10,157,10,"console"],[192,17,157,17],[192,18,157,18,"error"],[192,23,157,23],[192,24,157,24],[192,40,157,40],[192,42,157,42,"nativeEvent"],[192,53,157,53],[192,54,157,54],[193,10,158,10,"setError"],[193,18,158,18],[193,19,158,19],[193,37,158,37,"nativeEvent"],[193,48,158,48],[193,49,158,49,"description"],[193,60,158,60],[193,62,158,62],[193,63,158,63],[194,8,159,8],[194,9,159,10],[195,8,160,8,"style"],[195,13,160,13],[195,15,160,15,"styles"],[195,21,160,21],[195,22,160,22,"webview"],[195,29,160,30],[196,8,161,8,"javaScriptEnabled"],[196,25,161,25],[196,27,161,27],[196,31,161,32],[197,8,162,8,"domStorageEnabled"],[197,25,162,25],[197,27,162,27],[197,31,162,32],[198,8,163,8,"originWhitelist"],[198,23,163,23],[198,25,163,25],[198,26,163,26],[198,29,163,29],[199,6,163,31],[200,8,163,31,"fileName"],[200,16,163,31],[200,18,163,31,"_jsxFileName"],[200,30,163,31],[201,8,163,31,"lineNumber"],[201,18,163,31],[202,8,163,31,"columnNumber"],[202,20,163,31],[203,6,163,31],[203,13,164,7],[203,14,164,8],[203,16,166,7,"loading"],[203,23,166,14],[203,40,167,8],[203,44,167,8,"_reactJsxDevRuntime"],[203,63,167,8],[203,64,167,8,"jsxDEV"],[203,70,167,8],[203,72,167,9,"View"],[203,76,167,13],[203,77,167,13,"default"],[203,84,167,13],[204,8,167,14,"style"],[204,13,167,19],[204,15,167,21,"styles"],[204,21,167,27],[204,22,167,28,"loadingOverlay"],[204,36,167,43],[205,8,167,43,"children"],[205,16,167,43],[205,32,168,10],[205,36,168,10,"_reactJsxDevRuntime"],[205,55,168,10],[205,56,168,10,"jsxDEV"],[205,62,168,10],[205,64,168,11,"ActivityIndicator"],[205,81,168,28],[205,82,168,28,"default"],[205,89,168,28],[206,10,168,29,"size"],[206,14,168,33],[206,16,168,34],[206,23,168,41],[207,10,168,42,"color"],[207,15,168,47],[207,17,168,48],[208,8,168,57],[209,10,168,57,"fileName"],[209,18,168,57],[209,20,168,57,"_jsxFileName"],[209,32,168,57],[210,10,168,57,"lineNumber"],[210,20,168,57],[211,10,168,57,"columnNumber"],[211,22,168,57],[212,8,168,57],[212,15,168,59],[212,16,168,60],[212,31,169,10],[212,35,169,10,"_reactJsxDevRuntime"],[212,54,169,10],[212,55,169,10,"jsxDEV"],[212,61,169,10],[212,63,169,11,"Text"],[212,67,169,15],[212,68,169,15,"default"],[212,75,169,15],[213,10,169,16,"style"],[213,15,169,21],[213,17,169,23,"styles"],[213,23,169,29],[213,24,169,30,"loadingText"],[213,35,169,42],[214,10,169,42,"children"],[214,18,169,42],[214,20,169,43],[215,8,169,66],[216,10,169,66,"fileName"],[216,18,169,66],[216,20,169,66,"_jsxFileName"],[216,32,169,66],[217,10,169,66,"lineNumber"],[217,20,169,66],[218,10,169,66,"columnNumber"],[218,22,169,66],[219,8,169,66],[219,15,169,72],[219,16,169,73],[220,6,169,73],[221,8,169,73,"fileName"],[221,16,169,73],[221,18,169,73,"_jsxFileName"],[221,30,169,73],[222,8,169,73,"lineNumber"],[222,18,169,73],[223,8,169,73,"columnNumber"],[223,20,169,73],[224,6,169,73],[224,13,170,14],[224,14,171,7],[224,16,173,7,"error"],[224,21,173,12],[224,38,174,8],[224,42,174,8,"_reactJsxDevRuntime"],[224,61,174,8],[224,62,174,8,"jsxDEV"],[224,68,174,8],[224,70,174,9,"View"],[224,74,174,13],[224,75,174,13,"default"],[224,82,174,13],[225,8,174,14,"style"],[225,13,174,19],[225,15,174,21,"styles"],[225,21,174,27],[225,22,174,28,"errorOverlay"],[225,34,174,41],[226,8,174,41,"children"],[226,16,174,41],[226,31,175,10],[226,35,175,10,"_reactJsxDevRuntime"],[226,54,175,10],[226,55,175,10,"jsxDEV"],[226,61,175,10],[226,63,175,11,"Text"],[226,67,175,15],[226,68,175,15,"default"],[226,75,175,15],[227,10,175,16,"style"],[227,15,175,21],[227,17,175,23,"styles"],[227,23,175,29],[227,24,175,30,"errorText"],[227,33,175,40],[228,10,175,40,"children"],[228,18,175,40],[228,20,175,42,"error"],[229,8,175,47],[230,10,175,47,"fileName"],[230,18,175,47],[230,20,175,47,"_jsxFileName"],[230,32,175,47],[231,10,175,47,"lineNumber"],[231,20,175,47],[232,10,175,47,"columnNumber"],[232,22,175,47],[233,8,175,47],[233,15,175,54],[234,6,175,55],[235,8,175,55,"fileName"],[235,16,175,55],[235,18,175,55,"_jsxFileName"],[235,30,175,55],[236,8,175,55,"lineNumber"],[236,18,175,55],[237,8,175,55,"columnNumber"],[237,20,175,55],[238,6,175,55],[238,13,176,14],[238,14,177,7],[239,4,177,7],[240,6,177,7,"fileName"],[240,14,177,7],[240,16,177,7,"_jsxFileName"],[240,28,177,7],[241,6,177,7,"lineNumber"],[241,16,177,7],[242,6,177,7,"columnNumber"],[242,18,177,7],[243,4,177,7],[243,11,178,18],[243,12,178,19],[244,2,180,0],[245,2,180,1,"_s"],[245,4,180,1],[245,5,16,24,"HumanVerificationScreen"],[245,28,16,47],[246,2,16,47,"_c"],[246,4,16,47],[246,7,16,24,"HumanVerificationScreen"],[246,30,16,47],[247,2,182,0],[247,8,182,6,"styles"],[247,14,182,12],[247,17,182,15,"StyleSheet"],[247,27,182,25],[247,28,182,25,"default"],[247,35,182,25],[247,36,182,26,"create"],[247,42,182,32],[247,43,182,33],[248,4,183,2,"container"],[248,13,183,11],[248,15,183,13],[249,6,184,4,"flex"],[249,10,184,8],[249,12,184,10],[249,13,184,11],[250,6,185,4,"backgroundColor"],[250,21,185,19],[250,23,185,21],[251,4,186,2],[251,5,186,3],[252,4,187,2,"webview"],[252,11,187,9],[252,13,187,11],[253,6,188,4,"flex"],[253,10,188,8],[253,12,188,10],[253,13,188,11],[254,6,189,4,"backgroundColor"],[254,21,189,19],[254,23,189,21],[255,4,190,2],[255,5,190,3],[256,4,191,2,"loadingOverlay"],[256,18,191,16],[256,20,191,18],[257,6,192,4],[257,9,192,7,"StyleSheet"],[257,19,192,17],[257,20,192,17,"default"],[257,27,192,17],[257,28,192,18,"absoluteFillObject"],[257,46,192,36],[258,6,193,4,"backgroundColor"],[258,21,193,19],[258,23,193,21],[258,32,193,30],[259,6,194,4,"justifyContent"],[259,20,194,18],[259,22,194,20],[259,30,194,28],[260,6,195,4,"alignItems"],[260,16,195,14],[260,18,195,16],[261,4,196,2],[261,5,196,3],[262,4,197,2,"overlay"],[262,11,197,9],[262,13,197,11],[263,6,198,4],[263,9,198,7,"StyleSheet"],[263,19,198,17],[263,20,198,17,"default"],[263,27,198,17],[263,28,198,18,"absoluteFillObject"],[263,46,198,36],[264,6,199,4,"backgroundColor"],[264,21,199,19],[264,23,199,21],[264,43,199,41],[265,6,200,4,"justifyContent"],[265,20,200,18],[265,22,200,20],[265,30,200,28],[266,6,201,4,"alignItems"],[266,16,201,14],[266,18,201,16],[266,26,201,24],[267,6,202,4,"zIndex"],[267,12,202,10],[267,14,202,12],[268,4,203,2],[268,5,203,3],[269,4,204,2,"verifyingText"],[269,17,204,15],[269,19,204,17],[270,6,205,4,"marginTop"],[270,15,205,13],[270,17,205,15],[270,19,205,17],[271,6,206,4,"fontSize"],[271,14,206,12],[271,16,206,14],[271,18,206,16],[272,6,207,4,"fontWeight"],[272,16,207,14],[272,18,207,16],[272,23,207,21],[273,6,208,4,"color"],[273,11,208,9],[273,13,208,11],[274,4,209,2],[274,5,209,3],[275,4,210,2,"loadingText"],[275,15,210,13],[275,17,210,15],[276,6,211,4,"marginTop"],[276,15,211,13],[276,17,211,15],[276,19,211,17],[277,6,212,4,"fontSize"],[277,14,212,12],[277,16,212,14],[277,18,212,16],[278,6,213,4,"color"],[278,11,213,9],[278,13,213,11],[279,4,214,2],[279,5,214,3],[280,4,215,2,"errorOverlay"],[280,16,215,14],[280,18,215,16],[281,6,216,4,"position"],[281,14,216,12],[281,16,216,14],[281,26,216,24],[282,6,217,4,"bottom"],[282,12,217,10],[282,14,217,12],[282,16,217,14],[283,6,218,4,"left"],[283,10,218,8],[283,12,218,10],[283,14,218,12],[284,6,219,4,"right"],[284,11,219,9],[284,13,219,11],[284,15,219,13],[285,6,220,4,"backgroundColor"],[285,21,220,19],[285,23,220,21],[285,32,220,30],[286,6,221,4,"padding"],[286,13,221,11],[286,15,221,13],[286,17,221,15],[287,6,222,4,"borderRadius"],[287,18,222,16],[287,20,222,18],[287,22,222,20],[288,6,223,4,"borderWidth"],[288,17,223,15],[288,19,223,17],[288,20,223,18],[289,6,224,4,"borderColor"],[289,17,224,15],[289,19,224,17],[290,4,225,2],[290,5,225,3],[291,4,226,2,"errorText"],[291,13,226,11],[291,15,226,13],[292,6,227,4,"color"],[292,11,227,9],[292,13,227,11],[292,22,227,20],[293,6,228,4,"fontSize"],[293,14,228,12],[293,16,228,14],[294,4,229,2],[295,2,230,0],[295,3,230,1],[295,4,230,2],[296,2,230,3],[296,6,230,3,"_c"],[296,8,230,3],[297,2,230,3,"$RefreshReg$"],[297,14,230,3],[297,15,230,3,"_c"],[297,17,230,3],[298,0,230,3],[298,3]],"functionMap":{"names":["","HumanVerificationScreen","handleTurnstileToken","handleMessage","WebView.props.onLoadStart","WebView.props.onLoadEnd","WebView.props.onError"],"mappings":"AAA;eCe;+BCQ;GD4B;wBEE;GFS;qBGuF,4CH;mBIC;SJG;iBKC;SLI;CDqB"},"hasCjsExports":false},"type":"js/module"}]}
\ No newline at end of file
diff --git a/frontend/.metro-cache/cache/0c/da0f30441b0436840904c9838ec83ba2224fcf6743ec55debee4f757d03e7e19e6a453 b/frontend/.metro-cache/cache/0c/da0f30441b0436840904c9838ec83ba2224fcf6743ec55debee4f757d03e7e19e6a453
new file mode 100644
index 00000000..cafffd45
--- /dev/null
+++ b/frontend/.metro-cache/cache/0c/da0f30441b0436840904c9838ec83ba2224fcf6743ec55debee4f757d03e7e19e6a453
@@ -0,0 +1 @@
+{"dependencies":[{"name":"expo/virtual/env","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"dgHc21cgR+buKc7O3/dChhD5JJk=","exportNames":["*"],"imports":1}}],"output":[{"data":{"code":"__d(function (global, require, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) {\n \"use strict\";\n\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n Object.defineProperty(exports, \"API_BASE_URL\", {\n enumerable: true,\n get: function () {\n return API_BASE_URL;\n }\n });\n Object.defineProperty(exports, \"API_ENDPOINTS\", {\n enumerable: true,\n get: function () {\n return API_ENDPOINTS;\n }\n });\n var _expoVirtualEnv = require(_dependencyMap[0], \"expo/virtual/env\");\n // API Configuration\n // Single source of truth for backend URL\n\n const getBackendUrl = () => {\n const url = _expoVirtualEnv.env.EXPO_PUBLIC_BACKEND_URL;\n if (!url) {\n console.error('⚠️ EXPO_PUBLIC_BACKEND_URL not set! Using fallback.');\n return 'http://localhost:8001';\n }\n console.log('✅ Backend URL:', url);\n return url;\n };\n const API_BASE_URL = getBackendUrl();\n const API_ENDPOINTS = {\n AUTH_SIGNUP: `${API_BASE_URL}/api/auth/signup`,\n AUTH_SIGNIN: `${API_BASE_URL}/api/auth/signin`,\n AUTH_USER: userId => `${API_BASE_URL}/api/auth/user/${userId}`,\n VERIFY_TURNSTILE: `${API_BASE_URL}/api/verify-turnstile`,\n BALANCE: `${API_BASE_URL}/api/blockchain/balance`\n };\n});","lineCount":40,"map":[[7,2,16,0,"Object"],[7,8,16,0],[7,9,16,0,"defineProperty"],[7,23,16,0],[7,24,16,0,"exports"],[7,31,16,0],[8,4,16,0,"enumerable"],[8,14,16,0],[9,4,16,0,"get"],[9,7,16,0],[9,18,16,0,"get"],[9,19,16,0],[10,6,16,0],[10,13,16,0,"API_BASE_URL"],[10,25,16,0],[11,4,16,0],[12,2,16,0],[13,2,18,0,"Object"],[13,8,18,0],[13,9,18,0,"defineProperty"],[13,23,18,0],[13,24,18,0,"exports"],[13,31,18,0],[14,4,18,0,"enumerable"],[14,14,18,0],[15,4,18,0,"get"],[15,7,18,0],[15,18,18,0,"get"],[15,19,18,0],[16,6,18,0],[16,13,18,0,"API_ENDPOINTS"],[16,26,18,0],[17,4,18,0],[18,2,18,0],[19,2,24,2],[19,6,24,2,"_expoVirtualEnv"],[19,21,24,2],[19,24,24,2,"require"],[19,31,24,2],[19,32,24,2,"_dependencyMap"],[19,46,24,2],[20,2,1,0],[21,2,2,0],[23,2,4,0],[23,8,4,6,"getBackendUrl"],[23,21,4,19],[23,24,4,22,"getBackendUrl"],[23,25,4,22],[23,30,4,36],[24,4,5,2],[24,10,5,8,"url"],[24,13,5,11],[24,16,5,11,"_expoVirtualEnv"],[24,31,5,11],[24,32,5,11,"env"],[24,35,5,11],[24,36,5,11,"EXPO_PUBLIC_BACKEND_URL"],[24,59,5,49],[25,4,7,2],[25,8,7,6],[25,9,7,7,"url"],[25,12,7,10],[25,14,7,12],[26,6,8,4,"console"],[26,13,8,11],[26,14,8,12,"error"],[26,19,8,17],[26,20,8,18],[26,73,8,71],[26,74,8,72],[27,6,9,4],[27,13,9,11],[27,36,9,34],[28,4,10,2],[29,4,12,2,"console"],[29,11,12,9],[29,12,12,10,"log"],[29,15,12,13],[29,16,12,14],[29,32,12,30],[29,34,12,32,"url"],[29,37,12,35],[29,38,12,36],[30,4,13,2],[30,11,13,9,"url"],[30,14,13,12],[31,2,14,0],[31,3,14,1],[32,2,16,7],[32,8,16,13,"API_BASE_URL"],[32,20,16,25],[32,23,16,28,"getBackendUrl"],[32,36,16,41],[32,37,16,42],[32,38,16,43],[33,2,18,7],[33,8,18,13,"API_ENDPOINTS"],[33,21,18,26],[33,24,18,29],[34,4,19,2,"AUTH_SIGNUP"],[34,15,19,13],[34,17,19,15],[34,20,19,18,"API_BASE_URL"],[34,32,19,30],[34,50,19,48],[35,4,20,2,"AUTH_SIGNIN"],[35,15,20,13],[35,17,20,15],[35,20,20,18,"API_BASE_URL"],[35,32,20,30],[35,50,20,48],[36,4,21,2,"AUTH_USER"],[36,13,21,11],[36,15,21,14,"userId"],[36,21,21,28],[36,25,21,33],[36,28,21,36,"API_BASE_URL"],[36,40,21,48],[36,58,21,66,"userId"],[36,64,21,72],[36,66,21,74],[37,4,22,2,"VERIFY_TURNSTILE"],[37,20,22,18],[37,22,22,20],[37,25,22,23,"API_BASE_URL"],[37,37,22,35],[37,60,22,58],[38,4,23,2,"BALANCE"],[38,11,23,9],[38,13,23,11],[38,16,23,14,"API_BASE_URL"],[38,28,23,26],[39,2,24,0],[39,3,24,1],[40,0,24,2],[40,3]],"functionMap":{"names":["","getBackendUrl","API_ENDPOINTS.AUTH_USER"],"mappings":"AAA;sBCG;CDU;aEO,6DF"},"hasCjsExports":false},"type":"js/module"}]}
\ No newline at end of file
diff --git a/frontend/.metro-cache/cache/0e/0211e5b1e731cf6740d8a1398878a30c8715bb227521fe754e8e62cfbc3a15ad84032c b/frontend/.metro-cache/cache/0e/0211e5b1e731cf6740d8a1398878a30c8715bb227521fe754e8e62cfbc3a15ad84032c
new file mode 100644
index 00000000..4fdf699e
--- /dev/null
+++ b/frontend/.metro-cache/cache/0e/0211e5b1e731cf6740d8a1398878a30c8715bb227521fe754e8e62cfbc3a15ad84032c
@@ -0,0 +1 @@
+{"dependencies":[{"name":"@babel/runtime/helpers/asyncToGenerator","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"YisBBiy2Xm9DEVdFebZ2nbgAHBo=","exportNames":["*"],"imports":1}},{"name":"@babel/runtime/helpers/slicedToArray","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"5y7e5+zC7teYEEC6niD9f5zII1M=","exportNames":["*"],"imports":1}},{"name":"react","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":48,"index":48}}],"key":"RtGiGa+/H7VrI7GDQDLhO1UbpU8=","exportNames":["*"],"imports":1}},{"name":"react-native","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":2,"column":0,"index":49},"end":{"line":10,"column":22,"index":168}}],"key":"KyzuX10g6ixS9UfynhmjlvCIG3g=","exportNames":["*"],"imports":1}},{"name":"react-native-webview","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":11,"column":0,"index":169},"end":{"line":11,"column":47,"index":216}}],"key":"YJc7i/oIweCWhKjzjfYLEcLeUJA=","exportNames":["*"],"imports":1}},{"name":"../config/api","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":12,"column":0,"index":217},"end":{"line":12,"column":46,"index":263}}],"key":"V94urzZZSfzzXHrNxWFShT8IuQo=","exportNames":["*"],"imports":1}},{"name":"react/jsx-dev-runtime","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"L9D70Z4hi4aGuui1ysja/oQ5ytI=","exportNames":["*"],"imports":1}}],"output":[{"data":{"code":"__d(function (global, require, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) {\n \"use strict\";\n\n var _jsxFileName = \"/app/frontend/src/screens/HumanVerificationScreen.tsx\",\n _s = $RefreshSig$();\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n function _interopDefault(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n Object.defineProperty(exports, \"default\", {\n enumerable: true,\n get: function () {\n return HumanVerificationScreen;\n }\n });\n var _babelRuntimeHelpersAsyncToGenerator = require(_dependencyMap[0], \"@babel/runtime/helpers/asyncToGenerator\");\n var _asyncToGenerator = _interopDefault(_babelRuntimeHelpersAsyncToGenerator);\n var _babelRuntimeHelpersSlicedToArray = require(_dependencyMap[1], \"@babel/runtime/helpers/slicedToArray\");\n var _slicedToArray = _interopDefault(_babelRuntimeHelpersSlicedToArray);\n var _react = require(_dependencyMap[2], \"react\");\n var _reactNative = require(_dependencyMap[3], \"react-native\");\n var _reactNativeWebview = require(_dependencyMap[4], \"react-native-webview\");\n var _configApi = require(_dependencyMap[5], \"../config/api\");\n var _reactJsxDevRuntime = require(_dependencyMap[6], \"react/jsx-dev-runtime\");\n var TURNSTILE_SITE_KEY = '1x00000000000000000000AA';\n function HumanVerificationScreen(_ref) {\n _s();\n var navigation = _ref.navigation;\n var _useState = (0, _react.useState)(true),\n _useState2 = (0, _slicedToArray.default)(_useState, 2),\n loading = _useState2[0],\n setLoading = _useState2[1];\n var _useState3 = (0, _react.useState)(false),\n _useState4 = (0, _slicedToArray.default)(_useState3, 2),\n verifying = _useState4[0],\n setVerifying = _useState4[1];\n var _useState5 = (0, _react.useState)(null),\n _useState6 = (0, _slicedToArray.default)(_useState5, 2),\n error = _useState6[0],\n setError = _useState6[1];\n var webViewRef = (0, _react.useRef)(null);\n console.log('HumanVerificationScreen mounted');\n var handleTurnstileToken = /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator.default)(function* (token) {\n setVerifying(true);\n try {\n // Verify token with backend\n var response = yield fetch(_configApi.API_ENDPOINTS.VERIFY_TURNSTILE, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n token\n })\n });\n var result = yield response.json();\n if (result.success) {\n navigation.navigate('Auth');\n } else {\n _reactNative.Alert.alert('Verification Failed', 'Please try again');\n // Reload Turnstile\n webViewRef.current?.reload();\n }\n } catch (error) {\n console.error('Verification error:', error);\n _reactNative.Alert.alert('Error', 'Verification failed. Please try again.');\n } finally {\n setVerifying(false);\n }\n });\n return function handleTurnstileToken(_x) {\n return _ref2.apply(this, arguments);\n };\n }();\n var handleMessage = event => {\n var data = JSON.parse(event.nativeEvent.data);\n if (data.type === 'turnstile-success') {\n handleTurnstileToken(data.token);\n } else if (data.type === 'turnstile-error') {\n _reactNative.Alert.alert('Error', 'Verification failed. Please try again.');\n setLoading(false);\n }\n };\n var turnstileHTML = `\n \n \n \n \n \n \n \n \n \n
🛡️
\n
Human Verification
\n
Please complete the security check to continue
\n
\n
\n
\n \n \n \n `;\n return /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.SafeAreaView, {\n style: styles.container,\n children: [verifying && /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.View, {\n style: styles.overlay,\n children: [/*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.ActivityIndicator, {\n size: \"large\",\n color: \"#EE2A35\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 141,\n columnNumber: 11\n }, this), /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.Text, {\n style: styles.verifyingText,\n children: \"Verifying...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 142,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 140,\n columnNumber: 9\n }, this), /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNativeWebview.WebView, {\n ref: webViewRef,\n source: {\n html: turnstileHTML\n },\n onMessage: handleMessage,\n onLoadStart: () => console.log('WebView started loading'),\n onLoadEnd: () => {\n console.log('WebView finished loading');\n setLoading(false);\n },\n onError: syntheticEvent => {\n var nativeEvent = syntheticEvent.nativeEvent;\n console.error('WebView error:', nativeEvent);\n setError(`WebView Error: ${nativeEvent.description}`);\n },\n style: styles.webview,\n javaScriptEnabled: true,\n domStorageEnabled: true,\n originWhitelist: ['*']\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 146,\n columnNumber: 7\n }, this), loading && /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.View, {\n style: styles.loadingOverlay,\n children: [/*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.ActivityIndicator, {\n size: \"large\",\n color: \"#EE2A35\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 168,\n columnNumber: 11\n }, this), /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.Text, {\n style: styles.loadingText,\n children: \"Loading verification...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 169,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 167,\n columnNumber: 9\n }, this), error && /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.View, {\n style: styles.errorOverlay,\n children: /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(_reactNative.Text, {\n style: styles.errorText,\n children: error\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 175,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 174,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 138,\n columnNumber: 5\n }, this);\n }\n _s(HumanVerificationScreen, \"u37N9BEWvt4dMJcY5wTNsDVMW9A=\");\n _c = HumanVerificationScreen;\n var styles = _reactNative.StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#F8F9FA'\n },\n webview: {\n flex: 1,\n backgroundColor: '#F8F9FA'\n },\n loadingOverlay: {\n ..._reactNative.StyleSheet.absoluteFillObject,\n backgroundColor: '#F8F9FA',\n justifyContent: 'center',\n alignItems: 'center'\n },\n overlay: {\n ..._reactNative.StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 999\n },\n verifyingText: {\n marginTop: 16,\n fontSize: 16,\n fontWeight: '600',\n color: '#FFF'\n },\n loadingText: {\n marginTop: 16,\n fontSize: 14,\n color: '#6B7280'\n },\n errorOverlay: {\n position: 'absolute',\n bottom: 20,\n left: 20,\n right: 20,\n backgroundColor: '#FEE2E2',\n padding: 16,\n borderRadius: 12,\n borderWidth: 1,\n borderColor: '#EE2A35'\n },\n errorText: {\n color: '#991B1B',\n fontSize: 14\n }\n });\n var _c;\n $RefreshReg$(_c, \"HumanVerificationScreen\");\n});","lineCount":302,"map":[[14,2,16,15,"Object"],[14,8,16,15],[14,9,16,15,"defineProperty"],[14,23,16,15],[14,24,16,15,"exports"],[14,31,16,15],[15,4,16,15,"enumerable"],[15,14,16,15],[16,4,16,15,"get"],[16,7,16,15],[16,18,16,15,"get"],[16,19,16,15],[17,6,16,15],[17,13,16,15,"HumanVerificationScreen"],[17,36,16,15],[18,4,16,15],[19,2,16,15],[20,2,180,1],[20,6,180,1,"_babelRuntimeHelpersAsyncToGenerator"],[20,42,180,1],[20,45,180,1,"require"],[20,52,180,1],[20,53,180,1,"_dependencyMap"],[20,67,180,1],[21,2,180,1],[21,6,180,1,"_asyncToGenerator"],[21,23,180,1],[21,26,180,1,"_interopDefault"],[21,41,180,1],[21,42,180,1,"_babelRuntimeHelpersAsyncToGenerator"],[21,78,180,1],[22,2,180,1],[22,6,180,1,"_babelRuntimeHelpersSlicedToArray"],[22,39,180,1],[22,42,180,1,"require"],[22,49,180,1],[22,50,180,1,"_dependencyMap"],[22,64,180,1],[23,2,180,1],[23,6,180,1,"_slicedToArray"],[23,20,180,1],[23,23,180,1,"_interopDefault"],[23,38,180,1],[23,39,180,1,"_babelRuntimeHelpersSlicedToArray"],[23,72,180,1],[24,2,1,0],[24,6,1,0,"_react"],[24,12,1,0],[24,15,1,0,"require"],[24,22,1,0],[24,23,1,0,"_dependencyMap"],[24,37,1,0],[25,2,2,0],[25,6,2,0,"_reactNative"],[25,18,2,0],[25,21,2,0,"require"],[25,28,2,0],[25,29,2,0,"_dependencyMap"],[25,43,2,0],[26,2,11,0],[26,6,11,0,"_reactNativeWebview"],[26,25,11,0],[26,28,11,0,"require"],[26,35,11,0],[26,36,11,0,"_dependencyMap"],[26,50,11,0],[27,2,12,0],[27,6,12,0,"_configApi"],[27,16,12,0],[27,19,12,0,"require"],[27,26,12,0],[27,27,12,0,"_dependencyMap"],[27,41,12,0],[28,2,12,46],[28,6,12,46,"_reactJsxDevRuntime"],[28,25,12,46],[28,28,12,46,"require"],[28,35,12,46],[28,36,12,46,"_dependencyMap"],[28,50,12,46],[29,2,14,0],[29,6,14,6,"TURNSTILE_SITE_KEY"],[29,24,14,24],[29,27,14,27],[29,53,14,53],[30,2,16,15],[30,11,16,24,"HumanVerificationScreen"],[30,34,16,47,"HumanVerificationScreen"],[30,35,16,47,"_ref"],[30,39,16,47],[30,41,16,69],[31,4,16,69,"_s"],[31,6,16,69],[32,4,16,69],[32,8,16,50,"navigation"],[32,18,16,60],[32,21,16,60,"_ref"],[32,25,16,60],[32,26,16,50,"navigation"],[32,36,16,60],[33,4,17,2],[33,8,17,2,"_useState"],[33,17,17,2],[33,20,17,32],[33,24,17,32,"useState"],[33,30,17,40],[33,31,17,40,"useState"],[33,39,17,40],[33,41,17,41],[33,45,17,45],[33,46,17,46],[34,6,17,46,"_useState2"],[34,16,17,46],[34,23,17,46,"_slicedToArray"],[34,37,17,46],[34,38,17,46,"default"],[34,45,17,46],[34,47,17,46,"_useState"],[34,56,17,46],[35,6,17,9,"loading"],[35,13,17,16],[35,16,17,16,"_useState2"],[35,26,17,16],[36,6,17,18,"setLoading"],[36,16,17,28],[36,19,17,28,"_useState2"],[36,29,17,28],[37,4,18,2],[37,8,18,2,"_useState3"],[37,18,18,2],[37,21,18,36],[37,25,18,36,"useState"],[37,31,18,44],[37,32,18,44,"useState"],[37,40,18,44],[37,42,18,45],[37,47,18,50],[37,48,18,51],[38,6,18,51,"_useState4"],[38,16,18,51],[38,23,18,51,"_slicedToArray"],[38,37,18,51],[38,38,18,51,"default"],[38,45,18,51],[38,47,18,51,"_useState3"],[38,57,18,51],[39,6,18,9,"verifying"],[39,15,18,18],[39,18,18,18,"_useState4"],[39,28,18,18],[40,6,18,20,"setVerifying"],[40,18,18,32],[40,21,18,32,"_useState4"],[40,31,18,32],[41,4,19,2],[41,8,19,2,"_useState5"],[41,18,19,2],[41,21,19,28],[41,25,19,28,"useState"],[41,31,19,36],[41,32,19,36,"useState"],[41,40,19,36],[41,42,19,52],[41,46,19,56],[41,47,19,57],[42,6,19,57,"_useState6"],[42,16,19,57],[42,23,19,57,"_slicedToArray"],[42,37,19,57],[42,38,19,57,"default"],[42,45,19,57],[42,47,19,57,"_useState5"],[42,57,19,57],[43,6,19,9,"error"],[43,11,19,14],[43,14,19,14,"_useState6"],[43,24,19,14],[44,6,19,16,"setError"],[44,14,19,24],[44,17,19,24,"_useState6"],[44,27,19,24],[45,4,20,2],[45,8,20,8,"webViewRef"],[45,18,20,18],[45,21,20,21],[45,25,20,21,"useRef"],[45,31,20,27],[45,32,20,27,"useRef"],[45,38,20,27],[45,40,20,37],[45,44,20,41],[45,45,20,42],[46,4,22,2,"console"],[46,11,22,9],[46,12,22,10,"log"],[46,15,22,13],[46,16,22,14],[46,49,22,47],[46,50,22,48],[47,4,24,2],[47,8,24,8,"handleTurnstileToken"],[47,28,24,28],[48,6,24,28],[48,10,24,28,"_ref2"],[48,15,24,28],[48,22,24,28,"_asyncToGenerator"],[48,39,24,28],[48,40,24,28,"default"],[48,47,24,28],[48,49,24,31],[48,60,24,38,"token"],[48,65,24,51],[48,67,24,56],[49,8,25,4,"setVerifying"],[49,20,25,16],[49,21,25,17],[49,25,25,21],[49,26,25,22],[50,8,27,4],[50,12,27,8],[51,10,28,6],[52,10,29,6],[52,14,29,12,"response"],[52,22,29,20],[52,31,29,29,"fetch"],[52,36,29,34],[52,37,29,35,"API_ENDPOINTS"],[52,47,29,48],[52,48,29,48,"API_ENDPOINTS"],[52,61,29,48],[52,62,29,49,"VERIFY_TURNSTILE"],[52,78,29,65],[52,80,29,67],[53,12,30,8,"method"],[53,18,30,14],[53,20,30,16],[53,26,30,22],[54,12,31,8,"headers"],[54,19,31,15],[54,21,31,17],[55,14,32,10],[55,28,32,24],[55,30,32,26],[56,12,33,8],[56,13,33,9],[57,12,34,8,"body"],[57,16,34,12],[57,18,34,14,"JSON"],[57,22,34,18],[57,23,34,19,"stringify"],[57,32,34,28],[57,33,34,29],[58,14,34,31,"token"],[59,12,34,37],[59,13,34,38],[60,10,35,6],[60,11,35,7],[60,12,35,8],[61,10,37,6],[61,14,37,12,"result"],[61,20,37,18],[61,29,37,27,"response"],[61,37,37,35],[61,38,37,36,"json"],[61,42,37,40],[61,43,37,41],[61,44,37,42],[62,10,39,6],[62,14,39,10,"result"],[62,20,39,16],[62,21,39,17,"success"],[62,28,39,24],[62,30,39,26],[63,12,40,8,"navigation"],[63,22,40,18],[63,23,40,19,"navigate"],[63,31,40,27],[63,32,40,28],[63,38,40,34],[63,39,40,35],[64,10,41,6],[64,11,41,7],[64,17,41,13],[65,12,42,8,"Alert"],[65,24,42,13],[65,25,42,13,"Alert"],[65,30,42,13],[65,31,42,14,"alert"],[65,36,42,19],[65,37,42,20],[65,58,42,41],[65,60,42,43],[65,78,42,61],[65,79,42,62],[66,12,43,8],[67,12,44,8,"webViewRef"],[67,22,44,18],[67,23,44,19,"current"],[67,30,44,26],[67,32,44,28,"reload"],[67,38,44,34],[67,39,44,35],[67,40,44,36],[68,10,45,6],[69,8,46,4],[69,9,46,5],[69,10,46,6],[69,17,46,13,"error"],[69,22,46,18],[69,24,46,20],[70,10,47,6,"console"],[70,17,47,13],[70,18,47,14,"error"],[70,23,47,19],[70,24,47,20],[70,45,47,41],[70,47,47,43,"error"],[70,52,47,48],[70,53,47,49],[71,10,48,6,"Alert"],[71,22,48,11],[71,23,48,11,"Alert"],[71,28,48,11],[71,29,48,12,"alert"],[71,34,48,17],[71,35,48,18],[71,42,48,25],[71,44,48,27],[71,84,48,67],[71,85,48,68],[72,8,49,4],[72,9,49,5],[72,18,49,14],[73,10,50,6,"setVerifying"],[73,22,50,18],[73,23,50,19],[73,28,50,24],[73,29,50,25],[74,8,51,4],[75,6,52,2],[75,7,52,3],[76,6,52,3],[76,22,24,8,"handleTurnstileToken"],[76,42,24,28,"handleTurnstileToken"],[76,43,24,28,"_x"],[76,45,24,28],[77,8,24,28],[77,15,24,28,"_ref2"],[77,20,24,28],[77,21,24,28,"apply"],[77,26,24,28],[77,33,24,28,"arguments"],[77,42,24,28],[78,6,24,28],[79,4,24,28],[79,7,52,3],[80,4,54,2],[80,8,54,8,"handleMessage"],[80,21,54,21],[80,24,54,25,"event"],[80,29,54,35],[80,33,54,40],[81,6,55,4],[81,10,55,10,"data"],[81,14,55,14],[81,17,55,17,"JSON"],[81,21,55,21],[81,22,55,22,"parse"],[81,27,55,27],[81,28,55,28,"event"],[81,33,55,33],[81,34,55,34,"nativeEvent"],[81,45,55,45],[81,46,55,46,"data"],[81,50,55,50],[81,51,55,51],[82,6,57,4],[82,10,57,8,"data"],[82,14,57,12],[82,15,57,13,"type"],[82,19,57,17],[82,24,57,22],[82,43,57,41],[82,45,57,43],[83,8,58,6,"handleTurnstileToken"],[83,28,58,26],[83,29,58,27,"data"],[83,33,58,31],[83,34,58,32,"token"],[83,39,58,37],[83,40,58,38],[84,6,59,4],[84,7,59,5],[84,13,59,11],[84,17,59,15,"data"],[84,21,59,19],[84,22,59,20,"type"],[84,26,59,24],[84,31,59,29],[84,48,59,46],[84,50,59,48],[85,8,60,6,"Alert"],[85,20,60,11],[85,21,60,11,"Alert"],[85,26,60,11],[85,27,60,12,"alert"],[85,32,60,17],[85,33,60,18],[85,40,60,25],[85,42,60,27],[85,82,60,67],[85,83,60,68],[86,8,61,6,"setLoading"],[86,18,61,16],[86,19,61,17],[86,24,61,22],[86,25,61,23],[87,6,62,4],[88,4,63,2],[88,5,63,3],[89,4,65,2],[89,8,65,8,"turnstileHTML"],[89,21,65,21],[89,24,65,24],[90,0,66,0],[91,0,67,0],[92,0,68,0],[93,0,69,0],[94,0,70,0],[95,0,71,0],[96,0,72,0],[97,0,73,0],[98,0,74,0],[99,0,75,0],[100,0,76,0],[101,0,77,0],[102,0,78,0],[103,0,79,0],[104,0,80,0],[105,0,81,0],[106,0,82,0],[107,0,83,0],[108,0,84,0],[109,0,85,0],[110,0,86,0],[111,0,87,0],[112,0,88,0],[113,0,89,0],[114,0,90,0],[115,0,91,0],[116,0,92,0],[117,0,93,0],[118,0,94,0],[119,0,95,0],[120,0,96,0],[121,0,97,0],[122,0,98,0],[123,0,99,0],[124,0,100,0],[125,0,101,0],[126,0,102,0],[127,0,103,0],[128,0,104,0],[129,0,105,0],[130,0,106,0],[131,0,107,0],[132,0,108,0],[133,0,109,0],[134,0,110,0],[135,0,111,0],[136,0,112,0],[137,0,113,0],[137,29,113,29,"TURNSTILE_SITE_KEY"],[137,47,113,47],[138,0,114,0],[139,0,115,0],[140,0,116,0],[141,0,117,0],[142,0,118,0],[143,0,119,0],[144,0,120,0],[145,0,121,0],[146,0,122,0],[147,0,123,0],[148,0,124,0],[149,0,125,0],[150,0,126,0],[151,0,127,0],[152,0,128,0],[153,0,129,0],[154,0,130,0],[155,0,131,0],[156,0,132,0],[157,0,133,0],[158,0,134,0],[159,0,135,0],[159,3,135,3],[160,4,137,2],[160,24,138,4],[160,28,138,4,"_reactJsxDevRuntime"],[160,47,138,4],[160,48,138,4,"jsxDEV"],[160,54,138,4],[160,56,138,5,"_reactNative"],[160,68,138,17],[160,69,138,17,"SafeAreaView"],[160,81,138,17],[161,6,138,18,"style"],[161,11,138,23],[161,13,138,25,"styles"],[161,19,138,31],[161,20,138,32,"container"],[161,29,138,42],[162,6,138,42,"children"],[162,14,138,42],[162,17,139,7,"verifying"],[162,26,139,16],[162,43,140,8],[162,47,140,8,"_reactJsxDevRuntime"],[162,66,140,8],[162,67,140,8,"jsxDEV"],[162,73,140,8],[162,75,140,9,"_reactNative"],[162,87,140,13],[162,88,140,13,"View"],[162,92,140,13],[163,8,140,14,"style"],[163,13,140,19],[163,15,140,21,"styles"],[163,21,140,27],[163,22,140,28,"overlay"],[163,29,140,36],[164,8,140,36,"children"],[164,16,140,36],[164,32,141,10],[164,36,141,10,"_reactJsxDevRuntime"],[164,55,141,10],[164,56,141,10,"jsxDEV"],[164,62,141,10],[164,64,141,11,"_reactNative"],[164,76,141,28],[164,77,141,28,"ActivityIndicator"],[164,94,141,28],[165,10,141,29,"size"],[165,14,141,33],[165,16,141,34],[165,23,141,41],[166,10,141,42,"color"],[166,15,141,47],[166,17,141,48],[167,8,141,57],[168,10,141,57,"fileName"],[168,18,141,57],[168,20,141,57,"_jsxFileName"],[168,32,141,57],[169,10,141,57,"lineNumber"],[169,20,141,57],[170,10,141,57,"columnNumber"],[170,22,141,57],[171,8,141,57],[171,15,141,59],[171,16,141,60],[171,31,142,10],[171,35,142,10,"_reactJsxDevRuntime"],[171,54,142,10],[171,55,142,10,"jsxDEV"],[171,61,142,10],[171,63,142,11,"_reactNative"],[171,75,142,15],[171,76,142,15,"Text"],[171,80,142,15],[172,10,142,16,"style"],[172,15,142,21],[172,17,142,23,"styles"],[172,23,142,29],[172,24,142,30,"verifyingText"],[172,37,142,44],[173,10,142,44,"children"],[173,18,142,44],[173,20,142,45],[174,8,142,57],[175,10,142,57,"fileName"],[175,18,142,57],[175,20,142,57,"_jsxFileName"],[175,32,142,57],[176,10,142,57,"lineNumber"],[176,20,142,57],[177,10,142,57,"columnNumber"],[177,22,142,57],[178,8,142,57],[178,15,142,63],[178,16,142,64],[179,6,142,64],[180,8,142,64,"fileName"],[180,16,142,64],[180,18,142,64,"_jsxFileName"],[180,30,142,64],[181,8,142,64,"lineNumber"],[181,18,142,64],[182,8,142,64,"columnNumber"],[182,20,142,64],[183,6,142,64],[183,13,143,14],[183,14,144,7],[183,29,146,6],[183,33,146,6,"_reactJsxDevRuntime"],[183,52,146,6],[183,53,146,6,"jsxDEV"],[183,59,146,6],[183,61,146,7,"_reactNativeWebview"],[183,80,146,14],[183,81,146,14,"WebView"],[183,88,146,14],[184,8,147,8,"ref"],[184,11,147,11],[184,13,147,13,"webViewRef"],[184,23,147,24],[185,8,148,8,"source"],[185,14,148,14],[185,16,148,16],[186,10,148,18,"html"],[186,14,148,22],[186,16,148,24,"turnstileHTML"],[187,8,148,38],[187,9,148,40],[188,8,149,8,"onMessage"],[188,17,149,17],[188,19,149,19,"handleMessage"],[188,32,149,33],[189,8,150,8,"onLoadStart"],[189,19,150,19],[189,21,150,21,"onLoadStart"],[189,22,150,21],[189,27,150,27,"console"],[189,34,150,34],[189,35,150,35,"log"],[189,38,150,38],[189,39,150,39],[189,64,150,64],[189,65,150,66],[190,8,151,8,"onLoadEnd"],[190,17,151,17],[190,19,151,19,"onLoadEnd"],[190,20,151,19],[190,25,151,25],[191,10,152,10,"console"],[191,17,152,17],[191,18,152,18,"log"],[191,21,152,21],[191,22,152,22],[191,48,152,48],[191,49,152,49],[192,10,153,10,"setLoading"],[192,20,153,20],[192,21,153,21],[192,26,153,26],[192,27,153,27],[193,8,154,8],[193,9,154,10],[194,8,155,8,"onError"],[194,15,155,15],[194,17,155,18,"syntheticEvent"],[194,31,155,32],[194,35,155,37],[195,10,156,10],[195,14,156,18,"nativeEvent"],[195,25,156,29],[195,28,156,34,"syntheticEvent"],[195,42,156,48],[195,43,156,18,"nativeEvent"],[195,54,156,29],[196,10,157,10,"console"],[196,17,157,17],[196,18,157,18,"error"],[196,23,157,23],[196,24,157,24],[196,40,157,40],[196,42,157,42,"nativeEvent"],[196,53,157,53],[196,54,157,54],[197,10,158,10,"setError"],[197,18,158,18],[197,19,158,19],[197,37,158,37,"nativeEvent"],[197,48,158,48],[197,49,158,49,"description"],[197,60,158,60],[197,62,158,62],[197,63,158,63],[198,8,159,8],[198,9,159,10],[199,8,160,8,"style"],[199,13,160,13],[199,15,160,15,"styles"],[199,21,160,21],[199,22,160,22,"webview"],[199,29,160,30],[200,8,161,8,"javaScriptEnabled"],[200,25,161,25],[200,27,161,27],[200,31,161,32],[201,8,162,8,"domStorageEnabled"],[201,25,162,25],[201,27,162,27],[201,31,162,32],[202,8,163,8,"originWhitelist"],[202,23,163,23],[202,25,163,25],[202,26,163,26],[202,29,163,29],[203,6,163,31],[204,8,163,31,"fileName"],[204,16,163,31],[204,18,163,31,"_jsxFileName"],[204,30,163,31],[205,8,163,31,"lineNumber"],[205,18,163,31],[206,8,163,31,"columnNumber"],[206,20,163,31],[207,6,163,31],[207,13,164,7],[207,14,164,8],[207,16,166,7,"loading"],[207,23,166,14],[207,40,167,8],[207,44,167,8,"_reactJsxDevRuntime"],[207,63,167,8],[207,64,167,8,"jsxDEV"],[207,70,167,8],[207,72,167,9,"_reactNative"],[207,84,167,13],[207,85,167,13,"View"],[207,89,167,13],[208,8,167,14,"style"],[208,13,167,19],[208,15,167,21,"styles"],[208,21,167,27],[208,22,167,28,"loadingOverlay"],[208,36,167,43],[209,8,167,43,"children"],[209,16,167,43],[209,32,168,10],[209,36,168,10,"_reactJsxDevRuntime"],[209,55,168,10],[209,56,168,10,"jsxDEV"],[209,62,168,10],[209,64,168,11,"_reactNative"],[209,76,168,28],[209,77,168,28,"ActivityIndicator"],[209,94,168,28],[210,10,168,29,"size"],[210,14,168,33],[210,16,168,34],[210,23,168,41],[211,10,168,42,"color"],[211,15,168,47],[211,17,168,48],[212,8,168,57],[213,10,168,57,"fileName"],[213,18,168,57],[213,20,168,57,"_jsxFileName"],[213,32,168,57],[214,10,168,57,"lineNumber"],[214,20,168,57],[215,10,168,57,"columnNumber"],[215,22,168,57],[216,8,168,57],[216,15,168,59],[216,16,168,60],[216,31,169,10],[216,35,169,10,"_reactJsxDevRuntime"],[216,54,169,10],[216,55,169,10,"jsxDEV"],[216,61,169,10],[216,63,169,11,"_reactNative"],[216,75,169,15],[216,76,169,15,"Text"],[216,80,169,15],[217,10,169,16,"style"],[217,15,169,21],[217,17,169,23,"styles"],[217,23,169,29],[217,24,169,30,"loadingText"],[217,35,169,42],[218,10,169,42,"children"],[218,18,169,42],[218,20,169,43],[219,8,169,66],[220,10,169,66,"fileName"],[220,18,169,66],[220,20,169,66,"_jsxFileName"],[220,32,169,66],[221,10,169,66,"lineNumber"],[221,20,169,66],[222,10,169,66,"columnNumber"],[222,22,169,66],[223,8,169,66],[223,15,169,72],[223,16,169,73],[224,6,169,73],[225,8,169,73,"fileName"],[225,16,169,73],[225,18,169,73,"_jsxFileName"],[225,30,169,73],[226,8,169,73,"lineNumber"],[226,18,169,73],[227,8,169,73,"columnNumber"],[227,20,169,73],[228,6,169,73],[228,13,170,14],[228,14,171,7],[228,16,173,7,"error"],[228,21,173,12],[228,38,174,8],[228,42,174,8,"_reactJsxDevRuntime"],[228,61,174,8],[228,62,174,8,"jsxDEV"],[228,68,174,8],[228,70,174,9,"_reactNative"],[228,82,174,13],[228,83,174,13,"View"],[228,87,174,13],[229,8,174,14,"style"],[229,13,174,19],[229,15,174,21,"styles"],[229,21,174,27],[229,22,174,28,"errorOverlay"],[229,34,174,41],[230,8,174,41,"children"],[230,16,174,41],[230,31,175,10],[230,35,175,10,"_reactJsxDevRuntime"],[230,54,175,10],[230,55,175,10,"jsxDEV"],[230,61,175,10],[230,63,175,11,"_reactNative"],[230,75,175,15],[230,76,175,15,"Text"],[230,80,175,15],[231,10,175,16,"style"],[231,15,175,21],[231,17,175,23,"styles"],[231,23,175,29],[231,24,175,30,"errorText"],[231,33,175,40],[232,10,175,40,"children"],[232,18,175,40],[232,20,175,42,"error"],[233,8,175,47],[234,10,175,47,"fileName"],[234,18,175,47],[234,20,175,47,"_jsxFileName"],[234,32,175,47],[235,10,175,47,"lineNumber"],[235,20,175,47],[236,10,175,47,"columnNumber"],[236,22,175,47],[237,8,175,47],[237,15,175,54],[238,6,175,55],[239,8,175,55,"fileName"],[239,16,175,55],[239,18,175,55,"_jsxFileName"],[239,30,175,55],[240,8,175,55,"lineNumber"],[240,18,175,55],[241,8,175,55,"columnNumber"],[241,20,175,55],[242,6,175,55],[242,13,176,14],[242,14,177,7],[243,4,177,7],[244,6,177,7,"fileName"],[244,14,177,7],[244,16,177,7,"_jsxFileName"],[244,28,177,7],[245,6,177,7,"lineNumber"],[245,16,177,7],[246,6,177,7,"columnNumber"],[246,18,177,7],[247,4,177,7],[247,11,178,18],[247,12,178,19],[248,2,180,0],[249,2,180,1,"_s"],[249,4,180,1],[249,5,16,24,"HumanVerificationScreen"],[249,28,16,47],[250,2,16,47,"_c"],[250,4,16,47],[250,7,16,24,"HumanVerificationScreen"],[250,30,16,47],[251,2,182,0],[251,6,182,6,"styles"],[251,12,182,12],[251,15,182,15,"StyleSheet"],[251,27,182,25],[251,28,182,25,"StyleSheet"],[251,38,182,25],[251,39,182,26,"create"],[251,45,182,32],[251,46,182,33],[252,4,183,2,"container"],[252,13,183,11],[252,15,183,13],[253,6,184,4,"flex"],[253,10,184,8],[253,12,184,10],[253,13,184,11],[254,6,185,4,"backgroundColor"],[254,21,185,19],[254,23,185,21],[255,4,186,2],[255,5,186,3],[256,4,187,2,"webview"],[256,11,187,9],[256,13,187,11],[257,6,188,4,"flex"],[257,10,188,8],[257,12,188,10],[257,13,188,11],[258,6,189,4,"backgroundColor"],[258,21,189,19],[258,23,189,21],[259,4,190,2],[259,5,190,3],[260,4,191,2,"loadingOverlay"],[260,18,191,16],[260,20,191,18],[261,6,192,4],[261,9,192,7,"StyleSheet"],[261,21,192,17],[261,22,192,17,"StyleSheet"],[261,32,192,17],[261,33,192,18,"absoluteFillObject"],[261,51,192,36],[262,6,193,4,"backgroundColor"],[262,21,193,19],[262,23,193,21],[262,32,193,30],[263,6,194,4,"justifyContent"],[263,20,194,18],[263,22,194,20],[263,30,194,28],[264,6,195,4,"alignItems"],[264,16,195,14],[264,18,195,16],[265,4,196,2],[265,5,196,3],[266,4,197,2,"overlay"],[266,11,197,9],[266,13,197,11],[267,6,198,4],[267,9,198,7,"StyleSheet"],[267,21,198,17],[267,22,198,17,"StyleSheet"],[267,32,198,17],[267,33,198,18,"absoluteFillObject"],[267,51,198,36],[268,6,199,4,"backgroundColor"],[268,21,199,19],[268,23,199,21],[268,43,199,41],[269,6,200,4,"justifyContent"],[269,20,200,18],[269,22,200,20],[269,30,200,28],[270,6,201,4,"alignItems"],[270,16,201,14],[270,18,201,16],[270,26,201,24],[271,6,202,4,"zIndex"],[271,12,202,10],[271,14,202,12],[272,4,203,2],[272,5,203,3],[273,4,204,2,"verifyingText"],[273,17,204,15],[273,19,204,17],[274,6,205,4,"marginTop"],[274,15,205,13],[274,17,205,15],[274,19,205,17],[275,6,206,4,"fontSize"],[275,14,206,12],[275,16,206,14],[275,18,206,16],[276,6,207,4,"fontWeight"],[276,16,207,14],[276,18,207,16],[276,23,207,21],[277,6,208,4,"color"],[277,11,208,9],[277,13,208,11],[278,4,209,2],[278,5,209,3],[279,4,210,2,"loadingText"],[279,15,210,13],[279,17,210,15],[280,6,211,4,"marginTop"],[280,15,211,13],[280,17,211,15],[280,19,211,17],[281,6,212,4,"fontSize"],[281,14,212,12],[281,16,212,14],[281,18,212,16],[282,6,213,4,"color"],[282,11,213,9],[282,13,213,11],[283,4,214,2],[283,5,214,3],[284,4,215,2,"errorOverlay"],[284,16,215,14],[284,18,215,16],[285,6,216,4,"position"],[285,14,216,12],[285,16,216,14],[285,26,216,24],[286,6,217,4,"bottom"],[286,12,217,10],[286,14,217,12],[286,16,217,14],[287,6,218,4,"left"],[287,10,218,8],[287,12,218,10],[287,14,218,12],[288,6,219,4,"right"],[288,11,219,9],[288,13,219,11],[288,15,219,13],[289,6,220,4,"backgroundColor"],[289,21,220,19],[289,23,220,21],[289,32,220,30],[290,6,221,4,"padding"],[290,13,221,11],[290,15,221,13],[290,17,221,15],[291,6,222,4,"borderRadius"],[291,18,222,16],[291,20,222,18],[291,22,222,20],[292,6,223,4,"borderWidth"],[292,17,223,15],[292,19,223,17],[292,20,223,18],[293,6,224,4,"borderColor"],[293,17,224,15],[293,19,224,17],[294,4,225,2],[294,5,225,3],[295,4,226,2,"errorText"],[295,13,226,11],[295,15,226,13],[296,6,227,4,"color"],[296,11,227,9],[296,13,227,11],[296,22,227,20],[297,6,228,4,"fontSize"],[297,14,228,12],[297,16,228,14],[298,4,229,2],[299,2,230,0],[299,3,230,1],[299,4,230,2],[300,2,230,3],[300,6,230,3,"_c"],[300,8,230,3],[301,2,230,3,"$RefreshReg$"],[301,14,230,3],[301,15,230,3,"_c"],[301,17,230,3],[302,0,230,3],[302,3]],"functionMap":{"names":["","HumanVerificationScreen","handleTurnstileToken","handleMessage","WebView.props.onLoadStart","WebView.props.onLoadEnd","WebView.props.onError"],"mappings":"AAA;eCe;+BCQ;GD4B;wBEE;GFS;qBGuF,4CH;mBIC;SJG;iBKC;SLI;CDqB"},"hasCjsExports":false},"type":"js/module"}]}
\ No newline at end of file
diff --git a/frontend/.metro-cache/cache/7e/a4ddb330ab90c71ee62adbbcd0d82f13b10c2de2bb643b82f99a671937d03f92006769 b/frontend/.metro-cache/cache/7e/a4ddb330ab90c71ee62adbbcd0d82f13b10c2de2bb643b82f99a671937d03f92006769
new file mode 100644
index 00000000..a756173b
--- /dev/null
+++ b/frontend/.metro-cache/cache/7e/a4ddb330ab90c71ee62adbbcd0d82f13b10c2de2bb643b82f99a671937d03f92006769
@@ -0,0 +1 @@
+{"dependencies":[{"name":"@babel/runtime/helpers/asyncToGenerator","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"YisBBiy2Xm9DEVdFebZ2nbgAHBo=","exportNames":["*"],"imports":1}},{"name":"@babel/runtime/helpers/slicedToArray","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"5y7e5+zC7teYEEC6niD9f5zII1M=","exportNames":["*"],"imports":1}},{"name":"react","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":78,"index":78}}],"key":"RtGiGa+/H7VrI7GDQDLhO1UbpU8=","exportNames":["*"],"imports":1}},{"name":"@react-native-async-storage/async-storage","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":2,"column":0,"index":79},"end":{"line":2,"column":69,"index":148}}],"key":"0kSRlooyBOaYM9tlTtK91nq+uds=","exportNames":["*"],"imports":1}},{"name":"../config/api","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":3,"column":0,"index":149},"end":{"line":3,"column":46,"index":195}}],"key":"V94urzZZSfzzXHrNxWFShT8IuQo=","exportNames":["*"],"imports":1}},{"name":"react/jsx-dev-runtime","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"L9D70Z4hi4aGuui1ysja/oQ5ytI=","exportNames":["*"],"imports":1}}],"output":[{"data":{"code":"__d(function (global, require, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) {\n \"use strict\";\n\n var _jsxFileName = \"/app/frontend/src/contexts/AuthContext.tsx\",\n _s = $RefreshSig$(),\n _s2 = $RefreshSig$();\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n function _interopDefault(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n exports.AuthProvider = AuthProvider;\n exports.useAuth = useAuth;\n var _babelRuntimeHelpersAsyncToGenerator = require(_dependencyMap[0], \"@babel/runtime/helpers/asyncToGenerator\");\n var _asyncToGenerator = _interopDefault(_babelRuntimeHelpersAsyncToGenerator);\n var _babelRuntimeHelpersSlicedToArray = require(_dependencyMap[1], \"@babel/runtime/helpers/slicedToArray\");\n var _slicedToArray = _interopDefault(_babelRuntimeHelpersSlicedToArray);\n var _react = require(_dependencyMap[2], \"react\");\n var _reactNativeAsyncStorageAsyncStorage = require(_dependencyMap[3], \"@react-native-async-storage/async-storage\");\n var AsyncStorage = _interopDefault(_reactNativeAsyncStorageAsyncStorage);\n var _configApi = require(_dependencyMap[4], \"../config/api\");\n var _reactJsxDevRuntime = require(_dependencyMap[5], \"react/jsx-dev-runtime\");\n var AuthContext = /*#__PURE__*/(0, _react.createContext)(undefined);\n function AuthProvider(_ref) {\n _s();\n var children = _ref.children;\n var _useState = (0, _react.useState)(null),\n _useState2 = (0, _slicedToArray.default)(_useState, 2),\n user = _useState2[0],\n setUser = _useState2[1];\n var _useState3 = (0, _react.useState)(true),\n _useState4 = (0, _slicedToArray.default)(_useState3, 2),\n loading = _useState4[0],\n setLoading = _useState4[1];\n (0, _react.useEffect)(() => {\n loadUser();\n }, []);\n var loadUser = /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator.default)(function* () {\n try {\n var userData = yield AsyncStorage.default.getItem('user');\n if (userData) {\n setUser(JSON.parse(userData));\n }\n } catch (error) {\n console.error('Error loading user:', error);\n } finally {\n setLoading(false);\n }\n });\n return function loadUser() {\n return _ref2.apply(this, arguments);\n };\n }();\n var signIn = /*#__PURE__*/function () {\n var _ref3 = (0, _asyncToGenerator.default)(function* (email, password) {\n try {\n var response = yield fetch(_configApi.API_ENDPOINTS.AUTH_SIGNIN, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n email,\n password\n })\n });\n if (!response.ok) {\n throw new Error('Invalid credentials');\n }\n var userData = yield response.json();\n yield AsyncStorage.default.setItem('user', JSON.stringify(userData));\n setUser(userData);\n } catch (error) {\n console.error('Sign in error:', error);\n throw error;\n }\n });\n return function signIn(_x, _x2) {\n return _ref3.apply(this, arguments);\n };\n }();\n var signUp = /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator.default)(function* (email, password, firstName, lastName, phone, referralCode) {\n var language = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 'en';\n try {\n var response = yield fetch(_configApi.API_ENDPOINTS.AUTH_SIGNUP, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n email,\n password,\n first_name: firstName,\n last_name: lastName,\n phone,\n referral_code: referralCode,\n language\n })\n });\n if (!response.ok) {\n var error = yield response.json();\n throw new Error(error.detail || 'Sign up failed');\n }\n var userData = yield response.json();\n yield AsyncStorage.default.setItem('user', JSON.stringify(userData));\n setUser(userData);\n } catch (error) {\n console.error('Sign up error:', error);\n throw error;\n }\n });\n return function signUp(_x3, _x4, _x5, _x6, _x7, _x8) {\n return _ref4.apply(this, arguments);\n };\n }();\n var signOut = /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator.default)(function* () {\n try {\n yield AsyncStorage.default.removeItem('user');\n setUser(null);\n } catch (error) {\n console.error('Sign out error:', error);\n }\n });\n return function signOut() {\n return _ref5.apply(this, arguments);\n };\n }();\n return /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(AuthContext.Provider, {\n value: {\n user,\n loading,\n signIn,\n signUp,\n signOut,\n setUser\n },\n children: children\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 127,\n columnNumber: 5\n }, this);\n }\n _s(AuthProvider, \"NiO5z6JIqzX62LS5UWDgIqbZYyY=\");\n _c = AuthProvider;\n function useAuth() {\n _s2();\n var context = (0, _react.useContext)(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n }\n _s2(useAuth, \"b9L3QQ+jgeyIrH0NfHrJ8nn7VMU=\");\n var _c;\n $RefreshReg$(_c, \"AuthProvider\");\n});","lineCount":163,"map":[[15,2,33,0,"exports"],[15,9,33,0],[15,10,33,0,"AuthProvider"],[15,22,33,0],[15,25,33,0,"AuthProvider"],[15,37,33,0],[16,2,133,0,"exports"],[16,9,133,0],[16,10,133,0,"useAuth"],[16,17,133,0],[16,20,133,0,"useAuth"],[16,27,133,0],[17,2,139,1],[17,6,139,1,"_babelRuntimeHelpersAsyncToGenerator"],[17,42,139,1],[17,45,139,1,"require"],[17,52,139,1],[17,53,139,1,"_dependencyMap"],[17,67,139,1],[18,2,139,1],[18,6,139,1,"_asyncToGenerator"],[18,23,139,1],[18,26,139,1,"_interopDefault"],[18,41,139,1],[18,42,139,1,"_babelRuntimeHelpersAsyncToGenerator"],[18,78,139,1],[19,2,139,1],[19,6,139,1,"_babelRuntimeHelpersSlicedToArray"],[19,39,139,1],[19,42,139,1,"require"],[19,49,139,1],[19,50,139,1,"_dependencyMap"],[19,64,139,1],[20,2,139,1],[20,6,139,1,"_slicedToArray"],[20,20,139,1],[20,23,139,1,"_interopDefault"],[20,38,139,1],[20,39,139,1,"_babelRuntimeHelpersSlicedToArray"],[20,72,139,1],[21,2,1,0],[21,6,1,0,"_react"],[21,12,1,0],[21,15,1,0,"require"],[21,22,1,0],[21,23,1,0,"_dependencyMap"],[21,37,1,0],[22,2,2,0],[22,6,2,0,"_reactNativeAsyncStorageAsyncStorage"],[22,42,2,0],[22,45,2,0,"require"],[22,52,2,0],[22,53,2,0,"_dependencyMap"],[22,67,2,0],[23,2,2,0],[23,6,2,0,"AsyncStorage"],[23,18,2,0],[23,21,2,0,"_interopDefault"],[23,36,2,0],[23,37,2,0,"_reactNativeAsyncStorageAsyncStorage"],[23,73,2,0],[24,2,3,0],[24,6,3,0,"_configApi"],[24,16,3,0],[24,19,3,0,"require"],[24,26,3,0],[24,27,3,0,"_dependencyMap"],[24,41,3,0],[25,2,3,46],[25,6,3,46,"_reactJsxDevRuntime"],[25,25,3,46],[25,28,3,46,"require"],[25,35,3,46],[25,36,3,46,"_dependencyMap"],[25,50,3,46],[26,2,31,0],[26,6,31,6,"AuthContext"],[26,17,31,17],[26,33,31,20],[26,37,31,20,"createContext"],[26,43,31,33],[26,44,31,33,"createContext"],[26,57,31,33],[26,59,31,63,"undefined"],[26,68,31,72],[26,69,31,73],[27,2,33,7],[27,11,33,16,"AuthProvider"],[27,23,33,28,"AuthProvider"],[27,24,33,28,"_ref"],[27,28,33,28],[27,30,33,74],[28,4,33,74,"_s"],[28,6,33,74],[29,4,33,74],[29,8,33,31,"children"],[29,16,33,39],[29,19,33,39,"_ref"],[29,23,33,39],[29,24,33,31,"children"],[29,32,33,39],[30,4,34,2],[30,8,34,2,"_useState"],[30,17,34,2],[30,20,34,26],[30,24,34,26,"useState"],[30,30,34,34],[30,31,34,34,"useState"],[30,39,34,34],[30,41,34,48],[30,45,34,52],[30,46,34,53],[31,6,34,53,"_useState2"],[31,16,34,53],[31,23,34,53,"_slicedToArray"],[31,37,34,53],[31,38,34,53,"default"],[31,45,34,53],[31,47,34,53,"_useState"],[31,56,34,53],[32,6,34,9,"user"],[32,10,34,13],[32,13,34,13,"_useState2"],[32,23,34,13],[33,6,34,15,"setUser"],[33,13,34,22],[33,16,34,22,"_useState2"],[33,26,34,22],[34,4,35,2],[34,8,35,2,"_useState3"],[34,18,35,2],[34,21,35,32],[34,25,35,32,"useState"],[34,31,35,40],[34,32,35,40,"useState"],[34,40,35,40],[34,42,35,41],[34,46,35,45],[34,47,35,46],[35,6,35,46,"_useState4"],[35,16,35,46],[35,23,35,46,"_slicedToArray"],[35,37,35,46],[35,38,35,46,"default"],[35,45,35,46],[35,47,35,46,"_useState3"],[35,57,35,46],[36,6,35,9,"loading"],[36,13,35,16],[36,16,35,16,"_useState4"],[36,26,35,16],[37,6,35,18,"setLoading"],[37,16,35,28],[37,19,35,28,"_useState4"],[37,29,35,28],[38,4,37,2],[38,8,37,2,"useEffect"],[38,14,37,11],[38,15,37,11,"useEffect"],[38,24,37,11],[38,26,37,12],[38,32,37,18],[39,6,38,4,"loadUser"],[39,14,38,12],[39,15,38,13],[39,16,38,14],[40,4,39,2],[40,5,39,3],[40,7,39,5],[40,9,39,7],[40,10,39,8],[41,4,41,2],[41,8,41,8,"loadUser"],[41,16,41,16],[42,6,41,16],[42,10,41,16,"_ref2"],[42,15,41,16],[42,22,41,16,"_asyncToGenerator"],[42,39,41,16],[42,40,41,16,"default"],[42,47,41,16],[42,49,41,19],[42,62,41,31],[43,8,42,4],[43,12,42,8],[44,10,43,6],[44,14,43,12,"userData"],[44,22,43,20],[44,31,43,29,"AsyncStorage"],[44,43,43,41],[44,44,43,41,"default"],[44,51,43,41],[44,52,43,42,"getItem"],[44,59,43,49],[44,60,43,50],[44,66,43,56],[44,67,43,57],[45,10,44,6],[45,14,44,10,"userData"],[45,22,44,18],[45,24,44,20],[46,12,45,8,"setUser"],[46,19,45,15],[46,20,45,16,"JSON"],[46,24,45,20],[46,25,45,21,"parse"],[46,30,45,26],[46,31,45,27,"userData"],[46,39,45,35],[46,40,45,36],[46,41,45,37],[47,10,46,6],[48,8,47,4],[48,9,47,5],[48,10,47,6],[48,17,47,13,"error"],[48,22,47,18],[48,24,47,20],[49,10,48,6,"console"],[49,17,48,13],[49,18,48,14,"error"],[49,23,48,19],[49,24,48,20],[49,45,48,41],[49,47,48,43,"error"],[49,52,48,48],[49,53,48,49],[50,8,49,4],[50,9,49,5],[50,18,49,14],[51,10,50,6,"setLoading"],[51,20,50,16],[51,21,50,17],[51,26,50,22],[51,27,50,23],[52,8,51,4],[53,6,52,2],[53,7,52,3],[54,6,52,3],[54,22,41,8,"loadUser"],[54,30,41,16,"loadUser"],[54,31,41,16],[55,8,41,16],[55,15,41,16,"_ref2"],[55,20,41,16],[55,21,41,16,"apply"],[55,26,41,16],[55,33,41,16,"arguments"],[55,42,41,16],[56,6,41,16],[57,4,41,16],[57,7,52,3],[58,4,54,2],[58,8,54,8,"signIn"],[58,14,54,14],[59,6,54,14],[59,10,54,14,"_ref3"],[59,15,54,14],[59,22,54,14,"_asyncToGenerator"],[59,39,54,14],[59,40,54,14,"default"],[59,47,54,14],[59,49,54,17],[59,60,54,24,"email"],[59,65,54,37],[59,67,54,39,"password"],[59,75,54,55],[59,77,54,60],[60,8,55,4],[60,12,55,8],[61,10,56,6],[61,14,56,12,"response"],[61,22,56,20],[61,31,56,29,"fetch"],[61,36,56,34],[61,37,56,35,"API_ENDPOINTS"],[61,47,56,48],[61,48,56,48,"API_ENDPOINTS"],[61,61,56,48],[61,62,56,49,"AUTH_SIGNIN"],[61,73,56,60],[61,75,56,62],[62,12,57,8,"method"],[62,18,57,14],[62,20,57,16],[62,26,57,22],[63,12,58,8,"headers"],[63,19,58,15],[63,21,58,17],[64,14,59,10],[64,28,59,24],[64,30,59,26],[65,12,60,8],[65,13,60,9],[66,12,61,8,"body"],[66,16,61,12],[66,18,61,14,"JSON"],[66,22,61,18],[66,23,61,19,"stringify"],[66,32,61,28],[66,33,61,29],[67,14,61,31,"email"],[67,19,61,36],[68,14,61,38,"password"],[69,12,61,47],[69,13,61,48],[70,10,62,6],[70,11,62,7],[70,12,62,8],[71,10,64,6],[71,14,64,10],[71,15,64,11,"response"],[71,23,64,19],[71,24,64,20,"ok"],[71,26,64,22],[71,28,64,24],[72,12,65,8],[72,18,65,14],[72,22,65,18,"Error"],[72,27,65,23],[72,28,65,24],[72,49,65,45],[72,50,65,46],[73,10,66,6],[74,10,68,6],[74,14,68,12,"userData"],[74,22,68,20],[74,31,68,29,"response"],[74,39,68,37],[74,40,68,38,"json"],[74,44,68,42],[74,45,68,43],[74,46,68,44],[75,10,69,6],[75,16,69,12,"AsyncStorage"],[75,28,69,24],[75,29,69,24,"default"],[75,36,69,24],[75,37,69,25,"setItem"],[75,44,69,32],[75,45,69,33],[75,51,69,39],[75,53,69,41,"JSON"],[75,57,69,45],[75,58,69,46,"stringify"],[75,67,69,55],[75,68,69,56,"userData"],[75,76,69,64],[75,77,69,65],[75,78,69,66],[76,10,70,6,"setUser"],[76,17,70,13],[76,18,70,14,"userData"],[76,26,70,22],[76,27,70,23],[77,8,71,4],[77,9,71,5],[77,10,71,6],[77,17,71,13,"error"],[77,22,71,18],[77,24,71,20],[78,10,72,6,"console"],[78,17,72,13],[78,18,72,14,"error"],[78,23,72,19],[78,24,72,20],[78,40,72,36],[78,42,72,38,"error"],[78,47,72,43],[78,48,72,44],[79,10,73,6],[79,16,73,12,"error"],[79,21,73,17],[80,8,74,4],[81,6,75,2],[81,7,75,3],[82,6,75,3],[82,22,54,8,"signIn"],[82,28,54,14,"signIn"],[82,29,54,14,"_x"],[82,31,54,14],[82,33,54,14,"_x2"],[82,36,54,14],[83,8,54,14],[83,15,54,14,"_ref3"],[83,20,54,14],[83,21,54,14,"apply"],[83,26,54,14],[83,33,54,14,"arguments"],[83,42,54,14],[84,6,54,14],[85,4,54,14],[85,7,75,3],[86,4,77,2],[86,8,77,8,"signUp"],[86,14,77,14],[87,6,77,14],[87,10,77,14,"_ref4"],[87,15,77,14],[87,22,77,14,"_asyncToGenerator"],[87,39,77,14],[87,40,77,14,"default"],[87,47,77,14],[87,49,77,17],[87,60,78,4,"email"],[87,65,78,17],[87,67,79,4,"password"],[87,75,79,20],[87,77,80,4,"firstName"],[87,86,80,21],[87,88,81,4,"lastName"],[87,96,81,20],[87,98,82,4,"phone"],[87,103,82,17],[87,105,83,4,"referralCode"],[87,117,83,25],[87,119,85,7],[88,8,85,7],[88,12,84,4,"language"],[88,20,84,20],[88,23,84,20,"arguments"],[88,32,84,20],[88,33,84,20,"length"],[88,39,84,20],[88,47,84,20,"arguments"],[88,56,84,20],[88,64,84,20,"undefined"],[88,73,84,20],[88,76,84,20,"arguments"],[88,85,84,20],[88,91,84,23],[88,95,84,27],[89,8,86,4],[89,12,86,8],[90,10,87,6],[90,14,87,12,"response"],[90,22,87,20],[90,31,87,29,"fetch"],[90,36,87,34],[90,37,87,35,"API_ENDPOINTS"],[90,47,87,48],[90,48,87,48,"API_ENDPOINTS"],[90,61,87,48],[90,62,87,49,"AUTH_SIGNUP"],[90,73,87,60],[90,75,87,62],[91,12,88,8,"method"],[91,18,88,14],[91,20,88,16],[91,26,88,22],[92,12,89,8,"headers"],[92,19,89,15],[92,21,89,17],[93,14,90,10],[93,28,90,24],[93,30,90,26],[94,12,91,8],[94,13,91,9],[95,12,92,8,"body"],[95,16,92,12],[95,18,92,14,"JSON"],[95,22,92,18],[95,23,92,19,"stringify"],[95,32,92,28],[95,33,92,29],[96,14,93,10,"email"],[96,19,93,15],[97,14,94,10,"password"],[97,22,94,18],[98,14,95,10,"first_name"],[98,24,95,20],[98,26,95,22,"firstName"],[98,35,95,31],[99,14,96,10,"last_name"],[99,23,96,19],[99,25,96,21,"lastName"],[99,33,96,29],[100,14,97,10,"phone"],[100,19,97,15],[101,14,98,10,"referral_code"],[101,27,98,23],[101,29,98,25,"referralCode"],[101,41,98,37],[102,14,99,10,"language"],[103,12,100,8],[103,13,100,9],[104,10,101,6],[104,11,101,7],[104,12,101,8],[105,10,103,6],[105,14,103,10],[105,15,103,11,"response"],[105,23,103,19],[105,24,103,20,"ok"],[105,26,103,22],[105,28,103,24],[106,12,104,8],[106,16,104,14,"error"],[106,21,104,19],[106,30,104,28,"response"],[106,38,104,36],[106,39,104,37,"json"],[106,43,104,41],[106,44,104,42],[106,45,104,43],[107,12,105,8],[107,18,105,14],[107,22,105,18,"Error"],[107,27,105,23],[107,28,105,24,"error"],[107,33,105,29],[107,34,105,30,"detail"],[107,40,105,36],[107,44,105,40],[107,60,105,56],[107,61,105,57],[108,10,106,6],[109,10,108,6],[109,14,108,12,"userData"],[109,22,108,20],[109,31,108,29,"response"],[109,39,108,37],[109,40,108,38,"json"],[109,44,108,42],[109,45,108,43],[109,46,108,44],[110,10,109,6],[110,16,109,12,"AsyncStorage"],[110,28,109,24],[110,29,109,24,"default"],[110,36,109,24],[110,37,109,25,"setItem"],[110,44,109,32],[110,45,109,33],[110,51,109,39],[110,53,109,41,"JSON"],[110,57,109,45],[110,58,109,46,"stringify"],[110,67,109,55],[110,68,109,56,"userData"],[110,76,109,64],[110,77,109,65],[110,78,109,66],[111,10,110,6,"setUser"],[111,17,110,13],[111,18,110,14,"userData"],[111,26,110,22],[111,27,110,23],[112,8,111,4],[112,9,111,5],[112,10,111,6],[112,17,111,13,"error"],[112,22,111,18],[112,24,111,20],[113,10,112,6,"console"],[113,17,112,13],[113,18,112,14,"error"],[113,23,112,19],[113,24,112,20],[113,40,112,36],[113,42,112,38,"error"],[113,47,112,43],[113,48,112,44],[114,10,113,6],[114,16,113,12,"error"],[114,21,113,17],[115,8,114,4],[116,6,115,2],[116,7,115,3],[117,6,115,3],[117,22,77,8,"signUp"],[117,28,77,14,"signUp"],[117,29,77,14,"_x3"],[117,32,77,14],[117,34,77,14,"_x4"],[117,37,77,14],[117,39,77,14,"_x5"],[117,42,77,14],[117,44,77,14,"_x6"],[117,47,77,14],[117,49,77,14,"_x7"],[117,52,77,14],[117,54,77,14,"_x8"],[117,57,77,14],[118,8,77,14],[118,15,77,14,"_ref4"],[118,20,77,14],[118,21,77,14,"apply"],[118,26,77,14],[118,33,77,14,"arguments"],[118,42,77,14],[119,6,77,14],[120,4,77,14],[120,7,115,3],[121,4,117,2],[121,8,117,8,"signOut"],[121,15,117,15],[122,6,117,15],[122,10,117,15,"_ref5"],[122,15,117,15],[122,22,117,15,"_asyncToGenerator"],[122,39,117,15],[122,40,117,15,"default"],[122,47,117,15],[122,49,117,18],[122,62,117,30],[123,8,118,4],[123,12,118,8],[124,10,119,6],[124,16,119,12,"AsyncStorage"],[124,28,119,24],[124,29,119,24,"default"],[124,36,119,24],[124,37,119,25,"removeItem"],[124,47,119,35],[124,48,119,36],[124,54,119,42],[124,55,119,43],[125,10,120,6,"setUser"],[125,17,120,13],[125,18,120,14],[125,22,120,18],[125,23,120,19],[126,8,121,4],[126,9,121,5],[126,10,121,6],[126,17,121,13,"error"],[126,22,121,18],[126,24,121,20],[127,10,122,6,"console"],[127,17,122,13],[127,18,122,14,"error"],[127,23,122,19],[127,24,122,20],[127,41,122,37],[127,43,122,39,"error"],[127,48,122,44],[127,49,122,45],[128,8,123,4],[129,6,124,2],[129,7,124,3],[130,6,124,3],[130,22,117,8,"signOut"],[130,29,117,15,"signOut"],[130,30,117,15],[131,8,117,15],[131,15,117,15,"_ref5"],[131,20,117,15],[131,21,117,15,"apply"],[131,26,117,15],[131,33,117,15,"arguments"],[131,42,117,15],[132,6,117,15],[133,4,117,15],[133,7,124,3],[134,4,126,2],[134,24,127,4],[134,28,127,4,"_reactJsxDevRuntime"],[134,47,127,4],[134,48,127,4,"jsxDEV"],[134,54,127,4],[134,56,127,5,"AuthContext"],[134,67,127,16],[134,68,127,17,"Provider"],[134,76,127,25],[135,6,127,26,"value"],[135,11,127,31],[135,13,127,33],[136,8,127,35,"user"],[136,12,127,39],[137,8,127,41,"loading"],[137,15,127,48],[138,8,127,50,"signIn"],[138,14,127,56],[139,8,127,58,"signUp"],[139,14,127,64],[140,8,127,66,"signOut"],[140,15,127,73],[141,8,127,75,"setUser"],[142,6,127,83],[142,7,127,85],[143,6,127,85,"children"],[143,14,127,85],[143,16,128,7,"children"],[144,4,128,15],[145,6,128,15,"fileName"],[145,14,128,15],[145,16,128,15,"_jsxFileName"],[145,28,128,15],[146,6,128,15,"lineNumber"],[146,16,128,15],[147,6,128,15,"columnNumber"],[147,18,128,15],[148,4,128,15],[148,11,129,26],[148,12,129,27],[149,2,131,0],[150,2,131,1,"_s"],[150,4,131,1],[150,5,33,16,"AuthProvider"],[150,17,33,28],[151,2,33,28,"_c"],[151,4,33,28],[151,7,33,16,"AuthProvider"],[151,19,33,28],[152,2,133,7],[152,11,133,16,"useAuth"],[152,18,133,23,"useAuth"],[152,19,133,23],[152,21,133,26],[153,4,133,26,"_s2"],[153,7,133,26],[154,4,134,2],[154,8,134,8,"context"],[154,15,134,15],[154,18,134,18],[154,22,134,18,"useContext"],[154,28,134,28],[154,29,134,28,"useContext"],[154,39,134,28],[154,41,134,29,"AuthContext"],[154,52,134,40],[154,53,134,41],[155,4,135,2],[155,8,135,6,"context"],[155,15,135,13],[155,20,135,18,"undefined"],[155,29,135,27],[155,31,135,29],[156,6,136,4],[156,12,136,10],[156,16,136,14,"Error"],[156,21,136,19],[156,22,136,20],[156,67,136,65],[156,68,136,66],[157,4,137,2],[158,4,138,2],[158,11,138,9,"context"],[158,18,138,16],[159,2,139,0],[160,2,139,1,"_s2"],[160,5,139,1],[160,6,133,16,"useAuth"],[160,13,133,23],[161,2,133,23],[161,6,133,23,"_c"],[161,8,133,23],[162,2,133,23,"$RefreshReg$"],[162,14,133,23],[162,15,133,23,"_c"],[162,17,133,23],[163,0,133,23],[163,3]],"functionMap":{"names":["","AuthProvider","useEffect$argument_0","loadUser","signIn","signUp","signOut","useAuth"],"mappings":"AAA;OCgC;YCI;GDE;mBEE;GFW;iBGE;GHqB;iBIE;GJsC;kBKE;GLO;CDO;OOE;CPM"},"hasCjsExports":false},"type":"js/module"}]}
\ No newline at end of file
diff --git a/frontend/.metro-cache/cache/8a/7d713e1ca35eda6731b4bd9498a536a2224fcf6743ec55debee4f757d03e7e19e6a453 b/frontend/.metro-cache/cache/8a/7d713e1ca35eda6731b4bd9498a536a2224fcf6743ec55debee4f757d03e7e19e6a453
new file mode 100644
index 00000000..28276f8f
--- /dev/null
+++ b/frontend/.metro-cache/cache/8a/7d713e1ca35eda6731b4bd9498a536a2224fcf6743ec55debee4f757d03e7e19e6a453
@@ -0,0 +1 @@
+{"dependencies":[{"name":"expo/virtual/env","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"dgHc21cgR+buKc7O3/dChhD5JJk=","exportNames":["*"],"imports":1}}],"output":[{"data":{"code":"__d(function (global, require, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) {\n \"use strict\";\n\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n Object.defineProperty(exports, \"API_BASE_URL\", {\n enumerable: true,\n get: function () {\n return API_BASE_URL;\n }\n });\n Object.defineProperty(exports, \"API_ENDPOINTS\", {\n enumerable: true,\n get: function () {\n return API_ENDPOINTS;\n }\n });\n var _expoVirtualEnv = require(_dependencyMap[0], \"expo/virtual/env\");\n // API Configuration\n // Single source of truth for backend URL\n\n var getBackendUrl = () => {\n var url = _expoVirtualEnv.env.EXPO_PUBLIC_BACKEND_URL;\n if (!url) {\n console.error('⚠️ EXPO_PUBLIC_BACKEND_URL not set! Using fallback.');\n return 'http://localhost:8001';\n }\n console.log('✅ Backend URL:', url);\n return url;\n };\n var API_BASE_URL = getBackendUrl();\n var API_ENDPOINTS = {\n AUTH_SIGNUP: `${API_BASE_URL}/api/auth/signup`,\n AUTH_SIGNIN: `${API_BASE_URL}/api/auth/signin`,\n AUTH_USER: userId => `${API_BASE_URL}/api/auth/user/${userId}`,\n VERIFY_TURNSTILE: `${API_BASE_URL}/api/verify-turnstile`,\n BALANCE: `${API_BASE_URL}/api/blockchain/balance`\n };\n});","lineCount":40,"map":[[7,2,16,0,"Object"],[7,8,16,0],[7,9,16,0,"defineProperty"],[7,23,16,0],[7,24,16,0,"exports"],[7,31,16,0],[8,4,16,0,"enumerable"],[8,14,16,0],[9,4,16,0,"get"],[9,7,16,0],[9,18,16,0,"get"],[9,19,16,0],[10,6,16,0],[10,13,16,0,"API_BASE_URL"],[10,25,16,0],[11,4,16,0],[12,2,16,0],[13,2,18,0,"Object"],[13,8,18,0],[13,9,18,0,"defineProperty"],[13,23,18,0],[13,24,18,0,"exports"],[13,31,18,0],[14,4,18,0,"enumerable"],[14,14,18,0],[15,4,18,0,"get"],[15,7,18,0],[15,18,18,0,"get"],[15,19,18,0],[16,6,18,0],[16,13,18,0,"API_ENDPOINTS"],[16,26,18,0],[17,4,18,0],[18,2,18,0],[19,2,24,2],[19,6,24,2,"_expoVirtualEnv"],[19,21,24,2],[19,24,24,2,"require"],[19,31,24,2],[19,32,24,2,"_dependencyMap"],[19,46,24,2],[20,2,1,0],[21,2,2,0],[23,2,4,0],[23,6,4,6,"getBackendUrl"],[23,19,4,19],[23,22,4,22,"getBackendUrl"],[23,23,4,22],[23,28,4,36],[24,4,5,2],[24,8,5,8,"url"],[24,11,5,11],[24,14,5,11,"_expoVirtualEnv"],[24,29,5,11],[24,30,5,11,"env"],[24,33,5,11],[24,34,5,11,"EXPO_PUBLIC_BACKEND_URL"],[24,57,5,49],[25,4,7,2],[25,8,7,6],[25,9,7,7,"url"],[25,12,7,10],[25,14,7,12],[26,6,8,4,"console"],[26,13,8,11],[26,14,8,12,"error"],[26,19,8,17],[26,20,8,18],[26,73,8,71],[26,74,8,72],[27,6,9,4],[27,13,9,11],[27,36,9,34],[28,4,10,2],[29,4,12,2,"console"],[29,11,12,9],[29,12,12,10,"log"],[29,15,12,13],[29,16,12,14],[29,32,12,30],[29,34,12,32,"url"],[29,37,12,35],[29,38,12,36],[30,4,13,2],[30,11,13,9,"url"],[30,14,13,12],[31,2,14,0],[31,3,14,1],[32,2,16,7],[32,6,16,13,"API_BASE_URL"],[32,18,16,25],[32,21,16,28,"getBackendUrl"],[32,34,16,41],[32,35,16,42],[32,36,16,43],[33,2,18,7],[33,6,18,13,"API_ENDPOINTS"],[33,19,18,26],[33,22,18,29],[34,4,19,2,"AUTH_SIGNUP"],[34,15,19,13],[34,17,19,15],[34,20,19,18,"API_BASE_URL"],[34,32,19,30],[34,50,19,48],[35,4,20,2,"AUTH_SIGNIN"],[35,15,20,13],[35,17,20,15],[35,20,20,18,"API_BASE_URL"],[35,32,20,30],[35,50,20,48],[36,4,21,2,"AUTH_USER"],[36,13,21,11],[36,15,21,14,"userId"],[36,21,21,28],[36,25,21,33],[36,28,21,36,"API_BASE_URL"],[36,40,21,48],[36,58,21,66,"userId"],[36,64,21,72],[36,66,21,74],[37,4,22,2,"VERIFY_TURNSTILE"],[37,20,22,18],[37,22,22,20],[37,25,22,23,"API_BASE_URL"],[37,37,22,35],[37,60,22,58],[38,4,23,2,"BALANCE"],[38,11,23,9],[38,13,23,11],[38,16,23,14,"API_BASE_URL"],[38,28,23,26],[39,2,24,0],[39,3,24,1],[40,0,24,2],[40,3]],"functionMap":{"names":["","getBackendUrl","API_ENDPOINTS.AUTH_USER"],"mappings":"AAA;sBCG;CDU;aEO,6DF"},"hasCjsExports":false},"type":"js/module"}]}
\ No newline at end of file
diff --git a/frontend/.metro-cache/cache/97/156a15ba3aaf0989f24b7137c016bb13b10c2de2bb643b82f99a671937d03f92006769 b/frontend/.metro-cache/cache/97/156a15ba3aaf0989f24b7137c016bb13b10c2de2bb643b82f99a671937d03f92006769
new file mode 100644
index 00000000..e96a864b
--- /dev/null
+++ b/frontend/.metro-cache/cache/97/156a15ba3aaf0989f24b7137c016bb13b10c2de2bb643b82f99a671937d03f92006769
@@ -0,0 +1 @@
+{"dependencies":[{"name":"react","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":1,"column":0,"index":0},"end":{"line":1,"column":78,"index":78}}],"key":"RtGiGa+/H7VrI7GDQDLhO1UbpU8=","exportNames":["*"],"imports":1}},{"name":"@react-native-async-storage/async-storage","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":2,"column":0,"index":79},"end":{"line":2,"column":69,"index":148}}],"key":"0kSRlooyBOaYM9tlTtK91nq+uds=","exportNames":["*"],"imports":1}},{"name":"../config/api","data":{"asyncType":null,"isESMImport":true,"locs":[{"start":{"line":3,"column":0,"index":149},"end":{"line":3,"column":46,"index":195}}],"key":"V94urzZZSfzzXHrNxWFShT8IuQo=","exportNames":["*"],"imports":1}},{"name":"react/jsx-dev-runtime","data":{"asyncType":null,"isESMImport":false,"locs":[],"key":"L9D70Z4hi4aGuui1ysja/oQ5ytI=","exportNames":["*"],"imports":1}}],"output":[{"data":{"code":"__d(function (global, require, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) {\n \"use strict\";\n\n var _jsxFileName = \"/app/frontend/src/contexts/AuthContext.tsx\",\n _s = $RefreshSig$(),\n _s2 = $RefreshSig$();\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\n function _interopDefault(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n exports.AuthProvider = AuthProvider;\n exports.useAuth = useAuth;\n var _react = require(_dependencyMap[0], \"react\");\n var _reactNativeAsyncStorageAsyncStorage = require(_dependencyMap[1], \"@react-native-async-storage/async-storage\");\n var AsyncStorage = _interopDefault(_reactNativeAsyncStorageAsyncStorage);\n var _configApi = require(_dependencyMap[2], \"../config/api\");\n var _reactJsxDevRuntime = require(_dependencyMap[3], \"react/jsx-dev-runtime\");\n const AuthContext = /*#__PURE__*/(0, _react.createContext)(undefined);\n function AuthProvider({\n children\n }) {\n _s();\n const [user, setUser] = (0, _react.useState)(null);\n const [loading, setLoading] = (0, _react.useState)(true);\n (0, _react.useEffect)(() => {\n loadUser();\n }, []);\n const loadUser = async () => {\n try {\n const userData = await AsyncStorage.default.getItem('user');\n if (userData) {\n setUser(JSON.parse(userData));\n }\n } catch (error) {\n console.error('Error loading user:', error);\n } finally {\n setLoading(false);\n }\n };\n const signIn = async (email, password) => {\n try {\n const response = await fetch(_configApi.API_ENDPOINTS.AUTH_SIGNIN, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n email,\n password\n })\n });\n if (!response.ok) {\n throw new Error('Invalid credentials');\n }\n const userData = await response.json();\n await AsyncStorage.default.setItem('user', JSON.stringify(userData));\n setUser(userData);\n } catch (error) {\n console.error('Sign in error:', error);\n throw error;\n }\n };\n const signUp = async (email, password, firstName, lastName, phone, referralCode, language = 'en') => {\n try {\n const response = await fetch(_configApi.API_ENDPOINTS.AUTH_SIGNUP, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n email,\n password,\n first_name: firstName,\n last_name: lastName,\n phone,\n referral_code: referralCode,\n language\n })\n });\n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.detail || 'Sign up failed');\n }\n const userData = await response.json();\n await AsyncStorage.default.setItem('user', JSON.stringify(userData));\n setUser(userData);\n } catch (error) {\n console.error('Sign up error:', error);\n throw error;\n }\n };\n const signOut = async () => {\n try {\n await AsyncStorage.default.removeItem('user');\n setUser(null);\n } catch (error) {\n console.error('Sign out error:', error);\n }\n };\n return /*#__PURE__*/(0, _reactJsxDevRuntime.jsxDEV)(AuthContext.Provider, {\n value: {\n user,\n loading,\n signIn,\n signUp,\n signOut,\n setUser\n },\n children: children\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 127,\n columnNumber: 5\n }, this);\n }\n _s(AuthProvider, \"NiO5z6JIqzX62LS5UWDgIqbZYyY=\");\n _c = AuthProvider;\n function useAuth() {\n _s2();\n const context = (0, _react.useContext)(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n }\n _s2(useAuth, \"b9L3QQ+jgeyIrH0NfHrJ8nn7VMU=\");\n var _c;\n $RefreshReg$(_c, \"AuthProvider\");\n});","lineCount":133,"map":[[15,2,33,0,"exports"],[15,9,33,0],[15,10,33,0,"AuthProvider"],[15,22,33,0],[15,25,33,0,"AuthProvider"],[15,37,33,0],[16,2,133,0,"exports"],[16,9,133,0],[16,10,133,0,"useAuth"],[16,17,133,0],[16,20,133,0,"useAuth"],[16,27,133,0],[17,2,1,0],[17,6,1,0,"_react"],[17,12,1,0],[17,15,1,0,"require"],[17,22,1,0],[17,23,1,0,"_dependencyMap"],[17,37,1,0],[18,2,2,0],[18,6,2,0,"_reactNativeAsyncStorageAsyncStorage"],[18,42,2,0],[18,45,2,0,"require"],[18,52,2,0],[18,53,2,0,"_dependencyMap"],[18,67,2,0],[19,2,2,0],[19,6,2,0,"AsyncStorage"],[19,18,2,0],[19,21,2,0,"_interopDefault"],[19,36,2,0],[19,37,2,0,"_reactNativeAsyncStorageAsyncStorage"],[19,73,2,0],[20,2,3,0],[20,6,3,0,"_configApi"],[20,16,3,0],[20,19,3,0,"require"],[20,26,3,0],[20,27,3,0,"_dependencyMap"],[20,41,3,0],[21,2,3,46],[21,6,3,46,"_reactJsxDevRuntime"],[21,25,3,46],[21,28,3,46,"require"],[21,35,3,46],[21,36,3,46,"_dependencyMap"],[21,50,3,46],[22,2,31,0],[22,8,31,6,"AuthContext"],[22,19,31,17],[22,35,31,20],[22,39,31,20,"createContext"],[22,45,31,33],[22,46,31,33,"createContext"],[22,59,31,33],[22,61,31,63,"undefined"],[22,70,31,72],[22,71,31,73],[23,2,33,7],[23,11,33,16,"AuthProvider"],[23,23,33,28,"AuthProvider"],[23,24,33,29],[24,4,33,31,"children"],[25,2,33,71],[25,3,33,72],[25,5,33,74],[26,4,33,74,"_s"],[26,6,33,74],[27,4,34,2],[27,10,34,8],[27,11,34,9,"user"],[27,15,34,13],[27,17,34,15,"setUser"],[27,24,34,22],[27,25,34,23],[27,28,34,26],[27,32,34,26,"useState"],[27,38,34,34],[27,39,34,34,"useState"],[27,47,34,34],[27,49,34,48],[27,53,34,52],[27,54,34,53],[28,4,35,2],[28,10,35,8],[28,11,35,9,"loading"],[28,18,35,16],[28,20,35,18,"setLoading"],[28,30,35,28],[28,31,35,29],[28,34,35,32],[28,38,35,32,"useState"],[28,44,35,40],[28,45,35,40,"useState"],[28,53,35,40],[28,55,35,41],[28,59,35,45],[28,60,35,46],[29,4,37,2],[29,8,37,2,"useEffect"],[29,14,37,11],[29,15,37,11,"useEffect"],[29,24,37,11],[29,26,37,12],[29,32,37,18],[30,6,38,4,"loadUser"],[30,14,38,12],[30,15,38,13],[30,16,38,14],[31,4,39,2],[31,5,39,3],[31,7,39,5],[31,9,39,7],[31,10,39,8],[32,4,41,2],[32,10,41,8,"loadUser"],[32,18,41,16],[32,21,41,19],[32,27,41,19,"loadUser"],[32,28,41,19],[32,33,41,31],[33,6,42,4],[33,10,42,8],[34,8,43,6],[34,14,43,12,"userData"],[34,22,43,20],[34,25,43,23],[34,31,43,29,"AsyncStorage"],[34,43,43,41],[34,44,43,41,"default"],[34,51,43,41],[34,52,43,42,"getItem"],[34,59,43,49],[34,60,43,50],[34,66,43,56],[34,67,43,57],[35,8,44,6],[35,12,44,10,"userData"],[35,20,44,18],[35,22,44,20],[36,10,45,8,"setUser"],[36,17,45,15],[36,18,45,16,"JSON"],[36,22,45,20],[36,23,45,21,"parse"],[36,28,45,26],[36,29,45,27,"userData"],[36,37,45,35],[36,38,45,36],[36,39,45,37],[37,8,46,6],[38,6,47,4],[38,7,47,5],[38,8,47,6],[38,15,47,13,"error"],[38,20,47,18],[38,22,47,20],[39,8,48,6,"console"],[39,15,48,13],[39,16,48,14,"error"],[39,21,48,19],[39,22,48,20],[39,43,48,41],[39,45,48,43,"error"],[39,50,48,48],[39,51,48,49],[40,6,49,4],[40,7,49,5],[40,16,49,14],[41,8,50,6,"setLoading"],[41,18,50,16],[41,19,50,17],[41,24,50,22],[41,25,50,23],[42,6,51,4],[43,4,52,2],[43,5,52,3],[44,4,54,2],[44,10,54,8,"signIn"],[44,16,54,14],[44,19,54,17],[44,25,54,17,"signIn"],[44,26,54,24,"email"],[44,31,54,37],[44,33,54,39,"password"],[44,41,54,55],[44,46,54,60],[45,6,55,4],[45,10,55,8],[46,8,56,6],[46,14,56,12,"response"],[46,22,56,20],[46,25,56,23],[46,31,56,29,"fetch"],[46,36,56,34],[46,37,56,35,"API_ENDPOINTS"],[46,47,56,48],[46,48,56,48,"API_ENDPOINTS"],[46,61,56,48],[46,62,56,49,"AUTH_SIGNIN"],[46,73,56,60],[46,75,56,62],[47,10,57,8,"method"],[47,16,57,14],[47,18,57,16],[47,24,57,22],[48,10,58,8,"headers"],[48,17,58,15],[48,19,58,17],[49,12,59,10],[49,26,59,24],[49,28,59,26],[50,10,60,8],[50,11,60,9],[51,10,61,8,"body"],[51,14,61,12],[51,16,61,14,"JSON"],[51,20,61,18],[51,21,61,19,"stringify"],[51,30,61,28],[51,31,61,29],[52,12,61,31,"email"],[52,17,61,36],[53,12,61,38,"password"],[54,10,61,47],[54,11,61,48],[55,8,62,6],[55,9,62,7],[55,10,62,8],[56,8,64,6],[56,12,64,10],[56,13,64,11,"response"],[56,21,64,19],[56,22,64,20,"ok"],[56,24,64,22],[56,26,64,24],[57,10,65,8],[57,16,65,14],[57,20,65,18,"Error"],[57,25,65,23],[57,26,65,24],[57,47,65,45],[57,48,65,46],[58,8,66,6],[59,8,68,6],[59,14,68,12,"userData"],[59,22,68,20],[59,25,68,23],[59,31,68,29,"response"],[59,39,68,37],[59,40,68,38,"json"],[59,44,68,42],[59,45,68,43],[59,46,68,44],[60,8,69,6],[60,14,69,12,"AsyncStorage"],[60,26,69,24],[60,27,69,24,"default"],[60,34,69,24],[60,35,69,25,"setItem"],[60,42,69,32],[60,43,69,33],[60,49,69,39],[60,51,69,41,"JSON"],[60,55,69,45],[60,56,69,46,"stringify"],[60,65,69,55],[60,66,69,56,"userData"],[60,74,69,64],[60,75,69,65],[60,76,69,66],[61,8,70,6,"setUser"],[61,15,70,13],[61,16,70,14,"userData"],[61,24,70,22],[61,25,70,23],[62,6,71,4],[62,7,71,5],[62,8,71,6],[62,15,71,13,"error"],[62,20,71,18],[62,22,71,20],[63,8,72,6,"console"],[63,15,72,13],[63,16,72,14,"error"],[63,21,72,19],[63,22,72,20],[63,38,72,36],[63,40,72,38,"error"],[63,45,72,43],[63,46,72,44],[64,8,73,6],[64,14,73,12,"error"],[64,19,73,17],[65,6,74,4],[66,4,75,2],[66,5,75,3],[67,4,77,2],[67,10,77,8,"signUp"],[67,16,77,14],[67,19,77,17],[67,25,77,17,"signUp"],[67,26,78,4,"email"],[67,31,78,17],[67,33,79,4,"password"],[67,41,79,20],[67,43,80,4,"firstName"],[67,52,80,21],[67,54,81,4,"lastName"],[67,62,81,20],[67,64,82,4,"phone"],[67,69,82,17],[67,71,83,4,"referralCode"],[67,83,83,25],[67,85,84,4,"language"],[67,93,84,20],[67,96,84,23],[67,100,84,27],[67,105,85,7],[68,6,86,4],[68,10,86,8],[69,8,87,6],[69,14,87,12,"response"],[69,22,87,20],[69,25,87,23],[69,31,87,29,"fetch"],[69,36,87,34],[69,37,87,35,"API_ENDPOINTS"],[69,47,87,48],[69,48,87,48,"API_ENDPOINTS"],[69,61,87,48],[69,62,87,49,"AUTH_SIGNUP"],[69,73,87,60],[69,75,87,62],[70,10,88,8,"method"],[70,16,88,14],[70,18,88,16],[70,24,88,22],[71,10,89,8,"headers"],[71,17,89,15],[71,19,89,17],[72,12,90,10],[72,26,90,24],[72,28,90,26],[73,10,91,8],[73,11,91,9],[74,10,92,8,"body"],[74,14,92,12],[74,16,92,14,"JSON"],[74,20,92,18],[74,21,92,19,"stringify"],[74,30,92,28],[74,31,92,29],[75,12,93,10,"email"],[75,17,93,15],[76,12,94,10,"password"],[76,20,94,18],[77,12,95,10,"first_name"],[77,22,95,20],[77,24,95,22,"firstName"],[77,33,95,31],[78,12,96,10,"last_name"],[78,21,96,19],[78,23,96,21,"lastName"],[78,31,96,29],[79,12,97,10,"phone"],[79,17,97,15],[80,12,98,10,"referral_code"],[80,25,98,23],[80,27,98,25,"referralCode"],[80,39,98,37],[81,12,99,10,"language"],[82,10,100,8],[82,11,100,9],[83,8,101,6],[83,9,101,7],[83,10,101,8],[84,8,103,6],[84,12,103,10],[84,13,103,11,"response"],[84,21,103,19],[84,22,103,20,"ok"],[84,24,103,22],[84,26,103,24],[85,10,104,8],[85,16,104,14,"error"],[85,21,104,19],[85,24,104,22],[85,30,104,28,"response"],[85,38,104,36],[85,39,104,37,"json"],[85,43,104,41],[85,44,104,42],[85,45,104,43],[86,10,105,8],[86,16,105,14],[86,20,105,18,"Error"],[86,25,105,23],[86,26,105,24,"error"],[86,31,105,29],[86,32,105,30,"detail"],[86,38,105,36],[86,42,105,40],[86,58,105,56],[86,59,105,57],[87,8,106,6],[88,8,108,6],[88,14,108,12,"userData"],[88,22,108,20],[88,25,108,23],[88,31,108,29,"response"],[88,39,108,37],[88,40,108,38,"json"],[88,44,108,42],[88,45,108,43],[88,46,108,44],[89,8,109,6],[89,14,109,12,"AsyncStorage"],[89,26,109,24],[89,27,109,24,"default"],[89,34,109,24],[89,35,109,25,"setItem"],[89,42,109,32],[89,43,109,33],[89,49,109,39],[89,51,109,41,"JSON"],[89,55,109,45],[89,56,109,46,"stringify"],[89,65,109,55],[89,66,109,56,"userData"],[89,74,109,64],[89,75,109,65],[89,76,109,66],[90,8,110,6,"setUser"],[90,15,110,13],[90,16,110,14,"userData"],[90,24,110,22],[90,25,110,23],[91,6,111,4],[91,7,111,5],[91,8,111,6],[91,15,111,13,"error"],[91,20,111,18],[91,22,111,20],[92,8,112,6,"console"],[92,15,112,13],[92,16,112,14,"error"],[92,21,112,19],[92,22,112,20],[92,38,112,36],[92,40,112,38,"error"],[92,45,112,43],[92,46,112,44],[93,8,113,6],[93,14,113,12,"error"],[93,19,113,17],[94,6,114,4],[95,4,115,2],[95,5,115,3],[96,4,117,2],[96,10,117,8,"signOut"],[96,17,117,15],[96,20,117,18],[96,26,117,18,"signOut"],[96,27,117,18],[96,32,117,30],[97,6,118,4],[97,10,118,8],[98,8,119,6],[98,14,119,12,"AsyncStorage"],[98,26,119,24],[98,27,119,24,"default"],[98,34,119,24],[98,35,119,25,"removeItem"],[98,45,119,35],[98,46,119,36],[98,52,119,42],[98,53,119,43],[99,8,120,6,"setUser"],[99,15,120,13],[99,16,120,14],[99,20,120,18],[99,21,120,19],[100,6,121,4],[100,7,121,5],[100,8,121,6],[100,15,121,13,"error"],[100,20,121,18],[100,22,121,20],[101,8,122,6,"console"],[101,15,122,13],[101,16,122,14,"error"],[101,21,122,19],[101,22,122,20],[101,39,122,37],[101,41,122,39,"error"],[101,46,122,44],[101,47,122,45],[102,6,123,4],[103,4,124,2],[103,5,124,3],[104,4,126,2],[104,24,127,4],[104,28,127,4,"_reactJsxDevRuntime"],[104,47,127,4],[104,48,127,4,"jsxDEV"],[104,54,127,4],[104,56,127,5,"AuthContext"],[104,67,127,16],[104,68,127,17,"Provider"],[104,76,127,25],[105,6,127,26,"value"],[105,11,127,31],[105,13,127,33],[106,8,127,35,"user"],[106,12,127,39],[107,8,127,41,"loading"],[107,15,127,48],[108,8,127,50,"signIn"],[108,14,127,56],[109,8,127,58,"signUp"],[109,14,127,64],[110,8,127,66,"signOut"],[110,15,127,73],[111,8,127,75,"setUser"],[112,6,127,83],[112,7,127,85],[113,6,127,85,"children"],[113,14,127,85],[113,16,128,7,"children"],[114,4,128,15],[115,6,128,15,"fileName"],[115,14,128,15],[115,16,128,15,"_jsxFileName"],[115,28,128,15],[116,6,128,15,"lineNumber"],[116,16,128,15],[117,6,128,15,"columnNumber"],[117,18,128,15],[118,4,128,15],[118,11,129,26],[118,12,129,27],[119,2,131,0],[120,2,131,1,"_s"],[120,4,131,1],[120,5,33,16,"AuthProvider"],[120,17,33,28],[121,2,33,28,"_c"],[121,4,33,28],[121,7,33,16,"AuthProvider"],[121,19,33,28],[122,2,133,7],[122,11,133,16,"useAuth"],[122,18,133,23,"useAuth"],[122,19,133,23],[122,21,133,26],[123,4,133,26,"_s2"],[123,7,133,26],[124,4,134,2],[124,10,134,8,"context"],[124,17,134,15],[124,20,134,18],[124,24,134,18,"useContext"],[124,30,134,28],[124,31,134,28,"useContext"],[124,41,134,28],[124,43,134,29,"AuthContext"],[124,54,134,40],[124,55,134,41],[125,4,135,2],[125,8,135,6,"context"],[125,15,135,13],[125,20,135,18,"undefined"],[125,29,135,27],[125,31,135,29],[126,6,136,4],[126,12,136,10],[126,16,136,14,"Error"],[126,21,136,19],[126,22,136,20],[126,67,136,65],[126,68,136,66],[127,4,137,2],[128,4,138,2],[128,11,138,9,"context"],[128,18,138,16],[129,2,139,0],[130,2,139,1,"_s2"],[130,5,139,1],[130,6,133,16,"useAuth"],[130,13,133,23],[131,2,133,23],[131,6,133,23,"_c"],[131,8,133,23],[132,2,133,23,"$RefreshReg$"],[132,14,133,23],[132,15,133,23,"_c"],[132,17,133,23],[133,0,133,23],[133,3]],"functionMap":{"names":["","AuthProvider","useEffect$argument_0","loadUser","signIn","signUp","signOut","useAuth"],"mappings":"AAA;OCgC;YCI;GDE;mBEE;GFW;iBGE;GHqB;iBIE;GJsC;kBKE;GLO;CDO;OOE;CPM"},"hasCjsExports":false},"type":"js/module"}]}
\ No newline at end of file