@globalleaderboards/sdk - v0.5.0
    Preparing search index...

    Class GlobalLeaderboards

    GlobalLeaderboards SDK client for interacting with the GlobalLeaderboards.net API

    const leaderboard = new GlobalLeaderboards('your-api-key')
    
    Index

    Constructors

    • Create a new GlobalLeaderboards SDK instance

      Parameters

      • apiKey: string

        Your API key from GlobalLeaderboards.net

      • Optionalconfig: Partial<GlobalLeaderboardsConfig>

        Optional configuration options

        • defaultLeaderboardId

          Default leaderboard ID for simplified submit() calls

        • baseUrl

          API base URL (default: https://api.globalleaderboards.net)

        • wsUrl

          WebSocket URL (default: wss://api.globalleaderboards.net)

        • timeout

          Request timeout in ms (default: 30000)

        • autoRetry

          Enable automatic retry (default: true)

        • maxRetries

          Maximum retry attempts (default: 3)

      Returns GlobalLeaderboards

      const leaderboard = new GlobalLeaderboards('your-api-key', {
      timeout: 60000
      })

    Properties

    version: string = SDK_VERSION

    Methods

    • Submit a score to a leaderboard with validation

      Supports three signature variations:

      • submit(userId, score) - Uses default leaderboard ID
      • submit(userId, score, leaderboardId) - Specify leaderboard
      • submit(userId, score, options) - Full options object

      When offline or queue not empty, submissions are queued and processed when online.

      Parameters

      • userId: string

        Unique user identifier

      • score: number

        Score value (must be >= 0)

      • OptionalleaderboardIdOrOptions:
            | string
            | {
                leaderboardId?: string;
                userName?: string;
                metadata?: Record<string, unknown>;
            }

        Leaderboard ID string or options object

      Returns Promise<SubmitScoreResponse | QueuedSubmitResponse>

      Score submission response or queued response

      If validation fails

      // Using default leaderboard
      await leaderboard.submit('user-123', 1500)

      // Specify leaderboard
      await leaderboard.submit('user-123', 1500, 'leaderboard-456')

      // Full options
      await leaderboard.submit('user-123', 1500, {
      leaderboardId: 'leaderboard-456',
      userName: 'PlayerOne',
      metadata: { level: 5 }
      })
    • Get paginated leaderboard entries

      Parameters

      • leaderboardId: string

        Leaderboard ID to retrieve

      • Optionaloptions: { page?: number; limit?: number; aroundUser?: string }

        Query options

        • Optionalpage?: number

          Page number (default: 1)

        • Optionallimit?: number

          Results per page (default: 20, max: 100)

        • OptionalaroundUser?: string

          Center results around specific user ID

      Returns Promise<LeaderboardEntriesResponse>

      Leaderboard entries with pagination info

      If API returns an error

      const data = await leaderboard.getLeaderboard('leaderboard-456', {
      page: 1,
      limit: 10,
      aroundUser: 'user-123'
      })
    • Submit multiple scores in bulk for better performance

      Accepts mixed formats for flexibility:

      • [userId, score] - Uses default leaderboard
      • [userId, score, leaderboardId] - Specify leaderboard
      • Full object with all options

      Parameters

      Returns Promise<BulkSubmitScoreResponse>

      Bulk submission response with individual results and summary

      If validation fails or API returns an error

      const results = await leaderboard.submitBulk([
      ['user-123', 1000], // Uses default leaderboard
      ['user-456', 2000, 'leaderboard-789'], // Specific leaderboard
      { // Full options
      userId: 'user-789',
      score: 3000,
      leaderboardId: 'leaderboard-789',
      userName: 'TopPlayer',
      metadata: { level: 10 }
      }
      ])
    • Get all scores for a user across leaderboards

      Parameters

      • userId: string

        User ID to get scores for

      • Optionaloptions: { page?: number; limit?: number }

        Query options

        • Optionalpage?: number

          Page number (default: 1)

        • Optionallimit?: number

          Results per page (default: 20)

      Returns Promise<UserScoresResponse>

      User scores with pagination and summary stats

      If API returns an error

      const userScores = await leaderboard.getUserScores('user-123', {
      page: 1,
      limit: 50
      })
    • Connect to WebSocket for real-time leaderboard updates

      WebSocket connections now work through the main API domain with full Cloudflare proxy protection. Both WebSocket and SSE are supported options for real-time updates. Choose based on your specific needs:

      • WebSocket: Lower latency, binary support, bidirectional potential
      • SSE: Simpler implementation, automatic reconnection, better firewall compatibility

      Parameters

      • handlers: WebSocketHandlers

        Event handlers for WebSocket events

        WebSocket event handlers

        • OptionalonConnect?: () => void

          Called when connection is established

        • OptionalonDisconnect?: (code: number, reason: string) => void

          Called when connection is closed

        • OptionalonError?: (error: Error) => void

          Called when an error occurs

        • OptionalonLeaderboardUpdate?: (
              data: {
                  leaderboardId: string;
                  updateType: "score_update" | "full_refresh" | "bulk_update";
                  leaderboard: {
                      entries: LeaderboardEntry[];
                      totalEntries: number;
                      displayedEntries: number;
                  };
                  mutations: LeaderboardMutation[];
                  trigger: UpdateTrigger;
                  sequence: number;
              },
          ) => void

          Called when leaderboard is updated

        • OptionalonUserRankUpdate?: (
              data: {
                  leaderboard_id: string;
                  user_id: string;
                  old_rank: number;
                  new_rank: number;
                  score: number;
              },
          ) => void

          Called when user rank changes

        • OptionalonMessage?: (message: WebSocketMessage) => void

          Called for any message

        • OptionalonReconnecting?: (attempt: number, maxAttempts: number, nextDelay: number) => void

          Called when starting a reconnection attempt

      • Optionaloptions: {
            leaderboardId?: string;
            userId?: string;
            maxReconnectAttempts?: number;
            reconnectDelay?: number;
        }

        Connection options

        • OptionalleaderboardId?: string

          Initial leaderboard to subscribe to

        • OptionaluserId?: string

          User ID for personalized updates

        • OptionalmaxReconnectAttempts?: number

          Max reconnection attempts

        • OptionalreconnectDelay?: number

          Delay between reconnection attempts in ms

      Returns LeaderboardWebSocket

      WebSocket client instance

      const ws = leaderboard.connectWebSocket({
      onConnect: () => console.log('Connected'),
      onLeaderboardUpdate: (data) => console.log('Update:', data)
      }, {
      leaderboardId: 'leaderboard-456'
      })

      connectSSE - Recommended alternative for real-time updates

    • Disconnect from WebSocket

      Returns void

      leaderboard.disconnectWebSocket()
      
    • Connect to Server-Sent Events (SSE) for real-time leaderboard updates

      This is the recommended method for real-time updates. SSE provides:

      • Simpler implementation compared to WebSocket
      • Automatic reconnection with exponential backoff
      • Better firewall and proxy compatibility
      • Lower resource usage
      • Built-in heartbeat for connection health

      Parameters

      • leaderboardId: string

        Leaderboard to connect to

      • handlers: SSEEventHandlers

        Event handlers for SSE events

        Event handlers for SSE

        • OptionalonConnect?: () => void
        • OptionalonDisconnect?: () => void
        • OptionalonError?: (error: GlobalLeaderboardsError) => void
        • OptionalonLeaderboardUpdate?: (data: SSELeaderboardUpdateEvent) => void
        • OptionalonHeartbeat?: (data: { connectionId: string; serverTime: string }) => void
        • OptionalonMessage?: (message: any) => void
      • Optionaloptions: SSEConnectionOptions

        Connection options

        SSE connection options

        • OptionaluserId?: string
        • OptionalincludeMetadata?: boolean
        • OptionaltopN?: number

      Returns { close: () => void }

      SSE connection object with close method

      const connection = leaderboard.connectSSE('leaderboard-123', {
      onLeaderboardUpdate: (data) => {
      console.log('Top scores:', data.topScores)
      },
      onUserRankUpdate: (data) => {
      console.log('Rank changed:', data)
      }
      })

      // Later...
      connection.close()
    • Disconnect from all SSE connections

      Returns void

      leaderboard.disconnectSSE()
      
    • Generate a new ULID (Universally Unique Lexicographically Sortable Identifier)

      Returns string

      A new ULID string

      const id = leaderboard.generateId()
      // Returns: '01ARZ3NDEKTSV4RRFFQ69G5FAV'
    • Get API information and available endpoints

      Returns Promise<ApiInfoResponse>

      API info including version, endpoints, and documentation URL

      If API returns an error

      No authentication required for this endpoint

      const info = await leaderboard.getApiInfo()
      console.log('API Version:', info.version)
    • Perform a basic health check on the API

      Returns Promise<HealthResponse>

      Health status with version and timestamp

      If health check fails

      No authentication required for this endpoint

      const health = await leaderboard.health()
      if (health.status === 'healthy') {
      console.log('API is healthy')
      }
    • Perform a detailed health check with individual service statuses

      Returns Promise<DetailedHealthResponse>

      Detailed health info including database, cache, and storage status

      If health check fails

      No authentication required for this endpoint

      const health = await leaderboard.healthDetailed()
      console.log('Database:', health.services.database.status)
      console.log('Cache:', health.services.cache.status)
    • Get current offline queue status

      Returns {
          size: number;
          processing: boolean;
          items: { queueId: string; method: string; timestamp: number }[];
      }

      Queue information including size and processing state

    • Manually trigger offline queue processing

      Returns Promise<void>

      Promise that resolves when processing is complete