@masterunoco/casinowebengine-api 0.1.6 → 0.1.8

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.
package/dist/index.cjs CHANGED
@@ -501,7 +501,7 @@ var ContentAPI = class {
501
501
  return this.http.get(`/content-pages/${slug}`, "none");
502
502
  }
503
503
  getAnnouncements() {
504
- return this.http.get("/announcements", "none");
504
+ return this.http.get("/announcements/get", "none");
505
505
  }
506
506
  };
507
507
 
@@ -541,8 +541,8 @@ var GamesAPI = class {
541
541
  getDemoLink(gameExternalId) {
542
542
  return this.http.post("/games/getDemoLink", { gameExternalId }, "none");
543
543
  }
544
- setFavorite(gameId, isFavorite) {
545
- return this.http.post("/games/favorites", { gameId, isFavorite }, "required");
544
+ setFavorite(data) {
545
+ return this.http.post("/games/favorites", data, "required");
546
546
  }
547
547
  getFavorite() {
548
548
  return this.http.get("/games/player-favorites", "required");
@@ -580,6 +580,9 @@ var GamesAPI = class {
580
580
  }
581
581
  return this.http.get(url, "none");
582
582
  }
583
+ getGameOfTheWeek() {
584
+ return this.http.get("/games/game-of-the-week", "none");
585
+ }
583
586
  };
584
587
 
585
588
  // src/apis/luckyWheel.ts
@@ -822,6 +825,12 @@ var SettingsAPI = class {
822
825
  getSupportEmail(lang) {
823
826
  return this.http.get(`/website-settings?language=${lang}&key[]=supportEmail`, "none");
824
827
  }
828
+ getReferralBannersPack(lang) {
829
+ return this.http.get(`/website-settings?language=${lang}&key[]=referral_banners`, "none");
830
+ }
831
+ getReferralGraphicsPack(lang) {
832
+ return this.http.get(`/website-settings?language=${lang}&key[]=Referral_graphics`, "none");
833
+ }
825
834
  };
826
835
 
827
836
  // src/apis/sport.ts
@@ -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/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"]}
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/get', '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 GamesOfTheWeekResponse, 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(data: {gameId: number, isFavorite: boolean}[]): Promise<SetFavoriteGamesResponse> {\r\n return this.http.post<SetFavoriteGamesResponse>('/games/favorites', data, '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 getGameOfTheWeek(): Promise<GamesOfTheWeekResponse> {\r\n return this.http.get<GamesOfTheWeekResponse>('/games/game-of-the-week', '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 getReferralBannersPack(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_banners`, 'none');\r\n }\r\n getReferralGraphicsPack(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=Referral_graphics`, '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
@@ -694,6 +694,18 @@ interface TopRated {
694
694
  favorites: number;
695
695
  isInRegion: number;
696
696
  }
697
+ interface GameOfTheWeek {
698
+ id: number;
699
+ externalId: string;
700
+ name: string;
701
+ vendor: string;
702
+ thumbnail: string;
703
+ provider: string;
704
+ category: string;
705
+ }
706
+ interface GamesOfTheWeekResponse {
707
+ gamesOfTheWeek: GameOfTheWeek[];
708
+ }
697
709
 
698
710
  interface GameLinkResponse {
699
711
  message: string;
@@ -710,7 +722,10 @@ declare class GamesAPI {
710
722
  getLink(gameId: string): Promise<GameLinkResponse>;
711
723
  /** Public: demo link */
712
724
  getDemoLink(gameExternalId: string): Promise<GameLinkResponse>;
713
- setFavorite(gameId: number, isFavorite: boolean): Promise<SetFavoriteGamesResponse>;
725
+ setFavorite(data: {
726
+ gameId: number;
727
+ isFavorite: boolean;
728
+ }[]): Promise<SetFavoriteGamesResponse>;
714
729
  getFavorite(): Promise<FavoriteGamesResponse[]>;
715
730
  getRecentBigWins(category: string): Promise<recentBigWinsResponse[]>;
716
731
  getRecent(page?: number, limit?: number): Promise<GamesSearchResponse>;
@@ -723,6 +738,7 @@ declare class GamesAPI {
723
738
  categoryProviders: CategoryProvider[];
724
739
  }>;
725
740
  getLobby(): Promise<Lobby[]>;
741
+ getGameOfTheWeek(): Promise<GamesOfTheWeekResponse>;
726
742
  }
727
743
 
728
744
  declare class GeolocationAPI {
@@ -1291,6 +1307,8 @@ declare class SettingsAPI {
1291
1307
  getWebSettingLiveCasinoCategories(lang: string): Promise<WebSetting[]>;
1292
1308
  getWebsiteAllowedPlayerTags(lang: string): Promise<WebSetting[]>;
1293
1309
  getSupportEmail(lang: string): Promise<WebSetting[]>;
1310
+ getReferralBannersPack(lang: string): Promise<WebSetting[]>;
1311
+ getReferralGraphicsPack(lang: string): Promise<WebSetting[]>;
1294
1312
  }
1295
1313
 
1296
1314
  interface SportConfig {
package/dist/index.d.ts CHANGED
@@ -694,6 +694,18 @@ interface TopRated {
694
694
  favorites: number;
695
695
  isInRegion: number;
696
696
  }
697
+ interface GameOfTheWeek {
698
+ id: number;
699
+ externalId: string;
700
+ name: string;
701
+ vendor: string;
702
+ thumbnail: string;
703
+ provider: string;
704
+ category: string;
705
+ }
706
+ interface GamesOfTheWeekResponse {
707
+ gamesOfTheWeek: GameOfTheWeek[];
708
+ }
697
709
 
698
710
  interface GameLinkResponse {
699
711
  message: string;
@@ -710,7 +722,10 @@ declare class GamesAPI {
710
722
  getLink(gameId: string): Promise<GameLinkResponse>;
711
723
  /** Public: demo link */
712
724
  getDemoLink(gameExternalId: string): Promise<GameLinkResponse>;
713
- setFavorite(gameId: number, isFavorite: boolean): Promise<SetFavoriteGamesResponse>;
725
+ setFavorite(data: {
726
+ gameId: number;
727
+ isFavorite: boolean;
728
+ }[]): Promise<SetFavoriteGamesResponse>;
714
729
  getFavorite(): Promise<FavoriteGamesResponse[]>;
715
730
  getRecentBigWins(category: string): Promise<recentBigWinsResponse[]>;
716
731
  getRecent(page?: number, limit?: number): Promise<GamesSearchResponse>;
@@ -723,6 +738,7 @@ declare class GamesAPI {
723
738
  categoryProviders: CategoryProvider[];
724
739
  }>;
725
740
  getLobby(): Promise<Lobby[]>;
741
+ getGameOfTheWeek(): Promise<GamesOfTheWeekResponse>;
726
742
  }
727
743
 
728
744
  declare class GeolocationAPI {
@@ -1291,6 +1307,8 @@ declare class SettingsAPI {
1291
1307
  getWebSettingLiveCasinoCategories(lang: string): Promise<WebSetting[]>;
1292
1308
  getWebsiteAllowedPlayerTags(lang: string): Promise<WebSetting[]>;
1293
1309
  getSupportEmail(lang: string): Promise<WebSetting[]>;
1310
+ getReferralBannersPack(lang: string): Promise<WebSetting[]>;
1311
+ getReferralGraphicsPack(lang: string): Promise<WebSetting[]>;
1294
1312
  }
1295
1313
 
1296
1314
  interface SportConfig {
package/dist/index.js CHANGED
@@ -499,7 +499,7 @@ var ContentAPI = class {
499
499
  return this.http.get(`/content-pages/${slug}`, "none");
500
500
  }
501
501
  getAnnouncements() {
502
- return this.http.get("/announcements", "none");
502
+ return this.http.get("/announcements/get", "none");
503
503
  }
504
504
  };
505
505
 
@@ -539,8 +539,8 @@ var GamesAPI = class {
539
539
  getDemoLink(gameExternalId) {
540
540
  return this.http.post("/games/getDemoLink", { gameExternalId }, "none");
541
541
  }
542
- setFavorite(gameId, isFavorite) {
543
- return this.http.post("/games/favorites", { gameId, isFavorite }, "required");
542
+ setFavorite(data) {
543
+ return this.http.post("/games/favorites", data, "required");
544
544
  }
545
545
  getFavorite() {
546
546
  return this.http.get("/games/player-favorites", "required");
@@ -578,6 +578,9 @@ var GamesAPI = class {
578
578
  }
579
579
  return this.http.get(url, "none");
580
580
  }
581
+ getGameOfTheWeek() {
582
+ return this.http.get("/games/game-of-the-week", "none");
583
+ }
581
584
  };
582
585
 
583
586
  // src/apis/luckyWheel.ts
@@ -820,6 +823,12 @@ var SettingsAPI = class {
820
823
  getSupportEmail(lang) {
821
824
  return this.http.get(`/website-settings?language=${lang}&key[]=supportEmail`, "none");
822
825
  }
826
+ getReferralBannersPack(lang) {
827
+ return this.http.get(`/website-settings?language=${lang}&key[]=referral_banners`, "none");
828
+ }
829
+ getReferralGraphicsPack(lang) {
830
+ return this.http.get(`/website-settings?language=${lang}&key[]=Referral_graphics`, "none");
831
+ }
823
832
  };
824
833
 
825
834
  // src/apis/sport.ts
package/dist/index.js.map CHANGED
@@ -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/ws/socketClient.ts","../src/sdk.ts","../src/types/auth.ts"],"names":[],"mappings":"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","file":"index.js","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"]}
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.js","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/get', '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 GamesOfTheWeekResponse, 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(data: {gameId: number, isFavorite: boolean}[]): Promise<SetFavoriteGamesResponse> {\r\n return this.http.post<SetFavoriteGamesResponse>('/games/favorites', data, '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 getGameOfTheWeek(): Promise<GamesOfTheWeekResponse> {\r\n return this.http.get<GamesOfTheWeekResponse>('/games/game-of-the-week', '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 getReferralBannersPack(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=referral_banners`, 'none');\r\n }\r\n getReferralGraphicsPack(lang: string): Promise<SettingsTypes.WebSetting[]> {\r\n return this.http.get<SettingsTypes.WebSetting[]>(`/website-settings?language=${lang}&key[]=Referral_graphics`, '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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterunoco/casinowebengine-api",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "Typed front-end SDK for casino web-engine API",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",