@provable-games/budokan-sdk 0.1.15 → 0.1.16
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/{client-d2NE8oS8.d.cts → client-CP4dxHGv.d.cts} +3 -0
- package/dist/{client-d2NE8oS8.d.ts → client-CP4dxHGv.d.ts} +3 -0
- package/dist/index.cjs +7 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +7 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +7 -1
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/index.ts","../src/utils/retry.ts","../src/api/base.ts","../src/utils/mappers.ts","../src/api/tournaments.ts","../src/utils/address.ts","../src/api/players.ts","../src/api/games.ts","../src/api/activity.ts","../src/ws/manager.ts","../src/chains/constants.ts","../src/datasource/health.ts","../src/datasource/resolver.ts","../src/rpc/provider.ts","../src/rpc/viewer.ts","../src/rpc/abis/budokanViewer.json","../src/rpc/abis/budokan.json","../src/rpc/budokan.ts","../src/client.ts"],"names":["fetchOpts","wrapRpcCall"],"mappings":"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","file":"index.js","sourcesContent":["export class BudokanError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BudokanError\";\n }\n}\n\nexport class BudokanApiError extends BudokanError {\n readonly status: number;\n readonly statusText: string;\n\n constructor(message: string, status: number, statusText: string = \"\") {\n super(message);\n this.name = \"BudokanApiError\";\n this.status = status;\n this.statusText = statusText;\n }\n}\n\nexport class BudokanTimeoutError extends BudokanError {\n constructor(message = \"Request timed out\") {\n super(message);\n this.name = \"BudokanTimeoutError\";\n }\n}\n\nexport class BudokanConnectionError extends BudokanError {\n constructor(message = \"Connection failed\") {\n super(message);\n this.name = \"BudokanConnectionError\";\n }\n}\n\nexport class TournamentNotFoundError extends BudokanError {\n readonly tournamentId: string;\n\n constructor(tournamentId: string) {\n super(`Tournament not found: ${tournamentId}`);\n this.name = \"TournamentNotFoundError\";\n this.tournamentId = tournamentId;\n }\n}\n\nexport class RpcError extends BudokanError {\n readonly contractAddress?: string;\n\n constructor(message: string, contractAddress?: string) {\n super(message);\n this.name = \"RpcError\";\n this.contractAddress = contractAddress;\n }\n}\n\nexport class DataSourceError extends BudokanError {\n readonly primaryError: Error;\n readonly fallbackError: Error;\n\n constructor(primaryError: Error, fallbackError: Error) {\n super(`Both data sources failed. Primary: ${primaryError.message}. Fallback: ${fallbackError.message}`);\n this.name = \"DataSourceError\";\n this.primaryError = primaryError;\n this.fallbackError = fallbackError;\n }\n}\n\nexport function isNonRetryableError(error: unknown): boolean {\n if (error instanceof TournamentNotFoundError) return true;\n if (error instanceof BudokanApiError && error.status >= 400 && error.status < 500 && error.status !== 429) {\n return true;\n }\n return false;\n}\n","import { isNonRetryableError, BudokanTimeoutError } from \"../errors/index.js\";\n\nexport function calculateBackoff(\n attempt: number,\n baseDelay: number,\n maxDelay: number,\n): number {\n let delay = baseDelay * Math.pow(2, attempt);\n if (delay > maxDelay) delay = maxDelay;\n const minDelay = delay / 2;\n const jitter = Math.random() * (delay - minDelay);\n return minDelay + jitter;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n attempts: number = 3,\n delay: number = 1000,\n): Promise<T> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (isNonRetryableError(error)) {\n throw error;\n }\n\n if (attempt === attempts - 1) break;\n\n const backoff = calculateBackoff(attempt, delay, delay * 8);\n await sleep(backoff);\n }\n }\n\n throw lastError ?? new BudokanTimeoutError(\"Unknown error after retries\");\n}\n","import { BudokanApiError, BudokanTimeoutError, BudokanConnectionError } from \"../errors/index.js\";\nimport { withRetry } from \"../utils/retry.js\";\n\nexport interface ApiFetchOptions {\n method?: string;\n headers?: Record<string, string>;\n body?: unknown;\n signal?: AbortSignal;\n timeout?: number;\n retryAttempts?: number;\n retryDelay?: number;\n}\n\nconst DEFAULT_TIMEOUT = 10_000;\nconst DEFAULT_RETRY_ATTEMPTS = 3;\nconst DEFAULT_RETRY_DELAY = 1000;\n\n/**\n * Fetch JSON from an API endpoint with retry logic, timeout, and error handling.\n */\nexport async function apiFetch<T>(url: string, options: ApiFetchOptions = {}): Promise<T> {\n const {\n method = \"GET\",\n headers = {},\n body,\n signal,\n timeout = DEFAULT_TIMEOUT,\n retryAttempts = DEFAULT_RETRY_ATTEMPTS,\n retryDelay = DEFAULT_RETRY_DELAY,\n } = options;\n\n return withRetry(\n async () => {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n // Link external signal\n if (signal) {\n if (signal.aborted) {\n clearTimeout(timeoutId);\n throw new BudokanTimeoutError(\"Request was aborted\");\n }\n signal.addEventListener(\"abort\", () => controller.abort(), { once: true });\n }\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({}));\n throw new BudokanApiError(\n (errorBody as Record<string, string>).error ?? `API error: ${response.status}`,\n response.status,\n response.statusText,\n );\n }\n\n return (await response.json()) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof BudokanApiError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n if (signal?.aborted) throw new BudokanTimeoutError(\"Request was aborted\");\n throw new BudokanTimeoutError();\n }\n throw new BudokanConnectionError(\n error instanceof Error ? error.message : \"Connection failed\",\n );\n }\n },\n retryAttempts,\n retryDelay,\n );\n}\n\n/**\n * Extract pagination from API response.\n * The API wraps pagination in a `pagination` object, but the SDK\n * PaginatedResult type uses flat fields (total, limit, offset).\n */\nexport function extractPagination(result: Record<string, unknown>, defaults?: { limit?: number; offset?: number }): {\n total: number | undefined;\n limit: number;\n offset: number;\n} {\n const pagination = result.pagination as { total?: number; limit?: number; offset?: number } | undefined;\n return {\n total: pagination?.total ?? (result.total as number | undefined),\n limit: pagination?.limit ?? (result.limit as number | undefined) ?? defaults?.limit ?? 50,\n offset: pagination?.offset ?? (result.offset as number | undefined) ?? defaults?.offset ?? 0,\n };\n}\n\n/**\n * Build a query string from a record of key-value pairs.\n * Undefined and null values are omitted.\n */\nexport function buildQueryString(params: Record<string, string | number | boolean | undefined | null>): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n qs.set(key, String(value));\n }\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n","/**\n * Convert a snake_case string to camelCase.\n */\nfunction toCamelCase(str: string): string {\n return str.replace(/_([a-z])/g, (_, letter: string) => letter.toUpperCase());\n}\n\n/**\n * Convert a camelCase string to snake_case.\n */\nfunction toSnakeCase(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Deeply convert all keys in an object from snake_case to camelCase.\n */\nexport function snakeToCamel<T>(obj: unknown): T {\n if (Array.isArray(obj)) {\n return obj.map((item) => snakeToCamel(item)) as T;\n }\n if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n result[toCamelCase(key)] = snakeToCamel(value);\n }\n return result as T;\n }\n return obj as T;\n}\n\n/**\n * Deeply convert all keys in an object from camelCase to snake_case.\n */\nexport function camelToSnake<T>(obj: unknown): T {\n if (Array.isArray(obj)) {\n return obj.map((item) => camelToSnake(item)) as T;\n }\n if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n result[toSnakeCase(key)] = camelToSnake(value);\n }\n return result as T;\n }\n return obj as T;\n}\n","import type { Tournament, TournamentListParams, QualificationEntry } from \"../types/tournament.js\";\nimport type { LeaderboardEntry } from \"../types/leaderboard.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { Prize, RewardClaim, RewardClaimSummary, PrizeAggregation } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\n\n/** Normalize tournament: ensure both `id` and `tournamentId` exist */\nfunction normalizeTournament(raw: Record<string, unknown>): Tournament {\n const t = snakeToCamel<Tournament & { id?: string }>(raw);\n // API returns `id`, SDK type uses `tournamentId` — keep both in sync\n const id = t.id ?? t.tournamentId;\n return { ...t, id, tournamentId: id };\n}\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch a paginated list of tournaments.\n */\nexport async function getTournaments(\n baseUrl: string,\n params?: TournamentListParams,\n ctx?: ApiContext,\n): Promise<PaginatedResult<Tournament>> {\n const qs = buildQueryString({\n game_address: params?.gameAddress,\n creator: params?.creator,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n sort: params?.sort,\n from_id: params?.fromId,\n exclude_ids: params?.excludeIds?.join(\",\"),\n whitelisted_extensions: params?.whitelistedExtensions?.join(\",\"),\n include_prizes: params?.includePrizeSummary,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => normalizeTournament(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch a single tournament by ID.\n */\nexport async function getTournament(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<Tournament> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/tournaments/${tournamentId}`,\n fetchOpts(ctx),\n );\n return normalizeTournament(result.data);\n}\n\n/**\n * Fetch the leaderboard for a tournament.\n */\nexport async function getTournamentLeaderboard(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<LeaderboardEntry[]> {\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/leaderboard`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<LeaderboardEntry>(item));\n}\n\n/**\n * Fetch registrations for a tournament.\n */\nexport async function getTournamentRegistrations(\n baseUrl: string,\n tournamentId: string,\n params?: { playerAddress?: string; gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<Registration>> {\n const qs = buildQueryString({\n player_address: params?.playerAddress,\n game_token_ids: params?.gameTokenIds?.length ? params.gameTokenIds.join(\",\") : undefined,\n has_submitted: params?.hasSubmitted,\n is_banned: params?.isBanned,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/registrations${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<Registration>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch prizes for a tournament.\n */\nexport async function getTournamentPrizes(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<Prize[]> {\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/prizes`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<Prize>(item));\n}\n\n/**\n * Fetch reward claims for a tournament.\n */\nexport async function getTournamentRewardClaims(\n baseUrl: string,\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<RewardClaim>> {\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/reward-claims${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<RewardClaim>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch reward claims summary for a tournament.\n */\nexport async function getTournamentRewardClaimsSummary(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<RewardClaimSummary> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/tournaments/${tournamentId}/reward-claims/summary`,\n fetchOpts(ctx),\n );\n return snakeToCamel<RewardClaimSummary>(result.data);\n}\n\n/**\n * Fetch qualifications for a tournament.\n */\nexport async function getTournamentQualifications(\n baseUrl: string,\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<QualificationEntry>> {\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/qualifications${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<QualificationEntry>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch prize aggregation for a tournament.\n */\nexport async function getTournamentPrizeAggregation(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<PrizeAggregation[]> {\n const qs = buildQueryString({ include_aggregation: true });\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/prizes${qs}`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<PrizeAggregation>(item));\n}\n","/**\n * Normalize a Starknet address to a 0x-prefixed, 66-character lowercase hex string.\n */\nexport function normalizeAddress(address: string): string {\n const stripped = address.replace(/^0x0*/i, \"\");\n return (\"0x\" + stripped.padStart(64, \"0\")).toLowerCase();\n}\n","import type { PlayerStats, PlayerTournament, PlayerTournamentParams } from \"../types/player.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch tournaments for a player.\n */\nexport async function getPlayerTournaments(\n baseUrl: string,\n address: string,\n params?: PlayerTournamentParams,\n ctx?: ApiContext,\n): Promise<PaginatedResult<PlayerTournament>> {\n const normalized = normalizeAddress(address);\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n phase: params?.phase,\n game_token_ids: params?.gameTokenIds?.join(\",\"),\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/players/${normalized}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<PlayerTournament>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch stats for a player.\n */\nexport async function getPlayerStats(\n baseUrl: string,\n address: string,\n ctx?: ApiContext,\n): Promise<PlayerStats> {\n const normalized = normalizeAddress(address);\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/players/${normalized}/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlayerStats>(result.data);\n}\n","import type { Tournament, TournamentListParams } from \"../types/tournament.js\";\nimport type { PlatformStats } from \"../types/activity.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch tournaments for a specific game.\n */\nexport async function getGameTournaments(\n baseUrl: string,\n gameAddress: string,\n params?: Omit<TournamentListParams, \"gameAddress\">,\n ctx?: ApiContext,\n): Promise<PaginatedResult<Tournament>> {\n const normalized = normalizeAddress(gameAddress);\n const qs = buildQueryString({\n creator: params?.creator,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/games/${normalized}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<Tournament>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch tournament stats for a specific game.\n */\nexport async function getGameStats(\n baseUrl: string,\n gameAddress: string,\n ctx?: ApiContext,\n): Promise<PlatformStats> {\n const normalized = normalizeAddress(gameAddress);\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/games/${normalized}/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlatformStats>(result.data);\n}\n","import type { ActivityEvent, ActivityParams, PlatformStats, PrizeStats } from \"../types/activity.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch activity events with optional filtering.\n */\nexport async function getActivity(\n baseUrl: string,\n params?: ActivityParams,\n ctx?: ApiContext,\n): Promise<PaginatedResult<ActivityEvent>> {\n const qs = buildQueryString({\n event_type: params?.eventType,\n tournament_id: params?.tournamentId,\n player_address: params?.playerAddress,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/activity${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<ActivityEvent>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch platform-wide activity stats.\n */\nexport async function getActivityStats(\n baseUrl: string,\n ctx?: ApiContext,\n): Promise<PlatformStats> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/activity/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlatformStats>(result.data);\n}\n\n/**\n * Fetch platform-wide prize stats.\n */\nexport async function getPrizeStats(\n baseUrl: string,\n ctx?: ApiContext,\n): Promise<PrizeStats> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/activity/prize-stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PrizeStats>(result.data);\n}\n","import type { WSSubscribeOptions, WSEventHandler, WSEventMessage } from \"../types/websocket.js\";\n\ninterface WSManagerConfig {\n maxReconnectAttempts: number;\n reconnectBaseDelay: number;\n}\n\nconst DEFAULT_WS_CONFIG: WSManagerConfig = {\n maxReconnectAttempts: 10,\n reconnectBaseDelay: 1000,\n};\n\n/**\n * WebSocket manager with auto-reconnect and subscription management.\n */\nexport class WSManager {\n private ws: WebSocket | null = null;\n private readonly wsUrl: string;\n private readonly config: WSManagerConfig;\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private subscriptions = new Map<string, { options: WSSubscribeOptions; handler: WSEventHandler }>();\n private nextSubId = 1;\n private connected = false;\n private connectionListeners = new Set<(connected: boolean) => void>();\n\n constructor(wsUrl: string, config?: Partial<WSManagerConfig>) {\n this.wsUrl = wsUrl;\n this.config = { ...DEFAULT_WS_CONFIG, ...config };\n }\n\n /**\n * Open a WebSocket connection. No-op if already connected.\n */\n connect(): void {\n if (this.ws) return;\n\n try {\n this.ws = new WebSocket(this.wsUrl);\n\n this.ws.onopen = () => {\n this.connected = true;\n this.reconnectAttempts = 0;\n this.notifyConnectionChange(true);\n // Re-subscribe all active subscriptions\n for (const [, sub] of this.subscriptions) {\n this.sendSubscribe(sub.options);\n }\n };\n\n this.ws.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data as string) as WSEventMessage;\n if (message.type === \"event\") {\n for (const [, sub] of this.subscriptions) {\n sub.handler(message);\n }\n }\n } catch {\n // Ignore malformed messages\n }\n };\n\n this.ws.onclose = () => {\n this.connected = false;\n this.notifyConnectionChange(false);\n this.ws = null;\n this.attemptReconnect();\n };\n\n this.ws.onerror = () => {\n // onclose will fire after onerror\n };\n } catch {\n this.attemptReconnect();\n }\n }\n\n /**\n * Close the WebSocket connection and stop reconnecting.\n */\n disconnect(): void {\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.ws) {\n this.ws.onclose = null;\n this.ws.close();\n this.ws = null;\n }\n this.connected = false;\n this.notifyConnectionChange(false);\n this.reconnectAttempts = 0;\n }\n\n /**\n * Subscribe to channels with an optional tournament filter.\n * Returns an unsubscribe function.\n */\n subscribe(options: WSSubscribeOptions, handler: WSEventHandler): () => void {\n const id = String(this.nextSubId++);\n this.subscriptions.set(id, { options, handler });\n\n if (this.connected) {\n this.sendSubscribe(options);\n }\n\n return () => {\n this.subscriptions.delete(id);\n if (this.connected && this.ws) {\n this.ws.send(JSON.stringify({\n type: \"unsubscribe\",\n channels: options.channels,\n }));\n }\n };\n }\n\n /**\n * Register a callback for a single message. Convenience wrapper around subscribe.\n * Returns an unsubscribe function.\n */\n onMessage(callback: WSEventHandler): () => void {\n const id = String(this.nextSubId++);\n // Subscribe to all channels by using a passthrough handler\n this.subscriptions.set(id, {\n options: { channels: [] },\n handler: callback,\n });\n\n return () => {\n this.subscriptions.delete(id);\n };\n }\n\n /**\n * Whether the WebSocket is currently connected.\n */\n get isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Register a listener for connection state changes.\n * Returns an unsubscribe function.\n */\n onConnectionChange(listener: (connected: boolean) => void): () => void {\n this.connectionListeners.add(listener);\n return () => {\n this.connectionListeners.delete(listener);\n };\n }\n\n private notifyConnectionChange(isConnected: boolean): void {\n for (const listener of this.connectionListeners) {\n try {\n listener(isConnected);\n } catch {\n // Ignore listener errors\n }\n }\n }\n\n private sendSubscribe(options: WSSubscribeOptions): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n if (options.channels.length === 0) return;\n this.ws.send(JSON.stringify({\n type: \"subscribe\",\n channels: options.channels,\n tournamentIds: options.tournamentIds,\n }));\n }\n\n private attemptReconnect(): void {\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) return;\n if (this.subscriptions.size === 0) return;\n\n const delay = this.config.reconnectBaseDelay * Math.pow(2, this.reconnectAttempts);\n this.reconnectAttempts++;\n\n this.reconnectTimeout = setTimeout(() => {\n this.connect();\n }, Math.min(delay, 30_000));\n }\n}\n","export interface ChainConfig {\n rpcUrl: string;\n apiBaseUrl: string;\n wsUrl: string;\n budokanAddress: string;\n viewerAddress: string;\n}\n\nexport const CHAINS: Record<string, ChainConfig> = {\n mainnet: {\n rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_10\",\n apiBaseUrl: \"https://budokan-api-production.up.railway.app\",\n wsUrl: \"wss://budokan-api-production.up.railway.app/ws\",\n budokanAddress: \"0x0765e6f07c1a5cebe08aba7f840741242dffb1ed77ac619120501f540ec9a52a\",\n viewerAddress: \"0x0232fb32bd06e38f3555000f255c01812198418d5fced3b6246900725bf2f4d1\",\n },\n sepolia: {\n rpcUrl: \"https://starknet-sepolia.public.blastapi.io\",\n apiBaseUrl: \"https://budokan-api-sepolia.up.railway.app\",\n wsUrl: \"wss://budokan-api-sepolia.up.railway.app/ws\",\n budokanAddress: \"0x0105573bf9184f0a3da78dda70a87055e6aafc7b3fb6e331732a0d25675b7be5\",\n viewerAddress: \"0x0414fe2f48db1e3598a83f017d17b4d06cec180b160141fea9244054267c1ff1\",\n },\n} as const;\n\nexport function getChainConfig(chain: string): ChainConfig | undefined {\n return CHAINS[chain];\n}\n","export type ConnectionMode = \"api\" | \"rpc-fallback\" | \"offline\";\n\nexport interface ServiceStatus {\n available: boolean;\n lastChecked: number;\n latency: number | null;\n error: string | null;\n}\n\nexport interface ConnectionStatusState {\n api: ServiceStatus;\n rpc: ServiceStatus;\n mode: ConnectionMode;\n initialCheckComplete: boolean;\n}\n\ntype StatusListener = (status: ConnectionStatusState) => void;\n\nexport interface HealthTimingConfig {\n initialCheckDelay?: number;\n checkInterval?: number;\n checkTimeout?: number;\n}\n\nexport class ConnectionStatus {\n private status: ConnectionStatusState = {\n api: { available: true, lastChecked: 0, latency: null, error: null },\n rpc: { available: true, lastChecked: 0, latency: null, error: null },\n mode: \"api\",\n initialCheckComplete: false,\n };\n\n private listeners = new Set<StatusListener>();\n private checkInterval: ReturnType<typeof setInterval> | null = null;\n private initialCheckTimeout: ReturnType<typeof setTimeout> | null = null;\n private apiUrl: string;\n private rpcUrl: string;\n private readonly initialCheckDelay: number;\n private readonly checkIntervalMs: number;\n private readonly checkTimeoutMs: number;\n\n constructor(apiUrl: string, rpcUrl: string, config?: HealthTimingConfig) {\n this.apiUrl = apiUrl;\n this.rpcUrl = rpcUrl;\n this.initialCheckDelay = Math.max(config?.initialCheckDelay ?? 1_000, 100);\n this.checkIntervalMs = Math.max(config?.checkInterval ?? 30_000, 1_000);\n this.checkTimeoutMs = Math.max(config?.checkTimeout ?? 5_000, 1_000);\n }\n\n getStatus(): ConnectionStatusState {\n return { ...this.status };\n }\n\n get mode(): ConnectionMode {\n return this.status.mode;\n }\n\n subscribe(listener: StatusListener): () => void {\n this.listeners.add(listener);\n listener(this.status);\n return () => { this.listeners.delete(listener); };\n }\n\n startMonitoring(): void {\n if (this.checkInterval) return;\n this.initialCheckTimeout = setTimeout(() => {\n this.performHealthCheck();\n this.checkInterval = setInterval(() => this.performHealthCheck(), this.checkIntervalMs);\n }, this.initialCheckDelay);\n }\n\n stopMonitoring(): void {\n if (this.checkInterval) {\n clearInterval(this.checkInterval);\n this.checkInterval = null;\n }\n if (this.initialCheckTimeout) {\n clearTimeout(this.initialCheckTimeout);\n this.initialCheckTimeout = null;\n }\n }\n\n markApiUnavailable(error?: string): void {\n this.updateStatus({\n api: { ...this.status.api, available: false, lastChecked: Date.now(), error: error || \"Request failed\" },\n });\n }\n\n markRpcUnavailable(error?: string): void {\n this.updateStatus({\n rpc: { ...this.status.rpc, available: false, lastChecked: Date.now(), error: error || \"Request failed\" },\n });\n }\n\n async checkNow(): Promise<void> {\n await this.performHealthCheck();\n }\n\n destroy(): void {\n this.stopMonitoring();\n this.listeners.clear();\n }\n\n private async performHealthCheck(): Promise<void> {\n const [apiResult, rpcResult] = await Promise.all([\n this.checkApi(),\n this.checkRpc(),\n ]);\n this.updateStatus({ api: apiResult, rpc: rpcResult, initialCheckComplete: true });\n }\n\n private async checkApi(): Promise<ServiceStatus> {\n const startTime = Date.now();\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.checkTimeoutMs);\n const response = await fetch(`${this.apiUrl}/health`, { signal: controller.signal });\n clearTimeout(timeoutId);\n const latency = Date.now() - startTime;\n if (!response.ok) {\n return { available: false, lastChecked: Date.now(), latency, error: `HTTP ${response.status}` };\n }\n const data = await response.json() as Record<string, unknown>;\n const isAvailable = data.status === \"healthy\" || data.status === \"degraded\";\n return { available: isAvailable, lastChecked: Date.now(), latency, error: isAvailable ? null : `API status: ${data.status}` };\n } catch (error) {\n return { available: false, lastChecked: Date.now(), latency: null, error: error instanceof Error ? error.message : \"Network error\" };\n }\n }\n\n private async checkRpc(): Promise<ServiceStatus> {\n const startTime = Date.now();\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.checkTimeoutMs);\n const response = await fetch(this.rpcUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ jsonrpc: \"2.0\", method: \"starknet_chainId\", params: [], id: 1 }),\n signal: controller.signal,\n });\n clearTimeout(timeoutId);\n const latency = Date.now() - startTime;\n if (!response.ok) {\n return { available: false, lastChecked: Date.now(), latency, error: `HTTP ${response.status}` };\n }\n const data = await response.json() as Record<string, unknown>;\n const isHealthy = data.result !== undefined && !data.error;\n return { available: isHealthy, lastChecked: Date.now(), latency, error: isHealthy ? null : \"RPC error\" };\n } catch (error) {\n return { available: false, lastChecked: Date.now(), latency: null, error: error instanceof Error ? error.message : \"Network error\" };\n }\n }\n\n private updateStatus(partial: Partial<ConnectionStatusState>): void {\n const newStatus = { ...this.status, ...partial };\n\n if (newStatus.api.available) {\n newStatus.mode = \"api\";\n } else if (newStatus.rpc.available) {\n newStatus.mode = \"rpc-fallback\";\n } else {\n newStatus.mode = \"offline\";\n }\n\n const changed =\n this.status.api.available !== newStatus.api.available ||\n this.status.rpc.available !== newStatus.rpc.available ||\n this.status.mode !== newStatus.mode ||\n this.status.initialCheckComplete !== newStatus.initialCheckComplete;\n\n this.status = newStatus;\n\n if (changed) {\n this.listeners.forEach((listener) => {\n try { listener(this.status); } catch { /* ignore */ }\n });\n }\n }\n}\n","import type { ConnectionStatus } from \"./health.js\";\nimport { DataSourceError } from \"../errors/index.js\";\n\nexport async function withFallback<T>(\n primary: () => Promise<T>,\n fallback: () => Promise<T>,\n health?: ConnectionStatus,\n): Promise<T> {\n // If health monitoring shows primary source is down, skip it\n if (health) {\n const mode = health.mode;\n if (mode === \"rpc-fallback\") {\n // API is known-down, go straight to RPC fallback\n try {\n return await fallback();\n } catch (fallbackError) {\n throw fallbackError;\n }\n }\n\n if (mode === \"offline\") {\n // Both are known-down, still try both in order\n }\n }\n\n let primaryError: Error;\n try {\n return await primary();\n } catch (error) {\n primaryError = error as Error;\n // Report failure to health service\n if (health) {\n health.markApiUnavailable(primaryError.message);\n }\n }\n\n try {\n return await fallback();\n } catch (fallbackError) {\n if (health) {\n health.markRpcUnavailable((fallbackError as Error).message);\n }\n throw new DataSourceError(primaryError, fallbackError as Error);\n }\n}\n","import type { RpcProvider, Contract, Abi } from \"starknet\";\n\nlet starknetModule: typeof import(\"starknet\") | null = null;\n\nasync function getStarknet(): Promise<typeof import(\"starknet\")> {\n if (!starknetModule) {\n starknetModule = await import(\"starknet\");\n }\n return starknetModule;\n}\n\nexport async function createProvider(\n rpcUrl: string,\n headers?: Record<string, string>,\n): Promise<RpcProvider> {\n const { RpcProvider: StarknetRpcProvider } = await getStarknet();\n const provider = new StarknetRpcProvider({\n nodeUrl: rpcUrl,\n ...(headers && { headers }),\n });\n return provider;\n}\n\nexport async function createContract(\n abi: Abi,\n address: string,\n provider: RpcProvider,\n): Promise<Contract> {\n // Handle case where ABI might be wrapped in a default export\n let resolvedAbi: Abi = abi;\n if (abi && !Array.isArray(abi) && typeof abi === \"object\" && \"default\" in abi) {\n resolvedAbi = (abi as { default: Abi }).default;\n }\n\n const starknet = await getStarknet();\n\n return new starknet.Contract({ abi: resolvedAbi, address, providerOrAccount: provider });\n}\n","import type { Contract } from \"starknet\";\nimport { CairoCustomEnum } from \"starknet\";\nimport type { Tournament } from \"../types/tournament.js\";\nimport type { EntryRequirement, Distribution } from \"@provable-games/metagame-sdk\";\nimport type { LeaderboardEntry } from \"../types/leaderboard.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { Prize } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport type { Phase } from \"../types/tournament.js\";\nimport { RpcError } from \"../errors/index.js\";\nimport { num } from \"starknet\";\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction wrapRpcCall<T>(fn: () => Promise<T>, contractAddress?: string): Promise<T> {\n return fn().catch((error: unknown) => {\n throw new RpcError(\n error instanceof Error ? error.message : \"RPC call failed\",\n contractAddress,\n );\n });\n}\n\nfunction decodeShortString(value: unknown): string {\n if (!value) return \"\";\n const hex = num.toHex(value as bigint);\n if (hex === \"0x0\") return \"\";\n const hexStr = hex.slice(2);\n let result = \"\";\n for (let i = 0; i < hexStr.length; i += 2) {\n const charCode = parseInt(hexStr.slice(i, i + 2), 16);\n if (charCode === 0) break;\n result += String.fromCharCode(charCode);\n }\n return result;\n}\n\nfunction decodeByteArray(value: unknown): string {\n if (!value) return \"\";\n // ByteArray from Cairo is serialized as { data: felt252[], pending_word: felt252, pending_word_len: u32 }\n const obj = value as Record<string, unknown>;\n const data = obj.data as unknown[] | undefined;\n const pendingWord = obj.pending_word;\n const pendingWordLen = Number(obj.pending_word_len ?? 0);\n\n let result = \"\";\n\n // Each data element is a 31-byte chunk encoded as felt252\n if (data) {\n for (const chunk of data) {\n const hex = num.toHex(chunk as bigint).slice(2).padStart(62, \"0\");\n for (let i = 0; i < 62; i += 2) {\n const charCode = parseInt(hex.slice(i, i + 2), 16);\n if (charCode !== 0) result += String.fromCharCode(charCode);\n }\n }\n }\n\n // Pending word contains remaining bytes (< 31)\n if (pendingWord && pendingWordLen > 0) {\n const hex = num.toHex(pendingWord as bigint).slice(2).padStart(pendingWordLen * 2, \"0\");\n for (let i = 0; i < pendingWordLen * 2; i += 2) {\n const charCode = parseInt(hex.slice(i, i + 2), 16);\n if (charCode !== 0) result += String.fromCharCode(charCode);\n }\n }\n\n return result;\n}\n\n/** All Phase variant names for CairoCustomEnum */\nconst PHASE_VARIANTS = [\"Scheduled\", \"Registration\", \"Staging\", \"Live\", \"Submission\", \"Finalized\"] as const;\n\nconst PHASE_NAME_MAP: Record<Phase, string> = {\n scheduled: \"Scheduled\",\n registration: \"Registration\",\n staging: \"Staging\",\n live: \"Live\",\n submission: \"Submission\",\n finalized: \"Finalized\",\n};\n\n/** Convert SDK Phase string to Cairo enum argument for RPC calls */\nfunction phaseToRpcArg(phase: Phase): CairoCustomEnum {\n const activeVariant = PHASE_NAME_MAP[phase];\n const variants: Record<string, unknown> = {};\n for (const v of PHASE_VARIANTS) {\n variants[v] = v === activeVariant ? {} : undefined;\n }\n return new CairoCustomEnum(variants);\n}\n\n// =========================================================================\n// Parsers — raw on-chain structs → SDK types\n// =========================================================================\n\nfunction parseTournament(\n raw: unknown,\n entryCount: number,\n): Tournament {\n const obj = raw as Record<string, unknown>;\n const id = String(obj.id ?? \"0\");\n const createdAt = Number(obj.created_at ?? 0);\n const createdBy = num.toHex(obj.created_by as bigint);\n const creatorTokenId = obj.creator_token_id ? num.toHex(obj.creator_token_id as bigint) : null;\n\n // Metadata\n const metadata = obj.metadata as Record<string, unknown> | undefined;\n const name = metadata ? decodeShortString(metadata.name) : \"\";\n const description = metadata ? decodeByteArray(metadata.description) : \"\";\n\n // Schedule\n const sched = obj.schedule as Record<string, unknown> | undefined;\n const registrationStartDelay = Number(sched?.registration_start_delay ?? 0);\n const registrationEndDelay = Number(sched?.registration_end_delay ?? 0);\n const gameStartDelay = Number(sched?.game_start_delay ?? 0);\n const gameEndDelay = Number(sched?.game_end_delay ?? 0);\n const submissionDuration = Number(sched?.submission_duration ?? 0);\n\n // Compute absolute timestamps (matching contract: each delay is relative to its anchor)\n const createdAtStr = String(createdAt);\n const regStart = createdAt + registrationStartDelay;\n const regEnd = regStart + registrationEndDelay;\n const gameStart = createdAt + gameStartDelay;\n const gameEnd = gameStart + gameEndDelay;\n const subEnd = gameEnd + submissionDuration;\n const registrationStartTime = String(regStart);\n const registrationEndTime = String(regEnd);\n const gameStartTime = String(gameStart);\n const gameEndTime = String(gameEnd);\n const submissionEndTime = String(subEnd);\n\n // GameConfig\n const gc = obj.game_config as Record<string, unknown> | undefined;\n const gameAddress = gc ? num.toHex(gc.game_address as bigint) : \"\";\n const settingsId = Number(gc?.settings_id ?? 0);\n const soulbound = Boolean(gc?.soulbound);\n const paymaster = Boolean(gc?.paymaster);\n const clientUrl = gc?.client_url ? decodeOptionalByteArray(gc.client_url) : null;\n const renderer = gc?.renderer ? parseOptionalAddress(gc.renderer) : null;\n\n // LeaderboardConfig\n const lc = obj.leaderboard_config as Record<string, unknown> | undefined;\n const ascending = Boolean(lc?.ascending);\n const gameMustBeOver = Boolean(lc?.game_must_be_over);\n\n // EntryFee (Option)\n const entryFeeRaw = parseOption(obj.entry_fee);\n let entryFeeToken: string | null = null;\n let entryFeeAmount: string | null = null;\n let entryFee: Tournament[\"entryFee\"] = null;\n if (entryFeeRaw) {\n const ef = entryFeeRaw as Record<string, unknown>;\n entryFeeToken = num.toHex(ef.token_address as bigint);\n entryFeeAmount = String(ef.amount ?? \"0\");\n entryFee = {\n tokenAddress: entryFeeToken,\n amount: entryFeeAmount,\n tournamentCreatorShare: Number(ef.tournament_creator_share ?? 0),\n gameCreatorShare: Number(ef.game_creator_share ?? 0),\n refundShare: Number(ef.refund_share ?? 0),\n distribution: (ef.distribution as Distribution) ?? null,\n distributionCount: Number(ef.distribution_count ?? 0),\n };\n }\n\n // EntryRequirement (Option)\n const entryRequirement = parseOption(obj.entry_requirement) as EntryRequirement | null;\n const hasEntryRequirement = entryRequirement !== null;\n\n return {\n id,\n tournamentId: id,\n gameAddress,\n createdAt: new Date(createdAt * 1000).toISOString(),\n createdBy,\n creatorTokenId,\n name,\n description,\n registrationStartDelay,\n registrationEndDelay,\n gameStartDelay,\n gameEndDelay,\n submissionDuration,\n createdAtOnchain: createdAtStr,\n registrationStartTime,\n registrationEndTime,\n gameStartTime,\n gameEndTime,\n submissionEndTime,\n settingsId,\n soulbound,\n paymaster,\n clientUrl,\n renderer,\n leaderboardAscending: ascending,\n leaderboardGameMustBeOver: gameMustBeOver,\n entryFeeToken,\n entryFeeAmount,\n hasEntryRequirement,\n schedule: {\n registrationStartDelay,\n registrationEndDelay,\n gameStartDelay,\n gameEndDelay,\n submissionDuration,\n },\n gameConfig: {\n gameAddress,\n settingsId,\n soulbound,\n paymaster,\n clientUrl,\n renderer,\n },\n entryFee,\n entryRequirement,\n leaderboardConfig: { ascending, gameMustBeOver },\n entryCount,\n prizeCount: 0, // Not available from viewer\n submissionCount: 0, // Not available from viewer\n metadata: null,\n };\n}\n\nfunction parseLeaderboardEntry(raw: unknown): LeaderboardEntry {\n const obj = raw as Record<string, unknown>;\n return {\n position: Number(obj.position ?? 0),\n tokenId: num.toHex(obj.token_id as bigint),\n };\n}\n\nfunction parseRegistration(raw: unknown, tournamentId: string): Registration {\n const obj = raw as Record<string, unknown>;\n return {\n tournamentId,\n gameTokenId: num.toHex(obj.game_token_id as bigint),\n gameAddress: \"\", // Not in on-chain struct\n playerAddress: \"\", // Not in on-chain struct\n entryNumber: Number(obj.entry_id ?? 0),\n hasSubmitted: Boolean(obj.has_submitted),\n isBanned: Boolean(obj.is_banned),\n };\n}\n\nfunction parsePrize(raw: unknown): Prize {\n const obj = raw as Record<string, unknown>;\n const tokenTypeData = obj.token_type as Record<string, unknown> | undefined;\n\n // TokenTypeData is a Cairo enum: { erc20: ERC20Data } or { erc721: ERC721Data }\n let tokenType: \"erc20\" | \"erc721\" = \"erc20\";\n let amount: string | null = null;\n let tokenId: string | null = null;\n let distributionType: string | null = null;\n let distributionWeight: number | null = null;\n let distributionCount: number | null = null;\n let payoutPosition = 0;\n\n if (tokenTypeData) {\n // starknet.js v9 returns CairoCustomEnum with the active variant as a\n // non-undefined property. Check activeVariant() or the property value.\n const activeVariant = typeof tokenTypeData.activeVariant === \"function\"\n ? (tokenTypeData.activeVariant as () => string)()\n : tokenTypeData.erc20 !== undefined ? \"erc20\"\n : tokenTypeData.erc721 !== undefined ? \"erc721\"\n : null;\n\n // starknet.js v9 nests data under .variant.{name} or directly under .{name}\n const variantData = (tokenTypeData as Record<string, unknown>).variant as Record<string, unknown> | undefined;\n const unwrap = (name: string) =>\n (variantData?.[name] ?? tokenTypeData[name]) as Record<string, unknown> | undefined;\n\n if (activeVariant === \"erc20\") {\n const erc20 = unwrap(\"erc20\");\n tokenType = \"erc20\";\n amount = String(erc20?.amount ?? \"0\");\n\n // distribution is Option<Distribution> — unwrap the Option then the enum\n const distOption = erc20?.distribution as Record<string, unknown> | undefined;\n const distInner = distOption?.Some as Record<string, unknown> | undefined;\n if (distInner) {\n // Distribution enum: { variant: { Linear: n } } or { Linear: n }\n const distVariant = (distInner.variant ?? distInner) as Record<string, unknown>;\n const distType = Object.keys(distVariant).find((k) => distVariant[k] !== undefined);\n if (distType) {\n distributionType = distType.toLowerCase();\n const distValue = distVariant[distType];\n distributionWeight = distValue != null ? Number(distValue) : null;\n }\n }\n\n // distribution_count is Option<u32>\n const countOption = erc20?.distribution_count as Record<string, unknown> | undefined;\n distributionCount = countOption?.Some != null ? Number(countOption.Some) : null;\n } else if (activeVariant === \"erc721\") {\n const erc721 = unwrap(\"erc721\");\n tokenType = \"erc721\";\n tokenId = String(erc721?.id ?? \"0\");\n }\n }\n\n return {\n prizeId: String(obj.id ?? \"0\"),\n tournamentId: String(obj.context_id ?? \"0\"),\n payoutPosition,\n tokenAddress: num.toHex(obj.token_address as bigint),\n tokenType,\n amount,\n tokenId,\n distributionType,\n distributionWeight,\n distributionCount,\n sponsorAddress: num.toHex(obj.sponsor_address as bigint),\n };\n}\n\n/** Unwrap a Cairo Option — starknet.js may return { Some: value } / { None: {} } or just the value */\nfunction parseOption(raw: unknown): unknown | null {\n if (raw === undefined || raw === null) return null;\n const obj = raw as Record<string, unknown>;\n if (\"Some\" in obj) return obj.Some;\n if (\"None\" in obj) return null;\n // Some starknet.js versions flatten the option\n return raw;\n}\n\nfunction decodeOptionalByteArray(raw: unknown): string | null {\n const inner = parseOption(raw);\n if (!inner) return null;\n return decodeByteArray(inner);\n}\n\nfunction parseOptionalAddress(raw: unknown): string | null {\n const inner = parseOption(raw);\n if (!inner) return null;\n const hex = num.toHex(inner as bigint);\n return hex === \"0x0\" ? null : hex;\n}\n\n// =========================================================================\n// Viewer functions\n// =========================================================================\n\ninterface TournamentFilterResult {\n tournamentIds: string[];\n total: number;\n}\n\nfunction parseFilterResult(raw: unknown): TournamentFilterResult {\n const obj = raw as Record<string, unknown>;\n const ids = (obj.tournament_ids as unknown[])?.map((v) => String(v)) ?? [];\n const total = Number(obj.total ?? 0);\n return { tournamentIds: ids, total };\n}\n\nfunction parseTournamentFullState(raw: unknown): Tournament {\n const obj = raw as Record<string, unknown>;\n const entryCount = Number(obj.entry_count ?? 0);\n return parseTournament(obj.tournament, entryCount);\n}\n\n// --- Tournament listing ---\n\nexport async function viewerTournaments(\n contract: Contract,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments\", [offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\nexport async function viewerTournamentsByGame(\n contract: Contract,\n gameAddress: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_game\", [gameAddress, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\nexport async function viewerTournamentsByCreator(\n contract: Contract,\n creator: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_creator\", [creator, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\n/**\n * Map a single SDK phase to the group of on-chain phases it represents.\n * \"scheduled\" includes Scheduled + Registration + Staging (all pre-game).\n * \"live\" includes Live + Submission (active gameplay).\n * \"finalized\" stays as-is.\n */\nconst PHASE_GROUPS: Record<Phase, Phase[]> = {\n scheduled: [\"scheduled\", \"registration\", \"staging\"],\n registration: [\"registration\"],\n staging: [\"staging\"],\n live: [\"live\", \"submission\"],\n submission: [\"submission\"],\n finalized: [\"finalized\"],\n};\n\nexport async function viewerTournamentsByPhase(\n contract: Contract,\n phase: Phase,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n const phases = PHASE_GROUPS[phase];\n if (phases.length === 1) {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_phase\", [phaseToRpcArg(phase), offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n }\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_phases\", [phases.map(phaseToRpcArg), offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\n// --- Tournament detail ---\n\nexport async function viewerTournamentDetail(\n contract: Contract,\n tournamentId: string,\n): Promise<Tournament | null> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_detail\", [tournamentId]);\n const tournament = parseTournamentFullState(result);\n // Viewer returns a zero-filled struct for non-existent tournaments\n if (!tournament.gameAddress || tournament.gameAddress === \"0x0\") return null;\n return tournament;\n }, contract.address);\n}\n\nexport async function viewerTournamentsBatch(\n contract: Contract,\n tournamentIds: string[],\n): Promise<Tournament[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_batch\", [tournamentIds]);\n return (result as unknown[]).map(parseTournamentFullState);\n }, contract.address);\n}\n\n// --- Registrations ---\n\nexport async function viewerRegistrations(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations\", [tournamentId, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\nexport async function viewerRegistrationsByOwner(\n contract: Contract,\n tournamentId: string,\n owner: string,\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations_by_owner\", [tournamentId, owner, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\nexport async function viewerRegistrationsByTokenIds(\n contract: Contract,\n tournamentId: string,\n tokenIds: string[],\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations_by_token_ids\", [tournamentId, tokenIds, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\n// --- Leaderboard ---\n\nexport async function viewerLeaderboard(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<LeaderboardEntry[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"leaderboard\", [tournamentId, offset, limit]);\n return (result as unknown[]).map(parseLeaderboardEntry);\n }, contract.address);\n}\n\n// --- Prizes ---\n\nexport async function viewerPrizes(\n contract: Contract,\n tournamentId: string,\n): Promise<Prize[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_prizes\", [tournamentId]);\n return (result as unknown[]).map(parsePrize);\n }, contract.address);\n}\n\n// --- Reward Claims ---\n\nexport interface ViewerRewardClaim {\n rewardType: Record<string, unknown>;\n claimed: boolean;\n}\n\nexport interface ViewerRewardClaimResult {\n claims: ViewerRewardClaim[];\n total: number;\n totalClaimed: number;\n totalUnclaimed: number;\n}\n\nexport async function viewerRewardClaims(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<ViewerRewardClaimResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_reward_claims\", [tournamentId, offset, limit]);\n const obj = result as Record<string, unknown>;\n const claims = (obj.claims as unknown[])?.map((raw) => {\n const claim = raw as Record<string, unknown>;\n return {\n rewardType: claim.reward_type as Record<string, unknown>,\n claimed: Boolean(claim.claimed),\n };\n }) ?? [];\n return {\n claims,\n total: Number(obj.total ?? 0),\n totalClaimed: Number(obj.total_claimed ?? 0),\n totalUnclaimed: Number(obj.total_unclaimed ?? 0),\n };\n }, contract.address);\n}\n\n// --- Player Tournaments ---\n\nexport async function viewerPlayerTournaments(\n contract: Contract,\n playerAddress: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"player_tournaments\", [playerAddress, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n","[\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"BudokanViewerImpl\",\n \"interface_name\": \"budokan_interfaces::viewer::IBudokanViewer\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::TournamentFilterResult\",\n \"members\": [\n {\n \"name\": \"tournament_ids\",\n \"type\": \"core::array::Array::<core::integer::u64>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u64\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::Phase\",\n \"variants\": [\n {\n \"name\": \"Scheduled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Registration\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Staging\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Live\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Submission\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Finalized\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Metadata\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Schedule\",\n \"members\": [\n {\n \"name\": \"registration_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"registration_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"submission_duration\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::byte_array::ByteArray>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::GameConfig\",\n \"members\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"settings_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"soulbound\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"paymaster\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"client_url\",\n \"type\": \"core::option::Option::<core::byte_array::ByteArray>\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u16>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::distribution::Distribution\",\n \"variants\": [\n {\n \"name\": \"Linear\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Exponential\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Uniform\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Custom\",\n \"type\": \"core::array::Span::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::EntryFee\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"tournament_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"budokan_interfaces::budokan::EntryFee\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"metagame_extensions_interfaces::extension::ExtensionConfig\",\n \"members\": [\n {\n \"name\": \"address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"config\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirementType\",\n \"variants\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"extension\",\n \"type\": \"metagame_extensions_interfaces::extension::ExtensionConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirement\",\n \"members\": [\n {\n \"name\": \"entry_limit\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"entry_requirement_type\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirementType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirement\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"members\": [\n {\n \"name\": \"ascending\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"game_must_be_over\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Tournament\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::TournamentFullState\",\n \"members\": [\n {\n \"name\": \"tournament\",\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::registration::Registration\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RegistrationResult\",\n \"members\": [\n {\n \"name\": \"entries\",\n \"type\": \"core::array::Array::<game_components_interfaces::registration::Registration>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::LeaderboardEntryView\",\n \"members\": [\n {\n \"name\": \"position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u32>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC20Data\",\n \"members\": [\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC721Data\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::TokenTypeData\",\n \"variants\": [\n {\n \"name\": \"erc20\",\n \"type\": \"game_components_interfaces::prize::ERC20Data\"\n },\n {\n \"name\": \"erc721\",\n \"type\": \"game_components_interfaces::prize::ERC721Data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::PrizeData\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::PrizeType\",\n \"variants\": [\n {\n \"name\": \"Single\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"Distributed\",\n \"type\": \"(core::integer::u64, core::integer::u32)\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::EntryFeeRewardType\",\n \"variants\": [\n {\n \"name\": \"Position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"TournamentCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"GameCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Refund\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::RewardType\",\n \"variants\": [\n {\n \"name\": \"Prize\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n },\n {\n \"name\": \"EntryFee\",\n \"type\": \"budokan_interfaces::budokan::EntryFeeRewardType\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RewardClaimView\",\n \"members\": [\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\"\n },\n {\n \"name\": \"claimed\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RewardClaimResult\",\n \"members\": [\n {\n \"name\": \"claims\",\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::RewardClaimView>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"total_claimed\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"total_unclaimed\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"budokan_interfaces::viewer::IBudokanViewer\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"tournaments\",\n \"inputs\": [\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_game\",\n \"inputs\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_creator\",\n \"inputs\": [\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_phase\",\n \"inputs\": [\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_phases\",\n \"inputs\": [\n {\n \"name\": \"phases\",\n \"type\": \"core::array::Array::<budokan_interfaces::budokan::Phase>\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_game\",\n \"inputs\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_creator\",\n \"inputs\": [\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_phase\",\n \"inputs\": [\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_phases\",\n \"inputs\": [\n {\n \"name\": \"phases\",\n \"type\": \"core::array::Array::<budokan_interfaces::budokan::Phase>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_detail\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFullState\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_batch\",\n \"inputs\": [\n {\n \"name\": \"tournament_ids\",\n \"type\": \"core::array::Array::<core::integer::u64>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::TournamentFullState>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_registrations\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::RegistrationResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"leaderboard\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::LeaderboardEntryView>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_prizes\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<game_components_interfaces::prize::PrizeData>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_reward_claims\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::RewardClaimResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"player_tournaments\",\n \"inputs\": [\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableCamelOnlyImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnableCamelOnly\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnableCamelOnly\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"budokan_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan_viewer::budokan_viewer::BudokanViewer::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n }\n ]\n }\n]","[\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"GameContextImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::context::IMetagameContext\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::context::IMetagameContext\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"has_context\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"GameContextDetailsImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::context::IMetagameContextDetails\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u32>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::structs::metagame::GameContext\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<game_components_interfaces::structs::metagame::GameContext>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<game_components_interfaces::structs::metagame::GameContext>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::structs::metagame::GameContextDetails\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"id\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n },\n {\n \"name\": \"context\",\n \"type\": \"core::array::Span::<game_components_interfaces::structs::metagame::GameContext>\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::context::IMetagameContextDetails\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"context_details\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::structs::metagame::GameContextDetails\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"BudokanImpl\",\n \"interface_name\": \"budokan_interfaces::budokan::IBudokan\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Metadata\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Schedule\",\n \"members\": [\n {\n \"name\": \"registration_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"registration_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"submission_duration\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::byte_array::ByteArray>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::GameConfig\",\n \"members\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"settings_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"soulbound\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"paymaster\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"client_url\",\n \"type\": \"core::option::Option::<core::byte_array::ByteArray>\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u16>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::distribution::Distribution\",\n \"variants\": [\n {\n \"name\": \"Linear\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Exponential\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Uniform\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Custom\",\n \"type\": \"core::array::Span::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::EntryFee\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"tournament_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"budokan_interfaces::budokan::EntryFee\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"interfaces::extension::ExtensionConfig\",\n \"members\": [\n {\n \"name\": \"address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"config\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirementType\",\n \"variants\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"extension\",\n \"type\": \"interfaces::extension::ExtensionConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirement\",\n \"members\": [\n {\n \"name\": \"entry_limit\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"entry_requirement_type\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirementType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirement\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"members\": [\n {\n \"name\": \"ascending\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"game_must_be_over\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Tournament\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::Phase\",\n \"variants\": [\n {\n \"name\": \"Scheduled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Registration\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Staging\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Live\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Submission\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Finalized\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n {\n \"name\": \"low\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"high\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::NFTQualification\",\n \"members\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::QualificationProof\",\n \"variants\": [\n {\n \"name\": \"NFT\",\n \"type\": \"game_components_interfaces::entry_requirement::NFTQualification\"\n },\n {\n \"name\": \"Address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"Extension\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::QualificationProof>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::PrizeType\",\n \"variants\": [\n {\n \"name\": \"Single\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"Distributed\",\n \"type\": \"(core::integer::u64, core::integer::u32)\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::EntryFeeRewardType\",\n \"variants\": [\n {\n \"name\": \"Position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"TournamentCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"GameCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Refund\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::RewardType\",\n \"variants\": [\n {\n \"name\": \"Prize\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n },\n {\n \"name\": \"EntryFee\",\n \"type\": \"budokan_interfaces::budokan::EntryFeeRewardType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC20Data\",\n \"members\": [\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC721Data\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::TokenTypeData\",\n \"variants\": [\n {\n \"name\": \"erc20\",\n \"type\": \"game_components_interfaces::prize::ERC20Data\"\n },\n {\n \"name\": \"erc721\",\n \"type\": \"game_components_interfaces::prize::ERC721Data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::PrizeData\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"budokan_interfaces::budokan::IBudokan\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"total_tournaments\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_entries\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u32\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_leaderboard\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"current_phase\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_distribution_shares\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<core::integer::u16>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"create_tournament\",\n \"inputs\": [\n {\n \"name\": \"creator_rewards_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"metadata_value\",\n \"type\": \"core::integer::u16\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"enter_tournament\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"player_name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"qualification\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::QualificationProof>\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"metadata_value\",\n \"type\": \"core::integer::u16\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"(core::felt252, core::integer::u32)\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ban_entry\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"proof\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"submit_score\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"position\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim_reward\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"add_prize\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"position\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::prize::PrizeData\"\n }\n ],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"MetagameImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::core::IMetagame\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::core::IMetagame\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"context_address\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"default_token_address\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"SRC5Impl\",\n \"interface_name\": \"openzeppelin_interfaces::introspection::ISRC5\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::introspection::ISRC5\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"supports_interface\",\n \"inputs\": [\n {\n \"name\": \"interface_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"EntryFeeImpl\",\n \"interface_name\": \"game_components_interfaces::entry_fee::IEntryFee\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u16>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_fee::AdditionalShare\",\n \"members\": [\n {\n \"name\": \"recipient\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"share_bps\",\n \"type\": \"core::integer::u16\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<game_components_interfaces::entry_fee::AdditionalShare>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<game_components_interfaces::entry_fee::AdditionalShare>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_fee::EntryFeeConfig\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::option::Option::<core::integer::u16>\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::option::Option::<core::integer::u16>\"\n },\n {\n \"name\": \"additional_shares\",\n \"type\": \"core::array::Span::<game_components_interfaces::entry_fee::AdditionalShare>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_fee::EntryFeeConfig>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_fee::EntryFeeConfig\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::entry_fee::IEntryFee\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry_fee\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::option::Option::<game_components_interfaces::entry_fee::EntryFeeConfig>\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"EntryRequirementImpl\",\n \"interface_name\": \"game_components_interfaces::entry_requirement::IEntryRequirement\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::QualificationEntries\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"qualification_proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::entry_requirement::IEntryRequirement\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry_requirement\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_qualification_entries\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::entry_requirement::QualificationEntries\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"PrizeImpl\",\n \"interface_name\": \"game_components_interfaces::prize::IPrize\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::prize::IPrize\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_prize\",\n \"inputs\": [\n {\n \"name\": \"prize_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::prize::PrizeData\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_total_prizes\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_prize_claimed\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"prize_type\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"RegistrationImpl\",\n \"interface_name\": \"game_components_interfaces::registration::IRegistration\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::registration::Registration\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::registration::IRegistration\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::registration::Registration\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"entry_exists\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_entry_banned\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_entry_count\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u32\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"default_token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_embeddable_game_standard::metagame::metagame_component::MetagameComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_embeddable_game_standard::metagame::extensions::context::context::ContextComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::leaderboard::leaderboard_component::LeaderboardComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::registration::registration_component::RegistrationComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::entry_fee::entry_fee_component::EntryFeeComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::entry_requirement::entry_requirement_component::EntryRequirementComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::prize::prize_component::PrizeComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::TournamentCreated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::TournamentRegistration\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_number\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::LeaderboardUpdated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"token_ids\",\n \"type\": \"core::array::Span::<core::felt252>\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::PrizeAdded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"prize_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"payout_position\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::RewardClaimed\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"claimed\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::QualificationEntriesUpdated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"qualification_proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::budokan::Budokan::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"MetagameEvent\",\n \"type\": \"game_components_embeddable_game_standard::metagame::metagame_component::MetagameComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"ContextEvent\",\n \"type\": \"game_components_embeddable_game_standard::metagame::extensions::context::context::ContextComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"SRC5Event\",\n \"type\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"LeaderboardEvent\",\n \"type\": \"game_components_metagame::leaderboard::leaderboard_component::LeaderboardComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"RegistrationEvent\",\n \"type\": \"game_components_metagame::registration::registration_component::RegistrationComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"EntryFeeEvent\",\n \"type\": \"game_components_metagame::entry_fee::entry_fee_component::EntryFeeComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"EntryRequirementEvent\",\n \"type\": \"game_components_metagame::entry_requirement::entry_requirement_component::EntryRequirementComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"PrizeEvent\",\n \"type\": \"game_components_metagame::prize::prize_component::PrizeComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"TournamentCreated\",\n \"type\": \"budokan::events::TournamentCreated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"TournamentRegistration\",\n \"type\": \"budokan::events::TournamentRegistration\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"LeaderboardUpdated\",\n \"type\": \"budokan::events::LeaderboardUpdated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"PrizeAdded\",\n \"type\": \"budokan::events::PrizeAdded\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RewardClaimed\",\n \"type\": \"budokan::events::RewardClaimed\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"QualificationEntriesUpdated\",\n \"type\": \"budokan::events::QualificationEntriesUpdated\",\n \"kind\": \"nested\"\n }\n ]\n }\n]\n","import type { Contract } from \"starknet\";\nimport { RpcError } from \"../errors/index.js\";\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction wrapRpcCall<T>(fn: () => Promise<T>, contractAddress?: string): Promise<T> {\n return fn().catch((error: unknown) => {\n throw new RpcError(\n error instanceof Error ? error.message : \"RPC call failed\",\n contractAddress,\n );\n });\n}\n\n// =========================================================================\n// Budokan contract read calls\n// =========================================================================\n\n/**\n * Fetch the full Custom distribution shares array for a tournament via the\n * Budokan contract's `tournament_distribution_shares(id)` view.\n *\n * Returns an empty array for tournaments configured with Linear /\n * Exponential / Uniform (those don't have a custom shares array), or for\n * tournaments that aren't configured yet.\n *\n * Consumers going through the primary API path don't need this — the\n * indexer already sources the shares from the `TournamentCreated` event.\n * This is the RPC-fallback path for direct on-chain reads.\n */\nexport async function budokanTournamentDistributionShares(\n contract: Contract,\n tournamentId: string,\n): Promise<number[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_distribution_shares\", [tournamentId]);\n const arr = Array.isArray(result) ? (result as unknown[]) : [];\n return arr.map((v) => Number(v));\n }, contract.address);\n}\n","import type { RpcProvider, Contract, Abi } from \"starknet\";\nimport type { BudokanClientConfig } from \"./types/config.js\";\nimport type { Tournament, TournamentListParams } from \"./types/tournament.js\";\nimport type { LeaderboardEntry } from \"./types/leaderboard.js\";\nimport type { Registration } from \"./types/registration.js\";\nimport type { Prize, RewardClaim, RewardClaimSummary, PrizeAggregation } from \"./types/prize.js\";\nimport type { PlayerStats, PlayerTournament, PlayerTournamentParams } from \"./types/player.js\";\nimport type { ActivityEvent, ActivityParams, PlatformStats, PrizeStats } from \"./types/activity.js\";\nimport type { QualificationEntry } from \"./types/tournament.js\";\nimport type { PaginatedResult } from \"./types/common.js\";\nimport type { WSChannel, WSEventHandler } from \"./types/websocket.js\";\nimport type { ConnectionStatusState } from \"./datasource/health.js\";\n\nimport {\n getTournaments as apiGetTournaments,\n getTournament as apiGetTournament,\n getTournamentLeaderboard as apiGetTournamentLeaderboard,\n getTournamentRegistrations as apiGetTournamentRegistrations,\n getTournamentPrizes as apiGetTournamentPrizes,\n getTournamentRewardClaims as apiGetTournamentRewardClaims,\n getTournamentRewardClaimsSummary as apiGetTournamentRewardClaimsSummary,\n getTournamentQualifications as apiGetTournamentQualifications,\n getTournamentPrizeAggregation as apiGetTournamentPrizeAggregation,\n} from \"./api/tournaments.js\";\nimport {\n getPlayerTournaments as apiGetPlayerTournaments,\n getPlayerStats as apiGetPlayerStats,\n} from \"./api/players.js\";\nimport {\n getGameTournaments as apiGetGameTournaments,\n getGameStats as apiGetGameStats,\n} from \"./api/games.js\";\nimport {\n getActivity as apiGetActivity,\n getActivityStats as apiGetActivityStats,\n getPrizeStats as apiGetPrizeStats,\n} from \"./api/activity.js\";\nimport { WSManager } from \"./ws/manager.js\";\nimport { getChainConfig } from \"./chains/constants.js\";\nimport { ConnectionStatus } from \"./datasource/health.js\";\nimport { withFallback } from \"./datasource/resolver.js\";\nimport { RpcError } from \"./errors/index.js\";\nimport { createProvider, createContract } from \"./rpc/provider.js\";\nimport {\n viewerTournaments,\n viewerTournamentsByGame,\n viewerTournamentsByCreator,\n viewerTournamentsByPhase,\n viewerTournamentDetail,\n viewerTournamentsBatch,\n viewerRegistrations,\n viewerRegistrationsByOwner,\n viewerRegistrationsByTokenIds,\n viewerLeaderboard,\n viewerPrizes,\n viewerRewardClaims,\n viewerPlayerTournaments,\n} from \"./rpc/viewer.js\";\n\nimport viewerAbi from \"./rpc/abis/budokanViewer.json\";\nimport budokanAbi from \"./rpc/abis/budokan.json\";\nimport { budokanTournamentDistributionShares } from \"./rpc/budokan.js\";\n\n/** Resolved config with all defaults applied */\ninterface ResolvedConfig extends BudokanClientConfig {\n rpcUrl: string;\n viewerAddress: string;\n budokanAddress: string;\n}\n\n/**\n * Main client for interacting with the Budokan tournament system.\n *\n * Provides methods for querying tournaments, registrations, leaderboards,\n * prizes, player stats, and activity events. Supports real-time updates\n * via WebSocket subscriptions and automatic RPC fallback when the API is\n * unavailable.\n *\n * @example\n * ```ts\n * // API-only (default, backward compatible)\n * const client = new BudokanClient({\n * apiBaseUrl: \"https://budokan-api.provable.games\",\n * });\n *\n * // With RPC fallback\n * const client = new BudokanClient({\n * chain: \"mainnet\",\n * apiBaseUrl: \"https://budokan-api.provable.games\",\n * viewerAddress: \"0x...\",\n * });\n *\n * // RPC-only (bypass API entirely)\n * const client = new BudokanClient({\n * primarySource: \"rpc\",\n * rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_10\",\n * viewerAddress: \"0x...\",\n * });\n * ```\n */\nexport class BudokanClient {\n private readonly resolvedConfig: ResolvedConfig;\n private readonly wsManager: WSManager;\n private readonly connectionStatus: ConnectionStatus;\n private cachedProvider: RpcProvider | null = null;\n private cachedViewerContract: Contract | null = null;\n private cachedBudokanContract: Contract | null = null;\n\n constructor(config: BudokanClientConfig) {\n // Merge user config with chain defaults\n const chainConfig = config.chain ? getChainConfig(config.chain) : undefined;\n this.resolvedConfig = {\n ...config,\n apiBaseUrl: config.apiBaseUrl ?? chainConfig?.apiBaseUrl ?? \"\",\n rpcUrl: config.rpcUrl ?? chainConfig?.rpcUrl ?? \"\",\n viewerAddress: config.viewerAddress ?? chainConfig?.viewerAddress ?? \"\",\n budokanAddress: config.budokanAddress ?? chainConfig?.budokanAddress ?? \"\",\n };\n\n const wsUrl = config.wsUrl ?? chainConfig?.wsUrl\n ?? this.resolvedConfig.apiBaseUrl.replace(/^http/, \"ws\").replace(/\\/$/, \"\") + \"/ws\";\n this.wsManager = new WSManager(wsUrl);\n\n this.connectionStatus = new ConnectionStatus(\n this.resolvedConfig.apiBaseUrl,\n this.resolvedConfig.rpcUrl,\n config.health,\n );\n\n // Start health monitoring if both sources are configured\n if (this.resolvedConfig.apiBaseUrl && this.resolvedConfig.rpcUrl) {\n this.connectionStatus.startMonitoring();\n }\n }\n\n // ---- Configuration ----\n\n /** Returns the resolved configuration. */\n get clientConfig(): BudokanClientConfig {\n return { ...this.resolvedConfig };\n }\n\n /** Whether the WebSocket is currently connected. */\n get wsConnected(): boolean {\n return this.wsManager.isConnected;\n }\n\n // ---- Connection status ----\n\n /** Returns the current connection status (API, RPC, mode). */\n getConnectionStatus(): ConnectionStatusState {\n return this.connectionStatus.getStatus();\n }\n\n /** Subscribe to connection status changes. Returns an unsubscribe function. */\n onConnectionStatusChange(listener: (status: ConnectionStatusState) => void): () => void {\n return this.connectionStatus.subscribe(listener);\n }\n\n // ---- Lazy RPC getters ----\n\n private async getProvider(): Promise<RpcProvider> {\n if (this.cachedProvider) return this.cachedProvider;\n if (!this.resolvedConfig.rpcUrl) {\n throw new RpcError(\"No rpcUrl configured\");\n }\n if (this.resolvedConfig.provider) {\n this.cachedProvider = this.resolvedConfig.provider;\n return this.cachedProvider;\n }\n this.cachedProvider = await createProvider(\n this.resolvedConfig.rpcUrl,\n this.resolvedConfig.rpcHeaders,\n );\n return this.cachedProvider;\n }\n\n private async getViewerContract(): Promise<Contract> {\n if (this.cachedViewerContract) return this.cachedViewerContract;\n if (!this.resolvedConfig.viewerAddress) {\n throw new RpcError(\"No viewerAddress configured. Set viewerAddress in config or use a chain preset with a deployed viewer contract.\");\n }\n const provider = await this.getProvider();\n this.cachedViewerContract = await createContract(\n viewerAbi as Abi,\n this.resolvedConfig.viewerAddress,\n provider,\n );\n return this.cachedViewerContract;\n }\n\n private async getBudokanContract(): Promise<Contract> {\n if (this.cachedBudokanContract) return this.cachedBudokanContract;\n if (!this.resolvedConfig.budokanAddress) {\n throw new RpcError(\"No budokanAddress configured. Set budokanAddress in config or use a chain preset with a deployed Budokan contract.\");\n }\n const provider = await this.getProvider();\n this.cachedBudokanContract = await createContract(\n budokanAbi as Abi,\n this.resolvedConfig.budokanAddress,\n provider,\n );\n return this.cachedBudokanContract;\n }\n\n // ---- API context ----\n\n private get apiCtx() {\n return {\n retryAttempts: this.resolvedConfig.retryAttempts,\n retryDelay: this.resolvedConfig.retryDelay,\n timeout: this.resolvedConfig.timeout,\n };\n }\n\n // ---- Tournament Queries ----\n\n /**\n * Fetch a paginated list of tournaments with optional filtering.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournaments(params?: TournamentListParams): Promise<PaginatedResult<Tournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<Tournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n\n // Choose the appropriate viewer filter function\n let filterResult: { tournamentIds: string[]; total: number };\n if (params?.phase) {\n filterResult = await viewerTournamentsByPhase(contract, params.phase, offset, limit);\n } else if (params?.gameAddress) {\n filterResult = await viewerTournamentsByGame(contract, params.gameAddress, offset, limit);\n } else if (params?.creator) {\n filterResult = await viewerTournamentsByCreator(contract, params.creator, offset, limit);\n } else {\n filterResult = await viewerTournaments(contract, offset, limit);\n }\n\n // Batch-fetch full tournament data for the returned IDs\n let data: Tournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n data = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n\n // Fetch prize aggregation if requested\n if (params?.includePrizeSummary) {\n const prizePromises = data.map((t) =>\n viewerPrizes(contract, t.id).catch(() => [] as Prize[]),\n );\n const allPrizes = await Promise.all(prizePromises);\n data = data.map((t, i) => {\n const prizes = allPrizes[i];\n if (prizes.length === 0) return t;\n // Build aggregation by token\n const tokenMap = new Map<string, { tokenAddress: string; tokenType: string; totalAmount: bigint; nftCount: number }>();\n for (const p of prizes) {\n const key = p.tokenAddress;\n const existing = tokenMap.get(key);\n if (existing) {\n existing.totalAmount += BigInt(p.amount ?? \"0\");\n if (p.tokenType === \"erc721\") existing.nftCount += 1;\n } else {\n tokenMap.set(key, {\n tokenAddress: p.tokenAddress,\n tokenType: p.tokenType,\n totalAmount: BigInt(p.amount ?? \"0\"),\n nftCount: p.tokenType === \"erc721\" ? 1 : 0,\n });\n }\n }\n return {\n ...t,\n prizeAggregation: Array.from(tokenMap.values()).map((v) => ({\n tokenAddress: v.tokenAddress,\n tokenType: v.tokenType,\n totalAmount: v.totalAmount.toString(),\n nftCount: v.nftCount,\n })),\n };\n });\n }\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournaments(this.resolvedConfig.apiBaseUrl, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch a single tournament by its ID.\n * Supports RPC fallback when API is unavailable.\n *\n * On the RPC-fallback path, Custom distribution shares are populated via\n * a follow-up call to `tournament_distribution_shares(id)` so callers see\n * the same shape regardless of data source (the API/indexer path fills\n * shares from the `TournamentCreated` event).\n */\n async getTournament(tournamentId: string): Promise<Tournament | null> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n const tournament = await viewerTournamentDetail(contract, tournamentId);\n if (tournament) {\n await this.fillCustomSharesIfEmpty(tournament);\n }\n return tournament;\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n try {\n return await apiGetTournament(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx);\n } catch {\n // API 404 or network error — try RPC fallback\n try {\n this.connectionStatus.markApiUnavailable();\n return await rpcFallback();\n } catch {\n return null;\n }\n }\n }\n\n /**\n * If the tournament's entry-fee distribution is `Custom` with an empty\n * shares array (the on-chain `tournament()` view returns empty spans by\n * design to keep the hot path small), fetch the shares via the\n * dedicated view and graft them back onto the distribution object.\n *\n * Detection is tolerant: the Distribution shape may appear as\n * `{ variant: { Custom: [] } }` or a flattened `{ Custom: [] }`\n * depending on the starknet.js version / serialization path.\n */\n private async fillCustomSharesIfEmpty(tournament: Tournament): Promise<void> {\n const dist = tournament.entryFee?.distribution as unknown;\n if (!dist || typeof dist !== \"object\") return;\n\n const bag =\n ((dist as { variant?: Record<string, unknown> }).variant ??\n (dist as Record<string, unknown>)) as Record<string, unknown>;\n const customValue = bag.Custom ?? bag.custom;\n if (!Array.isArray(customValue) || customValue.length > 0) return;\n\n try {\n const shares = await this.getTournamentDistributionShares(tournament.id);\n if (shares.length > 0) {\n // Overwrite in place — Distribution is typed as opaque, so cast.\n (bag as Record<string, unknown>).Custom = shares;\n }\n } catch {\n // Silent — caller gets the empty array; auto-fill is best-effort.\n }\n }\n\n /**\n * Fetch the Custom distribution shares for a tournament via the Budokan\n * contract's `tournament_distribution_shares(id)` view.\n *\n * Returns an empty array for tournaments configured with\n * `Linear` / `Exponential` / `Uniform` distributions (those don't have a\n * shares array), and for tournaments without an entry fee.\n *\n * This is a direct RPC call — consumers going through the primary API\n * path typically don't need it, since the indexer sources Custom shares\n * from the `TournamentCreated` event and exposes them via\n * `getTournament()`'s `entryFee.distribution`. Use this when you need a\n * fresh on-chain read or you're operating in RPC-only mode.\n */\n async getTournamentDistributionShares(tournamentId: string): Promise<number[]> {\n const contract = await this.getBudokanContract();\n return budokanTournamentDistributionShares(contract, tournamentId);\n }\n\n /**\n * Fetch the leaderboard for a tournament.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournamentLeaderboard(tournamentId: string): Promise<LeaderboardEntry[]> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n // Fetch a large page; on-chain leaderboards are typically small\n return viewerLeaderboard(contract, tournamentId, 0, 1000);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentLeaderboard(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch registrations for a tournament.\n * Supports RPC fallback when API is unavailable.\n * Note: In RPC mode, `playerAddress` and `gameAddress` fields will be empty strings,\n * and filter params (`playerAddress`, `gameTokenIds`, `hasSubmitted`, `isBanned`)\n * are applied via on-chain viewer functions where supported.\n */\n async getTournamentRegistrations(\n tournamentId: string,\n params?: { playerAddress?: string; gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n ): Promise<PaginatedResult<Registration>> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n if (params?.playerAddress) {\n return viewerRegistrationsByOwner(contract, tournamentId, params.playerAddress, offset, limit);\n }\n if (params?.gameTokenIds?.length) {\n return viewerRegistrationsByTokenIds(contract, tournamentId, params.gameTokenIds, offset, limit);\n }\n return viewerRegistrations(contract, tournamentId, offset, limit);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRegistrations(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch prizes for a tournament.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournamentPrizes(tournamentId: string): Promise<Prize[]> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n return viewerPrizes(contract, tournamentId);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentPrizes(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n // ---- Player Queries (API-only, no on-chain equivalent) ----\n\n /**\n * Fetch tournaments that a player has registered for.\n * Supports RPC fallback via viewer contract.\n */\n async getPlayerTournaments(\n address: string,\n params?: PlayerTournamentParams,\n ): Promise<PaginatedResult<PlayerTournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<PlayerTournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n const filterResult = await viewerPlayerTournaments(contract, address, offset, limit);\n\n let data: PlayerTournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n const tournaments = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n data = tournaments.map((t) => ({\n ...t,\n tournamentId: t.id,\n })) as unknown as PlayerTournament[];\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetPlayerTournaments(this.resolvedConfig.apiBaseUrl, address, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch stats for a player.\n * API-only — no RPC fallback available.\n */\n async getPlayerStats(address: string): Promise<PlayerStats> {\n return apiGetPlayerStats(this.resolvedConfig.apiBaseUrl, address, this.apiCtx);\n }\n\n // ---- Game Queries ----\n\n /**\n * Fetch tournaments for a specific game.\n * Supports RPC fallback when API is unavailable.\n */\n async getGameTournaments(\n gameAddress: string,\n params?: Omit<TournamentListParams, \"gameAddress\">,\n ): Promise<PaginatedResult<Tournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<Tournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n const filterResult = await viewerTournamentsByGame(contract, gameAddress, offset, limit);\n\n let data: Tournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n data = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetGameTournaments(this.resolvedConfig.apiBaseUrl, gameAddress, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch tournament stats for a specific game.\n * API-only — no RPC fallback available.\n */\n async getGameStats(gameAddress: string): Promise<PlatformStats> {\n return apiGetGameStats(this.resolvedConfig.apiBaseUrl, gameAddress, this.apiCtx);\n }\n\n // ---- Reward Claims & Qualifications ----\n\n /**\n * Fetch reward claims for a tournament.\n * Supports RPC fallback via viewer contract.\n */\n async getTournamentRewardClaims(\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ): Promise<PaginatedResult<RewardClaim>> {\n const rpcFallback = async (): Promise<PaginatedResult<RewardClaim>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 100;\n const result = await viewerRewardClaims(contract, tournamentId, offset, limit);\n const data: RewardClaim[] = result.claims.map((c) => ({\n tournamentId,\n rewardType: c.rewardType as RewardClaim[\"rewardType\"],\n claimed: c.claimed,\n }));\n return { data, total: result.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRewardClaims(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch reward claims summary for a tournament.\n * Supports RPC fallback via viewer contract.\n */\n async getTournamentRewardClaimsSummary(tournamentId: string): Promise<RewardClaimSummary> {\n const rpcFallback = async (): Promise<RewardClaimSummary> => {\n const contract = await this.getViewerContract();\n const result = await viewerRewardClaims(contract, tournamentId, 0, 0);\n return {\n totalPrizes: result.total,\n totalClaimed: result.totalClaimed,\n totalUnclaimed: result.totalUnclaimed,\n };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRewardClaimsSummary(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch qualifications for a tournament.\n * API-only -- no RPC fallback available.\n */\n async getTournamentQualifications(\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ): Promise<PaginatedResult<QualificationEntry>> {\n return apiGetTournamentQualifications(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx);\n }\n\n /**\n * Fetch prize aggregation for a tournament.\n * API-only -- no RPC fallback available.\n */\n async getTournamentPrizeAggregation(tournamentId: string): Promise<PrizeAggregation[]> {\n return apiGetTournamentPrizeAggregation(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx);\n }\n\n // ---- Activity Queries (API-only, activity is indexed) ----\n\n /**\n * Fetch activity events with optional filtering.\n * API-only — no RPC fallback available.\n */\n async getActivity(params?: ActivityParams): Promise<PaginatedResult<ActivityEvent>> {\n return apiGetActivity(this.resolvedConfig.apiBaseUrl, params, this.apiCtx);\n }\n\n /**\n * Fetch platform-wide activity stats.\n * API-only — no RPC fallback available.\n */\n async getActivityStats(): Promise<PlatformStats> {\n return apiGetActivityStats(this.resolvedConfig.apiBaseUrl, this.apiCtx);\n }\n\n /**\n * Fetch platform-wide prize stats.\n * API-only — no RPC fallback available.\n */\n async getPrizeStats(): Promise<PrizeStats> {\n return apiGetPrizeStats(this.resolvedConfig.apiBaseUrl, this.apiCtx);\n }\n\n // ---- WebSocket ----\n\n /**\n * Open a WebSocket connection for real-time updates.\n */\n connect(): void {\n this.wsManager.connect();\n }\n\n /**\n * Close the WebSocket connection.\n */\n disconnect(): void {\n this.wsManager.disconnect();\n }\n\n /**\n * Stop health monitoring and close all connections.\n */\n destroy(): void {\n this.connectionStatus.destroy();\n this.wsManager.disconnect();\n }\n\n /**\n * Subscribe to WebSocket channels with optional tournament filtering.\n * Returns an unsubscribe function.\n */\n subscribe(\n channels: WSChannel[],\n handler: WSEventHandler,\n tournamentIds?: string[],\n ): () => void {\n return this.wsManager.subscribe({ channels, tournamentIds }, handler);\n }\n\n /**\n * Register a listener for WebSocket connection state changes.\n * Returns an unsubscribe function.\n */\n onWsConnectionChange(listener: (connected: boolean) => void): () => void {\n return this.wsManager.onConnectionChange(listener);\n }\n}\n\n/**\n * Factory function for creating a BudokanClient instance.\n */\nexport function createBudokanClient(config: BudokanClientConfig): BudokanClient {\n return new BudokanClient(config);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/index.ts","../src/utils/retry.ts","../src/api/base.ts","../src/utils/mappers.ts","../src/api/tournaments.ts","../src/utils/address.ts","../src/api/players.ts","../src/api/games.ts","../src/api/activity.ts","../src/ws/manager.ts","../src/chains/constants.ts","../src/datasource/health.ts","../src/datasource/resolver.ts","../src/rpc/provider.ts","../src/rpc/viewer.ts","../src/rpc/abis/budokanViewer.json","../src/rpc/abis/budokan.json","../src/rpc/budokan.ts","../src/client.ts"],"names":["fetchOpts","wrapRpcCall"],"mappings":"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","file":"index.js","sourcesContent":["export class BudokanError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BudokanError\";\n }\n}\n\nexport class BudokanApiError extends BudokanError {\n readonly status: number;\n readonly statusText: string;\n\n constructor(message: string, status: number, statusText: string = \"\") {\n super(message);\n this.name = \"BudokanApiError\";\n this.status = status;\n this.statusText = statusText;\n }\n}\n\nexport class BudokanTimeoutError extends BudokanError {\n constructor(message = \"Request timed out\") {\n super(message);\n this.name = \"BudokanTimeoutError\";\n }\n}\n\nexport class BudokanConnectionError extends BudokanError {\n constructor(message = \"Connection failed\") {\n super(message);\n this.name = \"BudokanConnectionError\";\n }\n}\n\nexport class TournamentNotFoundError extends BudokanError {\n readonly tournamentId: string;\n\n constructor(tournamentId: string) {\n super(`Tournament not found: ${tournamentId}`);\n this.name = \"TournamentNotFoundError\";\n this.tournamentId = tournamentId;\n }\n}\n\nexport class RpcError extends BudokanError {\n readonly contractAddress?: string;\n\n constructor(message: string, contractAddress?: string) {\n super(message);\n this.name = \"RpcError\";\n this.contractAddress = contractAddress;\n }\n}\n\nexport class DataSourceError extends BudokanError {\n readonly primaryError: Error;\n readonly fallbackError: Error;\n\n constructor(primaryError: Error, fallbackError: Error) {\n super(`Both data sources failed. Primary: ${primaryError.message}. Fallback: ${fallbackError.message}`);\n this.name = \"DataSourceError\";\n this.primaryError = primaryError;\n this.fallbackError = fallbackError;\n }\n}\n\nexport function isNonRetryableError(error: unknown): boolean {\n if (error instanceof TournamentNotFoundError) return true;\n if (error instanceof BudokanApiError && error.status >= 400 && error.status < 500 && error.status !== 429) {\n return true;\n }\n return false;\n}\n","import { isNonRetryableError, BudokanTimeoutError } from \"../errors/index.js\";\n\nexport function calculateBackoff(\n attempt: number,\n baseDelay: number,\n maxDelay: number,\n): number {\n let delay = baseDelay * Math.pow(2, attempt);\n if (delay > maxDelay) delay = maxDelay;\n const minDelay = delay / 2;\n const jitter = Math.random() * (delay - minDelay);\n return minDelay + jitter;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n attempts: number = 3,\n delay: number = 1000,\n): Promise<T> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (isNonRetryableError(error)) {\n throw error;\n }\n\n if (attempt === attempts - 1) break;\n\n const backoff = calculateBackoff(attempt, delay, delay * 8);\n await sleep(backoff);\n }\n }\n\n throw lastError ?? new BudokanTimeoutError(\"Unknown error after retries\");\n}\n","import { BudokanApiError, BudokanTimeoutError, BudokanConnectionError } from \"../errors/index.js\";\nimport { withRetry } from \"../utils/retry.js\";\n\nexport interface ApiFetchOptions {\n method?: string;\n headers?: Record<string, string>;\n body?: unknown;\n signal?: AbortSignal;\n timeout?: number;\n retryAttempts?: number;\n retryDelay?: number;\n}\n\nconst DEFAULT_TIMEOUT = 10_000;\nconst DEFAULT_RETRY_ATTEMPTS = 3;\nconst DEFAULT_RETRY_DELAY = 1000;\n\n/**\n * Fetch JSON from an API endpoint with retry logic, timeout, and error handling.\n */\nexport async function apiFetch<T>(url: string, options: ApiFetchOptions = {}): Promise<T> {\n const {\n method = \"GET\",\n headers = {},\n body,\n signal,\n timeout = DEFAULT_TIMEOUT,\n retryAttempts = DEFAULT_RETRY_ATTEMPTS,\n retryDelay = DEFAULT_RETRY_DELAY,\n } = options;\n\n return withRetry(\n async () => {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n // Link external signal\n if (signal) {\n if (signal.aborted) {\n clearTimeout(timeoutId);\n throw new BudokanTimeoutError(\"Request was aborted\");\n }\n signal.addEventListener(\"abort\", () => controller.abort(), { once: true });\n }\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({}));\n throw new BudokanApiError(\n (errorBody as Record<string, string>).error ?? `API error: ${response.status}`,\n response.status,\n response.statusText,\n );\n }\n\n return (await response.json()) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof BudokanApiError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n if (signal?.aborted) throw new BudokanTimeoutError(\"Request was aborted\");\n throw new BudokanTimeoutError();\n }\n throw new BudokanConnectionError(\n error instanceof Error ? error.message : \"Connection failed\",\n );\n }\n },\n retryAttempts,\n retryDelay,\n );\n}\n\n/**\n * Extract pagination from API response.\n * The API wraps pagination in a `pagination` object, but the SDK\n * PaginatedResult type uses flat fields (total, limit, offset).\n */\nexport function extractPagination(result: Record<string, unknown>, defaults?: { limit?: number; offset?: number }): {\n total: number | undefined;\n limit: number;\n offset: number;\n} {\n const pagination = result.pagination as { total?: number; limit?: number; offset?: number } | undefined;\n return {\n total: pagination?.total ?? (result.total as number | undefined),\n limit: pagination?.limit ?? (result.limit as number | undefined) ?? defaults?.limit ?? 50,\n offset: pagination?.offset ?? (result.offset as number | undefined) ?? defaults?.offset ?? 0,\n };\n}\n\n/**\n * Build a query string from a record of key-value pairs.\n * Undefined and null values are omitted.\n */\nexport function buildQueryString(params: Record<string, string | number | boolean | undefined | null>): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n qs.set(key, String(value));\n }\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n","/**\n * Convert a snake_case string to camelCase.\n */\nfunction toCamelCase(str: string): string {\n return str.replace(/_([a-z])/g, (_, letter: string) => letter.toUpperCase());\n}\n\n/**\n * Convert a camelCase string to snake_case.\n */\nfunction toSnakeCase(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Deeply convert all keys in an object from snake_case to camelCase.\n */\nexport function snakeToCamel<T>(obj: unknown): T {\n if (Array.isArray(obj)) {\n return obj.map((item) => snakeToCamel(item)) as T;\n }\n if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n result[toCamelCase(key)] = snakeToCamel(value);\n }\n return result as T;\n }\n return obj as T;\n}\n\n/**\n * Deeply convert all keys in an object from camelCase to snake_case.\n */\nexport function camelToSnake<T>(obj: unknown): T {\n if (Array.isArray(obj)) {\n return obj.map((item) => camelToSnake(item)) as T;\n }\n if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n result[toSnakeCase(key)] = camelToSnake(value);\n }\n return result as T;\n }\n return obj as T;\n}\n","import type { Tournament, TournamentListParams, QualificationEntry } from \"../types/tournament.js\";\nimport type { LeaderboardEntry } from \"../types/leaderboard.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { Prize, RewardClaim, RewardClaimSummary, PrizeAggregation } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\n\n/** Normalize tournament: ensure both `id` and `tournamentId` exist */\nfunction normalizeTournament(raw: Record<string, unknown>): Tournament {\n const t = snakeToCamel<Tournament & { id?: string }>(raw);\n // API returns `id`, SDK type uses `tournamentId` — keep both in sync\n const id = t.id ?? t.tournamentId;\n return { ...t, id, tournamentId: id };\n}\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch a paginated list of tournaments.\n */\nexport async function getTournaments(\n baseUrl: string,\n params?: TournamentListParams,\n ctx?: ApiContext,\n): Promise<PaginatedResult<Tournament>> {\n const qs = buildQueryString({\n game_address: params?.gameAddress,\n creator: params?.creator,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n sort: params?.sort,\n from_id: params?.fromId,\n exclude_ids: params?.excludeIds?.join(\",\"),\n whitelisted_extensions: params?.whitelistedExtensions?.join(\",\"),\n include_prizes: params?.includePrizeSummary,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => normalizeTournament(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch a single tournament by ID.\n */\nexport async function getTournament(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<Tournament> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/tournaments/${tournamentId}`,\n fetchOpts(ctx),\n );\n return normalizeTournament(result.data);\n}\n\n/**\n * Fetch the leaderboard for a tournament.\n */\nexport async function getTournamentLeaderboard(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<LeaderboardEntry[]> {\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/leaderboard`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<LeaderboardEntry>(item));\n}\n\n/**\n * Fetch registrations for a tournament.\n */\nexport async function getTournamentRegistrations(\n baseUrl: string,\n tournamentId: string,\n params?: { playerAddress?: string; gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<Registration>> {\n const qs = buildQueryString({\n player_address: params?.playerAddress,\n game_token_ids: params?.gameTokenIds?.length ? params.gameTokenIds.join(\",\") : undefined,\n has_submitted: params?.hasSubmitted,\n is_banned: params?.isBanned,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/registrations${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<Registration>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch prizes for a tournament.\n */\nexport async function getTournamentPrizes(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<Prize[]> {\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/prizes`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<Prize>(item));\n}\n\n/**\n * Fetch reward claims for a tournament.\n */\nexport async function getTournamentRewardClaims(\n baseUrl: string,\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<RewardClaim>> {\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/reward-claims${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<RewardClaim>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch reward claims summary for a tournament.\n */\nexport async function getTournamentRewardClaimsSummary(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<RewardClaimSummary> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/tournaments/${tournamentId}/reward-claims/summary`,\n fetchOpts(ctx),\n );\n return snakeToCamel<RewardClaimSummary>(result.data);\n}\n\n/**\n * Fetch qualifications for a tournament.\n */\nexport async function getTournamentQualifications(\n baseUrl: string,\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<QualificationEntry>> {\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/qualifications${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<QualificationEntry>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch prize aggregation for a tournament.\n */\nexport async function getTournamentPrizeAggregation(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<PrizeAggregation[]> {\n const qs = buildQueryString({ include_aggregation: true });\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/prizes${qs}`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<PrizeAggregation>(item));\n}\n","/**\n * Normalize a Starknet address to a 0x-prefixed, 66-character lowercase hex string.\n */\nexport function normalizeAddress(address: string): string {\n const stripped = address.replace(/^0x0*/i, \"\");\n return (\"0x\" + stripped.padStart(64, \"0\")).toLowerCase();\n}\n","import type { PlayerStats, PlayerTournament, PlayerTournamentParams } from \"../types/player.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch tournaments for a player.\n */\nexport async function getPlayerTournaments(\n baseUrl: string,\n address: string,\n params?: PlayerTournamentParams,\n ctx?: ApiContext,\n): Promise<PaginatedResult<PlayerTournament>> {\n const normalized = normalizeAddress(address);\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n phase: params?.phase,\n game_token_ids: params?.gameTokenIds?.join(\",\"),\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/players/${normalized}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<PlayerTournament>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch stats for a player.\n */\nexport async function getPlayerStats(\n baseUrl: string,\n address: string,\n ctx?: ApiContext,\n): Promise<PlayerStats> {\n const normalized = normalizeAddress(address);\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/players/${normalized}/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlayerStats>(result.data);\n}\n","import type { Tournament, TournamentListParams } from \"../types/tournament.js\";\nimport type { PlatformStats } from \"../types/activity.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch tournaments for a specific game.\n */\nexport async function getGameTournaments(\n baseUrl: string,\n gameAddress: string,\n params?: Omit<TournamentListParams, \"gameAddress\">,\n ctx?: ApiContext,\n): Promise<PaginatedResult<Tournament>> {\n const normalized = normalizeAddress(gameAddress);\n const qs = buildQueryString({\n creator: params?.creator,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/games/${normalized}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<Tournament>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch tournament stats for a specific game.\n */\nexport async function getGameStats(\n baseUrl: string,\n gameAddress: string,\n ctx?: ApiContext,\n): Promise<PlatformStats> {\n const normalized = normalizeAddress(gameAddress);\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/games/${normalized}/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlatformStats>(result.data);\n}\n","import type { ActivityEvent, ActivityParams, PlatformStats, PrizeStats } from \"../types/activity.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch activity events with optional filtering.\n */\nexport async function getActivity(\n baseUrl: string,\n params?: ActivityParams,\n ctx?: ApiContext,\n): Promise<PaginatedResult<ActivityEvent>> {\n const qs = buildQueryString({\n event_type: params?.eventType,\n tournament_id: params?.tournamentId,\n player_address: params?.playerAddress,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/activity${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<ActivityEvent>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch platform-wide activity stats.\n */\nexport async function getActivityStats(\n baseUrl: string,\n ctx?: ApiContext,\n): Promise<PlatformStats> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/activity/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlatformStats>(result.data);\n}\n\n/**\n * Fetch platform-wide prize stats.\n */\nexport async function getPrizeStats(\n baseUrl: string,\n ctx?: ApiContext,\n): Promise<PrizeStats> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/activity/prize-stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PrizeStats>(result.data);\n}\n","import type { WSSubscribeOptions, WSEventHandler, WSEventMessage } from \"../types/websocket.js\";\n\ninterface WSManagerConfig {\n maxReconnectAttempts: number;\n reconnectBaseDelay: number;\n}\n\nconst DEFAULT_WS_CONFIG: WSManagerConfig = {\n maxReconnectAttempts: 10,\n reconnectBaseDelay: 1000,\n};\n\n/**\n * WebSocket manager with auto-reconnect and subscription management.\n */\nexport class WSManager {\n private ws: WebSocket | null = null;\n private readonly wsUrl: string;\n private readonly config: WSManagerConfig;\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private subscriptions = new Map<string, { options: WSSubscribeOptions; handler: WSEventHandler }>();\n private nextSubId = 1;\n private connected = false;\n private connectionListeners = new Set<(connected: boolean) => void>();\n\n constructor(wsUrl: string, config?: Partial<WSManagerConfig>) {\n this.wsUrl = wsUrl;\n this.config = { ...DEFAULT_WS_CONFIG, ...config };\n }\n\n /**\n * Open a WebSocket connection. No-op if already connected.\n */\n connect(): void {\n if (this.ws) return;\n\n try {\n this.ws = new WebSocket(this.wsUrl);\n\n this.ws.onopen = () => {\n this.connected = true;\n this.reconnectAttempts = 0;\n this.notifyConnectionChange(true);\n // Re-subscribe all active subscriptions\n for (const [, sub] of this.subscriptions) {\n this.sendSubscribe(sub.options);\n }\n };\n\n this.ws.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data as string) as WSEventMessage;\n if (message.type === \"event\") {\n for (const [, sub] of this.subscriptions) {\n sub.handler(message);\n }\n }\n } catch {\n // Ignore malformed messages\n }\n };\n\n this.ws.onclose = () => {\n this.connected = false;\n this.notifyConnectionChange(false);\n this.ws = null;\n this.attemptReconnect();\n };\n\n this.ws.onerror = () => {\n // onclose will fire after onerror\n };\n } catch {\n this.attemptReconnect();\n }\n }\n\n /**\n * Close the WebSocket connection and stop reconnecting.\n */\n disconnect(): void {\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.ws) {\n this.ws.onclose = null;\n this.ws.close();\n this.ws = null;\n }\n this.connected = false;\n this.notifyConnectionChange(false);\n this.reconnectAttempts = 0;\n }\n\n /**\n * Subscribe to channels with an optional tournament filter.\n * Returns an unsubscribe function.\n */\n subscribe(options: WSSubscribeOptions, handler: WSEventHandler): () => void {\n const id = String(this.nextSubId++);\n this.subscriptions.set(id, { options, handler });\n\n if (this.connected) {\n this.sendSubscribe(options);\n }\n\n return () => {\n this.subscriptions.delete(id);\n if (this.connected && this.ws) {\n this.ws.send(JSON.stringify({\n type: \"unsubscribe\",\n channels: options.channels,\n }));\n }\n };\n }\n\n /**\n * Register a callback for a single message. Convenience wrapper around subscribe.\n * Returns an unsubscribe function.\n */\n onMessage(callback: WSEventHandler): () => void {\n const id = String(this.nextSubId++);\n // Subscribe to all channels by using a passthrough handler\n this.subscriptions.set(id, {\n options: { channels: [] },\n handler: callback,\n });\n\n return () => {\n this.subscriptions.delete(id);\n };\n }\n\n /**\n * Whether the WebSocket is currently connected.\n */\n get isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Register a listener for connection state changes.\n * Returns an unsubscribe function.\n */\n onConnectionChange(listener: (connected: boolean) => void): () => void {\n this.connectionListeners.add(listener);\n return () => {\n this.connectionListeners.delete(listener);\n };\n }\n\n private notifyConnectionChange(isConnected: boolean): void {\n for (const listener of this.connectionListeners) {\n try {\n listener(isConnected);\n } catch {\n // Ignore listener errors\n }\n }\n }\n\n private sendSubscribe(options: WSSubscribeOptions): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n if (options.channels.length === 0) return;\n this.ws.send(JSON.stringify({\n type: \"subscribe\",\n channels: options.channels,\n tournamentIds: options.tournamentIds,\n }));\n }\n\n private attemptReconnect(): void {\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) return;\n if (this.subscriptions.size === 0) return;\n\n const delay = this.config.reconnectBaseDelay * Math.pow(2, this.reconnectAttempts);\n this.reconnectAttempts++;\n\n this.reconnectTimeout = setTimeout(() => {\n this.connect();\n }, Math.min(delay, 30_000));\n }\n}\n","export interface ChainConfig {\n rpcUrl: string;\n apiBaseUrl: string;\n wsUrl: string;\n budokanAddress: string;\n viewerAddress: string;\n}\n\nexport const CHAINS: Record<string, ChainConfig> = {\n mainnet: {\n rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_10\",\n apiBaseUrl: \"https://budokan-api-production.up.railway.app\",\n wsUrl: \"wss://budokan-api-production.up.railway.app/ws\",\n budokanAddress: \"0x0765e6f07c1a5cebe08aba7f840741242dffb1ed77ac619120501f540ec9a52a\",\n viewerAddress: \"0x0232fb32bd06e38f3555000f255c01812198418d5fced3b6246900725bf2f4d1\",\n },\n sepolia: {\n rpcUrl: \"https://starknet-sepolia.public.blastapi.io\",\n apiBaseUrl: \"https://budokan-api-sepolia.up.railway.app\",\n wsUrl: \"wss://budokan-api-sepolia.up.railway.app/ws\",\n budokanAddress: \"0x0105573bf9184f0a3da78dda70a87055e6aafc7b3fb6e331732a0d25675b7be5\",\n viewerAddress: \"0x0414fe2f48db1e3598a83f017d17b4d06cec180b160141fea9244054267c1ff1\",\n },\n} as const;\n\nexport function getChainConfig(chain: string): ChainConfig | undefined {\n return CHAINS[chain];\n}\n","export type ConnectionMode = \"api\" | \"rpc-fallback\" | \"offline\";\n\nexport interface ServiceStatus {\n available: boolean;\n lastChecked: number;\n latency: number | null;\n error: string | null;\n}\n\nexport interface ConnectionStatusState {\n api: ServiceStatus;\n rpc: ServiceStatus;\n mode: ConnectionMode;\n initialCheckComplete: boolean;\n}\n\ntype StatusListener = (status: ConnectionStatusState) => void;\n\nexport interface HealthTimingConfig {\n initialCheckDelay?: number;\n checkInterval?: number;\n checkTimeout?: number;\n}\n\nexport class ConnectionStatus {\n private status: ConnectionStatusState = {\n api: { available: true, lastChecked: 0, latency: null, error: null },\n rpc: { available: true, lastChecked: 0, latency: null, error: null },\n mode: \"api\",\n initialCheckComplete: false,\n };\n\n private listeners = new Set<StatusListener>();\n private checkInterval: ReturnType<typeof setInterval> | null = null;\n private initialCheckTimeout: ReturnType<typeof setTimeout> | null = null;\n private apiUrl: string;\n private rpcUrl: string;\n private readonly initialCheckDelay: number;\n private readonly checkIntervalMs: number;\n private readonly checkTimeoutMs: number;\n\n constructor(apiUrl: string, rpcUrl: string, config?: HealthTimingConfig) {\n this.apiUrl = apiUrl;\n this.rpcUrl = rpcUrl;\n this.initialCheckDelay = Math.max(config?.initialCheckDelay ?? 1_000, 100);\n this.checkIntervalMs = Math.max(config?.checkInterval ?? 30_000, 1_000);\n this.checkTimeoutMs = Math.max(config?.checkTimeout ?? 5_000, 1_000);\n }\n\n getStatus(): ConnectionStatusState {\n return { ...this.status };\n }\n\n get mode(): ConnectionMode {\n return this.status.mode;\n }\n\n subscribe(listener: StatusListener): () => void {\n this.listeners.add(listener);\n listener(this.status);\n return () => { this.listeners.delete(listener); };\n }\n\n startMonitoring(): void {\n if (this.checkInterval) return;\n this.initialCheckTimeout = setTimeout(() => {\n this.performHealthCheck();\n this.checkInterval = setInterval(() => this.performHealthCheck(), this.checkIntervalMs);\n }, this.initialCheckDelay);\n }\n\n stopMonitoring(): void {\n if (this.checkInterval) {\n clearInterval(this.checkInterval);\n this.checkInterval = null;\n }\n if (this.initialCheckTimeout) {\n clearTimeout(this.initialCheckTimeout);\n this.initialCheckTimeout = null;\n }\n }\n\n markApiUnavailable(error?: string): void {\n this.updateStatus({\n api: { ...this.status.api, available: false, lastChecked: Date.now(), error: error || \"Request failed\" },\n });\n }\n\n markRpcUnavailable(error?: string): void {\n this.updateStatus({\n rpc: { ...this.status.rpc, available: false, lastChecked: Date.now(), error: error || \"Request failed\" },\n });\n }\n\n async checkNow(): Promise<void> {\n await this.performHealthCheck();\n }\n\n destroy(): void {\n this.stopMonitoring();\n this.listeners.clear();\n }\n\n private async performHealthCheck(): Promise<void> {\n const [apiResult, rpcResult] = await Promise.all([\n this.checkApi(),\n this.checkRpc(),\n ]);\n this.updateStatus({ api: apiResult, rpc: rpcResult, initialCheckComplete: true });\n }\n\n private async checkApi(): Promise<ServiceStatus> {\n const startTime = Date.now();\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.checkTimeoutMs);\n const response = await fetch(`${this.apiUrl}/health`, { signal: controller.signal });\n clearTimeout(timeoutId);\n const latency = Date.now() - startTime;\n if (!response.ok) {\n return { available: false, lastChecked: Date.now(), latency, error: `HTTP ${response.status}` };\n }\n const data = await response.json() as Record<string, unknown>;\n const isAvailable = data.status === \"healthy\" || data.status === \"degraded\";\n return { available: isAvailable, lastChecked: Date.now(), latency, error: isAvailable ? null : `API status: ${data.status}` };\n } catch (error) {\n return { available: false, lastChecked: Date.now(), latency: null, error: error instanceof Error ? error.message : \"Network error\" };\n }\n }\n\n private async checkRpc(): Promise<ServiceStatus> {\n const startTime = Date.now();\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.checkTimeoutMs);\n const response = await fetch(this.rpcUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ jsonrpc: \"2.0\", method: \"starknet_chainId\", params: [], id: 1 }),\n signal: controller.signal,\n });\n clearTimeout(timeoutId);\n const latency = Date.now() - startTime;\n if (!response.ok) {\n return { available: false, lastChecked: Date.now(), latency, error: `HTTP ${response.status}` };\n }\n const data = await response.json() as Record<string, unknown>;\n const isHealthy = data.result !== undefined && !data.error;\n return { available: isHealthy, lastChecked: Date.now(), latency, error: isHealthy ? null : \"RPC error\" };\n } catch (error) {\n return { available: false, lastChecked: Date.now(), latency: null, error: error instanceof Error ? error.message : \"Network error\" };\n }\n }\n\n private updateStatus(partial: Partial<ConnectionStatusState>): void {\n const newStatus = { ...this.status, ...partial };\n\n if (newStatus.api.available) {\n newStatus.mode = \"api\";\n } else if (newStatus.rpc.available) {\n newStatus.mode = \"rpc-fallback\";\n } else {\n newStatus.mode = \"offline\";\n }\n\n const changed =\n this.status.api.available !== newStatus.api.available ||\n this.status.rpc.available !== newStatus.rpc.available ||\n this.status.mode !== newStatus.mode ||\n this.status.initialCheckComplete !== newStatus.initialCheckComplete;\n\n this.status = newStatus;\n\n if (changed) {\n this.listeners.forEach((listener) => {\n try { listener(this.status); } catch { /* ignore */ }\n });\n }\n }\n}\n","import type { ConnectionStatus } from \"./health.js\";\nimport { DataSourceError } from \"../errors/index.js\";\n\nexport async function withFallback<T>(\n primary: () => Promise<T>,\n fallback: () => Promise<T>,\n health?: ConnectionStatus,\n): Promise<T> {\n // If health monitoring shows primary source is down, skip it\n if (health) {\n const mode = health.mode;\n if (mode === \"rpc-fallback\") {\n // API is known-down, go straight to RPC fallback\n try {\n return await fallback();\n } catch (fallbackError) {\n throw fallbackError;\n }\n }\n\n if (mode === \"offline\") {\n // Both are known-down, still try both in order\n }\n }\n\n let primaryError: Error;\n try {\n return await primary();\n } catch (error) {\n primaryError = error as Error;\n // Report failure to health service\n if (health) {\n health.markApiUnavailable(primaryError.message);\n }\n }\n\n try {\n return await fallback();\n } catch (fallbackError) {\n if (health) {\n health.markRpcUnavailable((fallbackError as Error).message);\n }\n throw new DataSourceError(primaryError, fallbackError as Error);\n }\n}\n","import type { RpcProvider, Contract, Abi } from \"starknet\";\n\nlet starknetModule: typeof import(\"starknet\") | null = null;\n\nasync function getStarknet(): Promise<typeof import(\"starknet\")> {\n if (!starknetModule) {\n starknetModule = await import(\"starknet\");\n }\n return starknetModule;\n}\n\nexport async function createProvider(\n rpcUrl: string,\n headers?: Record<string, string>,\n): Promise<RpcProvider> {\n const { RpcProvider: StarknetRpcProvider } = await getStarknet();\n const provider = new StarknetRpcProvider({\n nodeUrl: rpcUrl,\n ...(headers && { headers }),\n });\n return provider;\n}\n\nexport async function createContract(\n abi: Abi,\n address: string,\n provider: RpcProvider,\n): Promise<Contract> {\n // Handle case where ABI might be wrapped in a default export\n let resolvedAbi: Abi = abi;\n if (abi && !Array.isArray(abi) && typeof abi === \"object\" && \"default\" in abi) {\n resolvedAbi = (abi as { default: Abi }).default;\n }\n\n const starknet = await getStarknet();\n\n return new starknet.Contract({ abi: resolvedAbi, address, providerOrAccount: provider });\n}\n","import type { Contract } from \"starknet\";\nimport { CairoCustomEnum } from \"starknet\";\nimport type { Tournament } from \"../types/tournament.js\";\nimport type { EntryRequirement, Distribution } from \"@provable-games/metagame-sdk\";\nimport type { LeaderboardEntry } from \"../types/leaderboard.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { Prize } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport type { Phase } from \"../types/tournament.js\";\nimport { RpcError } from \"../errors/index.js\";\nimport { num } from \"starknet\";\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction wrapRpcCall<T>(fn: () => Promise<T>, contractAddress?: string): Promise<T> {\n return fn().catch((error: unknown) => {\n throw new RpcError(\n error instanceof Error ? error.message : \"RPC call failed\",\n contractAddress,\n );\n });\n}\n\nfunction decodeShortString(value: unknown): string {\n if (!value) return \"\";\n const hex = num.toHex(value as bigint);\n if (hex === \"0x0\") return \"\";\n const hexStr = hex.slice(2);\n let result = \"\";\n for (let i = 0; i < hexStr.length; i += 2) {\n const charCode = parseInt(hexStr.slice(i, i + 2), 16);\n if (charCode === 0) break;\n result += String.fromCharCode(charCode);\n }\n return result;\n}\n\nfunction decodeByteArray(value: unknown): string {\n if (!value) return \"\";\n // ByteArray from Cairo is serialized as { data: felt252[], pending_word: felt252, pending_word_len: u32 }\n const obj = value as Record<string, unknown>;\n const data = obj.data as unknown[] | undefined;\n const pendingWord = obj.pending_word;\n const pendingWordLen = Number(obj.pending_word_len ?? 0);\n\n let result = \"\";\n\n // Each data element is a 31-byte chunk encoded as felt252\n if (data) {\n for (const chunk of data) {\n const hex = num.toHex(chunk as bigint).slice(2).padStart(62, \"0\");\n for (let i = 0; i < 62; i += 2) {\n const charCode = parseInt(hex.slice(i, i + 2), 16);\n if (charCode !== 0) result += String.fromCharCode(charCode);\n }\n }\n }\n\n // Pending word contains remaining bytes (< 31)\n if (pendingWord && pendingWordLen > 0) {\n const hex = num.toHex(pendingWord as bigint).slice(2).padStart(pendingWordLen * 2, \"0\");\n for (let i = 0; i < pendingWordLen * 2; i += 2) {\n const charCode = parseInt(hex.slice(i, i + 2), 16);\n if (charCode !== 0) result += String.fromCharCode(charCode);\n }\n }\n\n return result;\n}\n\n/** All Phase variant names for CairoCustomEnum */\nconst PHASE_VARIANTS = [\"Scheduled\", \"Registration\", \"Staging\", \"Live\", \"Submission\", \"Finalized\"] as const;\n\nconst PHASE_NAME_MAP: Record<Phase, string> = {\n scheduled: \"Scheduled\",\n registration: \"Registration\",\n staging: \"Staging\",\n live: \"Live\",\n submission: \"Submission\",\n finalized: \"Finalized\",\n};\n\n/** Convert SDK Phase string to Cairo enum argument for RPC calls */\nfunction phaseToRpcArg(phase: Phase): CairoCustomEnum {\n const activeVariant = PHASE_NAME_MAP[phase];\n const variants: Record<string, unknown> = {};\n for (const v of PHASE_VARIANTS) {\n variants[v] = v === activeVariant ? {} : undefined;\n }\n return new CairoCustomEnum(variants);\n}\n\n// =========================================================================\n// Parsers — raw on-chain structs → SDK types\n// =========================================================================\n\nfunction parseTournament(\n raw: unknown,\n entryCount: number,\n): Tournament {\n const obj = raw as Record<string, unknown>;\n const id = String(obj.id ?? \"0\");\n const createdAt = Number(obj.created_at ?? 0);\n const createdBy = num.toHex(obj.created_by as bigint);\n const creatorTokenId = obj.creator_token_id ? num.toHex(obj.creator_token_id as bigint) : null;\n\n // Metadata\n const metadata = obj.metadata as Record<string, unknown> | undefined;\n const name = metadata ? decodeShortString(metadata.name) : \"\";\n const description = metadata ? decodeByteArray(metadata.description) : \"\";\n\n // Schedule\n const sched = obj.schedule as Record<string, unknown> | undefined;\n const registrationStartDelay = Number(sched?.registration_start_delay ?? 0);\n const registrationEndDelay = Number(sched?.registration_end_delay ?? 0);\n const gameStartDelay = Number(sched?.game_start_delay ?? 0);\n const gameEndDelay = Number(sched?.game_end_delay ?? 0);\n const submissionDuration = Number(sched?.submission_duration ?? 0);\n\n // Compute absolute timestamps (matching contract: each delay is relative to its anchor)\n const createdAtStr = String(createdAt);\n const regStart = createdAt + registrationStartDelay;\n const regEnd = regStart + registrationEndDelay;\n const gameStart = createdAt + gameStartDelay;\n const gameEnd = gameStart + gameEndDelay;\n const subEnd = gameEnd + submissionDuration;\n const registrationStartTime = String(regStart);\n const registrationEndTime = String(regEnd);\n const gameStartTime = String(gameStart);\n const gameEndTime = String(gameEnd);\n const submissionEndTime = String(subEnd);\n\n // GameConfig\n const gc = obj.game_config as Record<string, unknown> | undefined;\n const gameAddress = gc ? num.toHex(gc.game_address as bigint) : \"\";\n const settingsId = Number(gc?.settings_id ?? 0);\n const soulbound = Boolean(gc?.soulbound);\n const paymaster = Boolean(gc?.paymaster);\n const clientUrl = gc?.client_url ? decodeOptionalByteArray(gc.client_url) : null;\n const renderer = gc?.renderer ? parseOptionalAddress(gc.renderer) : null;\n\n // LeaderboardConfig\n const lc = obj.leaderboard_config as Record<string, unknown> | undefined;\n const ascending = Boolean(lc?.ascending);\n const gameMustBeOver = Boolean(lc?.game_must_be_over);\n\n // EntryFee (Option)\n const entryFeeRaw = parseOption(obj.entry_fee);\n let entryFeeToken: string | null = null;\n let entryFeeAmount: string | null = null;\n let entryFee: Tournament[\"entryFee\"] = null;\n if (entryFeeRaw) {\n const ef = entryFeeRaw as Record<string, unknown>;\n entryFeeToken = num.toHex(ef.token_address as bigint);\n entryFeeAmount = String(ef.amount ?? \"0\");\n entryFee = {\n tokenAddress: entryFeeToken,\n amount: entryFeeAmount,\n tournamentCreatorShare: Number(ef.tournament_creator_share ?? 0),\n gameCreatorShare: Number(ef.game_creator_share ?? 0),\n refundShare: Number(ef.refund_share ?? 0),\n distribution: (ef.distribution as Distribution) ?? null,\n distributionCount: Number(ef.distribution_count ?? 0),\n };\n }\n\n // EntryRequirement (Option)\n const entryRequirement = parseOption(obj.entry_requirement) as EntryRequirement | null;\n const hasEntryRequirement = entryRequirement !== null;\n\n return {\n id,\n tournamentId: id,\n gameAddress,\n createdAt: new Date(createdAt * 1000).toISOString(),\n createdBy,\n creatorTokenId,\n name,\n description,\n registrationStartDelay,\n registrationEndDelay,\n gameStartDelay,\n gameEndDelay,\n submissionDuration,\n createdAtOnchain: createdAtStr,\n registrationStartTime,\n registrationEndTime,\n gameStartTime,\n gameEndTime,\n submissionEndTime,\n settingsId,\n soulbound,\n paymaster,\n clientUrl,\n renderer,\n leaderboardAscending: ascending,\n leaderboardGameMustBeOver: gameMustBeOver,\n entryFeeToken,\n entryFeeAmount,\n hasEntryRequirement,\n schedule: {\n registrationStartDelay,\n registrationEndDelay,\n gameStartDelay,\n gameEndDelay,\n submissionDuration,\n },\n gameConfig: {\n gameAddress,\n settingsId,\n soulbound,\n paymaster,\n clientUrl,\n renderer,\n },\n entryFee,\n entryRequirement,\n leaderboardConfig: { ascending, gameMustBeOver },\n entryCount,\n prizeCount: 0, // Not available from viewer\n submissionCount: 0, // Not available from viewer\n metadata: null,\n };\n}\n\nfunction parseLeaderboardEntry(raw: unknown): LeaderboardEntry {\n const obj = raw as Record<string, unknown>;\n return {\n position: Number(obj.position ?? 0),\n tokenId: num.toHex(obj.token_id as bigint),\n };\n}\n\nfunction parseRegistration(raw: unknown, tournamentId: string): Registration {\n const obj = raw as Record<string, unknown>;\n return {\n tournamentId,\n gameTokenId: num.toHex(obj.game_token_id as bigint),\n gameAddress: \"\", // Not in on-chain struct\n playerAddress: \"\", // Not in on-chain struct\n entryNumber: Number(obj.entry_id ?? 0),\n hasSubmitted: Boolean(obj.has_submitted),\n isBanned: Boolean(obj.is_banned),\n };\n}\n\nfunction parsePrize(raw: unknown): Prize {\n const obj = raw as Record<string, unknown>;\n const tokenTypeData = obj.token_type as Record<string, unknown> | undefined;\n\n // TokenTypeData is a Cairo enum: { erc20: ERC20Data } or { erc721: ERC721Data }\n let tokenType: \"erc20\" | \"erc721\" = \"erc20\";\n let amount: string | null = null;\n let tokenId: string | null = null;\n let distributionType: string | null = null;\n let distributionWeight: number | null = null;\n let distributionShares: number[] | null = null;\n let distributionCount: number | null = null;\n let payoutPosition = 0;\n\n if (tokenTypeData) {\n // starknet.js v9 returns CairoCustomEnum with the active variant as a\n // non-undefined property. Check activeVariant() or the property value.\n const activeVariant = typeof tokenTypeData.activeVariant === \"function\"\n ? (tokenTypeData.activeVariant as () => string)()\n : tokenTypeData.erc20 !== undefined ? \"erc20\"\n : tokenTypeData.erc721 !== undefined ? \"erc721\"\n : null;\n\n // starknet.js v9 nests data under .variant.{name} or directly under .{name}\n const variantData = (tokenTypeData as Record<string, unknown>).variant as Record<string, unknown> | undefined;\n const unwrap = (name: string) =>\n (variantData?.[name] ?? tokenTypeData[name]) as Record<string, unknown> | undefined;\n\n if (activeVariant === \"erc20\") {\n const erc20 = unwrap(\"erc20\");\n tokenType = \"erc20\";\n amount = String(erc20?.amount ?? \"0\");\n\n // distribution is Option<Distribution> — unwrap the Option then the enum\n const distOption = erc20?.distribution as Record<string, unknown> | undefined;\n const distInner = distOption?.Some as Record<string, unknown> | undefined;\n if (distInner) {\n // Distribution enum: { variant: { Linear: n } } or { Linear: n }.\n // Custom carries a Span<u16>; the scalar variants carry a u32.\n const distVariant = (distInner.variant ?? distInner) as Record<string, unknown>;\n const distType = Object.keys(distVariant).find((k) => distVariant[k] !== undefined);\n if (distType) {\n distributionType = distType.toLowerCase();\n const distValue = distVariant[distType];\n if (distributionType === \"custom\") {\n distributionShares = Array.isArray(distValue)\n ? (distValue as unknown[]).map((v) => Number(v))\n : null;\n } else {\n distributionWeight = distValue != null ? Number(distValue) : null;\n }\n }\n }\n\n // distribution_count is Option<u32>\n const countOption = erc20?.distribution_count as Record<string, unknown> | undefined;\n distributionCount = countOption?.Some != null ? Number(countOption.Some) : null;\n } else if (activeVariant === \"erc721\") {\n const erc721 = unwrap(\"erc721\");\n tokenType = \"erc721\";\n tokenId = String(erc721?.id ?? \"0\");\n }\n }\n\n return {\n prizeId: String(obj.id ?? \"0\"),\n tournamentId: String(obj.context_id ?? \"0\"),\n payoutPosition,\n tokenAddress: num.toHex(obj.token_address as bigint),\n tokenType,\n amount,\n tokenId,\n distributionType,\n distributionWeight,\n distributionShares,\n distributionCount,\n sponsorAddress: num.toHex(obj.sponsor_address as bigint),\n };\n}\n\n/** Unwrap a Cairo Option — starknet.js may return { Some: value } / { None: {} } or just the value */\nfunction parseOption(raw: unknown): unknown | null {\n if (raw === undefined || raw === null) return null;\n const obj = raw as Record<string, unknown>;\n if (\"Some\" in obj) return obj.Some;\n if (\"None\" in obj) return null;\n // Some starknet.js versions flatten the option\n return raw;\n}\n\nfunction decodeOptionalByteArray(raw: unknown): string | null {\n const inner = parseOption(raw);\n if (!inner) return null;\n return decodeByteArray(inner);\n}\n\nfunction parseOptionalAddress(raw: unknown): string | null {\n const inner = parseOption(raw);\n if (!inner) return null;\n const hex = num.toHex(inner as bigint);\n return hex === \"0x0\" ? null : hex;\n}\n\n// =========================================================================\n// Viewer functions\n// =========================================================================\n\ninterface TournamentFilterResult {\n tournamentIds: string[];\n total: number;\n}\n\nfunction parseFilterResult(raw: unknown): TournamentFilterResult {\n const obj = raw as Record<string, unknown>;\n const ids = (obj.tournament_ids as unknown[])?.map((v) => String(v)) ?? [];\n const total = Number(obj.total ?? 0);\n return { tournamentIds: ids, total };\n}\n\nfunction parseTournamentFullState(raw: unknown): Tournament {\n const obj = raw as Record<string, unknown>;\n const entryCount = Number(obj.entry_count ?? 0);\n return parseTournament(obj.tournament, entryCount);\n}\n\n// --- Tournament listing ---\n\nexport async function viewerTournaments(\n contract: Contract,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments\", [offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\nexport async function viewerTournamentsByGame(\n contract: Contract,\n gameAddress: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_game\", [gameAddress, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\nexport async function viewerTournamentsByCreator(\n contract: Contract,\n creator: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_creator\", [creator, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\n/**\n * Map a single SDK phase to the group of on-chain phases it represents.\n * \"scheduled\" includes Scheduled + Registration + Staging (all pre-game).\n * \"live\" includes Live + Submission (active gameplay).\n * \"finalized\" stays as-is.\n */\nconst PHASE_GROUPS: Record<Phase, Phase[]> = {\n scheduled: [\"scheduled\", \"registration\", \"staging\"],\n registration: [\"registration\"],\n staging: [\"staging\"],\n live: [\"live\", \"submission\"],\n submission: [\"submission\"],\n finalized: [\"finalized\"],\n};\n\nexport async function viewerTournamentsByPhase(\n contract: Contract,\n phase: Phase,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n const phases = PHASE_GROUPS[phase];\n if (phases.length === 1) {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_phase\", [phaseToRpcArg(phase), offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n }\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_phases\", [phases.map(phaseToRpcArg), offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\n// --- Tournament detail ---\n\nexport async function viewerTournamentDetail(\n contract: Contract,\n tournamentId: string,\n): Promise<Tournament | null> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_detail\", [tournamentId]);\n const tournament = parseTournamentFullState(result);\n // Viewer returns a zero-filled struct for non-existent tournaments\n if (!tournament.gameAddress || tournament.gameAddress === \"0x0\") return null;\n return tournament;\n }, contract.address);\n}\n\nexport async function viewerTournamentsBatch(\n contract: Contract,\n tournamentIds: string[],\n): Promise<Tournament[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_batch\", [tournamentIds]);\n return (result as unknown[]).map(parseTournamentFullState);\n }, contract.address);\n}\n\n// --- Registrations ---\n\nexport async function viewerRegistrations(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations\", [tournamentId, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\nexport async function viewerRegistrationsByOwner(\n contract: Contract,\n tournamentId: string,\n owner: string,\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations_by_owner\", [tournamentId, owner, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\nexport async function viewerRegistrationsByTokenIds(\n contract: Contract,\n tournamentId: string,\n tokenIds: string[],\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations_by_token_ids\", [tournamentId, tokenIds, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\n// --- Leaderboard ---\n\nexport async function viewerLeaderboard(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<LeaderboardEntry[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"leaderboard\", [tournamentId, offset, limit]);\n return (result as unknown[]).map(parseLeaderboardEntry);\n }, contract.address);\n}\n\n// --- Prizes ---\n\nexport async function viewerPrizes(\n contract: Contract,\n tournamentId: string,\n): Promise<Prize[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_prizes\", [tournamentId]);\n return (result as unknown[]).map(parsePrize);\n }, contract.address);\n}\n\n// --- Reward Claims ---\n\nexport interface ViewerRewardClaim {\n rewardType: Record<string, unknown>;\n claimed: boolean;\n}\n\nexport interface ViewerRewardClaimResult {\n claims: ViewerRewardClaim[];\n total: number;\n totalClaimed: number;\n totalUnclaimed: number;\n}\n\nexport async function viewerRewardClaims(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<ViewerRewardClaimResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_reward_claims\", [tournamentId, offset, limit]);\n const obj = result as Record<string, unknown>;\n const claims = (obj.claims as unknown[])?.map((raw) => {\n const claim = raw as Record<string, unknown>;\n return {\n rewardType: claim.reward_type as Record<string, unknown>,\n claimed: Boolean(claim.claimed),\n };\n }) ?? [];\n return {\n claims,\n total: Number(obj.total ?? 0),\n totalClaimed: Number(obj.total_claimed ?? 0),\n totalUnclaimed: Number(obj.total_unclaimed ?? 0),\n };\n }, contract.address);\n}\n\n// --- Player Tournaments ---\n\nexport async function viewerPlayerTournaments(\n contract: Contract,\n playerAddress: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"player_tournaments\", [playerAddress, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n","[\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"BudokanViewerImpl\",\n \"interface_name\": \"budokan_interfaces::viewer::IBudokanViewer\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::TournamentFilterResult\",\n \"members\": [\n {\n \"name\": \"tournament_ids\",\n \"type\": \"core::array::Array::<core::integer::u64>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u64\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::Phase\",\n \"variants\": [\n {\n \"name\": \"Scheduled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Registration\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Staging\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Live\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Submission\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Finalized\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Metadata\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Schedule\",\n \"members\": [\n {\n \"name\": \"registration_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"registration_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"submission_duration\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::byte_array::ByteArray>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::GameConfig\",\n \"members\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"settings_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"soulbound\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"paymaster\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"client_url\",\n \"type\": \"core::option::Option::<core::byte_array::ByteArray>\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u16>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::distribution::Distribution\",\n \"variants\": [\n {\n \"name\": \"Linear\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Exponential\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Uniform\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Custom\",\n \"type\": \"core::array::Span::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::EntryFee\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"tournament_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"budokan_interfaces::budokan::EntryFee\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"metagame_extensions_interfaces::extension::ExtensionConfig\",\n \"members\": [\n {\n \"name\": \"address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"config\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirementType\",\n \"variants\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"extension\",\n \"type\": \"metagame_extensions_interfaces::extension::ExtensionConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirement\",\n \"members\": [\n {\n \"name\": \"entry_limit\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"entry_requirement_type\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirementType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirement\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"members\": [\n {\n \"name\": \"ascending\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"game_must_be_over\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Tournament\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::TournamentFullState\",\n \"members\": [\n {\n \"name\": \"tournament\",\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::registration::Registration\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RegistrationResult\",\n \"members\": [\n {\n \"name\": \"entries\",\n \"type\": \"core::array::Array::<game_components_interfaces::registration::Registration>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::LeaderboardEntryView\",\n \"members\": [\n {\n \"name\": \"position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u32>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC20Data\",\n \"members\": [\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC721Data\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::TokenTypeData\",\n \"variants\": [\n {\n \"name\": \"erc20\",\n \"type\": \"game_components_interfaces::prize::ERC20Data\"\n },\n {\n \"name\": \"erc721\",\n \"type\": \"game_components_interfaces::prize::ERC721Data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::PrizeData\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::PrizeType\",\n \"variants\": [\n {\n \"name\": \"Single\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"Distributed\",\n \"type\": \"(core::integer::u64, core::integer::u32)\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::EntryFeeRewardType\",\n \"variants\": [\n {\n \"name\": \"Position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"TournamentCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"GameCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Refund\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::RewardType\",\n \"variants\": [\n {\n \"name\": \"Prize\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n },\n {\n \"name\": \"EntryFee\",\n \"type\": \"budokan_interfaces::budokan::EntryFeeRewardType\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RewardClaimView\",\n \"members\": [\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\"\n },\n {\n \"name\": \"claimed\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RewardClaimResult\",\n \"members\": [\n {\n \"name\": \"claims\",\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::RewardClaimView>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"total_claimed\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"total_unclaimed\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"budokan_interfaces::viewer::IBudokanViewer\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"tournaments\",\n \"inputs\": [\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_game\",\n \"inputs\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_creator\",\n \"inputs\": [\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_phase\",\n \"inputs\": [\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_phases\",\n \"inputs\": [\n {\n \"name\": \"phases\",\n \"type\": \"core::array::Array::<budokan_interfaces::budokan::Phase>\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_game\",\n \"inputs\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_creator\",\n \"inputs\": [\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_phase\",\n \"inputs\": [\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_phases\",\n \"inputs\": [\n {\n \"name\": \"phases\",\n \"type\": \"core::array::Array::<budokan_interfaces::budokan::Phase>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_detail\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFullState\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_batch\",\n \"inputs\": [\n {\n \"name\": \"tournament_ids\",\n \"type\": \"core::array::Array::<core::integer::u64>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::TournamentFullState>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_registrations\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::RegistrationResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"leaderboard\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::LeaderboardEntryView>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_prizes\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<game_components_interfaces::prize::PrizeData>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_reward_claims\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::RewardClaimResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"player_tournaments\",\n \"inputs\": [\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableCamelOnlyImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnableCamelOnly\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnableCamelOnly\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"budokan_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan_viewer::budokan_viewer::BudokanViewer::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n }\n ]\n }\n]","[\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"GameContextImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::context::IMetagameContext\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::context::IMetagameContext\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"has_context\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"GameContextDetailsImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::context::IMetagameContextDetails\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u32>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::structs::metagame::GameContext\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<game_components_interfaces::structs::metagame::GameContext>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<game_components_interfaces::structs::metagame::GameContext>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::structs::metagame::GameContextDetails\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"id\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n },\n {\n \"name\": \"context\",\n \"type\": \"core::array::Span::<game_components_interfaces::structs::metagame::GameContext>\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::context::IMetagameContextDetails\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"context_details\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::structs::metagame::GameContextDetails\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"BudokanImpl\",\n \"interface_name\": \"budokan_interfaces::budokan::IBudokan\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Metadata\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Schedule\",\n \"members\": [\n {\n \"name\": \"registration_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"registration_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"submission_duration\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::byte_array::ByteArray>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::GameConfig\",\n \"members\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"settings_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"soulbound\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"paymaster\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"client_url\",\n \"type\": \"core::option::Option::<core::byte_array::ByteArray>\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u16>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::distribution::Distribution\",\n \"variants\": [\n {\n \"name\": \"Linear\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Exponential\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Uniform\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Custom\",\n \"type\": \"core::array::Span::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::EntryFee\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"tournament_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"budokan_interfaces::budokan::EntryFee\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"interfaces::extension::ExtensionConfig\",\n \"members\": [\n {\n \"name\": \"address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"config\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirementType\",\n \"variants\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"extension\",\n \"type\": \"interfaces::extension::ExtensionConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirement\",\n \"members\": [\n {\n \"name\": \"entry_limit\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"entry_requirement_type\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirementType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirement\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"members\": [\n {\n \"name\": \"ascending\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"game_must_be_over\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Tournament\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::Phase\",\n \"variants\": [\n {\n \"name\": \"Scheduled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Registration\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Staging\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Live\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Submission\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Finalized\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n {\n \"name\": \"low\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"high\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::NFTQualification\",\n \"members\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::QualificationProof\",\n \"variants\": [\n {\n \"name\": \"NFT\",\n \"type\": \"game_components_interfaces::entry_requirement::NFTQualification\"\n },\n {\n \"name\": \"Address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"Extension\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::QualificationProof>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::PrizeType\",\n \"variants\": [\n {\n \"name\": \"Single\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"Distributed\",\n \"type\": \"(core::integer::u64, core::integer::u32)\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::EntryFeeRewardType\",\n \"variants\": [\n {\n \"name\": \"Position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"TournamentCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"GameCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Refund\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::RewardType\",\n \"variants\": [\n {\n \"name\": \"Prize\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n },\n {\n \"name\": \"EntryFee\",\n \"type\": \"budokan_interfaces::budokan::EntryFeeRewardType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC20Data\",\n \"members\": [\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC721Data\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::TokenTypeData\",\n \"variants\": [\n {\n \"name\": \"erc20\",\n \"type\": \"game_components_interfaces::prize::ERC20Data\"\n },\n {\n \"name\": \"erc721\",\n \"type\": \"game_components_interfaces::prize::ERC721Data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::PrizeData\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"budokan_interfaces::budokan::IBudokan\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"total_tournaments\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_entries\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u32\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_leaderboard\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"current_phase\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_distribution_shares\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<core::integer::u16>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"create_tournament\",\n \"inputs\": [\n {\n \"name\": \"creator_rewards_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"metadata_value\",\n \"type\": \"core::integer::u16\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"enter_tournament\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"player_name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"qualification\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::QualificationProof>\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"metadata_value\",\n \"type\": \"core::integer::u16\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"(core::felt252, core::integer::u32)\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ban_entry\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"proof\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"submit_score\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"position\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim_reward\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"add_prize\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"position\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::prize::PrizeData\"\n }\n ],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"MetagameImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::core::IMetagame\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::core::IMetagame\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"context_address\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"default_token_address\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"SRC5Impl\",\n \"interface_name\": \"openzeppelin_interfaces::introspection::ISRC5\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::introspection::ISRC5\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"supports_interface\",\n \"inputs\": [\n {\n \"name\": \"interface_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"EntryFeeImpl\",\n \"interface_name\": \"game_components_interfaces::entry_fee::IEntryFee\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u16>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_fee::AdditionalShare\",\n \"members\": [\n {\n \"name\": \"recipient\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"share_bps\",\n \"type\": \"core::integer::u16\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<game_components_interfaces::entry_fee::AdditionalShare>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<game_components_interfaces::entry_fee::AdditionalShare>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_fee::EntryFeeConfig\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::option::Option::<core::integer::u16>\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::option::Option::<core::integer::u16>\"\n },\n {\n \"name\": \"additional_shares\",\n \"type\": \"core::array::Span::<game_components_interfaces::entry_fee::AdditionalShare>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_fee::EntryFeeConfig>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_fee::EntryFeeConfig\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::entry_fee::IEntryFee\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry_fee\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::option::Option::<game_components_interfaces::entry_fee::EntryFeeConfig>\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"EntryRequirementImpl\",\n \"interface_name\": \"game_components_interfaces::entry_requirement::IEntryRequirement\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::QualificationEntries\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"qualification_proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::entry_requirement::IEntryRequirement\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry_requirement\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_qualification_entries\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::entry_requirement::QualificationEntries\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"PrizeImpl\",\n \"interface_name\": \"game_components_interfaces::prize::IPrize\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::prize::IPrize\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_prize\",\n \"inputs\": [\n {\n \"name\": \"prize_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::prize::PrizeData\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_total_prizes\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_prize_claimed\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"prize_type\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"RegistrationImpl\",\n \"interface_name\": \"game_components_interfaces::registration::IRegistration\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::registration::Registration\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::registration::IRegistration\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::registration::Registration\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"entry_exists\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_entry_banned\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_entry_count\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u32\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"default_token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_embeddable_game_standard::metagame::metagame_component::MetagameComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_embeddable_game_standard::metagame::extensions::context::context::ContextComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::leaderboard::leaderboard_component::LeaderboardComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::registration::registration_component::RegistrationComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::entry_fee::entry_fee_component::EntryFeeComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::entry_requirement::entry_requirement_component::EntryRequirementComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::prize::prize_component::PrizeComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::TournamentCreated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::TournamentRegistration\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_number\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::LeaderboardUpdated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"token_ids\",\n \"type\": \"core::array::Span::<core::felt252>\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::PrizeAdded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"prize_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"payout_position\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::RewardClaimed\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"claimed\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::QualificationEntriesUpdated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"qualification_proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::budokan::Budokan::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"MetagameEvent\",\n \"type\": \"game_components_embeddable_game_standard::metagame::metagame_component::MetagameComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"ContextEvent\",\n \"type\": \"game_components_embeddable_game_standard::metagame::extensions::context::context::ContextComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"SRC5Event\",\n \"type\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"LeaderboardEvent\",\n \"type\": \"game_components_metagame::leaderboard::leaderboard_component::LeaderboardComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"RegistrationEvent\",\n \"type\": \"game_components_metagame::registration::registration_component::RegistrationComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"EntryFeeEvent\",\n \"type\": \"game_components_metagame::entry_fee::entry_fee_component::EntryFeeComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"EntryRequirementEvent\",\n \"type\": \"game_components_metagame::entry_requirement::entry_requirement_component::EntryRequirementComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"PrizeEvent\",\n \"type\": \"game_components_metagame::prize::prize_component::PrizeComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"TournamentCreated\",\n \"type\": \"budokan::events::TournamentCreated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"TournamentRegistration\",\n \"type\": \"budokan::events::TournamentRegistration\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"LeaderboardUpdated\",\n \"type\": \"budokan::events::LeaderboardUpdated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"PrizeAdded\",\n \"type\": \"budokan::events::PrizeAdded\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RewardClaimed\",\n \"type\": \"budokan::events::RewardClaimed\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"QualificationEntriesUpdated\",\n \"type\": \"budokan::events::QualificationEntriesUpdated\",\n \"kind\": \"nested\"\n }\n ]\n }\n]\n","import type { Contract } from \"starknet\";\nimport { RpcError } from \"../errors/index.js\";\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction wrapRpcCall<T>(fn: () => Promise<T>, contractAddress?: string): Promise<T> {\n return fn().catch((error: unknown) => {\n throw new RpcError(\n error instanceof Error ? error.message : \"RPC call failed\",\n contractAddress,\n );\n });\n}\n\n// =========================================================================\n// Budokan contract read calls\n// =========================================================================\n\n/**\n * Fetch the full Custom distribution shares array for a tournament via the\n * Budokan contract's `tournament_distribution_shares(id)` view.\n *\n * Returns an empty array for tournaments configured with Linear /\n * Exponential / Uniform (those don't have a custom shares array), or for\n * tournaments that aren't configured yet.\n *\n * Consumers going through the primary API path don't need this — the\n * indexer already sources the shares from the `TournamentCreated` event.\n * This is the RPC-fallback path for direct on-chain reads.\n */\nexport async function budokanTournamentDistributionShares(\n contract: Contract,\n tournamentId: string,\n): Promise<number[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_distribution_shares\", [tournamentId]);\n const arr = Array.isArray(result) ? (result as unknown[]) : [];\n return arr.map((v) => Number(v));\n }, contract.address);\n}\n","import type { RpcProvider, Contract, Abi } from \"starknet\";\nimport type { BudokanClientConfig } from \"./types/config.js\";\nimport type { Tournament, TournamentListParams } from \"./types/tournament.js\";\nimport type { LeaderboardEntry } from \"./types/leaderboard.js\";\nimport type { Registration } from \"./types/registration.js\";\nimport type { Prize, RewardClaim, RewardClaimSummary, PrizeAggregation } from \"./types/prize.js\";\nimport type { PlayerStats, PlayerTournament, PlayerTournamentParams } from \"./types/player.js\";\nimport type { ActivityEvent, ActivityParams, PlatformStats, PrizeStats } from \"./types/activity.js\";\nimport type { QualificationEntry } from \"./types/tournament.js\";\nimport type { PaginatedResult } from \"./types/common.js\";\nimport type { WSChannel, WSEventHandler } from \"./types/websocket.js\";\nimport type { ConnectionStatusState } from \"./datasource/health.js\";\n\nimport {\n getTournaments as apiGetTournaments,\n getTournament as apiGetTournament,\n getTournamentLeaderboard as apiGetTournamentLeaderboard,\n getTournamentRegistrations as apiGetTournamentRegistrations,\n getTournamentPrizes as apiGetTournamentPrizes,\n getTournamentRewardClaims as apiGetTournamentRewardClaims,\n getTournamentRewardClaimsSummary as apiGetTournamentRewardClaimsSummary,\n getTournamentQualifications as apiGetTournamentQualifications,\n getTournamentPrizeAggregation as apiGetTournamentPrizeAggregation,\n} from \"./api/tournaments.js\";\nimport {\n getPlayerTournaments as apiGetPlayerTournaments,\n getPlayerStats as apiGetPlayerStats,\n} from \"./api/players.js\";\nimport {\n getGameTournaments as apiGetGameTournaments,\n getGameStats as apiGetGameStats,\n} from \"./api/games.js\";\nimport {\n getActivity as apiGetActivity,\n getActivityStats as apiGetActivityStats,\n getPrizeStats as apiGetPrizeStats,\n} from \"./api/activity.js\";\nimport { WSManager } from \"./ws/manager.js\";\nimport { getChainConfig } from \"./chains/constants.js\";\nimport { ConnectionStatus } from \"./datasource/health.js\";\nimport { withFallback } from \"./datasource/resolver.js\";\nimport { RpcError } from \"./errors/index.js\";\nimport { createProvider, createContract } from \"./rpc/provider.js\";\nimport {\n viewerTournaments,\n viewerTournamentsByGame,\n viewerTournamentsByCreator,\n viewerTournamentsByPhase,\n viewerTournamentDetail,\n viewerTournamentsBatch,\n viewerRegistrations,\n viewerRegistrationsByOwner,\n viewerRegistrationsByTokenIds,\n viewerLeaderboard,\n viewerPrizes,\n viewerRewardClaims,\n viewerPlayerTournaments,\n} from \"./rpc/viewer.js\";\n\nimport viewerAbi from \"./rpc/abis/budokanViewer.json\";\nimport budokanAbi from \"./rpc/abis/budokan.json\";\nimport { budokanTournamentDistributionShares } from \"./rpc/budokan.js\";\n\n/** Resolved config with all defaults applied */\ninterface ResolvedConfig extends BudokanClientConfig {\n rpcUrl: string;\n viewerAddress: string;\n budokanAddress: string;\n}\n\n/**\n * Main client for interacting with the Budokan tournament system.\n *\n * Provides methods for querying tournaments, registrations, leaderboards,\n * prizes, player stats, and activity events. Supports real-time updates\n * via WebSocket subscriptions and automatic RPC fallback when the API is\n * unavailable.\n *\n * @example\n * ```ts\n * // API-only (default, backward compatible)\n * const client = new BudokanClient({\n * apiBaseUrl: \"https://budokan-api.provable.games\",\n * });\n *\n * // With RPC fallback\n * const client = new BudokanClient({\n * chain: \"mainnet\",\n * apiBaseUrl: \"https://budokan-api.provable.games\",\n * viewerAddress: \"0x...\",\n * });\n *\n * // RPC-only (bypass API entirely)\n * const client = new BudokanClient({\n * primarySource: \"rpc\",\n * rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_10\",\n * viewerAddress: \"0x...\",\n * });\n * ```\n */\nexport class BudokanClient {\n private readonly resolvedConfig: ResolvedConfig;\n private readonly wsManager: WSManager;\n private readonly connectionStatus: ConnectionStatus;\n private cachedProvider: RpcProvider | null = null;\n private cachedViewerContract: Contract | null = null;\n private cachedBudokanContract: Contract | null = null;\n\n constructor(config: BudokanClientConfig) {\n // Merge user config with chain defaults\n const chainConfig = config.chain ? getChainConfig(config.chain) : undefined;\n this.resolvedConfig = {\n ...config,\n apiBaseUrl: config.apiBaseUrl ?? chainConfig?.apiBaseUrl ?? \"\",\n rpcUrl: config.rpcUrl ?? chainConfig?.rpcUrl ?? \"\",\n viewerAddress: config.viewerAddress ?? chainConfig?.viewerAddress ?? \"\",\n budokanAddress: config.budokanAddress ?? chainConfig?.budokanAddress ?? \"\",\n };\n\n const wsUrl = config.wsUrl ?? chainConfig?.wsUrl\n ?? this.resolvedConfig.apiBaseUrl.replace(/^http/, \"ws\").replace(/\\/$/, \"\") + \"/ws\";\n this.wsManager = new WSManager(wsUrl);\n\n this.connectionStatus = new ConnectionStatus(\n this.resolvedConfig.apiBaseUrl,\n this.resolvedConfig.rpcUrl,\n config.health,\n );\n\n // Start health monitoring if both sources are configured\n if (this.resolvedConfig.apiBaseUrl && this.resolvedConfig.rpcUrl) {\n this.connectionStatus.startMonitoring();\n }\n }\n\n // ---- Configuration ----\n\n /** Returns the resolved configuration. */\n get clientConfig(): BudokanClientConfig {\n return { ...this.resolvedConfig };\n }\n\n /** Whether the WebSocket is currently connected. */\n get wsConnected(): boolean {\n return this.wsManager.isConnected;\n }\n\n // ---- Connection status ----\n\n /** Returns the current connection status (API, RPC, mode). */\n getConnectionStatus(): ConnectionStatusState {\n return this.connectionStatus.getStatus();\n }\n\n /** Subscribe to connection status changes. Returns an unsubscribe function. */\n onConnectionStatusChange(listener: (status: ConnectionStatusState) => void): () => void {\n return this.connectionStatus.subscribe(listener);\n }\n\n // ---- Lazy RPC getters ----\n\n private async getProvider(): Promise<RpcProvider> {\n if (this.cachedProvider) return this.cachedProvider;\n if (!this.resolvedConfig.rpcUrl) {\n throw new RpcError(\"No rpcUrl configured\");\n }\n if (this.resolvedConfig.provider) {\n this.cachedProvider = this.resolvedConfig.provider;\n return this.cachedProvider;\n }\n this.cachedProvider = await createProvider(\n this.resolvedConfig.rpcUrl,\n this.resolvedConfig.rpcHeaders,\n );\n return this.cachedProvider;\n }\n\n private async getViewerContract(): Promise<Contract> {\n if (this.cachedViewerContract) return this.cachedViewerContract;\n if (!this.resolvedConfig.viewerAddress) {\n throw new RpcError(\"No viewerAddress configured. Set viewerAddress in config or use a chain preset with a deployed viewer contract.\");\n }\n const provider = await this.getProvider();\n this.cachedViewerContract = await createContract(\n viewerAbi as Abi,\n this.resolvedConfig.viewerAddress,\n provider,\n );\n return this.cachedViewerContract;\n }\n\n private async getBudokanContract(): Promise<Contract> {\n if (this.cachedBudokanContract) return this.cachedBudokanContract;\n if (!this.resolvedConfig.budokanAddress) {\n throw new RpcError(\"No budokanAddress configured. Set budokanAddress in config or use a chain preset with a deployed Budokan contract.\");\n }\n const provider = await this.getProvider();\n this.cachedBudokanContract = await createContract(\n budokanAbi as Abi,\n this.resolvedConfig.budokanAddress,\n provider,\n );\n return this.cachedBudokanContract;\n }\n\n // ---- API context ----\n\n private get apiCtx() {\n return {\n retryAttempts: this.resolvedConfig.retryAttempts,\n retryDelay: this.resolvedConfig.retryDelay,\n timeout: this.resolvedConfig.timeout,\n };\n }\n\n // ---- Tournament Queries ----\n\n /**\n * Fetch a paginated list of tournaments with optional filtering.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournaments(params?: TournamentListParams): Promise<PaginatedResult<Tournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<Tournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n\n // Choose the appropriate viewer filter function\n let filterResult: { tournamentIds: string[]; total: number };\n if (params?.phase) {\n filterResult = await viewerTournamentsByPhase(contract, params.phase, offset, limit);\n } else if (params?.gameAddress) {\n filterResult = await viewerTournamentsByGame(contract, params.gameAddress, offset, limit);\n } else if (params?.creator) {\n filterResult = await viewerTournamentsByCreator(contract, params.creator, offset, limit);\n } else {\n filterResult = await viewerTournaments(contract, offset, limit);\n }\n\n // Batch-fetch full tournament data for the returned IDs\n let data: Tournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n data = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n\n // Fetch prize aggregation if requested\n if (params?.includePrizeSummary) {\n const prizePromises = data.map((t) =>\n viewerPrizes(contract, t.id).catch(() => [] as Prize[]),\n );\n const allPrizes = await Promise.all(prizePromises);\n data = data.map((t, i) => {\n const prizes = allPrizes[i];\n if (prizes.length === 0) return t;\n // Build aggregation by token\n const tokenMap = new Map<string, { tokenAddress: string; tokenType: string; totalAmount: bigint; nftCount: number }>();\n for (const p of prizes) {\n const key = p.tokenAddress;\n const existing = tokenMap.get(key);\n if (existing) {\n existing.totalAmount += BigInt(p.amount ?? \"0\");\n if (p.tokenType === \"erc721\") existing.nftCount += 1;\n } else {\n tokenMap.set(key, {\n tokenAddress: p.tokenAddress,\n tokenType: p.tokenType,\n totalAmount: BigInt(p.amount ?? \"0\"),\n nftCount: p.tokenType === \"erc721\" ? 1 : 0,\n });\n }\n }\n return {\n ...t,\n prizeAggregation: Array.from(tokenMap.values()).map((v) => ({\n tokenAddress: v.tokenAddress,\n tokenType: v.tokenType,\n totalAmount: v.totalAmount.toString(),\n nftCount: v.nftCount,\n })),\n };\n });\n }\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournaments(this.resolvedConfig.apiBaseUrl, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch a single tournament by its ID.\n * Supports RPC fallback when API is unavailable.\n *\n * On the RPC-fallback path, Custom distribution shares are populated via\n * a follow-up call to `tournament_distribution_shares(id)` so callers see\n * the same shape regardless of data source (the API/indexer path fills\n * shares from the `TournamentCreated` event).\n */\n async getTournament(tournamentId: string): Promise<Tournament | null> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n const tournament = await viewerTournamentDetail(contract, tournamentId);\n if (tournament) {\n await this.fillCustomSharesIfEmpty(tournament);\n }\n return tournament;\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n try {\n return await apiGetTournament(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx);\n } catch {\n // API 404 or network error — try RPC fallback\n try {\n this.connectionStatus.markApiUnavailable();\n return await rpcFallback();\n } catch {\n return null;\n }\n }\n }\n\n /**\n * If the tournament's entry-fee distribution is `Custom` with an empty\n * shares array (the on-chain `tournament()` view returns empty spans by\n * design to keep the hot path small), fetch the shares via the\n * dedicated view and graft them back onto the distribution object.\n *\n * Detection is tolerant: the Distribution shape may appear as\n * `{ variant: { Custom: [] } }` or a flattened `{ Custom: [] }`\n * depending on the starknet.js version / serialization path.\n */\n private async fillCustomSharesIfEmpty(tournament: Tournament): Promise<void> {\n const dist = tournament.entryFee?.distribution as unknown;\n if (!dist || typeof dist !== \"object\") return;\n\n const bag =\n ((dist as { variant?: Record<string, unknown> }).variant ??\n (dist as Record<string, unknown>)) as Record<string, unknown>;\n const customValue = bag.Custom ?? bag.custom;\n if (!Array.isArray(customValue) || customValue.length > 0) return;\n\n try {\n const shares = await this.getTournamentDistributionShares(tournament.id);\n if (shares.length > 0) {\n // Overwrite in place — Distribution is typed as opaque, so cast.\n (bag as Record<string, unknown>).Custom = shares;\n }\n } catch {\n // Silent — caller gets the empty array; auto-fill is best-effort.\n }\n }\n\n /**\n * Fetch the Custom distribution shares for a tournament via the Budokan\n * contract's `tournament_distribution_shares(id)` view.\n *\n * Returns an empty array for tournaments configured with\n * `Linear` / `Exponential` / `Uniform` distributions (those don't have a\n * shares array), and for tournaments without an entry fee.\n *\n * This is a direct RPC call — consumers going through the primary API\n * path typically don't need it, since the indexer sources Custom shares\n * from the `TournamentCreated` event and exposes them via\n * `getTournament()`'s `entryFee.distribution`. Use this when you need a\n * fresh on-chain read or you're operating in RPC-only mode.\n */\n async getTournamentDistributionShares(tournamentId: string): Promise<number[]> {\n const contract = await this.getBudokanContract();\n return budokanTournamentDistributionShares(contract, tournamentId);\n }\n\n /**\n * Fetch the leaderboard for a tournament.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournamentLeaderboard(tournamentId: string): Promise<LeaderboardEntry[]> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n // Fetch a large page; on-chain leaderboards are typically small\n return viewerLeaderboard(contract, tournamentId, 0, 1000);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentLeaderboard(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch registrations for a tournament.\n * Supports RPC fallback when API is unavailable.\n * Note: In RPC mode, `playerAddress` and `gameAddress` fields will be empty strings,\n * and filter params (`playerAddress`, `gameTokenIds`, `hasSubmitted`, `isBanned`)\n * are applied via on-chain viewer functions where supported.\n */\n async getTournamentRegistrations(\n tournamentId: string,\n params?: { playerAddress?: string; gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n ): Promise<PaginatedResult<Registration>> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n if (params?.playerAddress) {\n return viewerRegistrationsByOwner(contract, tournamentId, params.playerAddress, offset, limit);\n }\n if (params?.gameTokenIds?.length) {\n return viewerRegistrationsByTokenIds(contract, tournamentId, params.gameTokenIds, offset, limit);\n }\n return viewerRegistrations(contract, tournamentId, offset, limit);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRegistrations(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch prizes for a tournament.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournamentPrizes(tournamentId: string): Promise<Prize[]> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n return viewerPrizes(contract, tournamentId);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentPrizes(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n // ---- Player Queries (API-only, no on-chain equivalent) ----\n\n /**\n * Fetch tournaments that a player has registered for.\n * Supports RPC fallback via viewer contract.\n */\n async getPlayerTournaments(\n address: string,\n params?: PlayerTournamentParams,\n ): Promise<PaginatedResult<PlayerTournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<PlayerTournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n const filterResult = await viewerPlayerTournaments(contract, address, offset, limit);\n\n let data: PlayerTournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n const tournaments = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n data = tournaments.map((t) => ({\n ...t,\n tournamentId: t.id,\n })) as unknown as PlayerTournament[];\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetPlayerTournaments(this.resolvedConfig.apiBaseUrl, address, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch stats for a player.\n * API-only — no RPC fallback available.\n */\n async getPlayerStats(address: string): Promise<PlayerStats> {\n return apiGetPlayerStats(this.resolvedConfig.apiBaseUrl, address, this.apiCtx);\n }\n\n // ---- Game Queries ----\n\n /**\n * Fetch tournaments for a specific game.\n * Supports RPC fallback when API is unavailable.\n */\n async getGameTournaments(\n gameAddress: string,\n params?: Omit<TournamentListParams, \"gameAddress\">,\n ): Promise<PaginatedResult<Tournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<Tournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n const filterResult = await viewerTournamentsByGame(contract, gameAddress, offset, limit);\n\n let data: Tournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n data = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetGameTournaments(this.resolvedConfig.apiBaseUrl, gameAddress, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch tournament stats for a specific game.\n * API-only — no RPC fallback available.\n */\n async getGameStats(gameAddress: string): Promise<PlatformStats> {\n return apiGetGameStats(this.resolvedConfig.apiBaseUrl, gameAddress, this.apiCtx);\n }\n\n // ---- Reward Claims & Qualifications ----\n\n /**\n * Fetch reward claims for a tournament.\n * Supports RPC fallback via viewer contract.\n */\n async getTournamentRewardClaims(\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ): Promise<PaginatedResult<RewardClaim>> {\n const rpcFallback = async (): Promise<PaginatedResult<RewardClaim>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 100;\n const result = await viewerRewardClaims(contract, tournamentId, offset, limit);\n const data: RewardClaim[] = result.claims.map((c) => ({\n tournamentId,\n rewardType: c.rewardType as RewardClaim[\"rewardType\"],\n claimed: c.claimed,\n }));\n return { data, total: result.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRewardClaims(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch reward claims summary for a tournament.\n * Supports RPC fallback via viewer contract.\n */\n async getTournamentRewardClaimsSummary(tournamentId: string): Promise<RewardClaimSummary> {\n const rpcFallback = async (): Promise<RewardClaimSummary> => {\n const contract = await this.getViewerContract();\n const result = await viewerRewardClaims(contract, tournamentId, 0, 0);\n return {\n totalPrizes: result.total,\n totalClaimed: result.totalClaimed,\n totalUnclaimed: result.totalUnclaimed,\n };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRewardClaimsSummary(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch qualifications for a tournament.\n * API-only -- no RPC fallback available.\n */\n async getTournamentQualifications(\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ): Promise<PaginatedResult<QualificationEntry>> {\n return apiGetTournamentQualifications(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx);\n }\n\n /**\n * Fetch prize aggregation for a tournament.\n * API-only -- no RPC fallback available.\n */\n async getTournamentPrizeAggregation(tournamentId: string): Promise<PrizeAggregation[]> {\n return apiGetTournamentPrizeAggregation(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx);\n }\n\n // ---- Activity Queries (API-only, activity is indexed) ----\n\n /**\n * Fetch activity events with optional filtering.\n * API-only — no RPC fallback available.\n */\n async getActivity(params?: ActivityParams): Promise<PaginatedResult<ActivityEvent>> {\n return apiGetActivity(this.resolvedConfig.apiBaseUrl, params, this.apiCtx);\n }\n\n /**\n * Fetch platform-wide activity stats.\n * API-only — no RPC fallback available.\n */\n async getActivityStats(): Promise<PlatformStats> {\n return apiGetActivityStats(this.resolvedConfig.apiBaseUrl, this.apiCtx);\n }\n\n /**\n * Fetch platform-wide prize stats.\n * API-only — no RPC fallback available.\n */\n async getPrizeStats(): Promise<PrizeStats> {\n return apiGetPrizeStats(this.resolvedConfig.apiBaseUrl, this.apiCtx);\n }\n\n // ---- WebSocket ----\n\n /**\n * Open a WebSocket connection for real-time updates.\n */\n connect(): void {\n this.wsManager.connect();\n }\n\n /**\n * Close the WebSocket connection.\n */\n disconnect(): void {\n this.wsManager.disconnect();\n }\n\n /**\n * Stop health monitoring and close all connections.\n */\n destroy(): void {\n this.connectionStatus.destroy();\n this.wsManager.disconnect();\n }\n\n /**\n * Subscribe to WebSocket channels with optional tournament filtering.\n * Returns an unsubscribe function.\n */\n subscribe(\n channels: WSChannel[],\n handler: WSEventHandler,\n tournamentIds?: string[],\n ): () => void {\n return this.wsManager.subscribe({ channels, tournamentIds }, handler);\n }\n\n /**\n * Register a listener for WebSocket connection state changes.\n * Returns an unsubscribe function.\n */\n onWsConnectionChange(listener: (connected: boolean) => void): () => void {\n return this.wsManager.onConnectionChange(listener);\n }\n}\n\n/**\n * Factory function for creating a BudokanClient instance.\n */\nexport function createBudokanClient(config: BudokanClientConfig): BudokanClient {\n return new BudokanClient(config);\n}\n"]}
|