{"version":3,"sources":["store/index.ts","store/slices/authReducer.ts","store/slices/walletReducer.ts","store/slices/wsStateReducer.ts","services/symbol.ts","store/slices/symbolsReducer.ts","services/auth.ts","assets/images/signal.svg","services/api-helper/webSocket.ts","services/entry.ts","store/slices/siteReducer.ts","assets/images/error-outline.svg","assets/images/copy.svg","services/assets.ts","assets/images/info-fill.svg","assets/images/freeze-color/logo.svg","assets/images/language.svg","pages/layout/header-bar/style.ts","pages/layout/i18n-selector/style.ts","pages/layout/i18n-selector/index.tsx","assets/images/user.svg","assets/images/referral.svg","assets/images/logout.svg","assets/images/stack.svg","assets/images/report.svg","assets/images/person_outline.svg","pages/layout/user-menu/style.ts","pages/layout/user-menu/index.tsx","pages/layout/header-bar/index.tsx","pages/layout/message/style.ts","pages/layout/message/index.tsx","pages/layout/index.tsx","routes/AuthRoute.tsx","routes/loading.tsx","routes/index.tsx","middleware.ts","App.tsx","index.tsx","utils/enum.ts","store/actions.ts","services/api-helper/index.ts","utils/class.ts","assets/locales/i18n.ts","assets/images/check-done.svg","hooks/useMessage.ts","hooks/useLoading.ts","services/user.ts","store/slices/userInfoReducer.ts"],"names":["rootReducer","combineReducers","userInfo","userInfoReducer","auth","authReducer","wallet","walletReducer","symbols","symbolsReducer","wsState","wsStateReducer","site","siteReducer","store","configureStore","reducer","authSlice","createSlice","name","initialState","UserAuth","GUEST","reducers","setAuth","state","action","payload","clearAuth","authActions","actions","initWallet","Wallet","updateUserWallet","createAsyncThunk","async","result","GetAssetWalletService","payment","isError","value","walletSlice","clearWallet","extraReducers","builder","addCase","fulfilled","walletActions","_objectSpread","wsStateSlice","enable","disable","wsStateActions","initSymbols","updateConfigSymbol","request","get","then","res","toCamel","data","catch","err","_err$response","_err$response$data","_err$response2","_err$response2$data","apiErrorMsg","response","error","symbolsSlice","clearConfigSymbol","symbolsActions","RegisterByEmailService","query","toUnderline","deepCopy","referrer","post","RegisterByPhoneService","_err$response3","_err$response3$data","_err$response4","_err$response4$data","LoginByEmailService","body","_err$response5","_err$response5$data","_err$response6","_err$response6$data","LoginByPhoneService","_err$response7","_err$response7$data","_err$response8","_err$response8$data","BindEmailService","params","_err$response9","_err$response9$data","_err$response10","_err$response10$data","VerifyTokenService","patch","user","_err$response11","_err$response11$data","_err$response12","_err$response12$data","BindEmailVerifyService","_err$response13","_err$response13$data","_err$response14","_err$response14$data","LogoutService","delete","_err$response15","_err$response15$data","_err$response16","_err$response16$data","WsTokenService","_err$response17","_err$response17$data","_err$response18","_err$response18$data","GetCountryCodeService","_err$response19","_err$response19$data","_err$response20","_err$response20$data","proxyRoute","test","develop","process","REACT_APP_MODE","productionHost","_document$getElements","document","getElementsByName","getAttribute","productionRoute","concat","WS_URL","isDev","webSocket","instance","isAuth","isLoading","channelList","authChannelList","callbackMap","create","this","WebSocket","onopen","dispatch","enableWsState","execChannel","onmessage","event","JSON","parse","id","code","channel","forEach","val","key","onclose","e","reset","setTimeout","disableWsState","getAuth","send","token","onSubscribe","channelString","callback","needAuth","symbol","push","set","Map","channelKey","delCallback","_this$instance","_this$instance2","readyState","domain","apiDomain","wsDomain","siteName","favicon","lightLogo","hyperlinkContext","hyperlinkUrl","hyperlinkHide","certificateIsReady","ingressIsReady","createdAt","updatedAt","fakeSofinEntryState","updateSiteInfo","Number","IS_SOFIN_ENTRY","entry","siteSlice","siteActions","GetWalletRealRecord","arguments","length","undefined","GetWalletTokenRecord","MainHeader","styled","header","_templateObject","_taggedTemplateLiteral","props","isLogin","theme","palette","white","grey20","Logo","_SFIconImage","_templateObject2","LoginNav","Link","_templateObject3","grey200","SeperateLine","a","_templateObject4","grey50","div","_templateObject5","grey100","MySignalText","_SFText","_templateObject6","LanguageButton","_SFSVG","grey40","Content","defaultShadow1","defaultShadow2","Option","grey60","I18nSelector","i18n","useTranslation","useDispatch","currentLang","useMemo","_languageList$find","languageList","find","item","language","useSelector","isOpen","setIsOpen","useState","handleClose","_jsx","ClickAwayListener","onClickAway","children","_jsxs","style","position","marginLeft","display","alignItems","src","LanguageIcon","color","pointer","onClick","handleToggle","prev","Collapse","in","padding","map","level","fontWeight","textAlign","handleOption","lang","localStorage","setItem","changeLanguage","PutUserLangService","setUserInfo","text","Container","UserName","grey10","Menu","shadow","MenuList","MenuItem","NavLink","primary","Logout","LogoutItem","_templateObject7","warn2","UserMenu","t","username","menuList","label","icon","AccountIcon","SignalIcon","AssetsIcon","ReportIcon","ReferralIcon","menuNode","useRef","handleClick","_menuNode$current","current","classList","add","_menuNode$current2","remove","height","width","marginRight","UserIcon","_SFAutoEllipsis","tooltip","ref","className","to","activeClassName","ml","loader","load","clearUserInfo","unload","LogoutIcon","HeaderBar","history","useHistory","isLoginPage","location","pathname","defaultSrc","LightLogo","_Fragment","_SFButton","themecolor","window","open","slide","keyframes","MessageBar","CloseIcon","Close","grey30","Message","messager","useMessage","messageNode","useEffect","message","requestAnimationFrame","iconMap","Wrapper","isLandingPage","greyBG","Main","main","email","Layout","useLocation","scrollTo","Boolean","AuthRoute","_ref","path","component","Component","exact","attrs","isEmailOk","Route","render","Redirect","Loading","memo","useGlobalLoading","_LoadingProgress","NotFound","lazy","Login","Register","LandingPage","CreateSignal","LinkSignal","Signal","SignalDetail","SymbolList","Referral","UserAssets","Report","Withdraw","Account","CreateBankWithrawalAccount","EditBankWithrawalAccount","CreateCryptoWithrawalAccount","EditCryptoWithrawalAccount","KycApplication","WithoutEmail","PlaceOrder","authMap","public","MEMBER","guest","member","Router","checkAuth","useCallback","authList","includes","BrowserRouter","Suspense","fallback","Switch","GlobalStyle","createGlobalStyle","extend1","dayjs","extend","utc","host","Sentry","dsn","integrations","BrowserTracing","tracesSampleRate","onErrorEvent","initLanguage","consoleProject","App","setIsLoading","GetUserService","getUserInfo","updateSymbol","clearSymbol","ThemeProvider","_SFErrorBoundary","_LoadingInto","ReactDOM","Provider","StylesProvider","injectFirst","getElementById","Platform","SignTypes","RealWalletAssetsType","TokenWalletType","RewardType","userinfoActions","updateUserinfo","BASE_URL","developSiteToken","REACT_APP_SITE_TOKEN","productionSiteToken","_document$getElements2","SITE_TOKEN","axios","defaults","headers","common","navigator","vendor","REACT_APP_SOFINX_USERID","baseURL","withCredentials","serviceName","console","log","showMessage","errorCodeMap","ObjectCombine","rawValue","Object","prototype","toString","call","keys","hasOwnProperty","UserInfo","headshot","countryCode","phone","getDefaultLanguage","signalInfo","passed","describe","status","comment","platform","submittedAt","reviewedAt","enabledAt","computed","numOfFollowers","investmentOfFollow","wasFollowed","profitOfCompletedFollowing","profitOfSymbolsStrategy","profitShare","runningRobotData","totalTradingRobotData","followersDatas","info","number","server","timezone","stopMtcp","reason","followSetting","investmentMin","investmentMax","profitSharePercent","performance","principal","profit","drawdown","drawdownRatio","duration","tradePerWeek","avgHoldingDuration","apr7","apr30","apr180","sharpeRatio","volMax","volMin","volAvg","volTotal","winRate","tradesTotal","profitDatas","averageProfit","averageLoss","rateOfReturn","connStatus","connMethod","enabledBefore","balance","tokenBalance","frozenAmount","withdrawableBalance","ProfitShareRecord","signalId","signalName","robotId","robotName","followType","settleTime","hwm","fee","receive","WithdrawOrderDetail","userId","type","amount","paidAmount","exchangeRate","currency","currencyType","appliedAt","cancelledAt","complianceId","complianceAccount","approvedAt","rejectedAt","financeId","financeAccount","completedAt","paymentSlip","transferInfoForWire","estimatedReceiveAmount","short","resources","translation","enUS","zhTW","zhCN","myMM","jaJP","viVN","use","initReactI18next","init","lng","fallbackLng","interpolation","escapeValue","local","getItem","browser","check","CheckIcon","InfoIcon","copy","CopyIcon","warning","ErrorOutlineIcon","warning2","setMessage","Symbol","Date","now","count","setCount","useLoading","GetCheckUsernameService","exists","GetCheckEmailService","GetCheckPhoneService","GetReferralService","put","GetUserKycStatusService","userInfoSlice"],"mappings":"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","file":"static/js/main.48c5baff.chunk.js","sourcesContent":["import { configureStore, combineReducers } from '@reduxjs/toolkit'\nimport userInfoReducer from './slices/userInfoReducer'\nimport authReducer from './slices/authReducer'\nimport walletReducer from './slices/walletReducer'\nimport symbolsReducer from './slices/symbolsReducer'\nimport wsStateReducer from './slices/wsStateReducer'\nimport siteReducer from './slices/siteReducer'\n\nconst rootReducer = combineReducers({\n userInfo: userInfoReducer,\n auth: authReducer,\n wallet: walletReducer,\n symbols: symbolsReducer,\n wsState: wsStateReducer,\n site: siteReducer,\n})\n\nconst store = configureStore({\n reducer: rootReducer,\n})\n\nexport type RootState = ReturnType\n\nexport default store\n","import { createSlice } from '@reduxjs/toolkit'\nimport { UserAuth } from '@/utils/enum'\n\nconst authSlice = createSlice({\n name: 'auth',\n initialState: UserAuth.GUEST,\n reducers: {\n setAuth: (state, action: { payload: UserAuth }) => {\n return action.payload\n },\n clearAuth: () => {\n return UserAuth.GUEST\n }\n }\n})\n\nexport const authActions = authSlice.actions\nexport default authSlice.reducer","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'\nimport { GetAssetWalletService } from '@/services/assets'\nimport { Wallet } from '@/utils/class'\n\nconst initWallet = Wallet()\n\nconst updateUserWallet = createAsyncThunk('asset/wallet', async () => {\n const result = await GetAssetWalletService({payment: 'withdraw'})\n return !result.isError ? result.value : initWallet\n})\n\nconst walletSlice = createSlice({\n name: 'wallet',\n initialState: initWallet,\n reducers: {\n clearWallet: () => initWallet,\n },\n\n extraReducers: (builder) => {\n builder.addCase(updateUserWallet.fulfilled, (state, action) => {\n if (action.payload) return action.payload\n })\n },\n})\n\nexport const walletActions = { ...walletSlice.actions, updateUserWallet}\nexport default walletSlice.reducer\n","import { createSlice } from '@reduxjs/toolkit'\n\nconst wsStateSlice = createSlice({\n name: 'ws-state',\n initialState: false ,\n reducers: {\n enable: () => true,\n disable: () => false,\n },\n})\n\nexport const wsStateActions = wsStateSlice.actions\nexport default wsStateSlice.reducer\n","import { toCamel } from '@otsofintech/sofinx-ui/lib/helper'\nimport { request, apiErrorMsg, ApiService } from './api-helper'\n\n// 取得交易品種清單\nexport const SymbolList = (): ApiService => {\n return request.get('/symbol')\n .then(res => ({ isError: false, value: toCamel(res.data) }))\n .catch(err => {\n apiErrorMsg('SymbolList', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'\nimport { SymbolList } from '@/services/symbol'\n\nconst initSymbols: Common.Symbol[] = []\n\nconst updateConfigSymbol = createAsyncThunk('config/symbol', async () => {\n const result = await SymbolList()\n return !result.isError ? (result.value.symbols || initSymbols) : initSymbols\n})\n\nconst symbolsSlice = createSlice({\n name: 'symbols',\n initialState: initSymbols,\n reducers: {\n clearConfigSymbol: () => initSymbols\n },\n extraReducers: (builder) => {\n builder.addCase(updateConfigSymbol.fulfilled, (state, action) => action.payload as Common.Symbol[])\n }\n})\n\nexport const symbolsActions = { ...symbolsSlice.actions, updateConfigSymbol}\nexport default symbolsSlice.reducer\n","import { toCamel, toUnderline, deepCopy } from '@otsofintech/sofinx-ui/lib/helper'\nimport { request, apiErrorMsg, ApiService } from './api-helper'\n\n// 以Email註冊\nexport const RegisterByEmailService = (query: Auth.RegisterByEmail.Req): ApiService => {\n const data = toUnderline(deepCopy(query))\n if (!data.referrer) delete data.referrer\n\n return request.post('/auth/register_by_email', data)\n .then(res => ({ isError: false, value: true }) as const)\n .catch(err => {\n apiErrorMsg('RegisterByEmailService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 以Phone註冊\nexport const RegisterByPhoneService = (query: Auth.RegisterByPhone.Req): ApiService => {\n const data = toUnderline(deepCopy(query))\n if (!data.referrer) delete data.referrer\n\n return request.post('/auth/register_by_phone', data)\n .then(res => ({ isError: false, value: true }) as const)\n .catch(err => {\n apiErrorMsg('RegisterByPhoneService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 以Email登入 (請求 email 登入驗證碼)\nexport const LoginByEmailService = (query: Auth.LoginByEmail.Req): ApiService => {\n const body = toUnderline(deepCopy(query))\n return request.post('/auth/login_by_email', body)\n .then(res => ({ isError: false, value: true }) as const)\n .catch(err => {\n apiErrorMsg('LoginByEmailService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 以Phone登入 (請求 phone 登入驗證碼)\nexport const LoginByPhoneService = (query: Auth.LoginByPhone.Req): ApiService => {\n const body = toUnderline(deepCopy(query))\n return request.post('/auth/login_by_phone', body)\n .then(res => ({ isError: false, value: true }) as const)\n .catch(err => {\n apiErrorMsg('LoginByPhoneService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 綁定email\nexport const BindEmailService = (query: Auth.BindEmail.Request): ApiService => {\n const params = toUnderline(deepCopy(query))\n return request.post('/auth/email', params)\n .then(res => ({ isError: false, value: true }) as const)\n .catch(err => {\n apiErrorMsg('BindEmailService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 驗證碼\nexport const VerifyTokenService = (query: Auth.VerifyToken.Req): ApiService => {\n const params = toUnderline(deepCopy(query))\n return request.patch('auth/verify', params)\n .then(res => ({ isError: false, value: toCamel(res.data.user) }))\n .catch(err => {\n apiErrorMsg('VerifyTokenService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 綁定email驗證碼\nexport const BindEmailVerifyService = (query: Auth.Verify.Request): ApiService => {\n const params = toUnderline(deepCopy(query))\n return request.patch('/auth/email/verify', params)\n .then(res => ({ isError: false, value: true }) as const)\n .catch(err => {\n apiErrorMsg('BindEmailVerifyService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 登出\nexport const LogoutService = (): ApiService => {\n return request.delete('/auth/logout')\n .then(res => ({ isError: false, value: true }) as const)\n .catch(err => {\n apiErrorMsg('LogoutService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 創建Websocket連接認證token,認證後才可訂閱 private 頻道,token有效時間為 10 秒\nexport const WsTokenService = (): ApiService => {\n return request.post('/auth/ws_token')\n .then(res => ({ isError: false, value: toCamel(res.data) }))\n .catch(err => {\n apiErrorMsg('WsTokenCreateService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 輸入手機取得國碼\nexport const GetCountryCodeService = (): ApiService =>{\n return request.get('/auth/ip_to_country')\n .then(res => ({ isError: false, value: toCamel(res.data) }))\n .catch(err => {\n apiErrorMsg('GetCountryCodeService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}","export default __webpack_public_path__ + \"static/media/signal.9b3eb38c.svg\";","import { isDev } from '@otsofintech/sofinx-ui/lib/helper'\nimport { WsTokenService } from '@/services/auth'\nimport store from '@/store'\nimport { enableWsState, disableWsState } from '@/store/actions'\n\ntype Environment = 'test' | 'develop'\n\n// api url\nconst proxyRouteMap = {\n test: 'wss://ws-sp.sofinx-test.otso-dev.com',\n develop: 'wss://ws-sp.sofinx.otso-dev.com',\n}\nconst proxyRoute = proxyRouteMap[process.env.REACT_APP_MODE as Environment] || 'proxy-error'\nconst productionHost = document.getElementsByName('ws-host')[0]?.getAttribute('content') || ''\nconst productionRoute = `wss://${productionHost}`\nconst WS_URL = isDev() ? proxyRoute : productionRoute\n\n\ninterface WebSocketInter {\n instance: globalThis.WebSocket | null\n\n isAuth: boolean\n\n isLoading: boolean\n\n channelList: string[]\n\n authChannelList: string[]\n\n callbackMap: {\n [channel: string]: Map\n }\n\n create: () => void\n\n reset: () => void\n\n getAuth: () => void\n\n clearAuth: () => void\n\n onSubscribe: (\n channel: string,\n channelString: string,\n callback: Function,\n needAuth: boolean,\n symbol: symbol\n ) => void\n\n execChannel: (channelKey: 'channelList' | 'authChannelList') => void\n\n delCallback: (channel: string, symbol: symbol) => void\n\n send: (channelString: string) => void\n}\n\nexport const webSocket: WebSocketInter = {\n instance: null,\n\n isAuth: false,\n\n isLoading: false,\n\n channelList: [],\n\n authChannelList: [],\n\n callbackMap: {},\n\n\n create: async function () {\n this.instance = new WebSocket(WS_URL)\n\n this.instance.onopen = () => {\n store.dispatch(enableWsState())\n this.execChannel('channelList')\n }\n\n this.instance.onmessage = (event) => {\n const data = JSON.parse(event.data) as any\n\n if (data.id === 'auth') {\n this.isAuth = data.error.code === 0\n this.execChannel('authChannelList')\n this.isLoading = false\n return\n }\n\n if (data.id === 'unauth') {\n this.isAuth = data.error.code === 0\n this.isAuth = false\n return\n }\n\n if (typeof this.callbackMap[data.channel] === 'object') {\n this.callbackMap[data.channel].forEach((val, key) => val(data))\n }\n }\n\n this.instance.onclose = (e) => {\n this.reset()\n setTimeout(() => this.create(), 12000)\n }\n },\n\n reset: function () {\n store.dispatch(disableWsState())\n this.instance = null\n this.isAuth = false\n this.isLoading = false\n this.channelList = []\n this.authChannelList = []\n this.callbackMap = {}\n },\n\n // 認證\n getAuth: async function () {\n if (this.instance === null) return // show 連線錯誤\n\n this.isLoading = true\n\n const result = await WsTokenService()\n if (result.isError) this.isLoading = false\n else this.send(`auth#Auth@${result.value.token}`)\n },\n\n clearAuth: function () {\n this.send('unauth#Unauth')\n },\n\n // 訂閱or退訂\n onSubscribe: function (channel, channelString, callback, needAuth, symbol) {\n // 已認證 直接送出\n if (this.isAuth) this.send(channelString)\n\n else if (needAuth === false) this.send(channelString)\n else {\n this.authChannelList.push(channelString)\n if (this.isLoading === false) this.getAuth()\n }\n\n // 加入callback\n if (this.callbackMap[channel]) this.callbackMap[channel].set(symbol, callback)\n else this.callbackMap[channel] = new Map([[symbol, callback]])\n },\n\n execChannel: function (channelKey: 'channelList' | 'authChannelList') {\n this[channelKey].forEach(channel => this.send(channel))\n this[channelKey] = []\n },\n\n delCallback: function (channel, symbol) {\n if(this.callbackMap[channel]) this.callbackMap[channel].delete(symbol)\n },\n\n send: function (channelString: string) {\n if (this.instance?.readyState !== 1) this.channelList.push(channelString)\n else this.instance?.send(channelString)\n }\n}\n","import { request, apiErrorMsg, ApiService } from './api-helper'\nimport { toCamel } from '@otsofintech/sofinx-ui/lib/helper'\n\nexport const EntryInfoService = (): ApiService => {\n return request.get('/entry')\n .then(res => ({ isError: false, value: toCamel(res.data) }))\n .catch(err => {\n apiErrorMsg('EntryInfoService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n","import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'\nimport { EntryInfoService } from '@/services/entry'\n\nconst initialState = {\n id: '',\n name: '',\n domain: '',\n apiDomain: '',\n wsDomain: '',\n siteName: '',\n favicon: '',\n lightLogo: '',\n hyperlinkContext: '',\n hyperlinkUrl: '',\n hyperlinkHide: true,\n enable: false,\n certificateIsReady: false,\n ingressIsReady: false,\n createdAt: '',\n updatedAt: '',\n}\n\nconst fakeSofinEntryState = {\n id: 1,\n name: 'sofinx',\n domain: 'sp.sofinx.com',\n apiDomain: 'api-sp.sofinx.com',\n wsDomain: '',\n siteName: '',\n favicon: '',\n lightLogo: '',\n hyperlinkContext: '',\n hyperlinkUrl: '',\n hyperlinkHide: false,\n enable: true,\n certificateIsReady: true,\n ingressIsReady: true,\n createdAt: '',\n updatedAt: '',\n}\n\nconst updateSiteInfo = createAsyncThunk('site/entry', async () => {\n const result = await EntryInfoService()\n const state = Number(process.env.IS_SOFIN_ENTRY) === 0 ? initialState : fakeSofinEntryState\n return !result.isError ? (result.value.entry || state) : state\n})\n\n\nconst siteSlice = createSlice({\n name: 'site',\n initialState,\n reducers: {\n },\n extraReducers: (builder) => {\n builder.addCase(updateSiteInfo.fulfilled, (state, action) => action.payload as Common.Entry)\n }\n})\n\nexport const siteActions = { ...siteSlice.actions, updateSiteInfo}\nexport default siteSlice.reducer\n","export default __webpack_public_path__ + \"static/media/error-outline.2b14b73e.svg\";","export default __webpack_public_path__ + \"static/media/copy.3093ed9d.svg\";","import { toCamel, toUnderline, deepCopy } from '@otsofintech/sofinx-ui/lib/helper'\nimport { request, apiErrorMsg, ApiService } from './api-helper'\nimport { RealWalletAssetsType, TokenWalletType } from '@/utils/enum'\n\n// 取得使用者錢包餘額\nexport const GetAssetWalletService = (query?: Asset.Wallet.Req): ApiService => {\n const params = toUnderline(deepCopy(query))\n return request.get('/asset/wallet', { params })\n .then(res => {\n return { isError: false, value: toCamel(res.data.wallet) } as const\n })\n .catch(err => {\n apiErrorMsg('GetUserWalletService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 查詢使用者資金紀錄\nexport const GetWalletRealRecord = (query: Asset.WalletRecord.Req = {}): ApiService> => {\n const params = toUnderline(deepCopy(query))\n return request.get('/asset/wallet/real/record', { params })\n .then(res => ({ isError: false, value: toCamel(res.data) }))\n .catch(err => {\n apiErrorMsg('GetWalletRealRecord', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 查詢使用者SOF資金紀錄\nexport const GetWalletTokenRecord = (query?: Asset.WalletRecord.Req): ApiService> => {\n const params = toUnderline(deepCopy(query))\n return request.get('/asset/wallet/token/record', { params })\n .then(res => ({ isError: false, value: toCamel(res.data) }))\n .catch(err => {\n apiErrorMsg('GetWalletTokenRecord', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 下載資產資金紀錄\nexport const GetWalletRealRecordDownload = (): ApiService => {\n return request.get('/asset/wallet/real/record_download')\n .then(res => ({ isError: false, value: res.data }))\n .catch(err => {\n apiErrorMsg('GetWalletRealRecordDownload', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 下載資產SOF紀錄\nexport const GetWalletTokenRecordDownload = (): ApiService => {\n return request.get('/asset/wallet/token/record_download')\n .then(res => ({ isError: false, value: res.data }))\n .catch(err => {\n apiErrorMsg('GetWalletTokenRecordDownload', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n","export default __webpack_public_path__ + \"static/media/info-fill.dc596c8a.svg\";","export default __webpack_public_path__ + \"static/media/logo.af8c03e9.svg\";","export default __webpack_public_path__ + \"static/media/language.a55c9c53.svg\";","import styled from 'styled-components'\nimport { SFIconImage, SFText } from '@otsofintech/sofinx-ui'\nimport { Link } from 'react-router-dom'\n\nexport const MainHeader = styled.header<{ isLogin: boolean }>`\n position: fixed;\n top: 0;\n width: 100%;\n padding: ${ props => props.isLogin ? '0 32px' :'0 16px' };\n display: flex;\n align-items: center;\n height: 64px;\n background-color: ${ props => props.theme.palette.white };\n border-bottom: 1px solid ${ props => props.theme.palette.grey20 };\n z-index: 20;\n`\n\nexport const Logo = styled(SFIconImage)`\n cursor: pointer;\n margin-right: 12px;\n`\n\nexport const LoginNav = styled(Link)`\n font-size: 12px;\n color: ${ props => props.theme.palette.grey200 };\n`\n\nexport const Meet = styled.a`\n margin-left: 48px;\n color: ${ props => props.theme.palette.grey50 };\n font-size: 14px;\n`\n\nexport const SeperateLine = styled.div`\n border-left: 1px solid ${ props => props.theme.palette.grey100 };\n height: 10px;\n margin: 0 12px;\n\n`\n\nexport const MySignalText = styled(SFText)`\n @media(max-width:515px){\n display: none;\n }\n\n`\n\n","import styled from 'styled-components'\nimport { SFText, SFSVG } from '@otsofintech/sofinx-ui'\n\nexport const LanguageButton = styled(SFSVG)`\n &:hover {\n fill: ${ props => props.theme.palette.grey40 };\n }\n`\n\nexport const Content = styled.div`\n position: absolute;\n top: 52px;\n right: 0px;\n box-shadow: 0px 8px 24px -4px ${props => props.theme.palette.defaultShadow1}, 0px 6px 12px -6px ${props => props.theme.palette.defaultShadow2};\n border-radius: 8px;\n background-color: ${ props => props.theme.palette.white };\n`\n\nexport const Option = styled(SFText)`\n padding: 8px 16px;\n\twidth: 100%;\n min-width: max-content;\n\ttext-align: center;\n transition: all .2s;\n\n &:hover {\n color: ${ props => props.theme.palette.grey60 };\n }\n`\n","import { useState, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState } from '@/store'\nimport { setUserInfo } from '@/store/actions'\nimport { PutUserLangService } from '@/services/user'\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener'\nimport Collapse from '@material-ui/core/Collapse'\nimport LanguageIcon from '@/assets/images/language.svg'\nimport { UserAuth } from '@/utils/enum'\nimport { languageList } from '@/assets/locales/i18n'\nimport { LanguageButton, Content, Option } from './style'\n\nconst I18nSelector = () => {\n const { i18n } = useTranslation()\n const dispatch = useDispatch()\n\n const currentLang = useMemo(() => {\n return languageList.find(item => item.value === i18n.language)?.value || '-'\n }, [i18n.language])\n\n const isLogin = useSelector((state: RootState) => state.auth !== UserAuth.GUEST)\n const userInfo = useSelector((state: RootState) => state.userInfo)\n\n const handleOption = (lang: string) => {\n handleClose()\n localStorage.setItem('language', lang)\n i18n.changeLanguage(lang)\n\n if (isLogin) {\n PutUserLangService({ language: lang })\n dispatch(setUserInfo({ ...userInfo, language: lang }))\n }\n }\n\n const [isOpen, setIsOpen] = useState(false)\n const handleToggle = () => setIsOpen(prev => !prev)\n const handleClose = () => setIsOpen(false)\n\n return (\n \n
\n \n\n \n \n
\n { languageList.map(item => (\n handleOption(item.value)}\n pointer\n >\n {item.text}\n \n ))}\n
\n
\n
\n
\n
\n )\n}\n\nexport default I18nSelector\n","export default __webpack_public_path__ + \"static/media/user.4ccc3d12.svg\";","export default __webpack_public_path__ + \"static/media/referral.9016d145.svg\";","export default __webpack_public_path__ + \"static/media/logout.509a52fc.svg\";","export default __webpack_public_path__ + \"static/media/stack.f58eb7ee.svg\";","export default __webpack_public_path__ + \"static/media/report.1871c722.svg\";","export default __webpack_public_path__ + \"static/media/person_outline.f3a1407b.svg\";","import styled from 'styled-components'\nimport { NavLink } from 'react-router-dom'\n\nexport const Container = styled.div`\n position: relative;\n cursor: pointer;\n\n &:hover:before {\n content: '';\n position: absolute;\n top: 36px;\n right: 0px;\n width: 248px;\n height: 24px;\n opacity: 0;\n }\n\n &:hover .menu {\n // 97 + item amount * 48\n height: 336px;\n }\n\n & > .menu.close {\n height: 0 !important;\n }\n`\n\nexport const UserName = styled.div`\n padding: 8px 12px;\n width: 176px;\n display: flex;\n align-items: center;\n border-radius: 8px;\n border: 1px solid ${ props => props.theme.palette.grey100 };\n background-color: ${ props => props.theme.palette.grey10 };\n height: 36px;\n`\n\nexport const Menu = styled.div`\n position: absolute;\n top: 58px;\n right: 0;\n width: 248px;\n height: 0;\n overflow: hidden;\n border-radius: 8px;\n box-shadow: ${ props => props.theme.shadow[600] };\n transition: all .2s;\n background-color: ${ props => props.theme.palette.white };\n`\n\nexport const MenuList = styled.div`\n margin: 16px;\n`\n\nexport const MenuItem = styled(NavLink)`\n margin: 8px 0;\n display: block;\n padding: 8px;\n display: flex;\n align-items: center;\n border-radius: 8px;\n transition: all .2s;\n cursor: pointer;\n &:hover {\n background-color: ${ props => props.theme.palette.primary }1A;\n }\n\n // active\n &.active-menu {\n background: ${ props => props.theme.palette.primary }1A;\n\n & * {\n color: ${ props => props.theme.palette.grey50 } !important;\n }\n }\n\n &.active-menu path {\n fill: ${ props => props.theme.palette.primary };\n }\n`\n\nexport const Logout = styled.div`\n padding: 16px;\n border-top: 1px solid ${ props => props.theme.palette.grey20 };\n`\n\nexport const LogoutItem = styled.div`\n padding: 8px;\n display: flex;\n align-items: center;\n border-radius: 8px;\n transition: all .2s;\n cursor: pointer;\n\n &:hover {\n background-color: ${ props => props.theme.palette.warn2 }33;\n\n path {\n fill: ${ props => props.theme.palette.warn2 }\n }\n }\n`\n","import { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState } from '@/store'\nimport { clearUserInfo, clearAuth } from '@/store/actions'\nimport { LogoutService } from '@/services/auth'\nimport { SFText, SFSVG, SFAutoEllipsis } from '@otsofintech/sofinx-ui'\nimport { loader } from '@/hooks/useLoading'\nimport UserIcon from '@/assets/images/user.svg'\nimport SignalIcon from '@/assets/images/signal.svg'\nimport ReferralIcon from '@/assets/images/referral.svg'\nimport LogoutIcon from '@/assets/images/logout.svg'\nimport AssetsIcon from '@/assets/images/stack.svg'\nimport ReportIcon from '@/assets/images/report.svg'\nimport AccountIcon from '@/assets/images/person_outline.svg'\nimport { Container, UserName, Menu, MenuList, MenuItem, Logout, LogoutItem } from './style'\n\nconst UserMenu = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch()\n\n const username = useSelector((state: RootState) => state.userInfo.username)\n\n const menuList = [\n { label: t('accountSettings'), name: 'account-settings', icon: AccountIcon },\n { label: t('signalManage'), name: 'signal', icon: SignalIcon },\n { label: t('assets'), name: 'user-assets', icon: AssetsIcon },\n { label: t('report'), name: 'report', icon: ReportIcon },\n { label: t('referral'), name: 'referral', icon: ReferralIcon },\n ]\n\n // click to close menu\n const menuNode = useRef(null)\n const handleClick = () => {\n menuNode.current?.classList.add('close')\n setTimeout(() => { menuNode.current?.classList.remove('close') }, 300)\n }\n\n // logout\n const handleLogout = async () => {\n loader.load()\n const result = await LogoutService()\n if (result.value) {\n dispatch(clearAuth())\n dispatch(clearUserInfo())\n }\n loader.unload()\n }\n\n return (\n \n \n \n \n \n \n \n\n \n \n { menuList.map(item => (\n \n \n {item.label}\n \n )) }\n \n\n \n \n \n {t('logout')}\n \n \n \n \n )\n}\n\nexport default UserMenu\n","import { useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { NavLink, useHistory } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { RootState } from '@/store'\nimport LightLogo from '@/assets/images/freeze-color/logo.svg'\nimport SignalIcon from '@/assets/images/signal.svg'\nimport { MainHeader, Logo, LoginNav, SeperateLine, MySignalText } from './style'\nimport { UserAuth } from '@/utils/enum'\nimport I18nSelector from '../i18n-selector'\nimport UserMenu from '../user-menu'\nimport { SFButton, SFSVG } from '@otsofintech/sofinx-ui'\n\nconst HeaderBar = () => {\n const { t } = useTranslation()\n const history = useHistory()\n\n const site = useSelector((state: RootState) => state.site)\n\n const isLogin = useSelector((state: RootState) => state.auth !== UserAuth.GUEST)\n const isLoginPage = useMemo(() => history.location.pathname === '/login', [history.location.pathname])\n\n return (\n \n \n history.push('/')} src={site.lightLogo} defaultSrc={LightLogo} width=\"93px\" height=\"32px\" />\n {/* { site.hyperlinkHide === false && isLogin && {site.hyperlinkContext || t('meet')} } */}\n { isLogin && \n \n \n {t('mySignal')}\n }\n { isLogin && \n \n }\n \n \n { !isLogin ?\n <>\n {t( isLoginPage ? 'register' : 'login')}\n { site.hyperlinkHide === false && window.open(site.hyperlinkUrl, '__blank')}>{site.hyperlinkContext || t('meet')} }\n : null\n }\n { isLogin ? : null }\n \n )\n}\n\nexport default HeaderBar\n","import styled, { keyframes } from 'styled-components'\nimport Close from '@material-ui/icons/Close'\n\nconst slide = keyframes`\n 10% { transform: translateX(calc(-100% - 24px)) }\n 90% { transform: translateX(calc(-100% - 24px)) }\n`\n\nexport const MessageBar = styled.div`\n // 定位\n position: fixed;\n top: 88px;\n left: calc(100%);\n z-index: 1500;\n\n padding: 24px;\n display: flex;\n align-items: center;\n border-radius: 8px;\n background-color: ${ props => props.theme.palette.white };\n box-shadow: 0px 14px 64px -4px ${props => props.theme.palette.defaultShadow2}, 0px 8px 22px -6px ${props => props.theme.palette.defaultShadow2};\n opacity: 0;\n transform: translateX(0);\n transition: all .2s cubic-bezier(0.15, 0.91, 0.47, 0.96);\n\n &.slide-in {\n animation: ${slide} 5s cubic-bezier(0.15, 0.91, 0.47, 0.96);\n }\n\n &.appear {\n opacity: 1;\n }\n`\n\nexport const Content = styled.div`\n margin: 0 14px;\n width: 216px;\n`\n\nexport const CloseIcon = styled(Close)`\n color: ${ props => props.theme.palette.grey30 };\n cursor: pointer;\n`\n","import { useEffect, useRef } from 'react'\nimport useMessage, { iconMap, IconTypes } from '@/hooks/useMessage'\nimport { SFText, SFSVG } from '@otsofintech/sofinx-ui'\nimport { MessageBar, Content, CloseIcon } from './style'\n\nconst Message = () => {\n const { messager } = useMessage()\n const messageNode = useRef(null)\n\n useEffect(() => {\n if (messageNode.current === null) return\n if (messager.message === '') return\n\n messageNode.current.classList.remove('slide-in')\n messageNode.current.classList.remove('appear')\n\n window.requestAnimationFrame(() => {\n if (messageNode.current === null) return\n messageNode.current.classList.add('slide-in')\n messageNode.current.classList.add('appear')\n })\n }, [messager])\n\n const handleClose = () => {\n if (messageNode.current === null) return\n messageNode.current.classList.remove('appear')\n setTimeout(() => {\n messageNode.current!.classList.remove('slide-in')\n }, 200)\n }\n\n return (\n \n {\n iconMap[messager.icon as IconTypes] ?\n : messager.icon\n }\n \n { messager.message }\n \n \n \n )\n}\n\nexport default Message\n","import { useEffect } from 'react'\nimport styled from 'styled-components'\nimport { useLocation } from 'react-router-dom'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '@/store'\nimport { UserAuth } from '@/utils/enum'\nimport HeaderBar from './header-bar'\nimport Message from './message'\n\nconst Wrapper = styled.div<{ isLogin: boolean, isLandingPage: boolean }>`\n width: 100%;\n min-width: ${ props => props.isLogin && !props.isLandingPage ? '1288px' : null };\n background-color: ${ props => props.isLandingPage ? props.theme.palette.white : props.theme.palette.greyBG };\n`\n\nconst Main = styled.main<{ isLogin: boolean, email: boolean, isLandingPage: boolean }>`\n margin: 0 auto;\n padding-top: ${props => (props.isLogin && props.email) || props.isLandingPage ? '64px' : '0'};\n width: ${ props => (props.isLogin && props.email && !props.isLandingPage) ? '1080px' : '100%' };\n min-height: 100vh;\n`\n\nconst Layout = (props: any) => {\n const location = useLocation()\n useEffect(() => window.scrollTo(0, 0), [location])\n\n const isLogin = useSelector((state: RootState) => state.auth !== UserAuth.GUEST)\n const email = useSelector((state: RootState) => state.userInfo.email)\n const isLandingPage = location.pathname === '/'\n\n return (\n \n {!isLogin && }\n\n {isLogin && Boolean(email) && \n \n } \n\n
\n {props.children}\n
\n\n \n
\n )\n}\n\nexport default Layout\n","import { Route, Redirect } from 'react-router-dom'\nimport { useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '@/store'\ninterface AuthRouteProps {\n path: string\n component: React.LazyExoticComponent\n exact?: true\n auth?: boolean\n to?: string\n hasEmail?: boolean\n}\n\nconst AuthRoute = ({path, component: Component, exact, auth = true, to = '/login'}: AuthRouteProps) => {\n const attrs = {\n exact: exact === true,\n }\n const userInfo = useSelector((state: RootState) => state.userInfo)\n\n /// 尚未取得user資料(未完成登入程序) or 已取得email\n const isEmailOk = useMemo(() => !userInfo.id || userInfo.email , [userInfo])\n\n return auth ? isEmailOk || path === '/without-email' ? : : } />\n}\n\nexport default AuthRoute","import { memo } from 'react'\nimport { LoadingProgress } from '@otsofintech/sofinx-ui'\nimport { useGlobalLoading, loader } from '@/hooks/useLoading'\n\nconst Loading = memo(() => {\n // Global Loading\n useGlobalLoading()\n const { isLoading } = loader\n\n return \n}, () => true)\n\nexport default Loading\n","import { lazy, Suspense, useCallback, useMemo } from 'react'\nimport { BrowserRouter, Switch } from 'react-router-dom'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '@/store'\nimport { UserAuth } from '@/utils/enum'\nimport Layout from '@/pages/layout'\nimport AuthRoute from './AuthRoute'\nimport Loading from './loading'\n\nconst NotFound = lazy(() => import(/* webpackChunkName: \"error-not-found\" */ '@otsofintech/sofinx-ui/lib/components/SFErrorNotFound'))\nconst Login = lazy(() => import(/* webpackChunkName: \"login\" */ '@/pages/login'))\nconst Register = lazy(() => import(/* webpackChunkName: \"register\" */ '@/pages/register'))\nconst LandingPage = lazy(() => import(/* webpackChunkName: \"landing\" */ '@/pages/landing'))\nconst CreateSignal = lazy(() => import(/* webpackChunkName: \"create-signal\" */ '@/pages/create-signal'))\nconst LinkSignal = lazy(() => import(/* webpackChunkName: \"link-signal\" */ '@/pages/link-signal'))\nconst Signal = lazy(() => import(/* webpackChunkName: \"signal\" */ '@/pages/signal-list'))\nconst SignalDetail = lazy(() => import(/* webpackChunkName: \"signal-detail\" */ '@/pages/signal-detail'))\nconst SymbolList = lazy(() => import(/* webpackChunkName: \"symbol-list\" */ '@/pages/signal-detail/symbol-list'))\nconst Referral = lazy(() => import(/* webpackChunkName: \"referral\" */ '@/pages/referral/index'))\nconst UserAssets = lazy(() => import(/* webpackChunkName: \"user-assets\" */ '@/pages/user-assets'))\nconst Report = lazy(() => import(/* webpackChunkName: \"report\" */ '@/pages/report'))\nconst Withdraw = lazy(() => import(/* webpackChunkName: \"withdraw\" */ '@/pages/withdraw'))\nconst Account = lazy(() => import(/* webpackChunkName: \"account\" */ '@/pages/account-settings'))\nconst CreateBankWithrawalAccount = lazy(() => import(/* webpackChunkName: \"create-bank-withrawal-account\" */ '@/pages/account-settings/edit-bank'))\nconst EditBankWithrawalAccount = lazy(() => import(/* webpackChunkName: \"edit-bank-withrawal-account\" */ '@/pages/account-settings/edit-bank/_id'))\nconst CreateCryptoWithrawalAccount = lazy(() => import(/* webpackChunkName: \"create-crypto-withrawal-account\" */ '@/pages/account-settings/edit-crypto'))\nconst EditCryptoWithrawalAccount = lazy(() => import(/* webpackChunkName: \"edit-crypto-withrawal-account\" */ '@/pages/account-settings/edit-crypto/_id'))\nconst KycApplication = lazy(() => import(/* webpackChunkName: \"kycApplication\" */ '@/pages/account-settings/components/kyc/kycApplication' ))\nconst WithoutEmail = lazy(()=> import(/* webpackChunkName: \"without-email\" */ '@/pages/without-email'))\n\nconst PlaceOrder = lazy(() => import(/* webpackChunkName: \"place-order\" */ '@/pages/signal-detail/place-order' ))\n\nconst authMap = {\n public: [ UserAuth.GUEST, UserAuth.MEMBER ],\n guest: [ UserAuth.GUEST ],\n member: [ UserAuth.MEMBER ],\n}\n\nconst Router = () => {\n const auth = useSelector((state: RootState) => state.auth)\n const checkAuth = useCallback((authList: UserAuth[]) => authList.includes(auth), [auth])\n\n const userInfo = useSelector((state: RootState) => state.userInfo)\n const isEmailOk = useMemo(() => !userInfo.id || userInfo.email , [userInfo])\n\n return (\n \n \n \n \n \n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n )\n}\n\nexport default Router\n","import { createGlobalStyle } from 'styled-components'\nimport { consoleProject, onErrorEvent } from '@otsofintech/sofinx-ui/lib/helper'\nimport { initLanguage } from '@/assets/locales/i18n'\nimport dayjs from 'dayjs'\nimport utc from 'dayjs/plugin/utc'\nimport * as Sentry from '@sentry/react'\nimport { BrowserTracing } from '@sentry/tracing'\n\nexport const middleware = () => {\n dayjs.extend(utc)\n\n initSentry()\n onErrorEvent()\n initLanguage()\n consoleProject()\n}\n\nfunction initSentry () {\n const isProd = /^.*\\.sofinx.com$/.test(window.location.host)\n if (isProd) {\n Sentry.init({\n dsn: 'https://0f22bdf1ccf8497790bd010bec91ce4e@o1361986.ingest.sentry.io/6653122',\n integrations: [new BrowserTracing()],\n tracesSampleRate: 1.0,\n })\n }\n}\n\nexport const GlobalStyle = createGlobalStyle`\n body {\n margin: 0;\n height: 100%;\n min-height: 100vh;\n\n cursor: default;\n }\n\n * {\n /* 避免mui或其他外部組件覆蓋字體 */\n font-family: Inter, -apple-system, 'system-ui', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif !important;\n\n box-sizing: border-box;\n text-decoration: none;\n\n &:disabled {\n cursor: not-allowed;\n }\n }\n\n ::selection {\n background: ${ props => props.theme.palette.extend1 };\n }\n`\n","import { ThemeProvider } from 'styled-components'\nimport { useState, useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '@/store'\nimport Router from '@/routes/index'\nimport { UserAuth } from '@/utils/enum'\nimport { setUserInfo, setAuth, clearWallet, updateUserWallet, updateSymbol, clearSymbol, updateSiteInfo } from '@/store/actions'\nimport { LoadingInto, SFErrorBoundary } from '@otsofintech/sofinx-ui'\nimport { theme } from '@otsofintech/sofinx-ui/lib/style'\nimport { GetUserService } from '@/services/user'\nimport { webSocket } from '@/services/api-helper/webSocket'\nimport { middleware, GlobalStyle } from './middleware'\n\nmiddleware()\n\nconst App = () => {\n const { i18n } = useTranslation()\n const [isLoading, setIsLoading] = useState(true)\n\n const dispatch = useDispatch()\n const isLogin = useSelector((state: RootState) => state.auth !== UserAuth.GUEST)\n\n // get user info\n useEffect(() => {\n getUserInfo()\n getGlobalData()\n\n function getGlobalData () {\n dispatch(updateSiteInfo())\n }\n\n async function getUserInfo () {\n const result = await GetUserService()\n if (!result.isError) {\n changeLanguage(result.value.language)\n dispatch(setUserInfo(result.value))\n dispatch(setAuth(UserAuth.MEMBER))\n }\n setIsLoading(false)\n }\n\n // set language\n function changeLanguage (language: string) {\n if (language === i18n.language) return\n localStorage.setItem('language', language)\n i18n.changeLanguage(language)\n }\n }, [])\n\n useEffect(() => {\n if (isLogin) getData()\n else clearData()\n\n function clearData () {\n dispatch(clearWallet())\n dispatch(clearSymbol())\n }\n\n function getData () {\n dispatch(updateUserWallet())\n dispatch(updateSymbol())\n }\n }, [isLogin])\n\n // websocket\n useEffect(() => webSocket.create(), [])\n useEffect(() => { isLogin ? webSocket.getAuth() : webSocket.clearAuth() }, [isLogin])\n\n return (\n \n \n \n { isLoading ? : }\n \n \n )\n}\n\nexport default App\n","import ReactDOM from 'react-dom'\nimport store from '@/store'\nimport { Provider } from 'react-redux'\nimport { StylesProvider } from '@material-ui/core/styles'\nimport App from './App'\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root'),\n)\n","export enum Platform { MT4 = 'MT4', MT5 = 'MT5', BINANCE = 'BINANCE', TWSE = 'TWSE' }\n\n/**\n * 角色 |\n * Guest: 未登入 |\n * Member: 登入(權限1) |\n */\nexport enum UserAuth { GUEST = 'GUEST', MEMBER = 'MEMBER' }\n\n/**\n * 登入註冊方式\n */\nexport enum SignTypes { Email, Phone }\n\n/**\n * 資金紀錄type\n */\nexport enum RealWalletAssetsType {\n WITHDRAW_WIRE = 'WITHDRAW_WIRE',\n WITHDRAW_CRYPTO = 'WITHDRAW_CRYPTO',\n PROFIT_SHARE = 'PROFIT_SHARE',\n WITHDRAW_BY_SYSTEM = 'WITHDRAW_BY_SYSTEM',\n DEPOSIT_BY_SYSTEM = 'DEPOSIT_BY_SYSTEM'\n}\n\n/**\n * 出金紀錄 type\n */\nexport enum RealWalletWithdrawType {\n WIRE = 'WIRE',\n CRYPTO = 'CRYPTO',\n}\n/**\n * SOF 資金紀錄type\n */\nexport enum TokenWalletType {\n REWARD = 'REWARD'\n}\n\nexport enum RewardType {\n REWARD_REGISTERED = 'REWARD_REGISTERED',\n REWARD_FIRST_SIGNAL_CREATE = 'REWARD_FIRST_SIGNAL_CREATE',\n REWARD_FOLLOWING_REACH_TEN = 'REWARD_FOLLOWING_REACH_TEN',\n REWARD_INTRODUCE = 'REWARD_INTRODUCE',\n}\n","import { userinfoActions } from './slices/userInfoReducer'\nimport { authActions } from './slices/authReducer'\nimport { walletActions } from './slices/walletReducer'\nimport { symbolsActions } from './slices/symbolsReducer'\nimport { wsStateActions } from './slices/wsStateReducer'\nimport { siteActions } from './slices/siteReducer'\n\nexport const setUserInfo = userinfoActions.setUserInfo\n\nexport const clearUserInfo = userinfoActions.clearUserInfo\n\nexport const updateUserinfo = userinfoActions.updateUserinfo\n\nexport const setAuth = authActions.setAuth\n\nexport const clearAuth = authActions.clearAuth\n\nexport const updateUserWallet = walletActions.updateUserWallet\n\nexport const clearWallet = walletActions.clearWallet\n\nexport const updateSymbol = symbolsActions.updateConfigSymbol\n\nexport const clearSymbol = symbolsActions.clearConfigSymbol\n\nexport const enableWsState = wsStateActions.enable\n\nexport const disableWsState = wsStateActions.disable\n\nexport const updateSiteInfo = siteActions.updateSiteInfo\n","import axios, { AxiosInstance } from 'axios'\nimport { showMessage } from '@/hooks/useMessage'\nimport { isDev } from '@otsofintech/sofinx-ui/lib/helper'\nimport { errorCodeMap } from '@otsofintech/sofinx-ui/lib/data'\nimport i18n from '@/assets/locales/i18n'\n\ntype Error = {\n code: keyof typeof errorCodeMap,\n message: string,\n details?: string[],\n}\n\nexport type ApiService = Promise<\n { readonly isError: false; readonly value: T } |\n { readonly isError: true; readonly value: U }\n>\n\ntype Environment = 'test' | 'develop'\n\n// api url\nconst proxyRouteMap = {\n test: '/local-proxy-api-test',\n develop: '/local-proxy-api-develop',\n}\nconst proxyRoute = proxyRouteMap[process.env.REACT_APP_MODE as Environment] || 'proxy-error'\nconst productionHost = document.getElementsByName('api-host')[0]?.getAttribute('content') || ''\nconst productionRoute = `https://${productionHost}`\nconst BASE_URL = isDev() ? proxyRoute : productionRoute\n\n// site token\nconst developSiteToken = process.env.REACT_APP_SITE_TOKEN\nconst productionSiteToken = document.getElementsByName('site-token')[0]?.getAttribute('content')\nconst SITE_TOKEN = isDev() ? developSiteToken : productionSiteToken\n\naxios.defaults.headers.common['Authorization'] = SITE_TOKEN\nif (isDev() && navigator.vendor === 'Apple Computer, Inc.') axios.defaults.headers.common['Authentication-Info'] = process.env.REACT_APP_SOFINX_USERID\n\nexport const request = axios.create({ baseURL: BASE_URL, withCredentials: true })\n\nexport function apiErrorMsg (serviceName: string, error: Error) {\n if (isDev()) console.log(serviceName)\n showMessage({ icon: 'error', message: i18n.t(errorCodeMap[error?.code || ''] || 'apiError') })\n}\n\n// Zion 要求測試用\nif (isDev('sp.sofinx.otso-dev.com')) (window as typeof window & { axios: AxiosInstance }).axios = request\n","import { getDefaultLanguage } from '@/assets/locales/i18n'\nimport { Platform } from './enum'\n\nfunction ObjectCombine (rawValue: T, value?: Partial): T {\n type Keys = keyof typeof value\n\n if (value === undefined || value === null) return rawValue\n\n if (Object.prototype.toString.call(rawValue) !== '[object Object]') return value as T\n else {\n \t(Object.keys(rawValue) as Keys[]).forEach(key => {\n \t\tif (rawValue.hasOwnProperty(key)) rawValue[key] = ObjectCombine(rawValue[key], value[key])\n \t})\n }\n\n return rawValue\n}\n\nexport const UserInfo = (value?: Common.User): Common.User => {\n const result = {\n id: '',\n headshot: '',\n username: '',\n email: '',\n countryCode: '',\n phone: '',\n language: getDefaultLanguage(),\n signalInfo: {\n passed: 0,\n },\n }\n\n return ObjectCombine(result, value)\n}\n\nexport const Signal = (value?: Common.Signal): Common.Signal => {\n const result: Common.Signal = {\n id: '',\n token: '',\n name: '',\n describe: '',\n headshot: '',\n status: 'PASSED' as Common.SignalStatus,\n enable: false,\n comment: '',\n platform: '' as Platform,\n createdAt: '',\n updatedAt: '',\n submittedAt: '',\n reviewedAt: '',\n enabledAt: '',\n computed: {\n numOfFollowers: 0,\n investmentOfFollow: '',\n wasFollowed: false,\n profitOfCompletedFollowing: '',\n profitOfSymbolsStrategy: '',\n profitShare: '',\n runningRobotData: [],\n totalTradingRobotData: [],\n followersDatas: [],\n },\n info: {\n number: '',\n server: '',\n timezone: 0,\n stopMtcp: false,\n reason: '',\n },\n followSetting: {\n investmentMin: '',\n investmentMax: '',\n profitSharePercent: '',\n },\n performance: {\n principal: '',\n profit: '',\n drawdown: '',\n drawdownRatio: '',\n duration: '',\n tradePerWeek: '',\n avgHoldingDuration: '',\n apr7: '',\n apr30: '',\n apr180: '',\n sharpeRatio: '',\n volMax: '',\n volMin: '',\n volAvg: '',\n volTotal: '',\n winRate: '',\n tradesTotal: 0,\n updatedAt: '',\n profitDatas: [],\n averageProfit: '',\n averageLoss: '',\n rateOfReturn: '',\n },\n symbols: [],\n connStatus: 'DISCONNECTED',\n connMethod: '' as Common.ConnectMethod,\n enabledBefore: false,\n }\n\n return ObjectCombine(result, value)\n}\n\nexport const Wallet = (value?: Common.Wallet):Common.Wallet => {\n const result = {\n balance: '0',\n tokenBalance: '0',\n frozenAmount: '0',\n withdrawableBalance: '0',\n }\n\n if (value) {\n if (value.balance) result.balance = value.balance\n if (value.tokenBalance) result.tokenBalance = value.tokenBalance\n }\n\n return result\n}\n\nexport const ProfitShareRecord = (value?: Common.ProfitShareRecord): Common.ProfitShareRecord => {\n const result = {\n id: '',\n signalId: '',\n signalName: '',\n robotId: '',\n robotName: '',\n followType: '' as any,\n settleTime: '',\n profit: '',\n hwm: '',\n profitShare: '',\n fee: '',\n receive: '',\n status: '' as any,\n }\n\n return ObjectCombine(result, value)\n}\nexport const WithdrawOrderDetail = (value?: Common.Withdraw.WithdrawOrderDetail): Common.Withdraw.WithdrawOrderDetail => {\n const result = {\n id: '',\n userId: '',\n username: '',\n type: 'WIRE',\n status: 'UNDER_REVIEW',\n amount: '',\n paidAmount: '',\n comment: '',\n fee: '',\n exchangeRate: '',\n currency: '',\n currencyType: 'FIAT',\n appliedAt: '',\n cancelledAt: '',\n complianceId: '',\n complianceAccount: '',\n approvedAt: '',\n rejectedAt: '',\n financeId: '',\n financeAccount: '',\n completedAt: '',\n paymentSlip: '',\n transferInfoForWire: {},\n estimatedReceiveAmount: '',\n } as Common.Withdraw.WithdrawOrderDetail\n\n return ObjectCombine(result, value)\n}\n","import i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport enUS from './en-US.json'\nimport zhTW from './zh-TW.json'\nimport zhCN from './zh-CN.json'\nimport myMM from './my-MM.json'\nimport jaJP from './ja-JP.json'\nimport viVN from './vi-VN.json'\n\ntype Translate = keyof typeof resources\n\nexport const languageList = [\n { short: '繁中', text: '繁體中文', value: 'zh-TW' },\n { short: '简中', text: '简体中文', value: 'zh-CN' },\n { short: 'EN', text: 'English', value: 'en-US' },\n { short: 'MY', text: 'မြန်မာစကား', value: 'my-MM' },\n { short: 'Tiếng Việt', text: 'Tiếng Việt', value: 'vi-VN' },\n { short: '日本語', text: '日本語', value: 'ja-JP' },\n]\n\n// i18next resource\nconst resources = {\n 'en-US': { translation: enUS },\n 'zh-TW': { translation: zhTW },\n 'zh-CN': { translation: zhCN },\n 'my-MM': { translation: myMM },\n 'ja-JP': { translation: jaJP },\n 'vi-VN': { translation: viVN },\n}\nexport const initLanguage = () => {\n i18n.use(initReactI18next).init({\n resources,\n lng: getDefaultLanguage(), //預設語言\n fallbackLng: 'en-US', //如果當前切換的語言沒有對應的翻譯則使用這個語言,\n interpolation: {\n escapeValue: false,\n },\n })\n\n}\n\nexport function getDefaultLanguage () {\n const local = localStorage.getItem('language')\n const browser = resources[navigator.language as Translate] ? navigator.language : 'en-US'\n return local || browser\n}\n\nexport default i18n\n","export default __webpack_public_path__ + \"static/media/check-done.b872937e.svg\";","import { ReactNode, useState } from 'react'\nimport { Palette } from '@otsofintech/sofinx-ui/lib/style'\nimport CheckIcon from '@/assets/images/check-done.svg'\nimport InfoIcon from '@/assets/images/info-fill.svg'\nimport CopyIcon from '@/assets/images/copy.svg'\nimport ErrorOutlineIcon from '@/assets/images/error-outline.svg'\n\nexport type IconTypes = keyof typeof iconMap\n\ntype IconMap = {\n [name: string]: { icon: string, color: Palette }\n}\n\nexport const iconMap: IconMap = {\n check: { icon: CheckIcon, color: 'primary' },\n error: { icon: InfoIcon, color: 'error2' },\n copy: { icon: CopyIcon, color: 'primary' },\n warning: { icon: ErrorOutlineIcon, color: 'warn2' },\n warning2: { icon: ErrorOutlineIcon, color: 'error2' },\n}\n\nexport type Message = {\n icon: ReactNode | IconTypes\n message: ReactNode\n symbol?: Symbol\n}\n\nexport let showMessage = (message: Message): void => {}\n\nconst useMessage = () => {\n const [message, setMessage] = useState({\n icon: 'check',\n message: '',\n symbol: Symbol(Date.now()),\n })\n\n showMessage = (message) => setMessage({ ...message, symbol: Symbol(Date.now()) })\n\n return {\n messager: message,\n setMessage\n }\n}\n\nexport default useMessage\n","import { useMemo, useState } from 'react'\n\ninterface Loader {\n isLoading: boolean\n load: () => void\n unload: () => void\n}\n\n// 全局加載器\nexport let loader = {} as Loader\nexport const useGlobalLoading = () => {\n const [ count, setCount ] = useState(0)\n const isLoading = useMemo(() => count !== 0, [count])\n\n const load = () => setCount(state => ++state)\n const unload = () => setCount(state => --state)\n\n loader = {\n isLoading,\n load,\n unload,\n }\n}\n\n\n// 各別加載器\nconst useLoading = () => {\n const [ count, setCount ] = useState(0)\n const isLoading = useMemo(() => count !== 0, [count])\n\n const load = () => setCount(state => ++state)\n const unload = () => {\n setCount(state => state > 0 ? --state : 0)\n }\n\n return {\n isLoading,\n load,\n unload,\n }\n}\n\nexport default useLoading\n","import { toCamel, toUnderline, deepCopy } from '@otsofintech/sofinx-ui/lib/helper'\nimport { request, apiErrorMsg, ApiService } from './api-helper'\n\n// 檢查username是否存在\nexport const GetCheckUsernameService = (query: User.CheckUsername.Req): ApiService => {\n const params = toUnderline(deepCopy(query))\n\n return request.get('/user_check/username', { params })\n .then(res => ({ isError: false, value: res.data.exists }))\n .catch(err => {\n apiErrorMsg('GetCheckUsernameService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 檢查email是否存在\nexport const GetCheckEmailService = (query: User.CheckEmail.Req): ApiService => {\n const params = toUnderline(deepCopy(query))\n\n return request.get('/user_check/email', { params })\n .then(res => ({ isError: false, value: res.data.exists }))\n .catch(err => {\n apiErrorMsg('GetCheckEmailService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 檢查phone是否存在\nexport const GetCheckPhoneService = (query: User.CheckPhone.Req): ApiService => {\n const params = toUnderline(deepCopy(query))\n\n return request.get('/user_check/phone', { params })\n .then(res => ({ isError: false, value: res.data.exists }))\n .catch(err => {\n apiErrorMsg('GetCheckPhoneService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 用戶資訊\nexport const GetUserService = (): ApiService => {\n return request.get('/user')\n .then(res => ({ isError: false, value: toCamel(res.data.user) }))\n .catch(err => {\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 取得用戶推薦人\nexport const GetReferralService = (): ApiService => {\n return request.get('/user/referral')\n .then(res => ({ isError: false, value: toCamel(res.data) }))\n .catch(err => {\n apiErrorMsg('GetReferralService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// 更改語系\nexport const PutUserLangService = (query: User.PutUserLanguage.Req): ApiService => {\n const body = toUnderline(deepCopy(query))\n return request.put('/user/language', body)\n .then(res => ({ isError: false, value: true }) as const)\n .catch(err => {\n apiErrorMsg('PutUserLangService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// Get User Kyc Status\nexport const GetUserKycStatusService = (): ApiService => {\n return request.get('/user/kyc/status')\n .then(res => {\n return { isError: false, value: toCamel(res.data) } as const\n })\n .catch(err => {\n apiErrorMsg('GetUserKycStatusService', err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n}\n\n// Sumsub(第三方服務) Web SDK Access Token\nexport const PostUserKycAccessToken = (): ApiService => {\n return request.post('user/kyc/access_token').then(res => ({ isError: false, value: toCamel(res.data) })).catch(err => {\n apiErrorMsg('PostUserKycAccessToken',err.response?.data?.error)\n return { isError: true, value: err.response?.data?.error }\n })\n\n}\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'\nimport { UserInfo } from '@/utils/class'\nimport { GetUserService } from '@/services/user'\n\n// extraReducers\nconst updateUserinfo = createAsyncThunk('user/info', async () => {\n const result = await GetUserService()\n return result.isError === false ? UserInfo(result.value) : UserInfo()\n})\n\nconst userInfoSlice = createSlice({\n name: 'userInfo',\n initialState: UserInfo(),\n reducers: {\n setUserInfo: (state, action: { payload: Common.User }) => {\n return UserInfo(action.payload)\n },\n clearUserInfo: (state) => {\n return UserInfo()\n }\n },\n\n extraReducers: (builder) => {\n builder.addCase(updateUserinfo.fulfilled, (state, action) => action.payload || UserInfo())\n },\n})\n\nexport const userinfoActions = { ...userInfoSlice.actions, updateUserinfo}\nexport default userInfoSlice.reducer\n"],"sourceRoot":""}