Implement bet sharing functionality in your custom adapter to allow users to share their bets with other Virtual Stadium users.
To integrate bet sharing with Virtual Stadium:
Register the adapter function onRequest.
Handle a virtualStadium.betShare requestName.
Fetch user's shared tickets from your tickets system, optionally filter by events or already shared IDs.
Return bet objects in the expected format.
The widgets will call your provider function when users interact with bet sharing features.
For custom adapter implementations, register your adapter using the SIR('registerAdapter', ...) method with a function that handles bet sharing requests.
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:
/**
* 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.