1.2.5 • Published 6 days ago

r6statapi v1.2.5

Weekly downloads
-
License
MIT
Repository
github
Last release
6 days ago

R6StatAPI

An API wrapper for Rainbow Six Seige written in JavaScript.

Table of Contents

  1. Installation
  2. Getting Started
  3. Functions
  4. Support

Installation

npm i r6statapi

Getting Started

To get started you will need a Ubisoft login, it is best to create a new account and not the account you normally use. Create a new account here

The example below has the email and password variables hardcoded but it would be better to use dotenv to manage environment variables.

import r6statapi from 'r6statapi';

const api = new r6statapi();

// replace with your own information
const email = "test@gmail.com"
const password = "Password123"
const usermame = "User1"
const platform = "uplay"

// login and get token
const token = await api.getAuth(email, password)
console.log(token)

// fetch user by username
const user = await api.getUserByUsername(userName, platform);
console.log(user);

// example response
{
  profileId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
  userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
  platformType: 'uplay',
  idOnPlatform: 'AFC2AFEC-B9ED-4988-BFFA-58E78EEDFA93',
  nameOnPlatform: 'CaleyW1'
}

Functions

Table of Contents

  1. Auth
  2. GetUserByUsername
  3. GetUserByUserId
  4. GetUserProgression
  5. GetServerStatus
  6. GetUserRank
  7. GetUserStats
  8. GetOperators

Auth

Signs into the Ubisoft a returns a token.

await api.getAuth(email, password)

Example response

ewogICJ2ZXIiOiAiMSIsCiAgImFpZCI6ICJlM2Q1ZWE5ZS01MGJkLTQzYjctODhiZi0zOTc5NGY0ZTNkNDAiLAogICJlbnYiOiAiUHJvZCIsCiAgInNpZCI6ICI2YzVlY2E4MS1jYWI3LTQ0NjItOWUzOC04YjZkODA5OWQ1ZjEiLAogICJ0eXAiOiAiSldFIiwKICAiZW5jIjogIkExMjhDQkMiLAogICJpdiI6ICJPellRVVNkSkswNzJURTFJTXVpdFhnIiwKICAiaW50IjogIkhTMjU2IiwKICAia2lkIjogImFkNWNjMzFhLWI2ZmQtNGYyZS04N2JmLTNjZjRkOTc1OTY2NSIKfQ.-F6ZqzG9mOze0HRYJh3Ub23dQUR9BLR-VM7hMgbisN3tQZ1XLgZFyVH2sFmmX4VMPEKVG9e_PGLnPgrtyBfVkyyQBrjlppeWJXICTQPqj1-gg-0KCX4V3DkEd_o1VYbUAeuiA2QBtUeYIaxFluqxTZ5fr6fcGZvfB8npqMgahHLdcwyzcykp8klKbhOF5L17lUXMai5VgGT33o5N3xxx6wBZL97lXZ_jK1Yd67jPTsL2guB24meGrdR2HBtrB3N6ZR2cZnrFyfDuQzdotf0HsRlX8kATI2wOiADZ8RQS6pRtfRlFXqk-HZ0bsCAdQrs4wOzwL5ZiijfS63rAif_6t1K-KYffiQ3ExXPX6jG2OVK8evkR8fP-vS_aNF1iXE8j4ctrti8PezaOgJUmlRRBwrq29hxJJs5fIsP_EGkg_5rztX4hZtvDNRM9vRsIfAt3aPci5CpyhZs2oAbjLYqA1mEOaY8PODCm4pv3qS8zFBXlPAerCW-8ccYfsAmxEMCrZCxG210BDpZQ5c4JHk_XBij6TqE7yWjg_SO0qR_6eFhRKo5lpLbHAao7EWnfuh03dr_Q210QbiyYE5lCQ4RNapfEug0i5flhlJ55asjlQq6UOt21iJFEHBKHjJLj1vSy7WR347iUlYG8bRtcKHXvL2jD6WP18knlIZIWK7XQtR90TpiYV-WY4hqy7UMqD4yFe4Ah-jP58H8ADYA0F_wzIMGenfuDV4mQ_PyjSQuEynYmycmJyjFGeSFye8N-VvGJvcxozY5NMsYmHUqFLxZ1I6HlZivB_6znSzIK5mzqkfR24tPKQv_3T2VHbTfmN_E-4e5enq3F9tayTOSGNad6sSvP_dBao50w-5JBx86i7xJyK2IRGdjizfTbmzUyBQg5zeDbrRHTrAqnaV8NglOF8I2kS3rbxKH9qfUk1MrNdgi7ZJA34tFfu7XRMvUQN2asmrYhvBC0XlyABCCnn3mPy4abQgstYS9wX-itoVSru0_YS8QCIrffpRZkWANjAIsmERWiOGMXlwE5j2wB50M4_JI_gWGplgmn_9nZrtIeGJBYRUj4j4zl495lowDfTPBOdt3QOLx8OAGrHTwDKj6TOCZ6Nh8e7DjMmgm8c8i3n1WmQu6tkT0f3kOUbt1m3941q93R9kd9MR5H28wQHDH8ffTeGPTbhitgWy9WpsnOujwIm3Nnq72L1hkB5UeJobb7uJ6x8bwMaUUjlP8S6Qpa816YKoFQlFpI-dFPaf0W4gOlxSOafLyS6oewtKQlcADTZ5uwbEx4CPRhm9kZwKdekdol6lcEBk-07z8ppev0pNJl45gztd8zuqg_tqfVQtdSh53-xYqh_7FzzsdieCHCx-I0e9jv4QqAZ_VqAGb5ENNPsYHl9bMQYHdY-4npOfK5A4QgXwConKc2KD9dzhOTuohcz5mTgnP5yCkBOxmoHOXcNqh-HV6eAtg-ayrVpG63BlFND_uxAhJ-hnK0STCID-2JI3bvBr4p6V4L6_RT8X1EU_cCw4Ohr-cO9EqZT8f8qjiVzOAqZY6uPe8DfkANkSBIfmXL6A-duTGYoetHQXmvFxiM_MB10LP6FL1eVI2ZNwCXgJ0HgZkQ-_Ul5iBPEeuEIx3tCXpk6aoq1nIC6wdj_JJx9kTwICF3tOvPbUXI1jczVu_36HFi2fZxM6inuZ1uzC3ewfY_opccdDRLSZknlHs29ZPsOfiAX_hrm0NCGdE7MJMdC9aeGsGdll2ujxGZ90CKFuayH9pJsHgpW5d8Ly8v0xCJFc2qiTGAF-XJq9XCIroOBussSi4mLsJCr97jB9KjAY12zYIb-Pfhlnlba7YqX6otIO8oWG5koYzaj5ipqixOXCrDrXAHKdHFFeAYYq3Ojk1t96o_oRkQh1WBspTmmdRz1UOlUsBbVr4q4a0mj0cgFjKIjhv54Kj2xBnpf5GxmDLV9YEE3bqfMGrCy-rIR45CLGx6mBdRmf999dmb3wOM3iPlbgloF2TDTvFdaokQ4lYX51x4E0io8aFtJIrQX8EoPeFWvG8lea20h4e7TeEFx3n07rnPY22HxAFw26spFDxwBPAc6iLxEt_NoerdANtPE_-wUnqrZJ3-Oblvk6M6HOh_vsj-yJi4QC88sxqHhWiBRhW2vCePfY1RDJvD2Hq66Xc2Engp4drZhX1Drv4PnTPk8nISNVelUxGx89B-2KZtIsBUZiUxrY7bZj6Px2FmC2Ro5dOKIjQwZA6D-uEkAhBFsibp3tOIzWAjQChCR89hJy9IS2O7PMWs31rxINAKdx43jb6llgTRsUGDXYLL1eKYecUd7orY8frlAYXU1xLmDBzBpn6wzbMRNNoFfiI1KG9rUKR8EDPUv26GcfsBzkuSHeFXSi_Xhg.oMj2gpJl_2eOj-pFuYvFyWr_t1JR48zgb2st82KTKWk

Get user by username

Gets a user by username

await api.getUserByUsername(userName, platform);

Example response

{
  profileId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
  userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
  platformType: 'uplay',
  idOnPlatform: 'AFC2AFEC-B9ED-4988-BFFA-58E78EEDFA93',
  nameOnPlatform: 'CaleyW1'
}

Get user by userId

Gets a user by userId

await api.getUserById(user.userId, platform);

Example response

[
  {
    profileId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
    userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
    platformType: 'uplay',
    idOnPlatform: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
    nameOnPlatform: 'CaleyW1'
  },
  {
    profileId: 'f02cbe10-2411-43d9-b449-5366888201a2',
    userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
    platformType: 'steam',
    idOnPlatform: '76561198172917981',
    nameOnPlatform: '76561198172917983'
  },
  {
    profileId: '91193155-2b57-48f1-b69b-556f5e4ccfea',
    userId: 'afc2afec-b9ed-4988-bffa-58e78eedfa93',
    platformType: 'twitch',
    idOnPlatform: '469658264',
    nameOnPlatform: 'calbob'
  }
]

Get user progression

gets the progression for a user

await api.getUserProgression(user.userId, platform);

Example response

{
  level: 326,
  xp: 129949
}

Get server status

Returns the status of a platform

platforms: pc, xbox, ps4

await api.getServerStatus(platfrom)

Example response

{
  platform: 'PC',
  status: 'Online',
  maintenance: null,
  impactedFeatures: []
}

Get user rank

Returns statistics for different gamemodes

await api.getUserRank(player.userId, platfrom);

Example response

{
  casual: {
    profile_board_id: 'casual',
    id: '7acf490b-4bfd-40df-97b6-ebbbe6ebc702',
    max_rank: 0,
    max_rank_points: 0,
    platform_family: 'pc',
    rank: 0,
    rank_points: 0,
    season_id: 33,
    top_rank_position: 0,
    deaths: 0,
    kills: 0,
    abandons: 0,
    losses: 0,
    wins: 0
  },
  event: {
    profile_board_id: 'event',
    id: '7acf490b-4bfd-40df-97b6-ebbbe6ebc702',
    max_rank: 0,
    max_rank_points: 0,
    platform_family: 'pc',
    rank: 0,
    rank_points: 0,
    season_id: 33,
    top_rank_position: 0,
    deaths: 0,
    kills: 0,
    abandons: 0,
    losses: 0,
    wins: 0
  },
  warmup: {
    profile_board_id: 'warmup',
    id: '7acf490b-4bfd-40df-97b6-ebbbe6ebc702',
    max_rank: 0,
    max_rank_points: 0,
    platform_family: 'pc',
    rank: 0,
    rank_points: 0,
    season_id: 33,
    top_rank_position: 0,
    deaths: 12,
    kills: 14,
    abandons: 1,
    losses: 1,
    wins: 0
  },
  standard: {
    profile_board_id: 'standard',
    id: '7acf490b-4bfd-40df-97b6-ebbbe6ebc702',
    max_rank: 0,
    max_rank_points: 0,
    platform_family: 'pc',
    rank: 0,
    rank_points: 0,
    season_id: 33,
    top_rank_position: 0,
    deaths: 4,
    kills: 7,
    abandons: 0,
    losses: 1,
    wins: 0
  },
  ranked: {
    profile_board_id: 'ranked',
    id: '7acf490b-4bfd-40df-97b6-ebbbe6ebc702',
    max_rank: 32,
    max_rank_points: 4155,
    platform_family: 'pc',
    rank: 32,
    rank_points: 4100,
    season_id: 33,
    top_rank_position: 0,
    deaths: 433,
    kills: 581,
    abandons: 1,
    losses: 56,
    wins: 49
  }
}

Get User Stats

Get seasonal user statistics

FieldTypeRequiredoptions
userIdidyes
platformstringyesuplay, xbox, ps4
viewstringyesseasonal
aggregationstringyessummary
gameModestringyesAll, Casual, Ranked
teamRolestringyesAll
seasonstringyesformat Y(No.)S(No.) Example Y6S3
const userStats = await api.getUserStats(
  userId,
  platform,
  view,
  aggregation,
  gameMode,
  teamRole,
  season
);

Example response

[
  {
    gameMode: 'all',
    type: 'Seasonal',
    statsType: 'summary',
    statsDetail: 'summary',
    seasonYear: 'Y9',
    seasonNumber: 'S1',
    matchesPlayed: 100,
    roundsPlayed: 619,
    minutesPlayed: 2451,
    matchesWon: 47,
    matchesLost: 53,
    roundsWon: 303,
    roundsLost: 316,
    kills: 574,
    assists: 116,
    death: 414,
    headshots: 217,
    meleeKills: 2,
    teamKills: 2,
    openingKills: 64,
    openingDeaths: 44,
    trades: 21,
    openingKillTrades: 4,
    openingDeathTrades: 4,
    revives: 13,
    distanceTravelled: 113204,
    winLossRatio: 0.8868,
    killDeathRatio: { value: 1.3865, p: 0 },
    headshotAccuracy: { value: 0.378, p: 0 },
    killsPerRound: { value: 0.9273, p: 0 },
    roundsWithAKill: { value: 0.5703, p: 0 },
    roundsWithAMultiKill: { value: 0.2456, p: 0 },
    roundsWithOpeningKill: { value: 0.1034, p: 0 },
    roundsWithOpeningDeath: { value: 0.0711, p: 0 },
    roundsWithKOST: { value: 0.6478, p: 0 },
    roundsSurvived: { value: 0.3312, p: 0 },
    roundsWithAnAce: { value: 0.0048, p: 0 },
    roundsWithClutch: { value: 0.0113, p: 0 },
    timeAlivePerMatch: 631.35,
    timeDeadPerMatch: 175.88,
    distancePerRound: 182.8821
  }
]

Get Operator

Gets seasonal operator statistics

FieldTypeRequiredoptions
userIdIdYes
platformstringYesuplay, xbox, ps4
viewstringYesseasonal
aggregationstringYesoperator
gameModestringYesAll, Casual, Ranked
team rolestringYesAttacker, Defender
seasonstringYesformat Y(No.)S(No.) Example Y6S3
const operator = await api.getOperators(
  userId,
  platform,
  view,
  aggregation,
  gameMode,
  teamRole,
  season
);

Example Response

[
  {
    "attacker": [
      {
        "type": "Seasonal",
        "statsType": "operators",
        "statsDetail": "Iq",
        "seasonYear": "Y6",
        "seasonNumber": "S3",
        "matchesPlayed": 3,
        "roundsPlayed": 4,
        "minutesPlayed": 12,
        "matchesWon": 1,
        "matchesLost": 2,
        "roundsWon": 2,
        "roundsLost": 2,
        "kills": 2,
        "assists": 0,
        "death": 3,
        "headshots": 1,
        "meleeKills": 0,
        "teamKills": 0,
        "openingKills": 0,
        "openingDeaths": 1,
        "trades": 0,
        "openingKillTrades": 0,
        "openingDeathTrades": 0,
        "revives": 0,
        "distanceTravelled": 604,
        "winLossRatio": 0.5,
        "killDeathRatio": {
          "value": 0.6667,
          "p": 0
        },
        "headshotAccuracy": {
          "value": 0.5,
          "p": 0
        },
        "killsPerRound": {
          "value": 0.5,
          "p": 0
        },
        "roundsWithAKill": {
          "value": 0.25,
          "p": 0
        },
        "roundsWithMultiKill": {
          "value": 0.25,
          "p": 0
        },
        "roundsWithOpeningKill": {
          "value": 0,
          "p": 0
        },
        "roundsWithOpeningDeath": {
          "value": 0.25,
          "p": 0
        },
        "roundsWithKOST": {
          "value": 0.25,
          "p": 0
        },
        "roundsSurvived": {
          "value": 0.25,
          "p": 0
        },
        "roundsWithAnAce": {
          "value": 0,
          "p": 0
        },
        "roundsWithClutch": {
          "value": 0,
          "p": 0
        },
        "timeAlivePerMatch": 80,
        "timeDeadPerMatch": 60,
        "distancePerRound": 151
      }
    ]
  },
  {
    "defender": [
      {
        "type": "Seasonal",
        "statsType": "operators",
        "statsDetail": "Ela",
        "seasonYear": "Y6",
        "seasonNumber": "S3",
        "matchesPlayed": 3,
        "roundsPlayed": 3,
        "minutesPlayed": 10,
        "matchesWon": 1,
        "matchesLost": 2,
        "roundsWon": 1,
        "roundsLost": 2,
        "kills": 0,
        "assists": 2,
        "death": 3,
        "headshots": 0,
        "meleeKills": 0,
        "teamKills": 0,
        "openingKills": 0,
        "openingDeaths": 1,
        "trades": 0,
        "openingKillTrades": 0,
        "openingDeathTrades": 0,
        "revives": 0,
        "distanceTravelled": 553,
        "winLossRatio": 0.5,
        "killDeathRatio": {
          "value": 0,
          "p": 0
        },
        "headshotAccuracy": {
          "value": 0,
          "p": 0
        },
        "killsPerRound": {
          "value": 0,
          "p": 0
        },
        "roundsWithAKill": {
          "value": 0,
          "p": 0
        },
        "roundsWithMultiKill": {
          "value": 0,
          "p": 0
        },
        "roundsWithOpeningKill": {
          "value": 0,
          "p": 0
        },
        "roundsWithOpeningDeath": {
          "value": 0.3333,
          "p": 0
        },
        "roundsWithKOST": {
          "value": 0,
          "p": 0
        },
        "roundsSurvived": {
          "value": 0,
          "p": 0
        },
        "roundsWithAnAce": {
          "value": 0,
          "p": 0
        },
        "roundsWithClutch": {
          "value": 0,
          "p": 0
        },
        "timeAlivePerMatch": 80,
        "timeDeadPerMatch": 40,
        "distancePerRound": 184.3333
      }
    ]
  }
]

Support

For any questions, bugs or feedback, please use our Discord or create an issue on Github

1.2.5

6 days ago

1.2.4

16 days ago

1.2.0

18 days ago

1.2.3

18 days ago

1.2.2

18 days ago

1.2.1

18 days ago

1.1.12

1 month ago

1.1.11

1 month ago

1.1.9

1 month ago

1.1.10

1 month ago

1.1.8

1 month ago

1.1.7

2 months ago

1.1.6

2 months ago

1.1.5

2 months ago

1.1.4

2 months ago

1.1.3

3 months ago

1.1.2

3 months ago

1.1.1

3 months ago

1.1.0

3 months ago

1.0.6

4 months ago

1.0.5

7 months ago

1.0.4

7 months ago

1.0.3

7 months ago

1.0.2

12 months ago

1.0.1

12 months ago

1.0.0

12 months ago