import { WalletType } from 'rnwalletman'; import AsyncStorage from '@react-native-async-storage/async-storage'; const DEFAULT_DOMAIN = '192.168.1.198:16000'; const STORAGE_KEY = 'server_domain'; let _domain = DEFAULT_DOMAIN; export async function loadServerDomain(): Promise { const saved = await AsyncStorage.getItem(STORAGE_KEY); if (saved) _domain = saved; return _domain; } export async function saveServerDomain(domain: string): Promise { _domain = domain; await AsyncStorage.setItem(STORAGE_KEY, domain); } export function getServerDomain(): string { return _domain; } class Api { public static get BASE_URL() { return `http://${_domain}`; } public static get WS_URL() { return `ws://${_domain}/ws`; } private static _instance: Api | null = null; private userId: number = 0; private constructor() {} public setUserId(userId: number) { this.userId = userId; } public getUserId(): number { return this.userId; } public static get instance() { if (Api._instance === null) { Api._instance = new Api(); } return Api._instance; } private headers(): Record { const h: Record = { 'Content-Type': 'application/json' }; if (this.userId > 0) { h['X-User-ID'] = String(this.userId); } return h; } public async login(username: string, password: string): Promise { const res = await fetch(`${Api.BASE_URL}/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }), }); const data = await res.json(); if (!data.success) throw new Error(data.message); this.userId = data.data.userId; return this.userId; } public async register(walletType: WalletType, params: any) { const res = await fetch(`${Api.BASE_URL}/register`, { method: 'POST', headers: this.headers(), body: JSON.stringify({ walletType, params }), }); const data = await res.json(); if (!data.success) throw new Error(data.message); return data; } public async requestOTP(walletType: WalletType, mobile: string, params: any = {}) { const res = await fetch(`${Api.BASE_URL}/request-otp`, { method: 'POST', headers: this.headers(), body: JSON.stringify({ walletType, mobile, params }), }); const data = await res.json(); if (!data.success) throw new Error(data.message); return data; } public async verifyOTP(walletType: WalletType, mobile: string, otp: string, params: any = {}) { const res = await fetch(`${Api.BASE_URL}/verify-otp`, { method: 'POST', headers: this.headers(), body: JSON.stringify({ walletType, mobile, otp, params }), }); const data = await res.json(); if (!data.success) throw new Error(data.message); return data; } } export default Api;