373 lines
9.8 KiB
JavaScript
373 lines
9.8 KiB
JavaScript
const fetch = (...args) =>
|
|
import("node-fetch").then(({ default: fetch }) => fetch(...args))
|
|
let controller = new AbortController()
|
|
require("dotenv").config()
|
|
const RCC_HOST = process.env.RCC_HOST
|
|
|
|
const url = "http://" + RCC_HOST + ":64990" // change this to rcc soap
|
|
var convert = require("xml-js")
|
|
const sampleHeaders = {
|
|
"Content-Type": "text/xml;charset=UTF-8",
|
|
}
|
|
|
|
async function OpenJob(jobid, script, expiration) {
|
|
return new Promise(async (resolve, reject) => {
|
|
// this is all boilerplate because soap sucks
|
|
var xml = {
|
|
_declaration: {
|
|
_attributes: { version: "1.0", encoding: "UTF-8" },
|
|
},
|
|
"SOAP-ENV:Envelope": {
|
|
_attributes: {
|
|
"xmlns:SOAP-ENV":
|
|
"http://schemas.xmlsoap.org/soap/envelope/",
|
|
"xmlns:ns1": "http://roblox.com/",
|
|
},
|
|
"SOAP-ENV:Body": {
|
|
"ns1:OpenJobEx": {
|
|
"ns1:job": {
|
|
"ns1:id": { _text: "StringTest11" },
|
|
"ns1:expirationInSeconds": { _text: "10" },
|
|
"ns1:category": { _text: "0" },
|
|
"ns1:cores": { _text: "1" },
|
|
},
|
|
"ns1:script": {
|
|
"ns1:name": { _text: "StringTest11-Script" },
|
|
"ns1:script": {
|
|
_text: 'print("Recieved job with ID " .. game.JobId)\r\n',
|
|
},
|
|
"ns1:arguments": {},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:OpenJobEx"]["ns1:job"][
|
|
"ns1:id"
|
|
]._text = jobid
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:OpenJobEx"]["ns1:job"][
|
|
"ns1:expirationInSeconds"
|
|
]._text = expiration
|
|
if (!expiration) {
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:OpenJobEx"][
|
|
"ns1:job"
|
|
]["ns1:expirationInSeconds"]._text = "60"
|
|
}
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:OpenJobEx"][
|
|
"ns1:script"
|
|
]["ns1:script"]._text = script
|
|
const body = convert.js2xml(xml, { compact: true, spaces: 4 })
|
|
|
|
try {
|
|
const result = await fetch(url, { method: "POST", body })
|
|
const data = await result.text()
|
|
const convertedData = convert.xml2js(data, {
|
|
compact: true,
|
|
spaces: 4,
|
|
})
|
|
return resolve(convertedData)
|
|
} catch (error) {
|
|
return reject(error)
|
|
}
|
|
})
|
|
}
|
|
|
|
async function GetAllJobs() {
|
|
return new Promise(async (resolve, reject) => {
|
|
const xmlData = (xml = {
|
|
_declaration: {
|
|
_attributes: { version: "1.0", encoding: "UTF - 8" },
|
|
},
|
|
"SOAP-ENV:Envelope": {
|
|
_attributes: {
|
|
"xmlns:SOAP-ENV":
|
|
"http://schemas.xmlsoap.org/soap/envelope/",
|
|
"xmlns:SOAP-ENC":
|
|
"http://schemas.xmlsoap.org/soap/encoding/",
|
|
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
"xmlns:xsd": "http://www.w3.org/2001/XMLSchema",
|
|
"xmlns:ns2": "http://roblox.com/RCCServiceSoap",
|
|
"xmlns:ns1": "http://roblox.com/",
|
|
"xmlns:ns3": "http://roblox.com/RCCServiceSoap12",
|
|
},
|
|
"SOAP-ENV:Body": { "ns1:GetAllJobsEx": {} },
|
|
},
|
|
})
|
|
|
|
const body = convert.js2xml(xmlData, { compact: true, spaces: 4 })
|
|
|
|
try {
|
|
const result = await fetch(url, { method: "POST", body })
|
|
const data = await result.text()
|
|
const convertedData = convert.xml2js(data, {
|
|
compact: true,
|
|
spaces: 4,
|
|
})
|
|
return resolve(
|
|
convertedData["SOAP-ENV:Envelope"]["SOAP-ENV:Body"][
|
|
"ns1:GetAllJobsExResponse"
|
|
]["ns1:GetAllJobsExResult"],
|
|
)
|
|
} catch (error) {
|
|
return reject(error)
|
|
}
|
|
})
|
|
}
|
|
|
|
async function Execute(jobid, script) {
|
|
return new Promise(async (resolve, reject) => {
|
|
var xml = {
|
|
_declaration: {
|
|
_attributes: { version: "1.0", encoding: "UTF - 8" },
|
|
},
|
|
"SOAP-ENV:Envelope": {
|
|
_attributes: {
|
|
"xmlns:SOAP-ENV":
|
|
"http://schemas.xmlsoap.org/soap/envelope/",
|
|
"xmlns:SOAP-ENC":
|
|
"http://schemas.xmlsoap.org/soap/encoding/",
|
|
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
"xmlns:xsd": "http://www.w3.org/2001/XMLSchema",
|
|
"xmlns:ns2": "http://roblox.com/RCCServiceSoap",
|
|
"xmlns:ns1": "http://roblox.com/",
|
|
"xmlns:ns3": "http://roblox.com/RCCServiceSoap12",
|
|
},
|
|
"SOAP-ENV:Body": {
|
|
"ns1:ExecuteEx": {
|
|
"ns1:jobID": { _text: "Test" },
|
|
"ns1:script": {
|
|
"ns1:name": { _text: "Script" },
|
|
"ns1:script": { _text: 'print("no")' },
|
|
"ns1:arguments": { _text: "" },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:ExecuteEx"][
|
|
"ns1:jobID"
|
|
]._text = jobid
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:ExecuteEx"][
|
|
"ns1:script"
|
|
]["ns1:script"]._text = script
|
|
const body = convert.js2xml(xml, { compact: true, spaces: 4 })
|
|
|
|
try {
|
|
const result = await fetch(url, { method: "POST", body })
|
|
const data = await result.text()
|
|
const convertedData = convert.xml2js(data, {
|
|
compact: true,
|
|
spaces: 4,
|
|
})
|
|
return resolve(convertedData)
|
|
} catch (error) {
|
|
return reject(error)
|
|
}
|
|
})
|
|
}
|
|
async function CloseJob(jobid) {
|
|
return new Promise(async (resolve, reject) => {
|
|
var xml = {
|
|
_declaration: {
|
|
_attributes: { version: "1.0", encoding: "UTF - 8" },
|
|
},
|
|
"SOAP-ENV:Envelope": {
|
|
_attributes: {
|
|
"xmlns:SOAP-ENV":
|
|
"http://schemas.xmlsoap.org/soap/envelope/",
|
|
"xmlns:SOAP-ENC":
|
|
"http://schemas.xmlsoap.org/soap/encoding/",
|
|
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
"xmlns:xsd": "http://www.w3.org/2001/XMLSchema",
|
|
"xmlns:ns2": "http://roblox.com/RCCServiceSoap",
|
|
"xmlns:ns1": "http://roblox.com/",
|
|
"xmlns:ns3": "http://roblox.com/RCCServiceSoap12",
|
|
},
|
|
"SOAP-ENV:Body": {
|
|
"ns1:CloseJob": {
|
|
"ns1:jobID": { _text: "Test" },
|
|
},
|
|
},
|
|
},
|
|
}
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:CloseJob"][
|
|
"ns1:jobID"
|
|
]._text = jobid
|
|
const body = convert.js2xml(xml, { compact: true, spaces: 4 })
|
|
|
|
try {
|
|
const result = await fetch(url, { method: "POST", body })
|
|
const data = await result.text()
|
|
const convertedData = convert.xml2js(data, {
|
|
compact: true,
|
|
spaces: 4,
|
|
})
|
|
return resolve(convertedData)
|
|
} catch (error) {
|
|
return reject(error)
|
|
}
|
|
})
|
|
}
|
|
|
|
async function RenewLease(jobid, expiration) {
|
|
return new Promise(async (resolve, reject) => {
|
|
var xml = {
|
|
_declaration: {
|
|
_attributes: { version: "1.0", encoding: "UTF-8" },
|
|
},
|
|
"SOAP-ENV:Envelope": {
|
|
_attributes: {
|
|
"xmlns:SOAP-ENV":
|
|
"http://schemas.xmlsoap.org/soap/envelope/",
|
|
"xmlns:ns1": "http://roblox.com/",
|
|
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
|
|
},
|
|
"SOAP-ENV:Body": {
|
|
"ns1:RenewLease": {
|
|
"ns1:jobID": {
|
|
_attributes: { "xsi:type": "ns1:Job" },
|
|
"ns1:id": { _text: "StringTest11" },
|
|
"ns1:expirationInSeconds": { _text: "10" },
|
|
"ns1:category": { _text: "0" },
|
|
"ns1:cores": { _text: "1" },
|
|
},
|
|
"ns1:expirationInSeconds": { _text: "100" },
|
|
},
|
|
},
|
|
},
|
|
}
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:RenewLease"][
|
|
"ns1:jobID"
|
|
]["ns1:id"]._text = jobid
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:RenewLease"][
|
|
"ns1:expirationInSeconds"
|
|
]._text = expiration
|
|
const body = convert.js2xml(xml, { compact: true, spaces: 4 })
|
|
|
|
try {
|
|
const result = await fetch(url, { method: "POST", body })
|
|
const data = await result.text()
|
|
const convertedData = convert.xml2js(data, {
|
|
compact: true,
|
|
spaces: 4,
|
|
})
|
|
return resolve(convertedData)
|
|
} catch (error) {
|
|
return reject(error)
|
|
}
|
|
})
|
|
}
|
|
|
|
async function GetExpiration(jobid) {
|
|
return new Promise(async (resolve, reject) => {
|
|
var xml = {
|
|
_declaration: {
|
|
_attributes: { version: "1.0", encoding: "UTF-8" },
|
|
},
|
|
"SOAP-ENV:Envelope": {
|
|
_attributes: {
|
|
"xmlns:SOAP-ENV":
|
|
"http://schemas.xmlsoap.org/soap/envelope/",
|
|
"xmlns:ns1": "http://roblox.com/",
|
|
},
|
|
"SOAP-ENV:Body": {
|
|
"ns1:GetExpiration": { "ns1:jobID": { _text: "Test" } },
|
|
},
|
|
},
|
|
}
|
|
xml["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["ns1:GetExpiration"][
|
|
"ns1:jobID"
|
|
]._text = jobid
|
|
const body = convert.js2xml(xml, { compact: true, spaces: 4 })
|
|
|
|
try {
|
|
const result = await fetch(url, { method: "POST", body })
|
|
const data = await result.text()
|
|
const convertedData = convert.xml2js(data, {
|
|
compact: true,
|
|
spaces: 4,
|
|
})
|
|
return resolve(convertedData)
|
|
} catch (error) {
|
|
return reject(error)
|
|
}
|
|
})
|
|
}
|
|
//var gameservertxt = fs.readFileSync('actualgameserver.txt','utf-8')
|
|
//gameservertxt = gameservertxt.replace('function start(placeId, port, url)','function start(1111, port)')
|
|
|
|
async function CloseExpiredJobs() {
|
|
return new Promise(async (resolve, reject) => {
|
|
var xml = (xml = {
|
|
_declaration: {
|
|
_attributes: { version: "1.0", encoding: "UTF-8" },
|
|
},
|
|
"SOAP-ENV:Envelope": {
|
|
_attributes: {
|
|
"xmlns:SOAP-ENV":
|
|
"http://schemas.xmlsoap.org/soap/envelope/",
|
|
"xmlns:ns1": "http://roblox.com/",
|
|
},
|
|
"SOAP-ENV:Body": { "ns1:CloseExpiredJobs": {} },
|
|
},
|
|
})
|
|
|
|
const body = convert.js2xml(xml, { compact: true, spaces: 4 })
|
|
|
|
try {
|
|
const result = await fetch(url, { method: "POST", body })
|
|
const data = await result.text()
|
|
const convertedData = convert.xml2js(data, {
|
|
compact: true,
|
|
spaces: 4,
|
|
})
|
|
return resolve(convertedData)
|
|
} catch (error) {
|
|
return reject(error)
|
|
}
|
|
})
|
|
}
|
|
|
|
async function CloseAllJobs() {
|
|
return new Promise(async (resolve, reject) => {
|
|
var xml = (xml = {
|
|
_declaration: {
|
|
_attributes: { version: "1.0", encoding: "UTF-8" },
|
|
},
|
|
"SOAP-ENV:Envelope": {
|
|
_attributes: {
|
|
"xmlns:SOAP-ENV":
|
|
"http://schemas.xmlsoap.org/soap/envelope/",
|
|
"xmlns:ns1": "http://roblox.com/",
|
|
},
|
|
"SOAP-ENV:Body": { "ns1:CloseAllJobs": {} },
|
|
},
|
|
})
|
|
|
|
const body = convert.js2xml(xml, { compact: true, spaces: 4 })
|
|
|
|
try {
|
|
const result = await fetch(url, { method: "POST", body })
|
|
const data = await result.text()
|
|
const convertedData = convert.xml2js(data, {
|
|
compact: true,
|
|
spaces: 4,
|
|
})
|
|
return resolve(convertedData)
|
|
} catch (error) {
|
|
return reject(error)
|
|
}
|
|
})
|
|
}
|
|
|
|
module.exports = {
|
|
OpenJob,
|
|
GetAllJobs,
|
|
Execute,
|
|
CloseJob,
|
|
RenewLease,
|
|
GetExpiration,
|
|
CloseExpiredJobs,
|
|
CloseAllJobs,
|
|
}
|