@masterunoco/casinowebengine-api 0.1.3 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/http/client.ts","../src/localStorage.ts","../src/apis/geo.ts","../src/auth/jwtAuth.ts","../src/apis/affiliate.ts","../src/apis/content.ts","../src/apis/deposit.ts","../src/apis/games.ts","../src/apis/luckyWheel.ts","../src/apis/media.ts","../src/apis/player.ts","../src/apis/promotions.ts","../src/apis/raffle.ts","../src/apis/region.ts","../src/apis/settings.ts","../src/apis/sport.ts","../src/apis/voucher.ts","../src/apis/withdraw.ts","../src/sdk.ts","../src/types/auth.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["// src/errors.ts\r\n\r\n/** Common shape we expect from the API when an error happens */\r\nexport type ErrorPayload = {\r\n error?: string; // \"Invalid credentials\"\r\n message?: string; // Human-readable details\r\n code?: string | number; // Optional machine code\r\n details?: unknown; // Optional extra data (validation errors, etc.)\r\n [k: string]: unknown;\r\n};\r\n\r\nexport class ApiError extends Error {\r\n /** HTTP status (e.g., 400/401/429/500) or 0 if network failure */\r\n readonly status: number;\r\n /** Requested method+url to aid debugging */\r\n readonly url: string;\r\n readonly method: string;\r\n /** Raw payload (JSON if available; else text) */\r\n readonly payload?: ErrorPayload | string | null | undefined;\r\n /** Useful server-provided correlator (if any) */\r\n readonly requestId?: string | null;\r\n\r\n constructor(params: {\r\n status: number;\r\n url: string;\r\n method: string;\r\n message: string;\r\n payload?: ErrorPayload | string | null;\r\n requestId?: string | null;\r\n }) {\r\n super(params.message);\r\n this.name = 'ApiError';\r\n this.status = params.status;\r\n this.url = params.url;\r\n this.method = params.method;\r\n this.payload = params.payload;\r\n this.requestId = params.requestId ?? null;\r\n }\r\n}\r\n\r\n/** TS type guard */\r\nexport function isApiError(err: unknown): err is ApiError {\r\n return !!err && typeof err === 'object' && (err as any).name === 'ApiError';\r\n}\r\n","// src/http/client.ts\r\nimport { ApiError, type ErrorPayload } from '../errors';\r\n\r\nexport type AuthPolicy = 'required' | 'optional' | 'none';\r\n\r\nexport interface ClientOptions {\r\n baseUrl: string;\r\n auth?: { getToken: () => string | null };\r\n defaultHeaders?: Record<string, string>;\r\n fetchFn?: typeof fetch;\r\n timeoutMs?: number;\r\n}\r\n\r\nexport class HttpClient {\r\n constructor(private opts: ClientOptions) {}\r\n\r\n setAuthProvider(auth?: { getToken: () => string | null }) {\r\n if (auth) {\r\n this.opts.auth = auth;\r\n }\r\n }\r\n\r\n async request<T>(\r\n path: string,\r\n init: RequestInit = {},\r\n authPolicy: AuthPolicy = 'optional'\r\n ): Promise<T> {\r\n const url = joinUrl(this.opts.baseUrl, path);\r\n const method = (init.method || 'GET').toUpperCase();\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.opts.timeoutMs ?? 15000);\r\n\r\n try {\r\n const headers = new Headers(this.opts.defaultHeaders || {});\r\n // attach JWT if needed\r\n if (authPolicy !== 'none') {\r\n const token = this.opts.auth?.getToken?.() ?? null;\r\n if (token) headers.set('Authorization', `JWT ${token}`);\r\n if (authPolicy === 'required' && !token) {\r\n throw new ApiError({\r\n status: 401,\r\n url,\r\n method,\r\n message: 'Authentication required',\r\n payload: { code: 'AUTH_REQUIRED' },\r\n });\r\n }\r\n }\r\n if (init.body && !headers.has('Content-Type')) headers.set('Content-Type', 'application/json');\r\n\r\n // Merge headers last to allow per-request overrides\r\n const res = await (this.opts.fetchFn ?? fetch)(url, {\r\n ...init,\r\n headers: { ...Object.fromEntries(headers.entries()), ...(init.headers || {}) },\r\n signal: controller.signal,\r\n });\r\n\r\n const reqId = res.headers.get('x-request-id') || res.headers.get('x-correlation-id') || null;\r\n const contentType = res.headers.get('content-type') || '';\r\n const isJson = contentType.includes('application/json');\r\n\r\n if (!res.ok) {\r\n const payload = await readBody(res, isJson);\r\n const message =\r\n (isJson && typeof payload === 'object' && payload && ('message' in payload || 'error' in payload))\r\n ? String((payload as ErrorPayload).message ?? (payload as ErrorPayload).error)\r\n : res.statusText || `HTTP ${res.status}`;\r\n\r\n throw new ApiError({\r\n status: res.status,\r\n url,\r\n method,\r\n message,\r\n payload: (isJson ? (payload as ErrorPayload) : payload) ?? null,\r\n requestId: reqId,\r\n });\r\n }\r\n\r\n // success\r\n if (isJson) return (await res.json()) as T;\r\n // no body / text fallback\r\n const text = await res.text();\r\n return (text ? (text as unknown as T) : (null as unknown as T));\r\n } catch (err: any) {\r\n if (err?.name === 'AbortError') {\r\n throw new ApiError({\r\n status: 408,\r\n url,\r\n method,\r\n message: 'Request timeout',\r\n payload: { code: 'TIMEOUT' },\r\n });\r\n }\r\n if (err instanceof ApiError) throw err;\r\n\r\n // network error / CORS / DNS, etc.\r\n throw new ApiError({\r\n status: 0,\r\n url,\r\n method,\r\n message: err?.message || 'Network error',\r\n payload: { code: 'NETWORK_ERROR' },\r\n });\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n\r\n get<T>(path: string, authPolicy?: AuthPolicy) {\r\n return this.request<T>(path, { method: 'GET' }, authPolicy);\r\n }\r\n post<T>(path: string, body?: unknown, authPolicy?: AuthPolicy) {\r\n return this.request<T>(\r\n path,\r\n { method: 'POST', body: body !== undefined ? JSON.stringify(body) : null },\r\n authPolicy\r\n );\r\n }\r\n patch<T>(path: string, body?: unknown, authPolicy?: AuthPolicy) {\r\n return this.request<T>(\r\n path,\r\n { method: 'PATCH', body: body !== undefined ? JSON.stringify(body) : null },\r\n authPolicy\r\n );\r\n }\r\n delete<T>(path: string, authPolicy?: AuthPolicy) {\r\n return this.request<T>(path, { method: 'DELETE' }, authPolicy);\r\n }\r\n}\r\n\r\nfunction joinUrl(base: string, path: string) {\r\n return `${base.replace(/\\/+$/, '')}${path.startsWith('/') ? '' : '/'}${path}`;\r\n}\r\n\r\nasync function readBody(res: Response, isJson: boolean): Promise<ErrorPayload | string | null> {\r\n try {\r\n return isJson ? ((await res.json()) as ErrorPayload) : await res.text();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","import type {User} from \"./types/auth\";\r\n\r\nexport class LocalStorage {\r\n protected tokenKey = 'gs.token';\r\n protected userDataKey = 'gs.userData';\r\n protected avatarKey = 'gs.avatar';\r\n protected socketTokenKey = 'gs.socketToken';\r\n protected pinKey = 'gs.pin';\r\n protected pinTokenKey = 'gs.pinToken';\r\n protected geoLocalStorageKey = 'gs.visitorLocation';\r\n\r\n private isLocalStorageAvailable(): boolean {\r\n return typeof localStorage !== 'undefined';\r\n }\r\n\r\n setToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.tokenKey, token);\r\n }\r\n }\r\n\r\n getToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.tokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setUser(data: User) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.userDataKey, JSON.stringify(data));\r\n }\r\n }\r\n\r\n getUser(): User | null {\r\n if (this.isLocalStorageAvailable()) {\r\n const data = localStorage.getItem(this.userDataKey);\r\n if (data) {\r\n try {\r\n return JSON.parse(data) as User;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n setAvatar(avatarUrl: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.avatarKey, avatarUrl);\r\n }\r\n }\r\n\r\n getAvatar(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.avatarKey);\r\n }\r\n return null;\r\n }\r\n\r\n setSocketToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.socketTokenKey, token);\r\n }\r\n }\r\n\r\n getSocketToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.socketTokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setPin(pin: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.pinKey, pin);\r\n }\r\n }\r\n\r\n getPin(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.pinKey);\r\n }\r\n return null;\r\n }\r\n\r\n setPinToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.pinTokenKey, token);\r\n }\r\n }\r\n\r\n getPinToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.pinTokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setGeolocation(data: any) {\r\n if (this.isLocalStorageAvailable()) {\r\n data.timestamp = Date.now();\r\n localStorage.setItem(this.geoLocalStorageKey, JSON.stringify(data));\r\n }\r\n }\r\n\r\n getGeolocation(): any | null {\r\n if (this.isLocalStorageAvailable()) {\r\n const data = localStorage.getItem(this.geoLocalStorageKey);\r\n if (data) {\r\n try {\r\n const parsedData = JSON.parse(data);\r\n if (parsedData.timestamp) {\r\n const now = Date.now();\r\n const age = now - parsedData.timestamp;\r\n const cacheTime = 10 * 60 * 1000; // 10 minutes\r\n if (age > cacheTime) {\r\n return null;\r\n }\r\n }\r\n return parsedData;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n clear() {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.removeItem(this.tokenKey);\r\n localStorage.removeItem(this.userDataKey);\r\n localStorage.removeItem(this.avatarKey);\r\n localStorage.removeItem(this.socketTokenKey);\r\n localStorage.removeItem(this.pinKey);\r\n localStorage.removeItem(this.pinTokenKey);\r\n localStorage.removeItem(this.geoLocalStorageKey);\r\n }\r\n }\r\n}\r\n\r\nexport const storage = new LocalStorage();\r\n","import { storage } from '../localStorage';\r\nimport type { HttpClient } from '../http/client';\r\nimport type { FreeIpApiGeo, FailObj } from '../types/geo';\r\nexport class GeolocationAPI {\r\n constructor(private http: HttpClient) {}\r\n private failObj = {\r\n ip: \"0.0.0.0\",\r\n countryCode: \"undefined\",\r\n status: \"fail\",\r\n message: \"invalid query\",\r\n query: \"undefined\"\r\n };\r\n async getGeolocationFromAPI(): Promise<FreeIpApiGeo | undefined> {\r\n try {\r\n const geo = await this.http.get<FreeIpApiGeo>('/geo/location', 'none');\r\n if (geo.ipAddress && geo.ipVersion) {\r\n delete geo.ipVersion;\r\n delete geo.ipAddress;\r\n storage.setGeolocation(geo);\r\n return geo;\r\n }\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n async getGeolocation(): Promise<FreeIpApiGeo | FailObj> {\r\n const geoData = storage.getGeolocation();\r\n if (geoData) {\r\n try {\r\n const geo = JSON.parse(geoData);\r\n if (geo && geo.ipVersion) {\r\n delete geo.ipVersion;\r\n delete geo.ipAddress;\r\n return geo;\r\n } else {\r\n return this.failObj;\r\n }\r\n } catch {\r\n return this.failObj;\r\n }\r\n } else {\r\n return await this.getGeolocationFromAPI() || this.failObj;\r\n }\r\n }\r\n\r\n async getCountryCode(): Promise<string | false> {\r\n const geo = await this.getGeolocation();\r\n if (geo && geo.countryCode && geo.countryCode === 'undefined') {\r\n return geo.countryCode;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","// src/auth/jwtAuth.ts\r\nimport type {\r\n AuthResponse,\r\n pinCodeResponse,\r\n pinCodeCheckResponse,\r\n CreatePlayerInput,\r\n CreatePlayerV2Input,\r\n CreatePlayerV2Step2Input,\r\n GoogleLoginRequest,\r\n SignupResponse, SignupV2ValidateResponse,\r\n RegisterResponse\r\n} from '../types/auth';\r\nimport type {AuthPolicy, HttpClient} from '../http/client';\r\nimport {GeolocationAPI} from \"../apis/geo\";\r\nimport {storage} from '../localStorage';\r\n\r\nexport class JwtAuth {\r\n private token: string | null = null;\r\n private user: AuthResponse['user'] | null = null;\r\n\r\n constructor(\r\n private client: HttpClient,\r\n ) {\r\n this.token = storage.getToken();\r\n this.user = storage.getUser();\r\n }\r\n\r\n setToken(token: string | null) {\r\n if (token) {\r\n storage.setToken(token);\r\n this.token = token;\r\n } else {\r\n storage.clear();\r\n }\r\n }\r\n setUser(user: AuthResponse['user'], token: string) {\r\n storage.setUser(user);\r\n storage.setToken(token);\r\n this.user = user;\r\n this.token = token;\r\n }\r\n\r\n async login(username: string, password: string, recaptchaToken: string): Promise<AuthResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n const payload = { username, password, recaptchaToken };\r\n const res = await this.client.post<AuthResponse>('/auth/login', payload, authPolicy);\r\n\r\n this.setUser(res.user, res.token);\r\n return res;\r\n }\r\n\r\n async GoogleLogin(data: GoogleLoginRequest): Promise<AuthResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const res = await this.client.post<AuthResponse>('/auth/google/signin', data, authPolicy);\r\n\r\n this.setUser(res.user, res.token);\r\n return res;\r\n }\r\n\r\n async forgetPassword(email: string): Promise<void> {\r\n const authPolicy: AuthPolicy = 'none';\r\n await this.client.post<void>('/auth/forgot-password', { email }, authPolicy);\r\n }\r\n\r\n async register(data: CreatePlayerInput, param?: string | undefined): Promise<RegisterResponse | SignupResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n let apiRouter = '/auth/signup';\r\n if (param) {\r\n apiRouter += `?ref=${param}`\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const registerData = await this.client.post<SignupResponse>(apiRouter, data, authPolicy);\r\n if (registerData.player) {\r\n const loginData = await this.login(data.username, data.password, data.recaptchaToken);\r\n return {\r\n ...registerData,\r\n ...loginData,\r\n };\r\n } else {\r\n return {\r\n ...registerData,\r\n }\r\n }\r\n }\r\n\r\n async registerV2(data: CreatePlayerV2Input, param?: string | undefined): Promise<RegisterResponse | SignupResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n let apiRouter = '/auth/signupv2';\r\n if (param) {\r\n apiRouter += `?ref=${param}`\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const registerData = await this.client.post<SignupResponse>(apiRouter, data, authPolicy);\r\n if (registerData.player) {\r\n const loginData = await this.login(data.username, data.password, data.recaptchaToken);\r\n return {\r\n ...registerData,\r\n ...loginData,\r\n };\r\n } else {\r\n return {\r\n ...registerData\r\n }\r\n }\r\n }\r\n\r\n async registerV2Validate(data: CreatePlayerV2Step2Input ): Promise<SignupV2ValidateResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<SignupV2ValidateResponse>('/auth/signupv2/validate-username-email', data, authPolicy);\r\n }\r\n\r\n clear() {\r\n this.setToken(null);\r\n this.user = null;\r\n }\r\n\r\n async logout(): Promise<void> {\r\n const authPolicy: AuthPolicy = 'required';\r\n await this.client.post<void>('/auth/logout', {}, authPolicy);\r\n this.clear();\r\n }\r\n async pinCode(pin: string): Promise<pinCodeResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<pinCodeResponse>('/auth/website', { pin }, authPolicy);\r\n }\r\n async pinCheck(token: string): Promise<pinCodeCheckResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<pinCodeCheckResponse>('/auth/website/check', { token }, authPolicy);\r\n }\r\n\r\n getToken(): string | null {\r\n if (!this.token) {\r\n this.token = storage.getToken();\r\n }\r\n return this.token;\r\n }\r\n\r\n getUser(): AuthResponse['user'] | null {\r\n if (!this.user) {\r\n this.user = storage.getUser();\r\n }\r\n return this.user;\r\n }\r\n isAuthenticated(): boolean {\r\n const Token = this.token || this.getToken();\r\n return !!Token;\r\n }\r\n}\r\n","// src/apis/affiliate.ts\r\nimport {HttpClient} from '../http/client';\r\nimport * as AffiliateTypes from '../types/affiliate';\r\nimport {GetPrizes, GetPrizesRequest, GetPrizesResult, Rewards, Summery} from \"../types/affiliate\";\r\n\r\nexport class AffiliateAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n async generateReferralCode(description: string): Promise<AffiliateTypes.GenerateReferralCode> {\r\n return await this.http.post<AffiliateTypes.GenerateReferralCode>(`/referral/generate`, {description});\r\n }\r\n\r\n async getReferralCode(): Promise<AffiliateTypes.GetReferralCode> {\r\n return await this.http.get<AffiliateTypes.GetReferralCode>(`/referral/get`);\r\n }\r\n\r\n async getReferralCount(): Promise<number> {\r\n return await this.http.get<number>(`/referral/max-codes`);\r\n }\r\n\r\n async getReferralStatus(): Promise<AffiliateTypes.ReferralStatus> {\r\n return await this.http.get<AffiliateTypes.ReferralStatus>(`/referral/status`);\r\n }\r\n\r\n async getReferralFriends(page: number, limit: number): Promise<AffiliateTypes.ReferralFriends> {\r\n return await this.http.get<AffiliateTypes.ReferralFriends>(`/referral/friends?page=${page}&limit=${limit}`);\r\n }\r\n\r\n async getBannerImage(lang: string, key: string): Promise<AffiliateTypes.BannerImage> {\r\n return await this.http.get<AffiliateTypes.BannerImage>(`/website-settings?language=${lang}&key=${key}`);\r\n }\r\n\r\n async getRewards(): Promise<AffiliateTypes.Rewards> {\r\n return await this.http.get<AffiliateTypes.Rewards>(`/referral/rewards`);\r\n }\r\n\r\n async getAvailablePrizes(): Promise<AffiliateTypes.AvailablePrizes> {\r\n return await this.http.get<AffiliateTypes.AvailablePrizes>(`/referral/available-prizes`);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async getPrizes(params: AffiliateTypes.GetPrizesRequest): Promise<AffiliateTypes.GetPrizes> {\r\n const queryParams = new URLSearchParams();\r\n for (const key in params) {\r\n if (params[key as keyof GetPrizesRequest] !== undefined) {\r\n queryParams.append(key, String(params[key as keyof GetPrizesRequest]));\r\n }\r\n }\r\n const query = queryParams.toString();\r\n return await this.http.get<AffiliateTypes.GetPrizes>(`/referral/prizes?${query}`);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async convert(data: AffiliateTypes.ConvertRequest): Promise<{message: string}> {\r\n return await this.http.post<{message: string}>(`/referral/convert`, data);\r\n }\r\n\r\n async getSummary(): Promise<AffiliateTypes.Summery> {\r\n return await this.http.get(`/referral/summary`);\r\n }\r\n}\r\n","// src/apis/content.ts (public: no auth)\r\nimport { HttpClient } from '../http/client';\r\n\r\nexport interface ContentPage {\r\n id: number; slug: string; title: string; body: string;\r\n createdAt: string; updatedAt: string;\r\n}\r\n\r\nexport class ContentAPI {\r\n constructor(private http: HttpClient) {}\r\n list() { return this.http.get<ContentPage[]>('/content-pages', 'none'); }\r\n get(slug: string) { return this.http.get<ContentPage>(`/content-pages/${slug}`, 'none'); }\r\n}\r\n","// src/apis/deposit.ts\r\nimport {HttpClient} from '../http/client';\r\nimport { ChargeData, PaymentMethodSchema, GetDeposits } from '../types/deposit';\r\nexport class DepositAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n charge(data: ChargeData) {\r\n return this.http.post< string >('/deposit/charge', data, 'required');\r\n }\r\n\r\n getPaymentMethods():Promise<PaymentMethodSchema[]>{\r\n return this.http.get<PaymentMethodSchema[]>('/payment-methods', 'required');\r\n }\r\n\r\n getDeposits(status = 'pending', page = 1, limit = 20): Promise<GetDeposits> {\r\n return this.http.get<GetDeposits>(`/payment/${status}?page=${page}&limit=${limit}`, 'required');\r\n }\r\n}\r\n","import { HttpClient } from '../http/client';\r\nimport {\r\n GameCategoriesResponse,\r\n SearchRequest,\r\n GameSearchResponse, GamesSearchResponse, SetFavoriteGamesResponse,\r\n FavoriteGamesResponse, recentBigWinsResponse, GlobalFavorites, Providers,\r\n TopRated, Lobby\r\n} from '../types/game';\r\nimport {GeolocationAPI} from \"./geo\";\r\n\r\nexport interface GameLinkResponse { message: string; gameLink: string; isFavorite?: boolean; }\r\n\r\nexport class GamesAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n /** Public: search games */\r\n search(request: SearchRequest): Promise<GamesSearchResponse> {\r\n return this.http.post<GamesSearchResponse>('/games/search', request, 'none');\r\n }\r\n\r\n getCategories(): Promise<GameCategoriesResponse> {\r\n return this.http.get<GameCategoriesResponse>('/games/categories', 'none');\r\n }\r\n\r\n /** Requires auth: player link */\r\n getLink(gameId: string) {\r\n return this.http.post<GameLinkResponse>(`/games/getLink`, {gameId}, 'required');\r\n }\r\n\r\n /** Public: demo link */\r\n getDemoLink(gameId: number) {\r\n return this.http.post<GameLinkResponse>('/games/getDemoLink', {gameId}, 'none');\r\n }\r\n\r\n setFavorite(gameId: number, isFavorite: boolean): Promise<SetFavoriteGamesResponse> {\r\n return this.http.post<SetFavoriteGamesResponse>('/games/favorites', {gameId, isFavorite}, 'required');\r\n }\r\n getFavorite(): Promise<FavoriteGamesResponse[]> {\r\n return this.http.get<FavoriteGamesResponse[]>('/games/player-favorites', 'required');\r\n }\r\n getRecentBigWins(category: string): Promise<recentBigWinsResponse[]> {\r\n return this.http.get<recentBigWinsResponse[]>(`/games/recent-big-wins?category=${category}`, 'none');\r\n }\r\n getRecent(page=1, limit=10): Promise<GamesSearchResponse> {\r\n return this.http.get<GamesSearchResponse>(`/games/recent?page=${page}&limit=${limit}`);\r\n }\r\n\r\n getGlobalFavorites(): Promise<GlobalFavorites> {\r\n return this.http.get<GlobalFavorites>('/games/global-favorites', 'none');\r\n }\r\n getTopRated():Promise<{ topRated :TopRated[] }>{\r\n const geo = new GeolocationAPI(this.http);\r\n const countryCode = geo.getCountryCode();\r\n let url = '/games/top-rated';\r\n if (countryCode) {\r\n url += `?region=${countryCode}`;\r\n }\r\n return this.http.get<{ topRated :TopRated[] }>(url, 'none');\r\n }\r\n getProviders(): Promise<Providers> {\r\n return this.http.get<Providers>('/games/providers', 'none');\r\n }\r\n getLobby(): Promise<Lobby[]> {\r\n const geo = new GeolocationAPI(this.http);\r\n const countryCode = geo.getCountryCode();\r\n let url = '/games/lobby';\r\n if (countryCode) {\r\n url += `?region=${countryCode}`;\r\n }\r\n return this.http.get<Lobby[]>(url, 'none');\r\n }\r\n\r\n}\r\n","// src/apis/lucky.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as LuckyWheelTypes from '../types/luckyWheel';\r\nexport class LuckyWheelAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n getStatistics(): Promise<LuckyWheelTypes.LuckyWheelStatistics> {\r\n return this.http.get<LuckyWheelTypes.LuckyWheelStatistics>('/lucky-wheel/statistics', 'required');\r\n }\r\n getWinners():Promise<LuckyWheelTypes.LuckyWheelWinners[]> {\r\n return this.http.get<LuckyWheelTypes.LuckyWheelWinners[]>('/lucky-wheel/get-winners?offset=1&limit=100', 'none');\r\n }\r\n getPrizes():Promise<LuckyWheelTypes.LuckyWheelPrize[]>{\r\n return this.http.get<LuckyWheelTypes.LuckyWheelPrize[]>('/lucky-wheel/get-prizes');\r\n }\r\n getStatus():Promise<LuckyWheelTypes.LuckyWheelStatus>{\r\n return this.http.get<LuckyWheelTypes.LuckyWheelStatus>('/lucky-wheel/status');\r\n }\r\n play(data: { luckyWheelId: number }):Promise<LuckyWheelTypes.LuckyWheelSpinPlay | LuckyWheelTypes.LuckyWheelSpinPlayNA>{\r\n return this.http.post<LuckyWheelTypes.LuckyWheelSpinPlay | LuckyWheelTypes.LuckyWheelSpinPlayNA>('/lucky-wheel/play', data);\r\n }\r\n collect(data: { collectHash: string }):Promise<LuckyWheelTypes.LuckyWheelCollect>{\r\n return this.http.post<LuckyWheelTypes.LuckyWheelCollect>('/lucky-wheel/collect', data);\r\n }\r\n\r\n}\r\n","// src/apis/media.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as MediaTypes from '../types/media';\r\nexport class MediaAPI {\r\n constructor(private http: HttpClient) {}\r\n upload(file: File): Promise<MediaTypes.uploadResponse> {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('upload_preset', 'demo');\r\n return this.http.post<MediaTypes.uploadResponse>('/media/upload', formData, 'none');\r\n }\r\n getFileUrl(filePath: string): Promise<string> {\r\n return this.http.get<string>(`/media/get-file-url?filePath=${filePath}`)\r\n }\r\n\r\n}\r\n","// src/apis/player.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as PlayerTypes from '../types/player';\r\nimport {BalanceHistory, GameHistory} from \"../types/player\";\r\n\r\nexport class PlayerAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n changePassword(data: PlayerTypes.ChangePasswordData): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/player/change-password', data);\r\n }\r\n getBalanceHistory(data: PlayerTypes.GetBalanceHistoryQuery): Promise<PlayerTypes.BalanceHistory[]> {\r\n const queryParams = new URLSearchParams();\r\n if (data.limit !== undefined) queryParams.append('limit', data.limit.toString());\r\n if (data.startDate !== undefined) queryParams.append('startDate', data.startDate);\r\n if (data.endDate !== undefined) queryParams.append('endDate', data.endDate);\r\n const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\r\n return this.http.get<PlayerTypes.BalanceHistory[]>(`/player/balance-history${queryString}`);\r\n }\r\n getGameHistory(data: PlayerTypes.GetBalanceHistoryQuery): Promise<GameHistory[]> {\r\n const queryParams = new URLSearchParams();\r\n if (data.limit !== undefined) queryParams.append('limit', data.limit.toString());\r\n if (data.startDate !== undefined) queryParams.append('startDate', data.startDate);\r\n if (data.endDate !== undefined) queryParams.append('endDate', data.endDate);\r\n const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\r\n return this.http.get<GameHistory[]>(`/player/game-transaction${queryString}`);\r\n }\r\n verifyEmail(data: PlayerTypes.EmailVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/email/send', data);\r\n }\r\n verifyEmailCode(data: { verificationCode: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/email/confirm', data);\r\n }\r\n verifyPhone(data: PlayerTypes.PhoneVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/send', data);\r\n }\r\n verifyPhoneCode(data: { verificationCode: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/confirm', data);\r\n }\r\n getVerificationStatus(): Promise<PlayerTypes.VerificationStatus[]> {\r\n return this.http.get<PlayerTypes.VerificationStatus[]>('/player/verification-status');\r\n }\r\n getAvatars(): Promise<PlayerTypes.Avatar[]> {\r\n return this.http.get<PlayerTypes.Avatar[]>('/avatars/get');\r\n }\r\n changeAvatar(data: FormData): Promise<{ message: string, avatar: PlayerTypes.Avatar }> {\r\n return this.http.post<{ message: string, avatar: PlayerTypes.Avatar }>('/avatars/set', data);\r\n }\r\n getPlayerKycDocuments(): Promise<PlayerTypes.KycDocument[]> {\r\n return this.http.get<PlayerTypes.KycDocument[]>('/player/kyc-documents');\r\n }\r\n createPlayerKycDocument(data: FormData): Promise<PlayerTypes.KycDocument> {\r\n return this.http.post<PlayerTypes.KycDocument>('/player/kyc-documents', data);\r\n }\r\n createPlayerTags(data: {key: string, value: string}[]): Promise<{ message: string }> {\r\n const requestData = {\r\n tags: data\r\n };\r\n return this.http.post<{ message: string}>('/player/tags', requestData);\r\n }\r\n updateProfile(data: PlayerTypes.UpdateProfileData): Promise<PlayerTypes.ProfileData> {\r\n return this.http.patch<PlayerTypes.ProfileData>('/player/profile', data);\r\n }\r\n\r\n}\r\n","// src/apis/promotions.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as PromotionsTypes from '../types/promotions';\r\nimport {Promotion} from \"../types/promotions\";\r\nexport class PromotionsAPI {\r\n constructor(private http: HttpClient) {}\r\n getActive(): Promise<PromotionsTypes.Promotion[]> {\r\n return this.http.get<PromotionsTypes.Promotion[]>('/promotions/active');\r\n }\r\n getPublic(): Promise<PromotionsTypes.Promotion[]> {\r\n return this.http.get<PromotionsTypes.Promotion[]>('/promotions/public', 'none');\r\n }\r\n getPromotion(id:string): Promise<PromotionsTypes.Promotion> {\r\n return this.http.get<PromotionsTypes.Promotion>(`/promotions/${id}`, 'none');\r\n }\r\n getProgress(): Promise<PromotionsTypes.Progress> {\r\n return this.http.get<PromotionsTypes.Progress>('/promotions/progress');\r\n }\r\n activateBonus(id:string): Promise<{message:string; error?:string}> {\r\n return this.http.post<{message:string; error?:string}>(`/bonus/activate/${id}`, { });\r\n }\r\n cancelBonus(id:string): Promise<{message:string; error?:string}> {\r\n return this.http.delete<{message:string; error?:string}>(`/bonus/cancel/${id}`);\r\n }\r\n}\r\n","// src/apis/raffle.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as RaffleTypes from '../types/raffle';\r\n\r\nexport class RaffleAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getTickets(): Promise<RaffleTypes.GetRaffleTicketsResponse[]> {\r\n return this.http.get<RaffleTypes.GetRaffleTicketsResponse[]>('/raffle/tickets');\r\n }\r\n\r\n getPrizes(): Promise<RaffleTypes.RafflePrize[]> {\r\n return this.http.get<RaffleTypes.RafflePrize[]>('/raffle/prizes');\r\n }\r\n\r\n getHistory(): Promise<RaffleTypes.RafflePrizesHistoryResponse> {\r\n return this.http.get<RaffleTypes.RafflePrizesHistoryResponse>('/raffle/history');\r\n }\r\n\r\n getActiveRaffle(): Promise<RaffleTypes.ActiveRaffle[] | null> {\r\n return this.http.get<RaffleTypes.ActiveRaffle[] | null>('/raffle/current');\r\n }\r\n\r\n purchaseTickets(data: { raffleId: number; ticketAmount: number }): Promise<RaffleTypes.PurchaseTicket> {\r\n return this.http.post<RaffleTypes.PurchaseTicket>('/raffle/purchase', data);\r\n }\r\n}\r\n","// src/apis/region.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as RegionTypes from '../types/region';\r\n\r\nexport class RegionAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getDepositRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions/deposit');\r\n }\r\n\r\n getWithdrawRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions/withdraw');\r\n }\r\n\r\n getRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions', 'none');\r\n }\r\n\r\n getBlockedCountries(): Promise<RegionTypes.BlockedCountry[]> {\r\n return this.http.get<RegionTypes.BlockedCountry[]>('/regions/blocked-countries', 'none');\r\n }\r\n}\r\n","// src/apis/settings.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as SettingsTypes from '../types/settings';\r\n\r\nexport class SettingsAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getSettings(): Promise<SettingsTypes.Settings> {\r\n return this.http.get<SettingsTypes.Settings>('/api/v1/settings', 'none');\r\n }\r\n getBanner(lang: string): Promise<SettingsTypes.Banner> {\r\n return this.http.get<SettingsTypes.Banner>(`/banners/get/${lang}`, 'none');\r\n }\r\n getContent(): Promise<SettingsTypes.Content[]> {\r\n return this.http.get<SettingsTypes.Content[]>('/content-pages', 'none');\r\n }\r\n getContentItem(type:string, lang:string): Promise<SettingsTypes.Content> {\r\n return this.http.get<SettingsTypes.Content>(`/content-pages/${type}/${lang}`, 'none');\r\n }\r\n getAvatar(): Promise<SettingsTypes.Avatar[]> {\r\n return this.http.get<SettingsTypes.Avatar[]>('/avatars/get', 'none');\r\n }\r\n getPreferences(): Promise<SettingsTypes.Preferences> {\r\n return this.http.get<SettingsTypes.Preferences>('/player/preferences');\r\n }\r\n updatePreferences(data: Partial<SettingsTypes.Preferences>): Promise<SettingsTypes.Preferences> {\r\n return this.http.patch<SettingsTypes.Preferences>('/player/preferences', data);\r\n }\r\n getCurrencies(): Promise<SettingsTypes.Currency[]> {\r\n return this.http.get<SettingsTypes.Currency[]>('/currencies/get', 'none');\r\n }\r\n getWebSetting(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=footerCasinoItems&key[]=footerSportsItems&key[]=footerSocialMedia&key[]=footerPromoItems&key[]=footerSupportLegalItems&key[]=footerAboutUsItems&key[]=footerAppLinks`, 'none');\r\n }\r\n getWebSettingProviders(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=sectionProviders`, 'none');\r\n }\r\n getWebSettingPin(): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?key[]=isCodeProtected`, 'none');\r\n }\r\n getWebSettingReferralRules(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_rules`, 'none');\r\n }\r\n getWebSettingReferralFaq(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_faq`, 'none');\r\n }\r\n getWebSettingReferralLearnMore(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_learn_more`, 'none');\r\n }\r\n getWebSettingReferralBanners(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_assets`, 'none');\r\n }\r\n getWebSettingSlotsCategories(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=slotsCategories`, 'none');\r\n }\r\n getWebSettingLiveCasinoCategories(lang: string): Promise<SettingsTypes.WebSetting[]>{\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=liveCasinoCategories`, 'none');\r\n }\r\n getWebsiteAllowedPlayerTags(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=allowedPlayerTags`, 'none');\r\n }\r\n getSupportEmail(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=supportEmail`, 'none');\r\n }\r\n}\r\n","// src/apis/sport.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as SportTypes from '../types/sport';\r\n\r\nexport class SportAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n getConfig(): Promise<SportTypes.SportConfig> {\r\n return this.http.get<SportTypes.SportConfig>('/sport/get-sport-config');\r\n }\r\n}\r\n","// src/apis/voucher.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as VoucherTypes from '../types/voucher';\r\n\r\nexport class VoucherAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n redeemVoucher(code: string): Promise<VoucherTypes.RedeemResponse> {\r\n return this.http.post<VoucherTypes.RedeemResponse>('/vouchers/redeem', { code });\r\n }\r\n checkVoucher(code: string): Promise<VoucherTypes.CheckResponse> {\r\n return this.http.get<VoucherTypes.CheckResponse>(`/vouchers/check/${code}`, 'none');\r\n }\r\n}\r\n","// src/apis/withdraw.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as WithdrawTypes from '../types/withdraw';\r\nimport {WithdrawData, WithdrawRequest} from \"../types/withdraw\";\r\n\r\nexport class WithdrawAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getWithdraws(status?: string): Promise<WithdrawTypes.Withdraw[]> {\r\n const statusQuery = status ? `/${status}` : '';\r\n return this.http.get<WithdrawTypes.Withdraw[]>(`/withdraw${statusQuery}`);\r\n }\r\n\r\n getWithdrawMethods(): Promise<WithdrawTypes.WithdrawMethod[]> {\r\n return this.http.get<WithdrawTypes.WithdrawMethod[]>('/withdraw/methods', 'none');\r\n }\r\n\r\n withdraw(data: WithdrawTypes.WithdrawData): Promise<WithdrawTypes.WithdrawRequest> {\r\n return this.http.post<WithdrawTypes.WithdrawRequest>('/withdraw', data);\r\n }\r\n\r\n rejectWithdraw(withdrawId: number): Promise<{ message?: string, error?: string }> {\r\n return this.http.post<{ message: string, error?: string }>(`/withdraw/cancel`, {withdrawId});\r\n }\r\n\r\n getTrinkparaWithdrawInfo(info: WithdrawTypes.infoType): Promise<any> {\r\n return this.http.get<any>(`/trinkpara/info?info=${info}`);\r\n }\r\n\r\n getAnindaBankList(methodId: number): Promise<WithdrawTypes.AnindaBank[]> {\r\n return this.http.get<WithdrawTypes.AnindaBank[]>(`/aninda/banks?paymentMethodId=${methodId}`);\r\n }\r\n}\r\n","// src/sdk.ts\r\nimport { HttpClient } from './http/client';\r\nimport { JwtAuth } from './auth/jwtAuth';\r\nimport { ApiError, isApiError } from './errors';\r\nimport { AffiliateAPI } from \"./apis/affiliate\";\r\nimport { ContentAPI } from './apis/content';\r\nimport { DepositAPI } from \"./apis/deposit\";\r\nimport { GamesAPI } from './apis/games';\r\nimport { GeolocationAPI } from \"./apis/geo\";\r\nimport { LuckyWheelAPI } from './apis/luckyWheel';\r\nimport { MediaAPI } from \"./apis/media\";\r\nimport { PlayerAPI } from \"./apis/player\";\r\nimport { PromotionsAPI } from './apis/promotions';\r\nimport { RaffleAPI } from \"./apis/raffle\";\r\nimport { RegionAPI } from \"./apis/region\";\r\nimport { SettingsAPI } from \"./apis/settings\";\r\nimport { SportAPI } from \"./apis/sport\";\r\nimport { VoucherAPI } from \"./apis/voucher\";\r\nimport { WithdrawAPI} from \"./apis/withdraw\";\r\n\r\nexport interface SDKConfig {\r\n baseUrl: string;\r\n timeoutMs?: number;\r\n}\r\n\r\nexport class GameSDK {\r\n readonly http: HttpClient;\r\n readonly auth: JwtAuth;\r\n\r\n readonly affiliate: AffiliateAPI;\r\n readonly content: ContentAPI;\r\n readonly deposit: DepositAPI\r\n readonly games: GamesAPI;\r\n readonly geolocation: GeolocationAPI;\r\n readonly luckyWheel: LuckyWheelAPI;\r\n readonly media: MediaAPI;\r\n readonly player: PlayerAPI\r\n readonly promotions: PromotionsAPI;\r\n readonly raffle: RaffleAPI;\r\n readonly region: RegionAPI;\r\n readonly settings: SettingsAPI;\r\n readonly sport: SportAPI;\r\n readonly voucher: VoucherAPI;\r\n readonly withdraw: WithdrawAPI;\r\n\r\n constructor(cfg: SDKConfig) {\r\n this.http = new HttpClient({\r\n baseUrl: cfg.baseUrl.replace(/\\/+$/, ''),\r\n auth: { getToken: () => this.auth.getToken() }, // <-- uses this.auth (defined below)\r\n timeoutMs: cfg.timeoutMs ?? 15000,\r\n });\r\n // pass http to JwtAuth so login can call /auth/login\r\n this.auth = new JwtAuth(this.http);\r\n this.affiliate = new AffiliateAPI(this.http);\r\n this.content = new ContentAPI(this.http);\r\n this.deposit = new DepositAPI(this.http);\r\n this.games = new GamesAPI(this.http);\r\n this.geolocation = new GeolocationAPI(this.http);\r\n this.luckyWheel = new LuckyWheelAPI(this.http);\r\n this.media = new MediaAPI(this.http);\r\n this.player = new PlayerAPI(this.http);\r\n this.promotions = new PromotionsAPI(this.http);\r\n this.raffle = new RaffleAPI(this.http);\r\n this.region = new RegionAPI(this.http);\r\n this.settings = new SettingsAPI(this.http);\r\n this.sport = new SportAPI(this.http);\r\n this.voucher = new VoucherAPI(this.http);\r\n this.withdraw = new WithdrawAPI(this.http);\r\n }\r\n}\r\n\r\nexport const createGameSDK = (cfg: SDKConfig) => new GameSDK(cfg);\r\nexport { JwtAuth, ApiError, isApiError };\r\n","// src/types/auth.ts\r\nimport type {GeoLocation } from './geo';\r\n/** Geo info as returned in `user.geo` (values may be \"undefined\" strings from the IP service) */\r\nexport interface GeoInfo {\r\n ip: string | null | 'undefined';\r\n countryCode: string | null | 'undefined';\r\n status: string; // e.g., \"fail\" | \"success\"\r\n message?: string | null; // e.g., \"invalid query\"\r\n query?: string | null; // e.g., \"undefined\"\r\n}\r\n\r\nexport interface Wallet {\r\n createdAt: string; // ISO date\r\n updatedAt: string; // ISO date\r\n id: number;\r\n name: string; // e.g., \"Main Wallet\"\r\n type: number; // 0 = main, etc.\r\n balance: number;\r\n playerId: number;\r\n}\r\n\r\nexport interface User {\r\n createdAt: string; // ISO date\r\n updatedAt: string; // ISO date\r\n id: number;\r\n username: string;\r\n name: string;\r\n lastname: string;\r\n phone: string | null; // example shows string, keep nullable for safety\r\n email: string;\r\n currencyId: string; // e.g., \"USD\"\r\n status: string; // e.g., \"active\"\r\n referralMax: number;\r\n geo?: GeoLocation; // present in example\r\n googleId: string | null; // can be null\r\n country?: string | null;\r\n city?: string | null;\r\n zipCode?: string | null;\r\n address?: string | null;\r\n dob?: string | null; // ISO date or null\r\n isOnline: boolean;\r\n avatar: number | null; // example shows number; allow null for safety\r\n parentId: number | null; // example shows 1\r\n class: number | null; // class id\r\n wallets: Wallet[]; // at least one wallet in example\r\n}\r\n\r\n/**\r\n * Response of POST /auth/login\r\n * Matches your sample: includes `token`, `socketToken`, and `user`.\r\n */\r\nexport interface AuthResponse {\r\n token: string;\r\n socketToken: string;\r\n user: User;\r\n}\r\n\r\nexport interface pinCodeResponse {\r\n message: string;\r\n token: string;\r\n}\r\nexport interface pinCodeCheckResponse {\r\n message: string;\r\n}\r\n\r\n/** ISO date string, e.g., \"2025-08-26T10:52:58.000Z\" or \"2000-09-11\" */\r\nexport type ISODateString = string;\r\n\r\n/** Same regex as backend: letters, numbers, underscore, hyphen */\r\nexport const USERNAME_REGEX = /^[a-zA-Z0-9_-]+$/;\r\n\r\n/**\r\n * createPlayerValidator\r\n * Backend: geo is a string, class defaults to 1 on server.\r\n */\r\nexport interface CreatePlayerInput {\r\n username: string; // min 4, USERNAME_REGEX\r\n name: string; // max 255\r\n lastname: string; // max 255\r\n email: string; // email, max 255\r\n password: string; // min 4\r\n currencyId: string; // min 2, max 6\r\n geo?: GeoLocation; // optional (string in V1)\r\n class?: number; // optional; server defaults to 1\r\n country?: string; // optional\r\n phone?: string; // optional\r\n zipCode?: string; // optional\r\n address?: string; // optional\r\n dob?: ISODateString; // optional\r\n recaptchaToken: string;\r\n}\r\n\r\n/**\r\n * createPlayerV2Validator\r\n * Note: promo fields can be null; geo is object; country/address/city required.\r\n * \"refferer\" is intentionally spelled to match backend.\r\n */\r\nexport interface CreatePlayerV2Input {\r\n promotionId?: number | null;\r\n promoCode?: string | null;\r\n email: string; // email, max 255\r\n username: string; // min 4, USERNAME_REGEX\r\n password: string; // min 4\r\n name: string; // max 255\r\n lastname: string; // max 255\r\n gender: string; // required (string)\r\n currencyId: string; // min 2, max 6\r\n dob: ISODateString; // required\r\n phone?: string; // optional\r\n country: string; // required\r\n refferer?: number | null; // optional, allow null (spelling matches backend)\r\n address: string; // required\r\n city: string; // required, max 100\r\n zipCode?: string; // optional\r\n geo?: GeoLocation; // optional object\r\n class?: number; // optional; server defaults to 1\r\n recaptchaToken: string;\r\n}\r\n\r\n/**\r\n * createPlayerV2Step2Validator\r\n * Minimal step: email + username + password\r\n */\r\nexport interface CreatePlayerV2Step2Input {\r\n email: string; // email, max 255\r\n username: string; // min 4, USERNAME_REGEX\r\n password: string; // min 4\r\n}\r\n\r\n/**\r\n * Signup response\r\n */\r\nexport interface SignupResponse {\r\n message: string; // e.g., \"Player created successfully\"\r\n player: User;\r\n}\r\n\r\nexport interface RegisterResponse extends SignupResponse, AuthResponse {}\r\nexport interface SignupV2ValidateResponse {\r\n message: string; // e.g., \"Player created successfully\"\r\n}\r\n\r\nexport interface GoogleProfile {\r\n id: string;\r\n email: string;\r\n verified_email: boolean;\r\n name: string;\r\n given_name: string;\r\n family_name: string;\r\n picture: string;\r\n}\r\n\r\nexport interface GoogleLoginRequest {\r\n token: string;\r\n profile: GoogleProfile;\r\n geo?: object;\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/http/client.ts","../src/localStorage.ts","../src/apis/geo.ts","../src/auth/jwtAuth.ts","../src/apis/affiliate.ts","../src/apis/content.ts","../src/apis/deposit.ts","../src/apis/games.ts","../src/apis/luckyWheel.ts","../src/apis/media.ts","../src/apis/player.ts","../src/apis/promotions.ts","../src/apis/raffle.ts","../src/apis/region.ts","../src/apis/settings.ts","../src/apis/sport.ts","../src/apis/voucher.ts","../src/apis/withdraw.ts","../src/ws/socketClient.ts","../src/sdk.ts","../src/types/auth.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["// src/errors.ts\r\n\r\n/** Common shape we expect from the API when an error happens */\r\nexport type ErrorPayload = {\r\n error?: string; // \"Invalid credentials\"\r\n message?: string; // Human-readable details\r\n code?: string | number; // Optional machine code\r\n details?: unknown; // Optional extra data (validation errors, etc.)\r\n [k: string]: unknown;\r\n};\r\n\r\nexport class ApiError extends Error {\r\n /** HTTP status (e.g., 400/401/429/500) or 0 if network failure */\r\n readonly status: number;\r\n /** Requested method+url to aid debugging */\r\n readonly url: string;\r\n readonly method: string;\r\n /** Raw payload (JSON if available; else text) */\r\n readonly payload?: ErrorPayload | string | null | undefined;\r\n /** Useful server-provided correlator (if any) */\r\n readonly requestId?: string | null;\r\n\r\n constructor(params: {\r\n status: number;\r\n url: string;\r\n method: string;\r\n message: string;\r\n payload?: ErrorPayload | string | null;\r\n requestId?: string | null;\r\n }) {\r\n super(params.message);\r\n this.name = 'ApiError';\r\n this.status = params.status;\r\n this.url = params.url;\r\n this.method = params.method;\r\n this.payload = params.payload;\r\n this.requestId = params.requestId ?? null;\r\n }\r\n}\r\n\r\n/** TS type guard */\r\nexport function isApiError(err: unknown): err is ApiError {\r\n return !!err && typeof err === 'object' && (err as any).name === 'ApiError';\r\n}\r\n","// src/http/client.ts\r\nimport { ApiError, type ErrorPayload } from '../errors';\r\n\r\nexport type AuthPolicy = 'required' | 'optional' | 'none';\r\n\r\nexport interface ClientOptions {\r\n baseUrl: string;\r\n auth?: { getToken: () => string | null };\r\n defaultHeaders?: Record<string, string>;\r\n fetchFn?: typeof fetch;\r\n timeoutMs?: number;\r\n}\r\n\r\nexport class HttpClient {\r\n constructor(private opts: ClientOptions) {}\r\n\r\n setAuthProvider(auth?: { getToken: () => string | null }) {\r\n if (auth) {\r\n this.opts.auth = auth;\r\n }\r\n }\r\n\r\n async request<T>(\r\n path: string,\r\n init: RequestInit = {},\r\n authPolicy: AuthPolicy = 'optional'\r\n ): Promise<T> {\r\n const url = joinUrl(this.opts.baseUrl, path);\r\n const method = (init.method || 'GET').toUpperCase();\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), this.opts.timeoutMs ?? 15000);\r\n\r\n try {\r\n const headers = new Headers(this.opts.defaultHeaders || {});\r\n // attach JWT if needed\r\n if (authPolicy !== 'none') {\r\n const token = this.opts.auth?.getToken?.() ?? null;\r\n if (token) headers.set('Authorization', `JWT ${token}`);\r\n if (authPolicy === 'required' && !token) {\r\n throw new ApiError({\r\n status: 401,\r\n url,\r\n method,\r\n message: 'Authentication required',\r\n payload: { code: 'AUTH_REQUIRED' },\r\n });\r\n }\r\n }\r\n if (init.body && !headers.has('Content-Type')) headers.set('Content-Type', 'application/json');\r\n\r\n // Merge headers last to allow per-request overrides\r\n const res = await (this.opts.fetchFn ?? fetch)(url, {\r\n ...init,\r\n headers: { ...Object.fromEntries(headers.entries()), ...(init.headers || {}) },\r\n signal: controller.signal,\r\n });\r\n\r\n const reqId = res.headers.get('x-request-id') || res.headers.get('x-correlation-id') || null;\r\n const contentType = res.headers.get('content-type') || '';\r\n const isJson = contentType.includes('application/json');\r\n\r\n if (!res.ok) {\r\n const payload = await readBody(res, isJson);\r\n const message =\r\n (isJson && typeof payload === 'object' && payload && ('message' in payload || 'error' in payload))\r\n ? String((payload as ErrorPayload).message ?? (payload as ErrorPayload).error)\r\n : res.statusText || `HTTP ${res.status}`;\r\n\r\n throw new ApiError({\r\n status: res.status,\r\n url,\r\n method,\r\n message,\r\n payload: (isJson ? (payload as ErrorPayload) : payload) ?? null,\r\n requestId: reqId,\r\n });\r\n }\r\n\r\n // success\r\n if (isJson) return (await res.json()) as T;\r\n // no body / text fallback\r\n const text = await res.text();\r\n return (text ? (text as unknown as T) : (null as unknown as T));\r\n } catch (err: any) {\r\n if (err?.name === 'AbortError') {\r\n throw new ApiError({\r\n status: 408,\r\n url,\r\n method,\r\n message: 'Request timeout',\r\n payload: { code: 'TIMEOUT' },\r\n });\r\n }\r\n if (err instanceof ApiError) throw err;\r\n\r\n // network error / CORS / DNS, etc.\r\n throw new ApiError({\r\n status: 0,\r\n url,\r\n method,\r\n message: err?.message || 'Network error',\r\n payload: { code: 'NETWORK_ERROR' },\r\n });\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n\r\n get<T>(path: string, authPolicy?: AuthPolicy) {\r\n return this.request<T>(path, { method: 'GET' }, authPolicy);\r\n }\r\n post<T>(path: string, body?: unknown, authPolicy?: AuthPolicy) {\r\n return this.request<T>(\r\n path,\r\n { method: 'POST', body: body !== undefined ? JSON.stringify(body) : null },\r\n authPolicy\r\n );\r\n }\r\n patch<T>(path: string, body?: unknown, authPolicy?: AuthPolicy) {\r\n return this.request<T>(\r\n path,\r\n { method: 'PATCH', body: body !== undefined ? JSON.stringify(body) : null },\r\n authPolicy\r\n );\r\n }\r\n delete<T>(path: string, authPolicy?: AuthPolicy) {\r\n return this.request<T>(path, { method: 'DELETE' }, authPolicy);\r\n }\r\n}\r\n\r\nfunction joinUrl(base: string, path: string) {\r\n return `${base.replace(/\\/+$/, '')}${path.startsWith('/') ? '' : '/'}${path}`;\r\n}\r\n\r\nasync function readBody(res: Response, isJson: boolean): Promise<ErrorPayload | string | null> {\r\n try {\r\n return isJson ? ((await res.json()) as ErrorPayload) : await res.text();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","import type {User} from \"./types/auth\";\r\n\r\nexport class LocalStorage {\r\n protected tokenKey = 'gs.token';\r\n protected userDataKey = 'gs.userData';\r\n protected avatarKey = 'gs.avatar';\r\n protected socketTokenKey = 'gs.socketToken';\r\n protected pinKey = 'gs.pin';\r\n protected pinTokenKey = 'gs.pinToken';\r\n protected geoLocalStorageKey = 'gs.visitorLocation';\r\n\r\n private isLocalStorageAvailable(): boolean {\r\n return typeof localStorage !== 'undefined';\r\n }\r\n\r\n setToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.tokenKey, token);\r\n }\r\n }\r\n\r\n getToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.tokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setUser(data: User) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.userDataKey, JSON.stringify(data));\r\n }\r\n }\r\n\r\n getUser(): User | null {\r\n if (this.isLocalStorageAvailable()) {\r\n const data = localStorage.getItem(this.userDataKey);\r\n if (data) {\r\n try {\r\n return JSON.parse(data) as User;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n setAvatar(avatarUrl: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.avatarKey, avatarUrl);\r\n }\r\n }\r\n\r\n getAvatar(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.avatarKey);\r\n }\r\n return null;\r\n }\r\n\r\n setSocketToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.socketTokenKey, token);\r\n }\r\n }\r\n\r\n getSocketToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.socketTokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setPin(pin: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.pinKey, pin);\r\n }\r\n }\r\n\r\n getPin(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.pinKey);\r\n }\r\n return null;\r\n }\r\n\r\n setPinToken(token: string) {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.setItem(this.pinTokenKey, token);\r\n }\r\n }\r\n\r\n getPinToken(): string | null {\r\n if (this.isLocalStorageAvailable()) {\r\n return localStorage.getItem(this.pinTokenKey);\r\n }\r\n return null;\r\n }\r\n\r\n setGeolocation(data: any) {\r\n if (this.isLocalStorageAvailable()) {\r\n data.timestamp = Date.now();\r\n localStorage.setItem(this.geoLocalStorageKey, JSON.stringify(data));\r\n }\r\n }\r\n\r\n getGeolocation(): any | null {\r\n if (this.isLocalStorageAvailable()) {\r\n const data = localStorage.getItem(this.geoLocalStorageKey);\r\n if (data) {\r\n try {\r\n const parsedData = JSON.parse(data);\r\n if (parsedData.timestamp) {\r\n const now = Date.now();\r\n const age = now - parsedData.timestamp;\r\n const cacheTime = 10 * 60 * 1000; // 10 minutes\r\n if (age > cacheTime) {\r\n return null;\r\n }\r\n }\r\n return parsedData;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n clear() {\r\n if (this.isLocalStorageAvailable()) {\r\n localStorage.removeItem(this.tokenKey);\r\n localStorage.removeItem(this.userDataKey);\r\n localStorage.removeItem(this.avatarKey);\r\n localStorage.removeItem(this.socketTokenKey);\r\n localStorage.removeItem(this.pinKey);\r\n localStorage.removeItem(this.pinTokenKey);\r\n localStorage.removeItem(this.geoLocalStorageKey);\r\n }\r\n }\r\n}\r\n\r\nexport const storage = new LocalStorage();\r\n","import { storage } from '../localStorage';\r\nimport type { HttpClient } from '../http/client';\r\nimport type { FreeIpApiGeo, FailObj } from '../types/geo';\r\nexport class GeolocationAPI {\r\n constructor(private http: HttpClient) {}\r\n private failObj = {\r\n ip: \"0.0.0.0\",\r\n countryCode: \"undefined\",\r\n status: \"fail\",\r\n message: \"invalid query\",\r\n query: \"undefined\"\r\n };\r\n async getGeolocationFromAPI(): Promise<FreeIpApiGeo | undefined> {\r\n try {\r\n const geo = await this.http.get<FreeIpApiGeo>('/geo/location', 'none');\r\n if (geo.ipAddress && geo.ipVersion) {\r\n delete geo.ipVersion;\r\n delete geo.ipAddress;\r\n storage.setGeolocation(geo);\r\n return geo;\r\n }\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n async getGeolocation(): Promise<FreeIpApiGeo | FailObj> {\r\n const geoData = storage.getGeolocation();\r\n if (geoData) {\r\n try {\r\n const geo = JSON.parse(geoData);\r\n if (geo && geo.ipVersion) {\r\n delete geo.ipVersion;\r\n delete geo.ipAddress;\r\n return geo;\r\n } else {\r\n return this.failObj;\r\n }\r\n } catch {\r\n return this.failObj;\r\n }\r\n } else {\r\n return await this.getGeolocationFromAPI() || this.failObj;\r\n }\r\n }\r\n\r\n async getCountryCode(): Promise<string | false> {\r\n const geo = await this.getGeolocation();\r\n if (geo && geo.countryCode && geo.countryCode === 'undefined') {\r\n return geo.countryCode;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","// src/auth/jwtAuth.ts\r\nimport type {\r\n AuthResponse,\r\n pinCodeResponse,\r\n pinCodeCheckResponse,\r\n CreatePlayerInput,\r\n CreatePlayerV2Input,\r\n CreatePlayerV2Step2Input,\r\n GoogleLoginRequest,\r\n SignupResponse, SignupV2ValidateResponse,\r\n RegisterResponse\r\n} from '../types/auth';\r\nimport type {AuthPolicy, HttpClient} from '../http/client';\r\nimport {GeolocationAPI} from \"../apis/geo\";\r\nimport {storage} from '../localStorage';\r\n\r\nexport class JwtAuth {\r\n private token: string | null = null;\r\n private user: AuthResponse['user'] | null = null;\r\n\r\n constructor(\r\n private client: HttpClient,\r\n ) {\r\n this.token = storage.getToken();\r\n this.user = storage.getUser();\r\n }\r\n\r\n setToken(token: string | null) {\r\n if (token) {\r\n storage.setToken(token);\r\n this.token = token;\r\n } else {\r\n storage.clear();\r\n }\r\n }\r\n setUser(user: AuthResponse['user'], token: string) {\r\n storage.setUser(user);\r\n storage.setToken(token);\r\n this.user = user;\r\n this.token = token;\r\n }\r\n\r\n async login(username: string, password: string, recaptchaToken: string): Promise<AuthResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n const payload = { username, password, recaptchaToken };\r\n const res = await this.client.post<AuthResponse>('/auth/login', payload, authPolicy);\r\n this.setUser(res.user, res.token);\r\n storage.setSocketToken(res.socketToken);\r\n return res;\r\n }\r\n\r\n async GoogleLogin(data: GoogleLoginRequest): Promise<AuthResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const res = await this.client.post<AuthResponse>('/auth/google/signin', data, authPolicy);\r\n\r\n this.setUser(res.user, res.token);\r\n return res;\r\n }\r\n\r\n async forgetPassword(email: string): Promise<void> {\r\n const authPolicy: AuthPolicy = 'none';\r\n await this.client.post<void>('/auth/forgot-password', { email }, authPolicy);\r\n }\r\n\r\n async register(data: CreatePlayerInput, param?: string | undefined): Promise<RegisterResponse | SignupResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n let apiRouter = '/auth/signup';\r\n if (param) {\r\n apiRouter += `?ref=${param}`\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const registerData = await this.client.post<SignupResponse>(apiRouter, data, authPolicy);\r\n if (registerData.player) {\r\n const loginData = await this.login(data.username, data.password, data.recaptchaToken);\r\n return {\r\n ...registerData,\r\n ...loginData,\r\n };\r\n } else {\r\n return {\r\n ...registerData,\r\n }\r\n }\r\n }\r\n\r\n async registerV2(data: CreatePlayerV2Input, param?: string | undefined): Promise<RegisterResponse | SignupResponse> {\r\n const geo = new GeolocationAPI(this.client);\r\n const geoData = await geo.getGeolocation();\r\n if (geoData) {\r\n data.geo = geoData;\r\n }\r\n let apiRouter = '/auth/signupv2';\r\n if (param) {\r\n apiRouter += `?ref=${param}`\r\n }\r\n const authPolicy: AuthPolicy = 'none';\r\n const registerData = await this.client.post<SignupResponse>(apiRouter, data, authPolicy);\r\n if (registerData.player) {\r\n const loginData = await this.login(data.username, data.password, data.recaptchaToken);\r\n return {\r\n ...registerData,\r\n ...loginData,\r\n };\r\n } else {\r\n return {\r\n ...registerData\r\n }\r\n }\r\n }\r\n\r\n async registerV2Validate(data: CreatePlayerV2Step2Input ): Promise<SignupV2ValidateResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<SignupV2ValidateResponse>('/auth/signupv2/validate-username-email', data, authPolicy);\r\n }\r\n\r\n clear() {\r\n this.setToken(null);\r\n this.user = null;\r\n }\r\n\r\n async logout(): Promise<void> {\r\n const authPolicy: AuthPolicy = 'required';\r\n await this.client.post<void>('/auth/logout', {}, authPolicy);\r\n this.clear();\r\n }\r\n async pinCode(pin: string): Promise<pinCodeResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<pinCodeResponse>('/auth/website', { pin }, authPolicy);\r\n }\r\n async pinCheck(token: string): Promise<pinCodeCheckResponse> {\r\n const authPolicy: AuthPolicy = 'none';\r\n return await this.client.post<pinCodeCheckResponse>('/auth/website/check', { token }, authPolicy);\r\n }\r\n\r\n getToken(): string | null {\r\n if (!this.token) {\r\n this.token = storage.getToken();\r\n }\r\n return this.token;\r\n }\r\n\r\n getUser(): AuthResponse['user'] | null {\r\n if (!this.user) {\r\n this.user = storage.getUser();\r\n }\r\n return this.user;\r\n }\r\n isAuthenticated(): boolean {\r\n const Token = this.token || this.getToken();\r\n return !!Token;\r\n }\r\n}\r\n","// src/apis/affiliate.ts\r\nimport {HttpClient} from '../http/client';\r\nimport * as AffiliateTypes from '../types/affiliate';\r\nimport {GetPrizes, GetPrizesRequest, GetPrizesResult, Rewards, Summery} from \"../types/affiliate\";\r\n\r\nexport class AffiliateAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n async generateReferralCode(description: string): Promise<AffiliateTypes.GenerateReferralCode> {\r\n return await this.http.post<AffiliateTypes.GenerateReferralCode>(`/referral/generate`, {description});\r\n }\r\n\r\n async getReferralCode(): Promise<AffiliateTypes.GetReferralCode> {\r\n return await this.http.get<AffiliateTypes.GetReferralCode>(`/referral/get`);\r\n }\r\n\r\n async getReferralCount(): Promise<number> {\r\n return await this.http.get<number>(`/referral/max-codes`);\r\n }\r\n\r\n async getReferralStatus(): Promise<AffiliateTypes.ReferralStatus> {\r\n return await this.http.get<AffiliateTypes.ReferralStatus>(`/referral/status`);\r\n }\r\n\r\n async getReferralFriends(page: number, limit: number): Promise<AffiliateTypes.ReferralFriends> {\r\n return await this.http.get<AffiliateTypes.ReferralFriends>(`/referral/friends?page=${page}&limit=${limit}`);\r\n }\r\n\r\n async getBannerImage(lang: string, key: string): Promise<AffiliateTypes.BannerImage> {\r\n return await this.http.get<AffiliateTypes.BannerImage>(`/website-settings?language=${lang}&key=${key}`);\r\n }\r\n\r\n async getRewards(): Promise<AffiliateTypes.Rewards> {\r\n return await this.http.get<AffiliateTypes.Rewards>(`/referral/rewards`);\r\n }\r\n\r\n async getAvailablePrizes(): Promise<AffiliateTypes.AvailablePrizes> {\r\n return await this.http.get<AffiliateTypes.AvailablePrizes>(`/referral/available-prizes`);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async getPrizes(params: AffiliateTypes.GetPrizesRequest): Promise<AffiliateTypes.GetPrizes> {\r\n const queryParams = new URLSearchParams();\r\n for (const key in params) {\r\n if (params[key as keyof GetPrizesRequest] !== undefined) {\r\n queryParams.append(key, String(params[key as keyof GetPrizesRequest]));\r\n }\r\n }\r\n const query = queryParams.toString();\r\n return await this.http.get<AffiliateTypes.GetPrizes>(`/referral/prizes?${query}`);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n async convert(data: AffiliateTypes.ConvertRequest): Promise<{message: string}> {\r\n return await this.http.post<{message: string}>(`/referral/convert`, data);\r\n }\r\n\r\n async getSummary(): Promise<AffiliateTypes.Summery> {\r\n return await this.http.get(`/referral/summary`);\r\n }\r\n}\r\n","// src/apis/content.ts (public: no auth)\r\nimport { HttpClient } from '../http/client';\r\nimport * as contentTypes from '../types/content';\r\n\r\nexport class ContentAPI {\r\n constructor(private http: HttpClient) {}\r\n list() { return this.http.get<contentTypes.ContentPage[]>('/content-pages', 'none'); }\r\n get(slug: string) { return this.http.get<contentTypes.ContentPage>(`/content-pages/${slug}`, 'none'); }\r\n getAnnouncements() { return this.http.get<contentTypes.AnnouncementsResponse>('/announcements', 'none'); }\r\n}\r\n","// src/apis/deposit.ts\r\nimport {HttpClient} from '../http/client';\r\nimport { ChargeData, PaymentMethodSchema, GetDeposits } from '../types/deposit';\r\nexport class DepositAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n charge(data: ChargeData) {\r\n return this.http.post< string >('/deposit/charge', data, 'required');\r\n }\r\n\r\n getPaymentMethods():Promise<PaymentMethodSchema[]>{\r\n return this.http.get<PaymentMethodSchema[]>('/payment-methods', 'required');\r\n }\r\n\r\n getDeposits(status = 'pending', page = 1, limit = 20): Promise<GetDeposits> {\r\n return this.http.get<GetDeposits>(`/payment/${status}?page=${page}&limit=${limit}`, 'required');\r\n }\r\n}\r\n","import { HttpClient } from '../http/client';\r\nimport {\r\n GameCategoriesResponse,\r\n SearchRequest,\r\n GameSearchResponse, GamesSearchResponse, SetFavoriteGamesResponse,\r\n FavoriteGamesResponse, recentBigWinsResponse, GlobalFavorites, Providers, CategoryProvider,\r\n TopRated, Lobby\r\n} from '../types/game';\r\nimport {GeolocationAPI} from \"./geo\";\r\n\r\nexport interface GameLinkResponse { message: string; gameLink: string; isFavorite?: boolean; }\r\n\r\nexport class GamesAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n /** Public: search games */\r\n search(request: SearchRequest): Promise<GamesSearchResponse> {\r\n return this.http.get<GamesSearchResponse>(`/games/search?${new URLSearchParams(request as any).toString()}`, 'none');\r\n }\r\n\r\n getCategories(): Promise<GameCategoriesResponse> {\r\n return this.http.get<GameCategoriesResponse>('/games/categories', 'none');\r\n }\r\n\r\n /** Requires auth: player link */\r\n getLink(gameId: string) {\r\n return this.http.post<GameLinkResponse>(`/games/getLink`, {gameId}, 'required');\r\n }\r\n\r\n /** Public: demo link */\r\n getDemoLink(gameExternalId: string) {\r\n return this.http.post<GameLinkResponse>('/games/getDemoLink', {gameExternalId}, 'none');\r\n }\r\n\r\n setFavorite(gameId: number, isFavorite: boolean): Promise<SetFavoriteGamesResponse> {\r\n return this.http.post<SetFavoriteGamesResponse>('/games/favorites', {gameId, isFavorite}, 'required');\r\n }\r\n getFavorite(): Promise<FavoriteGamesResponse[]> {\r\n return this.http.get<FavoriteGamesResponse[]>('/games/player-favorites', 'required');\r\n }\r\n getRecentBigWins(category: string): Promise<recentBigWinsResponse[]> {\r\n return this.http.get<recentBigWinsResponse[]>(`/games/recent-big-wins?category=${category}`, 'none');\r\n }\r\n getRecent(page=1, limit=10): Promise<GamesSearchResponse> {\r\n return this.http.get<GamesSearchResponse>(`/games/recent?page=${page}&limit=${limit}`);\r\n }\r\n\r\n getGlobalFavorites(): Promise<GlobalFavorites> {\r\n return this.http.get<GlobalFavorites>('/games/global-favorites', 'none');\r\n }\r\n getTopRated():Promise<{ topRated :TopRated[] }>{\r\n const geo = new GeolocationAPI(this.http);\r\n const countryCode = geo.getCountryCode();\r\n let url = '/games/top-rated';\r\n if (countryCode) {\r\n url += `?region=${countryCode}`;\r\n }\r\n return this.http.get<{ topRated :TopRated[] }>(url, 'none');\r\n }\r\n getProviders(): Promise<Providers> {\r\n return this.http.get<Providers>('/games/providers', 'none');\r\n }\r\n getCategoriesProviders(): Promise<{categoryProviders: CategoryProvider[] }> {\r\n return this.http.get<{categoryProviders: CategoryProvider[] }>('/games/providers/categories', 'none');\r\n }\r\n getLobby(): Promise<Lobby[]> {\r\n const geo = new GeolocationAPI(this.http);\r\n const countryCode = geo.getCountryCode();\r\n let url = '/games/lobby';\r\n if (countryCode) {\r\n url += `?region=${countryCode}`;\r\n }\r\n return this.http.get<Lobby[]>(url, 'none');\r\n }\r\n\r\n}\r\n","// src/apis/lucky.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as LuckyWheelTypes from '../types/luckyWheel';\r\nexport class LuckyWheelAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n getStatistics(): Promise<LuckyWheelTypes.LuckyWheelStatistics> {\r\n return this.http.get<LuckyWheelTypes.LuckyWheelStatistics>('/lucky-wheel/statistics', 'required');\r\n }\r\n getWinners():Promise<LuckyWheelTypes.LuckyWheelWinners[]> {\r\n return this.http.get<LuckyWheelTypes.LuckyWheelWinners[]>('/lucky-wheel/get-winners?offset=1&limit=100', 'none');\r\n }\r\n getPrizes():Promise<LuckyWheelTypes.LuckyWheelPrize[]>{\r\n return this.http.get<LuckyWheelTypes.LuckyWheelPrize[]>('/lucky-wheel/get-prizes');\r\n }\r\n getStatus():Promise<LuckyWheelTypes.LuckyWheelStatus>{\r\n return this.http.get<LuckyWheelTypes.LuckyWheelStatus>('/lucky-wheel/status');\r\n }\r\n play(data: { luckyWheelId: number }):Promise<LuckyWheelTypes.LuckyWheelSpinPlay | LuckyWheelTypes.LuckyWheelSpinPlayNA>{\r\n return this.http.post<LuckyWheelTypes.LuckyWheelSpinPlay | LuckyWheelTypes.LuckyWheelSpinPlayNA>('/lucky-wheel/play', data);\r\n }\r\n collect(data: { collectHash: string }):Promise<LuckyWheelTypes.LuckyWheelCollect>{\r\n return this.http.post<LuckyWheelTypes.LuckyWheelCollect>('/lucky-wheel/collect', data);\r\n }\r\n\r\n}\r\n","// src/apis/media.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as MediaTypes from '../types/media';\r\nexport class MediaAPI {\r\n constructor(private http: HttpClient) {}\r\n upload(file: File): Promise<MediaTypes.uploadResponse> {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n formData.append('upload_preset', 'demo');\r\n return this.http.post<MediaTypes.uploadResponse>('/media/upload', formData, 'none');\r\n }\r\n getFileUrl(filePath: string): Promise<string> {\r\n return this.http.get<string>(`/media/get-file-url?filePath=${filePath}`)\r\n }\r\n\r\n}\r\n","// src/apis/player.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as PlayerTypes from '../types/player';\r\nimport {BalanceHistory, GameHistory} from \"../types/player\";\r\n\r\nexport class PlayerAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n changePassword(data: PlayerTypes.ChangePasswordData): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/player/change-password', data);\r\n }\r\n getBalanceHistory(data: PlayerTypes.GetBalanceHistoryQuery): Promise<PlayerTypes.BalanceHistory[]> {\r\n const queryParams = new URLSearchParams();\r\n if (data.limit !== undefined) queryParams.append('limit', data.limit.toString());\r\n if (data.startDate !== undefined) queryParams.append('startDate', data.startDate);\r\n if (data.endDate !== undefined) queryParams.append('endDate', data.endDate);\r\n const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\r\n return this.http.get<PlayerTypes.BalanceHistory[]>(`/player/balance-history${queryString}`);\r\n }\r\n getGameHistory(data: PlayerTypes.GetBalanceHistoryQuery): Promise<GameHistory[]> {\r\n const queryParams = new URLSearchParams();\r\n if (data.limit !== undefined) queryParams.append('limit', data.limit.toString());\r\n if (data.startDate !== undefined) queryParams.append('startDate', data.startDate);\r\n if (data.endDate !== undefined) queryParams.append('endDate', data.endDate);\r\n const queryString = queryParams.toString() ? `?${queryParams.toString()}` : '';\r\n return this.http.get<GameHistory[]>(`/player/game-transaction${queryString}`);\r\n }\r\n verifyEmail(data: PlayerTypes.EmailVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/email/send', data);\r\n }\r\n verifyEmailCode(data: { verificationCode: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/email/confirm', data);\r\n }\r\n verifyPhone(data: PlayerTypes.PhoneVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/send', data);\r\n }\r\n verifyPhoneCode(data: { verificationCode: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/confirm', data);\r\n }\r\n verifyPhoneSignup(data: PlayerTypes.PhoneVerifyProps): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/send', data);\r\n }\r\n verifyPhoneCodeSignup(data: { verificationCode: string, verificationToken: string }): Promise<{ message: string }> {\r\n return this.http.post<{ message: string}>('/verify/phone/confirm', data);\r\n }\r\n getVerificationStatus(): Promise<PlayerTypes.VerificationStatus[]> {\r\n return this.http.get<PlayerTypes.VerificationStatus[]>('/player/verification-status');\r\n }\r\n getAvatars(): Promise<PlayerTypes.Avatar[]> {\r\n return this.http.get<PlayerTypes.Avatar[]>('/avatars/get');\r\n }\r\n changeAvatar(data: {avatarId: number }): Promise<{ message: string, avatar: PlayerTypes.Avatar }> {\r\n return this.http.post<{ message: string, avatar: PlayerTypes.Avatar }>('/avatars/set', data);\r\n }\r\n getPlayerKycDocuments(): Promise<PlayerTypes.KycDocument[]> {\r\n return this.http.get<PlayerTypes.KycDocument[]>('/player/kyc-documents');\r\n }\r\n createPlayerKycDocument(data: FormData): Promise<PlayerTypes.KycDocument> {\r\n return this.http.post<PlayerTypes.KycDocument>('/player/kyc-documents', data);\r\n }\r\n createPlayerTags(data: {key: string, value: string}[]): Promise<{ message: string }> {\r\n const requestData = {\r\n tags: data\r\n };\r\n return this.http.post<{ message: string}>('/player/tags', requestData);\r\n }\r\n updateProfile(data: PlayerTypes.UpdateProfileData): Promise<PlayerTypes.ProfileData> {\r\n return this.http.patch<PlayerTypes.ProfileData>('/player/profile', data);\r\n }\r\n\r\n}\r\n","// src/apis/promotions.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as PromotionsTypes from '../types/promotions';\r\nimport {Promotion} from \"../types/promotions\";\r\nexport class PromotionsAPI {\r\n constructor(private http: HttpClient) {}\r\n getActive(): Promise<PromotionsTypes.Promotion[]> {\r\n return this.http.get<PromotionsTypes.Promotion[]>('/promotions/active');\r\n }\r\n getPublic(): Promise<PromotionsTypes.Promotion[]> {\r\n return this.http.get<PromotionsTypes.Promotion[]>('/promotions/public', 'none');\r\n }\r\n getPromotion(id:string): Promise<PromotionsTypes.Promotion> {\r\n return this.http.get<PromotionsTypes.Promotion>(`/promotions/${id}`, 'none');\r\n }\r\n getProgress(): Promise<PromotionsTypes.Progress> {\r\n return this.http.get<PromotionsTypes.Progress>('/promotions/progress');\r\n }\r\n activateBonus(id:string): Promise<{message:string; error?:string}> {\r\n return this.http.post<{message:string; error?:string}>(`/bonus/activate/${id}`, { });\r\n }\r\n cancelBonus(id:string): Promise<{message:string; error?:string}> {\r\n return this.http.delete<{message:string; error?:string}>(`/bonus/cancel/${id}`);\r\n }\r\n}\r\n","// src/apis/raffle.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as RaffleTypes from '../types/raffle';\r\n\r\nexport class RaffleAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getTickets(): Promise<RaffleTypes.GetRaffleTicketsResponse[]> {\r\n return this.http.get<RaffleTypes.GetRaffleTicketsResponse[]>('/raffle/tickets');\r\n }\r\n\r\n getPrizes(): Promise<RaffleTypes.RafflePrize[]> {\r\n return this.http.get<RaffleTypes.RafflePrize[]>('/raffle/prizes');\r\n }\r\n\r\n getHistory(): Promise<RaffleTypes.RafflePrizesHistoryResponse> {\r\n return this.http.get<RaffleTypes.RafflePrizesHistoryResponse>('/raffle/history');\r\n }\r\n\r\n getActiveRaffle(): Promise<RaffleTypes.ActiveRaffle[] | null> {\r\n return this.http.get<RaffleTypes.ActiveRaffle[] | null>('/raffle/current');\r\n }\r\n\r\n purchaseTickets(data: { raffleId: number; ticketAmount: number }): Promise<RaffleTypes.PurchaseTicket> {\r\n return this.http.post<RaffleTypes.PurchaseTicket>('/raffle/purchase', data);\r\n }\r\n}\r\n","// src/apis/region.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as RegionTypes from '../types/region';\r\n\r\nexport class RegionAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getDepositRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions/deposit');\r\n }\r\n\r\n getWithdrawRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions/withdraw');\r\n }\r\n\r\n getRegions(): Promise<RegionTypes.Region[]> {\r\n return this.http.get<RegionTypes.Region[]>('/regions', 'none');\r\n }\r\n\r\n getBlockedCountries(): Promise<RegionTypes.BlockedCountry[]> {\r\n return this.http.get<RegionTypes.BlockedCountry[]>('/regions/blocked-countries', 'none');\r\n }\r\n}\r\n","// src/apis/settings.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as SettingsTypes from '../types/settings';\r\nimport {CurrencyRates} from \"../types/settings\";\r\n\r\nexport class SettingsAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getSettings(): Promise<SettingsTypes.Settings> {\r\n return this.http.get<SettingsTypes.Settings>('/api/v1/settings', 'none');\r\n }\r\n getBanner(lang: string): Promise<SettingsTypes.Banner> {\r\n return this.http.get<SettingsTypes.Banner>(`/banners/get/${lang}`, 'none');\r\n }\r\n getContent(): Promise<SettingsTypes.Content[]> {\r\n return this.http.get<SettingsTypes.Content[]>('/content-pages', 'none');\r\n }\r\n getContentItem(type:string, lang:string): Promise<SettingsTypes.Content> {\r\n return this.http.get<SettingsTypes.Content>(`/content-pages/${type}/${lang}`, 'none');\r\n }\r\n getAvatar(): Promise<SettingsTypes.Avatar[]> {\r\n return this.http.get<SettingsTypes.Avatar[]>('/avatars/get', 'none');\r\n }\r\n getPreferences(): Promise<SettingsTypes.Preferences> {\r\n return this.http.get<SettingsTypes.Preferences>('/player/preferences');\r\n }\r\n updatePreferences(data: Partial<SettingsTypes.Preferences>): Promise<SettingsTypes.Preferences> {\r\n return this.http.patch<SettingsTypes.Preferences>('/player/preferences', data);\r\n }\r\n getCurrencies(): Promise<SettingsTypes.Currency[]> {\r\n return this.http.get<SettingsTypes.Currency[]>('/currencies/get', 'none');\r\n }\r\n getCurrenciesRates(): Promise<SettingsTypes.CurrencyRates> {\r\n return this.http.get<SettingsTypes.CurrencyRates>('/currencies/rates', 'none');\r\n }\r\n getWebSetting(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=footerCasinoItems&key[]=footerSportsItems&key[]=footerSocialMedia&key[]=footerPromoItems&key[]=footerSupportLegalItems&key[]=footerAboutUsItems&key[]=footerAppLinks`, 'none');\r\n }\r\n getWebSettingProviders(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=sectionProviders`, 'none');\r\n }\r\n getWebSettingPin(): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?key[]=isCodeProtected`, 'none');\r\n }\r\n getWebSettingReferralRules(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_rules`, 'none');\r\n }\r\n getWebSettingReferralFaq(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_faq`, 'none');\r\n }\r\n getWebSettingReferralLearnMore(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_learn_more`, 'none');\r\n }\r\n getWebSettingReferralBanners(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_assets`, 'none');\r\n }\r\n getWebSettingSlotsCategories(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=slotsCategories`, 'none');\r\n }\r\n getWebSettingLiveCasinoCategories(lang: string): Promise<SettingsTypes.WebSetting[]>{\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=liveCasinoCategories`, 'none');\r\n }\r\n getWebsiteAllowedPlayerTags(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=allowedPlayerTags`, 'none');\r\n }\r\n getSupportEmail(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=supportEmail`, 'none');\r\n }\r\n}\r\n","// src/apis/sport.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as SportTypes from '../types/sport';\r\n\r\nexport class SportAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n getConfig(): Promise<SportTypes.SportConfig> {\r\n return this.http.get<SportTypes.SportConfig>('/sport/get-sport-config');\r\n }\r\n}\r\n","// src/apis/voucher.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as VoucherTypes from '../types/voucher';\r\n\r\nexport class VoucherAPI {\r\n constructor(private http: HttpClient) {}\r\n\r\n redeemVoucher(code: string): Promise<VoucherTypes.RedeemResponse> {\r\n return this.http.post<VoucherTypes.RedeemResponse>('/vouchers/redeem', { code });\r\n }\r\n checkVoucher(code: string): Promise<VoucherTypes.CheckResponse> {\r\n return this.http.get<VoucherTypes.CheckResponse>(`/vouchers/check/${code}`, 'none');\r\n }\r\n}\r\n","// src/apis/withdraw.ts\r\nimport { HttpClient } from '../http/client';\r\nimport * as WithdrawTypes from '../types/withdraw';\r\nimport {WithdrawData, WithdrawRequest} from \"../types/withdraw\";\r\n\r\nexport class WithdrawAPI {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getWithdraws(status?: string): Promise<WithdrawTypes.Withdraw[]> {\r\n const statusQuery = status ? `/${status}` : '';\r\n return this.http.get<WithdrawTypes.Withdraw[]>(`/withdraw${statusQuery}`);\r\n }\r\n\r\n getWithdrawMethods(): Promise<WithdrawTypes.WithdrawMethod[]> {\r\n return this.http.get<WithdrawTypes.WithdrawMethod[]>('/withdraw/methods', 'none');\r\n }\r\n\r\n withdraw(data: WithdrawTypes.WithdrawData): Promise<WithdrawTypes.WithdrawRequest> {\r\n return this.http.post<WithdrawTypes.WithdrawRequest>('/withdraw', data);\r\n }\r\n\r\n rejectWithdraw(withdrawId: number): Promise<{ message?: string, error?: string }> {\r\n return this.http.post<{ message: string, error?: string }>(`/withdraw/cancel`, {withdrawId});\r\n }\r\n\r\n getTrinkparaWithdrawInfo(info: WithdrawTypes.infoType): Promise<any> {\r\n return this.http.get<any>(`/trinkpara/info?info=${info}`);\r\n }\r\n\r\n getAnindaBankList(methodId: number): Promise<WithdrawTypes.AnindaBank[]> {\r\n return this.http.get<WithdrawTypes.AnindaBank[]>(`/aninda/banks?paymentMethodId=${methodId}`);\r\n }\r\n}\r\n","// src/ws/socketClient.ts\r\nimport type { SocketClientOptions, SocketMessage, SocketStatus, SocketEventHandler } from '../types/ws';\r\n\r\ntype AnyHandler = SocketEventHandler<any>;\r\n\r\nexport class SocketClient {\r\n private ws: WebSocket | null = null;\r\n private status: SocketStatus = 'idle';\r\n\r\n private pingTimer: ReturnType<typeof setInterval> | null = null;\r\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n private reconnectAttempt = 0;\r\n private manualClose = false;\r\n private hasJoinedAfterLogin = false;\r\n\r\n private handlers = new Map<string, Set<AnyHandler>>();\r\n\r\n constructor(private opts: SocketClientOptions) {}\r\n\r\n /** Current status useful for UI */\r\n getStatus(): SocketStatus {\r\n return this.status;\r\n }\r\n\r\n /** Raw socket access (optional) */\r\n getSocket(): WebSocket | null {\r\n return this.ws;\r\n }\r\n\r\n /** Connect (idempotent) */\r\n connect(): void {\r\n if (this.ws && (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING)) {\r\n return;\r\n }\r\n\r\n this.manualClose = false;\r\n this.setStatus(this.reconnectAttempt > 0 ? 'reconnecting' : 'connecting');\r\n\r\n this.ws = new WebSocket(this.opts.url);\r\n\r\n this.ws.onopen = () => {\r\n this.reconnectAttempt = 0;\r\n this.setStatus('connected');\r\n\r\n // 1) join public room (same as your frontend)\r\n this.sendRaw({\r\n type: 'joinPublic',\r\n payload: { name: this.opts.publicName ?? 'player1' },\r\n });\r\n\r\n // 2) start ping\r\n this.startPing();\r\n\r\n // 3) if already logged-in, join as authenticated too\r\n this.tryJoinAfterLogin();\r\n };\r\n\r\n this.ws.onmessage = (event) => {\r\n let parsed: SocketMessage;\r\n try {\r\n parsed = JSON.parse(event.data) as SocketMessage;\r\n } catch {\r\n // non-JSON payload, ignore but still emit wildcard\r\n this.emit('*', event.data as any, { type: '*', message: event.data });\r\n return;\r\n }\r\n\r\n // emit by type + wildcard\r\n const data = parsed.message ?? parsed.payload ?? parsed;\r\n this.emit(parsed.type, data, parsed);\r\n this.emit('*', data, parsed);\r\n };\r\n\r\n this.ws.onerror = () => {\r\n // usually followed by close; keep minimal here\r\n this.emit('error', null, { type: 'error' });\r\n };\r\n\r\n this.ws.onclose = () => {\r\n this.stopPing();\r\n this.setStatus('disconnected');\r\n\r\n if (!this.manualClose && (this.opts.autoReconnect ?? true)) {\r\n this.scheduleReconnect();\r\n }\r\n };\r\n }\r\n\r\n /** Disconnect gracefully */\r\n disconnect(code = 1000, reason = 'client_disconnect'): void {\r\n this.manualClose = true;\r\n this.stopPing();\r\n this.clearReconnect();\r\n\r\n if (this.ws) {\r\n try {\r\n this.ws.close(code, reason);\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n this.ws = null;\r\n this.setStatus('disconnected');\r\n }\r\n\r\n /** Call after login (or whenever token/user changes) */\r\n onLogin(): void {\r\n this.hasJoinedAfterLogin = false;\r\n this.tryJoinAfterLogin();\r\n }\r\n\r\n /** Reset join flag (call on logout) */\r\n onLogout(): void {\r\n this.hasJoinedAfterLogin = false;\r\n }\r\n\r\n /** Subscribe to message type (e.g. 'happyHourStarted', 'latest-bet'). Use '*' to receive everything. */\r\n on<T = any>(type: string, handler: SocketEventHandler<T>): () => void {\r\n const set = this.handlers.get(type) ?? new Set();\r\n set.add(handler as AnyHandler);\r\n this.handlers.set(type, set);\r\n\r\n // return unsubscribe\r\n return () => this.off(type, handler);\r\n }\r\n\r\n off<T = any>(type: string, handler: SocketEventHandler<T>): void {\r\n const set = this.handlers.get(type);\r\n if (!set) return;\r\n set.delete(handler as AnyHandler);\r\n if (set.size === 0) this.handlers.delete(type);\r\n }\r\n\r\n /** Send a typed message (SDK-side helper) */\r\n send(type: string, payload?: any): void {\r\n this.sendRaw({ type, payload });\r\n }\r\n\r\n // ----------------- internals -----------------\r\n\r\n private emit(type: string, data: any, raw: SocketMessage): void {\r\n const set = this.handlers.get(type);\r\n if (!set) return;\r\n for (const fn of set) {\r\n try {\r\n fn(data, raw);\r\n } catch {\r\n // never let user handlers crash the socket loop\r\n }\r\n }\r\n }\r\n\r\n private sendRaw(msg: SocketMessage): void {\r\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\r\n this.ws.send(JSON.stringify(msg));\r\n }\r\n\r\n private tryJoinAfterLogin(): void {\r\n if (this.hasJoinedAfterLogin) return;\r\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\r\n\r\n const user = this.opts.getUser?.() ?? null;\r\n if (!user?.id) return;\r\n\r\n const socketToken = this.opts.getSocketToken?.() ?? '';\r\n if (!socketToken) return;\r\n\r\n // mirrors your frontend join message\r\n this.sendRaw({\r\n type: 'join',\r\n payload: {\r\n name: user.name || 'player1',\r\n playerId: user.id,\r\n socketToken,\r\n },\r\n });\r\n\r\n this.hasJoinedAfterLogin = true;\r\n }\r\n\r\n private startPing(): void {\r\n this.stopPing();\r\n const every = this.opts.pingIntervalMs ?? 5000;\r\n\r\n this.pingTimer = setInterval(() => {\r\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\r\n this.sendRaw({ type: 'ping', payload: { ping: 1 } });\r\n }, every);\r\n }\r\n\r\n private stopPing(): void {\r\n if (this.pingTimer) clearInterval(this.pingTimer);\r\n this.pingTimer = null;\r\n }\r\n\r\n private scheduleReconnect(): void {\r\n this.clearReconnect();\r\n\r\n this.reconnectAttempt += 1;\r\n const base = Math.min(1000 * 2 ** (this.reconnectAttempt - 1), this.opts.maxReconnectDelayMs ?? 30000);\r\n const jitter = Math.floor(Math.random() * 250);\r\n\r\n this.reconnectTimer = setTimeout(() => {\r\n this.connect();\r\n }, base + jitter);\r\n }\r\n\r\n private clearReconnect(): void {\r\n if (this.reconnectTimer) clearTimeout(this.reconnectTimer);\r\n this.reconnectTimer = null;\r\n }\r\n\r\n private setStatus(s: SocketStatus): void {\r\n this.status = s;\r\n this.emit('status', s, { type: 'status', payload: s });\r\n }\r\n}\r\n","// src/sdk.ts\r\nimport { HttpClient } from './http/client';\r\nimport { JwtAuth } from './auth/jwtAuth';\r\nimport { ApiError, isApiError } from './errors';\r\nimport { AffiliateAPI } from \"./apis/affiliate\";\r\nimport { ContentAPI } from './apis/content';\r\nimport { DepositAPI } from \"./apis/deposit\";\r\nimport { GamesAPI } from './apis/games';\r\nimport { GeolocationAPI } from \"./apis/geo\";\r\nimport { LuckyWheelAPI } from './apis/luckyWheel';\r\nimport { MediaAPI } from \"./apis/media\";\r\nimport { PlayerAPI } from \"./apis/player\";\r\nimport { PromotionsAPI } from './apis/promotions';\r\nimport { RaffleAPI } from \"./apis/raffle\";\r\nimport { RegionAPI } from \"./apis/region\";\r\nimport { SettingsAPI } from \"./apis/settings\";\r\nimport { SportAPI } from \"./apis/sport\";\r\nimport { VoucherAPI } from \"./apis/voucher\";\r\nimport { WithdrawAPI} from \"./apis/withdraw\";\r\nimport { SocketClient } from './ws/socketClient';\r\nimport type { SocketClientOptions } from './types/ws';\r\nimport { storage } from './localStorage';\r\nexport interface SDKConfig {\r\n baseUrl: string;\r\n timeoutMs?: number;\r\n socketUrl?: string;\r\n getSocketToken?: () => string | null;\r\n}\r\n\r\nexport class GameSDK {\r\n readonly http: HttpClient;\r\n readonly auth: JwtAuth;\r\n readonly ws: SocketClient;\r\n readonly affiliate: AffiliateAPI;\r\n readonly content: ContentAPI;\r\n readonly deposit: DepositAPI\r\n readonly games: GamesAPI;\r\n readonly geolocation: GeolocationAPI;\r\n readonly luckyWheel: LuckyWheelAPI;\r\n readonly media: MediaAPI;\r\n readonly player: PlayerAPI\r\n readonly promotions: PromotionsAPI;\r\n readonly raffle: RaffleAPI;\r\n readonly region: RegionAPI;\r\n readonly settings: SettingsAPI;\r\n readonly sport: SportAPI;\r\n readonly voucher: VoucherAPI;\r\n readonly withdraw: WithdrawAPI;\r\n\r\n constructor(cfg: SDKConfig) {\r\n this.http = new HttpClient({\r\n baseUrl: cfg.baseUrl.replace(/\\/+$/, ''),\r\n auth: { getToken: () => this.auth.getToken() }, // <-- uses this.auth (defined below)\r\n timeoutMs: cfg.timeoutMs ?? 15000,\r\n });\r\n this.ws = new SocketClient({\r\n url: cfg.socketUrl || '',\r\n publicName: 'player1',\r\n getSocketToken: cfg.getSocketToken ?? (() => storage.getSocketToken()),\r\n getUser: () => this.auth.getUser() ? { id: this.auth.getUser()!.id, name: this.auth.getUser()!.name } : null,\r\n });\r\n // pass http to JwtAuth so login can call /auth/login\r\n this.auth = new JwtAuth(this.http);\r\n this.affiliate = new AffiliateAPI(this.http);\r\n this.content = new ContentAPI(this.http);\r\n this.deposit = new DepositAPI(this.http);\r\n this.games = new GamesAPI(this.http);\r\n this.geolocation = new GeolocationAPI(this.http);\r\n this.luckyWheel = new LuckyWheelAPI(this.http);\r\n this.media = new MediaAPI(this.http);\r\n this.player = new PlayerAPI(this.http);\r\n this.promotions = new PromotionsAPI(this.http);\r\n this.raffle = new RaffleAPI(this.http);\r\n this.region = new RegionAPI(this.http);\r\n this.settings = new SettingsAPI(this.http);\r\n this.sport = new SportAPI(this.http);\r\n this.voucher = new VoucherAPI(this.http);\r\n this.withdraw = new WithdrawAPI(this.http);\r\n }\r\n}\r\n\r\nexport const createGameSDK = (cfg: SDKConfig) => new GameSDK(cfg);\r\nexport { JwtAuth, ApiError, isApiError };\r\n","// src/types/auth.ts\r\nimport type {GeoLocation } from './geo';\r\n/** Geo info as returned in `user.geo` (values may be \"undefined\" strings from the IP service) */\r\nexport interface GeoInfo {\r\n ip: string | null | 'undefined';\r\n countryCode: string | null | 'undefined';\r\n status: string; // e.g., \"fail\" | \"success\"\r\n message?: string | null; // e.g., \"invalid query\"\r\n query?: string | null; // e.g., \"undefined\"\r\n}\r\n\r\nexport interface Wallet {\r\n createdAt: string; // ISO date\r\n updatedAt: string; // ISO date\r\n id: number;\r\n name: string; // e.g., \"Main Wallet\"\r\n type: number; // 0 = main, etc.\r\n balance: number;\r\n playerId: number;\r\n}\r\n\r\nexport interface User {\r\n createdAt: string; // ISO date\r\n updatedAt: string; // ISO date\r\n id: number;\r\n username: string;\r\n name: string;\r\n lastname: string;\r\n phone: string | null; // example shows string, keep nullable for safety\r\n email: string;\r\n currencyId: string; // e.g., \"USD\"\r\n status: string; // e.g., \"active\"\r\n referralMax: number;\r\n geo?: GeoLocation; // present in example\r\n googleId: string | null; // can be null\r\n country?: string | null;\r\n city?: string | null;\r\n zipCode?: string | null;\r\n address?: string | null;\r\n dob?: string | null; // ISO date or null\r\n isOnline: boolean;\r\n avatar: number | null; // example shows number; allow null for safety\r\n parentId: number | null; // example shows 1\r\n class: number | null; // class id\r\n wallets: Wallet[]; // at least one wallet in example\r\n}\r\n\r\n/**\r\n * Response of POST /auth/login\r\n * Matches your sample: includes `token`, `socketToken`, and `user`.\r\n */\r\nexport interface AuthResponse {\r\n token: string;\r\n socketToken: string;\r\n user: User;\r\n}\r\n\r\nexport interface pinCodeResponse {\r\n message: string;\r\n token: string;\r\n}\r\nexport interface pinCodeCheckResponse {\r\n message: string;\r\n}\r\n\r\n/** ISO date string, e.g., \"2025-08-26T10:52:58.000Z\" or \"2000-09-11\" */\r\nexport type ISODateString = string;\r\n\r\n/** Same regex as backend: letters, numbers, underscore, hyphen */\r\nexport const USERNAME_REGEX = /^[a-zA-Z0-9_-]+$/;\r\n\r\n/**\r\n * createPlayerValidator\r\n * Backend: geo is a string, class defaults to 1 on server.\r\n */\r\nexport interface CreatePlayerInput {\r\n username: string; // min 4, USERNAME_REGEX\r\n name: string; // max 255\r\n lastname: string; // max 255\r\n email: string; // email, max 255\r\n password: string; // min 4\r\n currencyId: string; // min 2, max 6\r\n geo?: GeoLocation; // optional (string in V1)\r\n class?: number; // optional; server defaults to 1\r\n country?: string; // optional\r\n phone?: string; // optional\r\n zipCode?: string; // optional\r\n address?: string; // optional\r\n dob?: ISODateString; // optional\r\n recaptchaToken: string;\r\n}\r\n\r\n/**\r\n * createPlayerV2Validator\r\n * Note: promo fields can be null; geo is object; country/address/city required.\r\n * \"refferer\" is intentionally spelled to match backend.\r\n */\r\nexport interface CreatePlayerV2Input {\r\n promotionId?: number | null;\r\n promoCode?: string | null;\r\n email: string; // email, max 255\r\n username: string; // min 4, USERNAME_REGEX\r\n password: string; // min 4\r\n name: string; // max 255\r\n lastname: string; // max 255\r\n gender: string; // required (string)\r\n currencyId: string; // min 2, max 6\r\n dob: ISODateString; // required\r\n phone?: string; // optional\r\n country: string; // required\r\n refferer?: number | null; // optional, allow null (spelling matches backend)\r\n address: string; // required\r\n city: string; // required, max 100\r\n zipCode?: string; // optional\r\n geo?: GeoLocation; // optional object\r\n class?: number; // optional; server defaults to 1\r\n recaptchaToken: string;\r\n}\r\n\r\n/**\r\n * createPlayerV2Step2Validator\r\n * Minimal step: email + username + password\r\n */\r\nexport interface CreatePlayerV2Step2Input {\r\n email: string; // email, max 255\r\n username: string; // min 4, USERNAME_REGEX\r\n password: string; // min 4\r\n}\r\n\r\n/**\r\n * Signup response\r\n */\r\nexport interface SignupResponse {\r\n message: string; // e.g., \"Player created successfully\"\r\n player: User;\r\n}\r\n\r\nexport interface RegisterResponse extends SignupResponse, AuthResponse {}\r\nexport interface SignupV2ValidateResponse {\r\n message: string; // e.g., \"Player created successfully\"\r\n}\r\n\r\nexport interface GoogleProfile {\r\n id: string;\r\n email: string;\r\n verified_email: boolean;\r\n name: string;\r\n given_name: string;\r\n family_name: string;\r\n picture: string;\r\n}\r\n\r\nexport interface GoogleLoginRequest {\r\n token: string;\r\n profile: GoogleProfile;\r\n geo?: object;\r\n}\r\n"]}
package/dist/index.d.cts CHANGED
@@ -370,11 +370,29 @@ interface ContentPage {
370
370
  createdAt: string;
371
371
  updatedAt: string;
372
372
  }
373
+ interface AnnouncementsResponse {
374
+ message: string;
375
+ announcements: Announcement[] | string;
376
+ gameAnnouncements: Announcement[] | string;
377
+ }
378
+ interface Announcement {
379
+ createdAt: string;
380
+ updatedAt: string;
381
+ id: number;
382
+ state: string;
383
+ title: string;
384
+ text: string;
385
+ category: string;
386
+ startDate: string;
387
+ endDate: string;
388
+ }
389
+
373
390
  declare class ContentAPI {
374
391
  private http;
375
392
  constructor(http: HttpClient);
376
393
  list(): Promise<ContentPage[]>;
377
394
  get(slug: string): Promise<ContentPage>;
395
+ getAnnouncements(): Promise<AnnouncementsResponse>;
378
396
  }
379
397
 
380
398
  interface ChargeData {
@@ -636,6 +654,12 @@ interface GlobalFavorite {
636
654
  interface Providers {
637
655
  providers: string[];
638
656
  }
657
+ interface CategoryProvider {
658
+ id: number;
659
+ name: string;
660
+ parentId?: number;
661
+ providers: string;
662
+ }
639
663
  interface Lobby {
640
664
  [key: string]: LobbyGame[];
641
665
  }
@@ -685,7 +709,7 @@ declare class GamesAPI {
685
709
  /** Requires auth: player link */
686
710
  getLink(gameId: string): Promise<GameLinkResponse>;
687
711
  /** Public: demo link */
688
- getDemoLink(gameId: number): Promise<GameLinkResponse>;
712
+ getDemoLink(gameExternalId: string): Promise<GameLinkResponse>;
689
713
  setFavorite(gameId: number, isFavorite: boolean): Promise<SetFavoriteGamesResponse>;
690
714
  getFavorite(): Promise<FavoriteGamesResponse[]>;
691
715
  getRecentBigWins(category: string): Promise<recentBigWinsResponse[]>;
@@ -695,6 +719,9 @@ declare class GamesAPI {
695
719
  topRated: TopRated[];
696
720
  }>;
697
721
  getProviders(): Promise<Providers>;
722
+ getCategoriesProviders(): Promise<{
723
+ categoryProviders: CategoryProvider[];
724
+ }>;
698
725
  getLobby(): Promise<Lobby[]>;
699
726
  }
700
727
 
@@ -973,9 +1000,20 @@ declare class PlayerAPI {
973
1000
  }): Promise<{
974
1001
  message: string;
975
1002
  }>;
1003
+ verifyPhoneSignup(data: PhoneVerifyProps): Promise<{
1004
+ message: string;
1005
+ }>;
1006
+ verifyPhoneCodeSignup(data: {
1007
+ verificationCode: string;
1008
+ verificationToken: string;
1009
+ }): Promise<{
1010
+ message: string;
1011
+ }>;
976
1012
  getVerificationStatus(): Promise<VerificationStatus[]>;
977
1013
  getAvatars(): Promise<Avatar$1[]>;
978
- changeAvatar(data: FormData): Promise<{
1014
+ changeAvatar(data: {
1015
+ avatarId: number;
1016
+ }): Promise<{
979
1017
  message: string;
980
1018
  avatar: Avatar$1;
981
1019
  }>;
@@ -1193,6 +1231,16 @@ interface Currency {
1193
1231
  currencyName: string;
1194
1232
  id: number;
1195
1233
  }
1234
+ interface CurrencyRates {
1235
+ provider: string;
1236
+ base: string;
1237
+ date: string;
1238
+ updatedAt: string;
1239
+ rates: Rates;
1240
+ }
1241
+ interface Rates {
1242
+ [key: string]: number;
1243
+ }
1196
1244
  interface Preferences {
1197
1245
  createdAt?: string;
1198
1246
  updatedAt?: string;
@@ -1231,6 +1279,7 @@ declare class SettingsAPI {
1231
1279
  getPreferences(): Promise<Preferences>;
1232
1280
  updatePreferences(data: Partial<Preferences>): Promise<Preferences>;
1233
1281
  getCurrencies(): Promise<Currency[]>;
1282
+ getCurrenciesRates(): Promise<CurrencyRates>;
1234
1283
  getWebSetting(lang: string): Promise<WebSetting[]>;
1235
1284
  getWebSettingProviders(lang: string): Promise<WebSetting[]>;
1236
1285
  getWebSettingPin(): Promise<WebSetting[]>;
@@ -1350,13 +1399,81 @@ declare class WithdrawAPI {
1350
1399
  getAnindaBankList(methodId: number): Promise<AnindaBank[]>;
1351
1400
  }
1352
1401
 
1402
+ type SocketMessage<TPayload = any> = {
1403
+ type: string;
1404
+ payload?: TPayload;
1405
+ message?: any;
1406
+ };
1407
+ type SocketStatus = 'idle' | 'connecting' | 'connected' | 'disconnected' | 'reconnecting';
1408
+ type SocketEventHandler<T = any> = (data: T, raw: SocketMessage) => void;
1409
+ type SocketClientOptions = {
1410
+ /** Example: wss://socketservice.moneycloud.vip/socket/public-room/join */
1411
+ url: string;
1412
+ /** joinPublic payload name (default: "player1") */
1413
+ publicName?: string;
1414
+ /** Ping interval (ms). Default: 5000 */
1415
+ pingIntervalMs?: number;
1416
+ /** Auto reconnect on close (default: true) */
1417
+ autoReconnect?: boolean;
1418
+ /** Max reconnect delay (ms). Default: 30000 */
1419
+ maxReconnectDelayMs?: number;
1420
+ /** Provide socket token from your storage (localStorage helper, etc.) */
1421
+ getSocketToken?: () => string | null;
1422
+ /** Provide user identity when logged in */
1423
+ getUser?: () => {
1424
+ id: number;
1425
+ name?: string | null;
1426
+ } | null;
1427
+ };
1428
+
1429
+ declare class SocketClient {
1430
+ private opts;
1431
+ private ws;
1432
+ private status;
1433
+ private pingTimer;
1434
+ private reconnectTimer;
1435
+ private reconnectAttempt;
1436
+ private manualClose;
1437
+ private hasJoinedAfterLogin;
1438
+ private handlers;
1439
+ constructor(opts: SocketClientOptions);
1440
+ /** Current status useful for UI */
1441
+ getStatus(): SocketStatus;
1442
+ /** Raw socket access (optional) */
1443
+ getSocket(): WebSocket | null;
1444
+ /** Connect (idempotent) */
1445
+ connect(): void;
1446
+ /** Disconnect gracefully */
1447
+ disconnect(code?: number, reason?: string): void;
1448
+ /** Call after login (or whenever token/user changes) */
1449
+ onLogin(): void;
1450
+ /** Reset join flag (call on logout) */
1451
+ onLogout(): void;
1452
+ /** Subscribe to message type (e.g. 'happyHourStarted', 'latest-bet'). Use '*' to receive everything. */
1453
+ on<T = any>(type: string, handler: SocketEventHandler<T>): () => void;
1454
+ off<T = any>(type: string, handler: SocketEventHandler<T>): void;
1455
+ /** Send a typed message (SDK-side helper) */
1456
+ send(type: string, payload?: any): void;
1457
+ private emit;
1458
+ private sendRaw;
1459
+ private tryJoinAfterLogin;
1460
+ private startPing;
1461
+ private stopPing;
1462
+ private scheduleReconnect;
1463
+ private clearReconnect;
1464
+ private setStatus;
1465
+ }
1466
+
1353
1467
  interface SDKConfig {
1354
1468
  baseUrl: string;
1355
1469
  timeoutMs?: number;
1470
+ socketUrl?: string;
1471
+ getSocketToken?: () => string | null;
1356
1472
  }
1357
1473
  declare class GameSDK {
1358
1474
  readonly http: HttpClient;
1359
1475
  readonly auth: JwtAuth;
1476
+ readonly ws: SocketClient;
1360
1477
  readonly affiliate: AffiliateAPI;
1361
1478
  readonly content: ContentAPI;
1362
1479
  readonly deposit: DepositAPI;
@@ -1376,4 +1493,4 @@ declare class GameSDK {
1376
1493
  }
1377
1494
  declare const createGameSDK: (cfg: SDKConfig) => GameSDK;
1378
1495
 
1379
- export { ApiError, type AuthResponse, ContentAPI, type ContentPage, type CreatePlayerInput, type CreatePlayerV2Input, type CreatePlayerV2Step2Input, type GameLinkResponse, GameSDK, GamesAPI, type GeoInfo, type GoogleLoginRequest, type GoogleProfile, type ISODateString, JwtAuth, PromotionsAPI, type RegisterResponse, type SDKConfig, type SignupResponse, type SignupV2ValidateResponse, USERNAME_REGEX, type User, type Wallet, createGameSDK, isApiError, type pinCodeCheckResponse, type pinCodeResponse };
1496
+ export { ApiError, type AuthResponse, ContentAPI, type CreatePlayerInput, type CreatePlayerV2Input, type CreatePlayerV2Step2Input, type GameLinkResponse, GameSDK, GamesAPI, type GeoInfo, type GoogleLoginRequest, type GoogleProfile, type ISODateString, JwtAuth, PromotionsAPI, type RegisterResponse, type SDKConfig, type SignupResponse, type SignupV2ValidateResponse, USERNAME_REGEX, type User, type Wallet, createGameSDK, isApiError, type pinCodeCheckResponse, type pinCodeResponse };