Skip to main content
Logo
Explore APIsContact Us
  • Home
  1. Resources
  2. Virtual Stadium
  3. Bet Share

Bet Share

Implement bet sharing functionality in your custom adapter to allow users to share their bets with other Virtual Stadium users.

#Overview

To integrate bet sharing with Virtual Stadium:

1

#Step 1

Register the adapter function onRequest.

2

#Step 2

Handle a virtualStadium.betShare requestName.

3

#Step 3

Fetch user's shared tickets from your tickets system, optionally filter by events or already shared IDs.

4

#Step 4

Return bet objects in the expected format.

The widgets will call your provider function when users interact with bet sharing features.

#Implementation

For custom adapter implementations, register your adapter using the SIR('registerAdapter', ...) method with a function that handles bet sharing requests.

#Request Handler

requestName string required

The request type identifier. For bet sharing, this will be 'betShare'.

args BetShareRequest required

Request parameters containing bet sharing data and filters.

callback function optional

Callback function to return bet data in the format (error, response) => void.

Self-Service Adapter - Bet Sharing Handler:

javascript
/**
 * TODO(developer): Implement fetchUserBets and convert
 * functions according to your backend API structure.
 */
const onRequest = (requestName, args, callback) => {
    if (requestName === 'betShare') {
        // Fetch user's shared bets from your backend API or tickets system
        fetchUserBets(args.userId, (error, allBets) => {
            if (error) {
                return callback(error);
            }

            // Implement filtering logic based on provided arguments
            let filteredBets = allBets;

            // Filter by events if provided
            if (args.events && args.events.length > 0) {
                const eventIds = args.events.map(event => event.id);
                filteredBets = filteredBets.filter(bet =>
                    bet.bets.some(betItem => eventIds.includes(betItem.event.id))
                );
            }

            // Exclude already shared bets if provided
            if (args.alreadySharedBetIds && args.alreadySharedBetIds.length > 0) {
                filteredBets = filteredBets.filter(bet =>
                    !args.alreadySharedBetIds.includes(bet.id)
                );
            }

            // Transform your ticket data structure into the BetSlip format required by Virtual Stadium. (example transformation)
            const bets = filteredBets.map(bet => ({
                id: bet.id || 'sr:bet-share-event:single',
                betSlipId: bet.betSlipId || 'sr:bet-share-event:single',
                betType: bet.betType || 'single',
                currency: bet.currency || 'USD',
                combinedOdds: bet.combinedOdds || { decimalValue: 2.55, displayValue: '2.55' },
                stake: bet.stake || { value: '50.00' },
                payout: bet.payout || { value: '127.50' },
                bets: bet.bets || [{
                    id: 'xxx',
                    markets: [{
                        name: 'Total',
                        outcomes: [{
                            name: 'Under 1.5',
                            odds: 13.37
                        }]
                    }],
                    odds: { decimalValue: 13.37 },
                    event: { name: 'Match name' }
                }]
            }));

            callback(null, { bets });
        });

        // Return cleanup function if needed
        return () => {
            // Cleanup logic
        };
    }
    
};

SIR('registerAdapter', onRequest);

For the complete Bet Data Structure reference, see Bet Data Structure.

Last updated about 2 months ago
Is this site helpful?
Virtual Stadium, Moderation, Engagement Tools, BET
FeaturesFlash Share
On this page
  • Overview
  • Step 1
  • Step 2
  • Step 3
  • Step 4
  • Implementation
  • Request Handler