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+':64989'; // 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}