SPB Git

spb/spinza

Public
3.9 KB · 182 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; surface?: string };50  /** Renderer presentation hints (frame, backdrop, particles, ambience). */51  presentation?: { frame: string; backdrop: string; particles: string; ambience: string };52  lifecycle: GameLifecycle;53  isNew: boolean;54  isFeatured: boolean;55  isJackpot: boolean;56  popularity: number;57  favorite?: boolean;58  lastPlayedAt?: string | null;59}6061export interface GameInfo extends GameCard {62  rtp: number;63  hitFrequency: number | null;64  description: string;65  rules: string[];66  paytable: { symbol: string; label: string; pays: Record<string, number> }[];67  certification: CertificationSummary | null;68}6970export interface CertificationSummary {71  spins: number;72  configuredRtp: number;73  observedRtp: number;74  deviation: number;75  hitRate: number;76  bonusRate: number;77  maxWinMultiplier: number;78  status: "PASS" | "FAIL";79  certifiedAt: string;80  version: string;81}8283export interface SpinResponse {84  roundId: string;85  game: string;86  version: string;87  bet: number;88  win: number;89  multiplier: number;90  winClass: WinClassId;91  balance: number;92  xp: { gained: number; total: number; level: number; leveledUp: boolean; levelReward: number };93  result: unknown;94  unlocked: { achievements: string[]; missions: string[] };95  replayed?: boolean;96}9798export interface LedgerEntry {99  id: string;100  type: TransactionType;101  amount: number;102  balanceAfter: number;103  reference: string | null;104  createdAt: string;105}106107export interface RoundHistoryEntry {108  roundId: string;109  game: string;110  gameName: string;111  bet: number;112  win: number;113  multiplier: number;114  balanceAfter: number;115  createdAt: string;116}117118export interface DailyRewardStatus {119  available: boolean;120  streakDay: number;121  nextAmount: number;122  nextAvailableAt: string | null;123  schedule: readonly number[];124  claimedToday: boolean;125}126127export interface RescueStatus {128  eligible: boolean;129  amount: number;130  balance: number;131  nextAvailableAt: string | null;132}133134export interface AchievementView {135  key: string;136  name: string;137  description: string;138  rewardCredits: number;139  rewardXp: number;140  icon: string;141  unlockedAt: string | null;142  progress: number;143  target: number;144}145146export interface MissionView {147  key: string;148  name: string;149  description: string;150  period: "daily" | "weekly";151  target: number;152  progress: number;153  rewardCredits: number;154  rewardXp: number;155  completedAt: string | null;156  claimedAt: string | null;157  expiresAt: string;158}159160export interface LeaderboardEntry {161  rank: number;162  username: string;163  level: number;164  value: number;165  game?: string | null;166  isYou?: boolean;167}168169export interface LeaderboardView {170  category: string;171  label: string;172  entries: LeaderboardEntry[];173  you: LeaderboardEntry | null;174  updatedAt: string;175}176177export interface ApiError {178  error: string;179  message: string;180  details?: unknown;181}182
Files · 51ee542495408941e29a05ddc2f370107ed7b9ea
Menu

Theme