-
-
Save petersvp/270f7d5d7d548448f4897586a0d389c0 to your computer and use it in GitHub Desktop.
// 1. GO TO SteamWorks, into the Query CD Key page, here: https://partner.steamgames.com/querycdkey/ | |
// 2. Fill in your keys below: | |
// 3. Go to DevTools, Console, and paste all of this here there! | |
// 4. Report will be printed to the console. | |
keys = ` | |
0ZQR4-N0H7K-AEJ77 | |
D05V5-P47AP-4ET3Q | |
GGJZ5-ZN0BR-F74C5 | |
FWZP4-2IXHB-GYV3A | |
` | |
var keylist = keys.split("\n"); | |
keylist.forEach(key => { | |
if(key.length<17) return; | |
function reqListener () { | |
let body = this.responseText; | |
let result = body.split('<h2>Activation Details</h2>')[1]; | |
if (!result && !err) { | |
console.log('Error quering CD Key ' + key); | |
} | |
result = result.split('</table>')[0]; | |
result = result.match(/<td>.*<\/td>/g); | |
result = result.map(function (line) { | |
return line.replace(/<[^>]*>/g, ''); | |
}); | |
let line = [key, (result[0] === 'Activated') ? '"' + result[1] + '"' : result[0]].join('\t'); | |
console.log(line); | |
} | |
var oReq = new XMLHttpRequest(); | |
oReq.addEventListener("load", reqListener); | |
oReq.open("GET", "https://partner.steamgames.com/querycdkey/cdkey?cdkey="+key+"&method=Query"); | |
oReq.send(); | |
}); |
@Jimbly Thank you. We've been using your Node.js tool for a few years to great success. I was recently put in charge of it and then I saw the comment from Peter and thought I'd look into the updated version. Guess we'll stick to Node.js for now :)
Yeah, a couple hundred keys should be fine in the browser, it's not that much traffic. Also, most browsers usually rate limit to 7 connections per host, although in modern days if Valve has switched to a load balancer/server that supports HTTP2 that goes out the window. If you're querying thousands of keys I might be a little careful =).
Chrome does rate-limit too, I managed to batch-check 500 keys with no issue. I want to keep this implementation as CLEAN as possible, so people can read what it do and not fear of self-xss attack towards them - after all, pasting untrusted code in the browser console is real concern nowadays, so i at least tried to make my implementation clear what it does :)
Appreciate this.
If you've got a ton of keys to query, the Node.js version that does this is inherently rate limited (limits to one request in-flight at a time), though it takes a little more to set up https://gist.github.com/Jimbly/9f6c6a0d9414310347f2803902ac7bb7
I think it'd be pretty straightforward to change this one to do the same (and reduce a ton of code) now that
await fetch()
is something that works in modern browsers, instead of using XMLHttpRequest... but that sounds like work, so this is what you've got ;).