Passer au contenu principal
Cette page documente chaque méthode de la classe Counsel exportée depuis counsel.ts. Chaque méthode correspond à un seul endpoint de l’API publique de counsel. Toutes les méthodes sont asynchrones et lèvent une exception sur les réponses non 2xx. La méthode placeBet lève également une exception si le XRP Ledger renvoie un résultat autre que tesSUCCESS.

Interfaces

Les interfaces TypeScript suivantes sont exportées directement depuis counsel.ts. Importez-les avec la classe pour accéder de façon typée aux valeurs de retour.

CounselOptions

export interface CounselOptions {
  /** Base URL of a counsel deployment, e.g. https://api.counsel.markets */
  baseUrl: string;
  /** XRPL node to submit on (testnet by default). */
  wss?: string;
}

BetIntent

export interface BetIntent {
  tx: Payment;
  pool_account: string;
  destination_tag: number;
  source_tag: number;
  amount_xrp: number;
  projected_implied_odds_after: { implied_prob: number; payout_per_unit: number | null };
  market: { id: string; question: string; outcome: number; outcome_label: string };
}
Payment est le type de transaction non signée du paquet xrpl. tx est passé directement à client.autofill() et wallet.sign() à l’intérieur de placeBet.

constructor(opts: CounselOptions)

Instancie le client. Aucune connexion réseau n’est établie au moment de la construction.
baseUrl
string
requis
URL de base du déploiement de counsel. Utilisez https://api.counsel.markets pour l’instance hébergée.
wss
string
URL du noeud WebSocket XRPL utilisé par placeBet lors de la connexion au ledger. Par défaut, le testnet XRPL (wss://s.altnet.rippletest.net:51233).
const counsel = new Counsel({
  baseUrl: "https://api.counsel.markets",
  wss: "wss://xrplcluster.com", // omit to use testnet
});

markets()

markets(): Promise<{ markets: MarketV1[], source_tag: number | null }>
Récupère tous les marchés publics, y compris la taille en direct des pools, les probabilités implicites par issue, et la phase courante. Utilisez cette méthode pour découvrir les marchés ouverts et lire les cotes indicatives avant de placer un pari. Les champs de MarketV1 incluent : id, question, family, phase, status ("open" | "resolved" | "void"), pool_account, fee_rate, bet_cutoff, resolution_time, total_xrp, total_drops, et un tableau outcomes. Chaque issue dans outcomes porte : index, label, destination_tag, pool_drops, pool_xrp, bets, implied_prob, et payout_per_unit. Retourne
markets
MarketV1[]
Tableau de tous les marchés actuellement suivis par l’indexeur de counsel.
source_tag
number | null
Le SourceTag que counsel attend sur toutes les transactions Payment. Appliqué automatiquement par placeBet.
const { markets } = await counsel.markets();
const open = markets.filter(m => m.status === "open");

market(id: string)

market(id: string): Promise<Record<string, unknown>>
Récupère un marché unique par son ID. Retourne l’objet marché complet, y compris tous les pools d’issues et les métadonnées de résolution.
id
string
requis
L’ID du marché, une chaîne hexadécimale telle que "9b6a290b0cc8c5be".
Retourne
(root)
Record<string, unknown>
L’objet marché brut. La forme correspond à une seule entrée du tableau de markets().
const m = await counsel.market("9b6a290b0cc8c5be");

betIntent(id, account, outcome, amountXrp)

betIntent(
  id: string,
  account: string,
  outcome: number,
  amountXrp: number
): Promise<BetIntent>
Récupère une intention de pari non signée pour l’issue et la mise spécifiées. Le serveur calcule les cotes projetées après ajout de votre mise au pool, ce qui vous permet de vérifier le slippage avant de signer. Aucune transaction n’est soumise ; rien n’est envoyé au ledger à ce stade.
id
string
requis
ID du marché.
account
string
requis
Votre adresse XRPL (par exemple "rYourAddress..."). Utilisée comme champ Account dans le Payment non signé.
outcome
number
requis
Index (base zéro) de l’issue sur laquelle vous voulez parier. Correspond à OutcomeV1.index dans le tableau outcomes du marché.
amountXrp
number
requis
Mise en XRP (pas en drops). Par exemple, 5 signifie 5 XRP.
Retourne
tx
Payment
Transaction Payment XRPL non signée. À passer à client.autofill() puis wallet.sign().
pool_account
string
L’adresse XRPL du compte pool du marché (la destination du Payment).
destination_tag
number
Le DestinationTag identifiant l’issue sur le compte pool.
source_tag
number
Le SourceTag que counsel requiert pour l’attribution. Déjà intégré dans tx.
amount_xrp
number
Mise confirmée en XRP telle que le serveur l’a interprétée.
projected_implied_odds_after
object
Cotes parimutuel pour cette issue une fois votre mise incluse.
implied_prob
number
Probabilité implicite (0-1) de cette issue après votre mise.
payout_per_unit
number | null
Payout net par XRP misé si cette issue gagne, après frais. null si le pool serait nul.
market
object
Résumé compact du marché pour l’affichage ou la journalisation.
id
string
ID du marché.
question
string
Question du marché, lisible par un humain.
outcome
number
Index de l’issue sur laquelle vous avez parié.
outcome_label
string
Libellé lisible de l’issue.
const intent = await counsel.betIntent(
  "9b6a290b0cc8c5be",
  "rYourAddress",
  0,    // outcome index
  5,    // XRP
);
console.log("implied prob after bet:", intent.projected_implied_odds_after.implied_prob);
console.log("payout per XRP if win:", intent.projected_implied_odds_after.payout_per_unit);

positions(address: string)

positions(address: string): Promise<{ account: string, positions: unknown[] }>
Récupère toutes les positions ouvertes et réglées pour l’adresse XRPL donnée.
address
string
requis
L’adresse XRPL à interroger. Doit être une adresse r valide.
Retourne
account
string
L’adresse qui a été interrogée.
positions
unknown[]
Tableau d’objets position, un par pari placé par l’adresse. Chaque entrée inclut le marché, l’issue, la mise, et l’état de règlement.
const { positions } = await counsel.positions("rYourAddress");
console.log(`${positions.length} positions found`);

leaderboard()

leaderboard(): Promise<Record<string, unknown>>
Récupère le classement global, ordonnant les participants par volume ou par profit sur l’ensemble des marchés résolus. Retourne
(root)
Record<string, unknown>
La charge utile du classement. Le schéma peut évoluer ; traitez-la comme un objet brut tant qu’une forme stable n’est pas publiée.
const lb = await counsel.leaderboard();

placeBet(seed, id, outcome, amountXrp)

placeBet(
  seed: string,
  id: string,
  outcome: number,
  amountXrp: number
): Promise<string>
Helper de bout en bout : récupère une intention de pari, la signe localement avec Wallet.fromSeed(seed), complète automatiquement les champs de séquence du ledger via client.autofill(), signe avec wallet.sign(), soumet avec client.submitAndWait(), et vérifie tesSUCCESS avant de retourner. Ouvre une connexion WebSocket XRPL pour la durée de l’appel, puis se déconnecte. Le seed n’est jamais envoyé au serveur counsel.
seed
string
requis
Le seed du wallet XRPL du parieur. Passé à Wallet.fromSeed() entièrement côté client. Seule l’adresse account dérivée est envoyée à l’API counsel.
id
string
requis
ID du marché.
outcome
number
requis
Index de l’issue (base zéro).
amountXrp
number
requis
Mise en XRP.
Retourne
(root)
string
Le hash de transaction validé renvoyé par le ledger (res.result.hash), confirmé tesSUCCESS.
const hash = await counsel.placeBet(
  process.env.BOT_SEED!,
  "9b6a290b0cc8c5be",
  0,   // outcome
  5,   // XRP
);
console.log("validated tx:", hash);
placeBet lève une exception si le ledger renvoie un résultat autre que tesSUCCESS. Le message d’erreur inclut le code de résultat du ledger (par exemple "ledger rejected: tecUNFUNDED_PAYMENT"). Gérez ce cas dans les bots de production : solde insuffisant, conflits de séquence, et autres erreurs du ledger remontent tous ici.