robloxlauncherapi
Version:
Roblox Client Launcher Using Launch Protocols
123 lines (112 loc) • 3.71 kB
JavaScript
const noblox = require('noblox.js')
var $ = require('jquery')
const axios = require('axios')
const { resolve } = require('path')
const nodeCmd = require('node-cmd')
var exec = require('child_process').execFile
const fs = require('fs')
const dayjs = require('dayjs')
async function GameVersion() {
return (
await axios.get(
'https://clientsettings.roblox.com/v1/client-version/WindowsPlayer',
)
).data.clientVersionUpload
}
async function AuthTicket(cookie, token) {
await GameVersion()
var myInit = {
headers: {
Cookie: '.ROBLOSECURITY=' + cookie + ';',
Referer: 'https://www.roblox.com/games/606849621/Jailbreak',
'X-CSRF-TOKEN': token,
},
cache: 'default',
}
let destination = 'https://auth.roblox.com/v1/authentication-ticket/'
return (await axios.post(destination, {}, myInit)).headers[
'rbx-authentication-ticket'
]
}
async function LaunchGame(
cookie,
placeID = '4670813246',
followPlayer = false,
) {
return new Promise(async (resolve, error) => {
let token = await getToken(cookie)
let ticket = await AuthTicket(cookie, token)
let time = dayjs().unix()
if (!followPlayer) {
resolve(
`roblox-player:1+launchmode:play+gameinfo:${ticket}+launchtime:${time}+placelauncherurl:https://assetgame.roblox.com/game/PlaceLauncher.ashx?request=RequestGame&browserTrackerId=${time}&placeId=${placeID}&isPlayTogetherGame=false+browsertrackerid:${time}+robloxLocale:en_us+gameLocale:en_us+channel:`,
)
} else {
let playerID = await noblox.getIdFromUsername(followPlayer)
resolve(
`roblox-player:1+launchmode:play+gameinfo:${ticket}+launchtime:${time}+placelauncherurl:https://assetgame.roblox.com/game/PlaceLauncher.ashx?request=RequestFollowUser&browserTrackerId=${time}&userId=${playerID}+browsertrackerid:${time}+robloxLocale:en_us+gameLocale:en_us+channel:`,
)
}
})
}
async function getToken(cookie) {
return new Promise((resolve, reject) => {
var myInit = {
headers: {
Cookie: '.ROBLOSECURITY=' + cookie + ';',
Referer: 'https://www.roblox.com/games/606849621/Jailbreak',
},
cache: 'default',
}
let destination = 'https://auth.roblox.com/v1/authentication-ticket/'
axios.post(destination, {}, myInit).catch((error) => {
resolve(error.response.headers['x-csrf-token'])
})
})
}
const formUrlEncoded = (x) =>
Object.keys(x).reduce((p, c) => p + `&${c}=${encodeURIComponent(x[c])}`, '')
async function RobloxRequest(
endpoint,
cookie,
method = 'GET',
data = {},
referer = 'https://www.roblox.com/games/606849621/Jailbreak',
) {
return new Promise(async (resolve, reject) => {
let token = await getToken(cookie)
var myInit = {
headers: {
Cookie: '.ROBLOSECURITY=' + cookie + ';',
'X-CSRF-TOKEN': token,
Referer: referer,
},
baseURL: referer,
cache: 'default',
}
let destination = endpoint
if (method == 'POST') {
myInit.headers['Content-Type'] = 'application/x-www-form-urlencoded'
axios
.post(destination, formUrlEncoded(data), myInit)
.then((r) => {
resolve(r)
})
.catch((error) => {
resolve(error)
})
} else if (method == 'GET') {
axios
.get(destination, myInit)
.then((r) => {
resolve(r)
})
.catch((error) => {
resolve(error)
})
} else {
resolve('INVALID METHOD "' + method + '"')
}
})
}
module.exports = { LaunchGame, RobloxRequest }