SPB Git

spb/spinza

Public
3.7 KB · 180 lines typescript
1import type { GameLifecycle, TransactionType, WinClassId } from "./constants";23export type Volatility = "low" | "medium" | "high" | "extreme";45export interface PublicUser {6  id: string;7  username: string;8  level: number;9  xp: number;10  xpIntoLevel: number;11  xpForNext: number;12  createdAt: string;13  lastLoginAt: string | null;14  isNew?: boolean;15}1617export interface WalletView {18  balance: number;19  lifetimeWagered: number;20  lifetimeWon: number;21  updatedAt: string;22}2324export interface UserSettings {25  soundEnabled: boolean;26  musicVolume: number;27  effectsVolume: number;28  masterVolume: number;29  reduceMotion: boolean;30  animationIntensity: "low" | "medium" | "high";31  sessionReminderMinutes: number;32  breakReminder: boolean;33  leaderboardOptIn: boolean;34}3536export interface GameCard {37  slug: string;38  name: string;39  tagline: string;40  theme: string;41  volatility: Volatility;42  version: string;43  grid: { reels: number; rows: number };44  minBet: number;45  maxBet: number;46  maxMultiplier: number;47  features: string[];48  tags: string[];49  palette: { primary: string; secondary: string; glow: string; bg: string };50  lifecycle: GameLifecycle;51  isNew: boolean;52  isFeatured: boolean;53  isJackpot: boolean;54  popularity: number;55  favorite?: boolean;56  lastPlayedAt?: string | null;57}5859export interface GameInfo extends GameCard {60  rtp: number;61  hitFrequency: number | null;62  description: string;63  rules: string[];64  paytable: { symbol: string; label: string; pays: Record<string, number> }[];65  certification: CertificationSummary | null;66}6768export interface CertificationSummary {69  spins: number;70  configuredRtp: number;71  observedRtp: number;72  deviation: number;73  hitRate: number;74  bonusRate: number;75  maxWinMultiplier: number;76  status: "PASS" | "FAIL";77  certifiedAt: string;78  version: string;79}8081export interface SpinResponse {82  roundId: string;83  game: string;84  version: string;85  bet: number;86  win: number;87  multiplier: number;88  winClass: WinClassId;89  balance: number;90  xp: { gained: number; total: number; level: number; leveledUp: boolean; levelReward: number };91  result: unknown;92  unlocked: { achievements: string[]; missions: string[] };93  replayed?: boolean;94}9596export interface LedgerEntry {97  id: string;98  type: TransactionType;99  amount: number;100  balanceAfter: number;101  reference: string | null;102  createdAt: string;103}104105export interface RoundHistoryEntry {106  roundId: string;107  game: string;108  gameName: string;109  bet: number;110  win: number;111  multiplier: number;112  balanceAfter: number;113  createdAt: string;114}115116export interface DailyRewardStatus {117  available: boolean;118  streakDay: number;119  nextAmount: number;120  nextAvailableAt: string | null;121  schedule: readonly number[];122  claimedToday: boolean;123}124125export interface RescueStatus {126  eligible: boolean;127  amount: number;128  balance: number;129  nextAvailableAt: string | null;130}131132export interface AchievementView {133  key: string;134  name: string;135  description: string;136  rewardCredits: number;137  rewardXp: number;138  icon: string;139  unlockedAt: string | null;140  progress: number;141  target: number;142}143144export interface MissionView {145  key: string;146  name: string;147  description: string;148  period: "daily" | "weekly";149  target: number;150  progress: number;151  rewardCredits: number;152  rewardXp: number;153  completedAt: string | null;154  claimedAt: string | null;155  expiresAt: string;156}157158export interface LeaderboardEntry {159  rank: number;160  username: string;161  level: number;162  value: number;163  game?: string | null;164  isYou?: boolean;165}166167export interface LeaderboardView {168  category: string;169  label: string;170  entries: LeaderboardEntry[];171  you: LeaderboardEntry | null;172  updatedAt: string;173}174175export interface ApiError {176  error: string;177  message: string;178  details?: unknown;179}180
Files · 0b40ac1a7181cdec915de0b36dee3e78427df0c3
Menu

Theme