├── .editorconfig ├── .github ├── FUNDING.yml └── stale.yml ├── .gitignore ├── .ncurc.js ├── EncryptedStorage.js ├── LICENSE ├── README.md ├── build ├── icon.ico ├── icon.png └── icons │ └── 256x256.png ├── changelog.md ├── dev-app-update.yml ├── helpers ├── protos.js └── util.js ├── html ├── css │ ├── bootstrap.min.css │ ├── bootstrap.min.css.map │ ├── main.css │ └── material-icons.css ├── encryption_setup.html ├── font │ └── MaterialIcons-Regular.woff2 ├── img │ ├── prime.svg │ └── skillgroups │ │ ├── dangerzone0.svg │ │ ├── dangerzone1.svg │ │ ├── dangerzone10.svg │ │ ├── dangerzone11.svg │ │ ├── dangerzone12.svg │ │ ├── dangerzone13.svg │ │ ├── dangerzone14.svg │ │ ├── dangerzone15.svg │ │ ├── dangerzone2.svg │ │ ├── dangerzone3.svg │ │ ├── dangerzone4.svg │ │ ├── dangerzone5.svg │ │ ├── dangerzone6.svg │ │ ├── dangerzone7.svg │ │ ├── dangerzone8.svg │ │ ├── dangerzone9.svg │ │ ├── dangerzone_expired.svg │ │ ├── dangerzone_none.svg │ │ ├── skillgroup0.svg │ │ ├── skillgroup1.svg │ │ ├── skillgroup10.svg │ │ ├── skillgroup11.svg │ │ ├── skillgroup12.svg │ │ ├── skillgroup13.svg │ │ ├── skillgroup14.svg │ │ ├── skillgroup15.svg │ │ ├── skillgroup16.svg │ │ ├── skillgroup17.svg │ │ ├── skillgroup18.svg │ │ ├── skillgroup2.svg │ │ ├── skillgroup3.svg │ │ ├── skillgroup4.svg │ │ ├── skillgroup5.svg │ │ ├── skillgroup6.svg │ │ ├── skillgroup7.svg │ │ ├── skillgroup8.svg │ │ ├── skillgroup9.svg │ │ ├── skillgroup_expired.svg │ │ ├── skillgroup_none.svg │ │ ├── wingman0.svg │ │ ├── wingman1.svg │ │ ├── wingman10.svg │ │ ├── wingman11.svg │ │ ├── wingman12.svg │ │ ├── wingman13.svg │ │ ├── wingman14.svg │ │ ├── wingman15.svg │ │ ├── wingman16.svg │ │ ├── wingman17.svg │ │ ├── wingman18.svg │ │ ├── wingman2.svg │ │ ├── wingman3.svg │ │ ├── wingman4.svg │ │ ├── wingman5.svg │ │ ├── wingman6.svg │ │ ├── wingman7.svg │ │ ├── wingman8.svg │ │ ├── wingman9.svg │ │ ├── wingman_expired.svg │ │ └── wingman_none.svg ├── index.html ├── js │ ├── bootstrap.bundle.min.js │ ├── bootstrap.bundle.min.js.map │ └── front.js └── password.html ├── icons └── icon.png ├── main.js ├── package-lock.json ├── package.json ├── preload.js └── protos ├── base_gcmessages.proto ├── cstrike15_gcmessages.proto └── gcsdk_gcmessages.proto /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | end_of_line = lf 7 | charset = utf-8 8 | 9 | [*.js] 10 | indent_size = 2 -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | ko_fi: nezu_ 4 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 60 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - security 9 | - enhancement 10 | # Label to use when marking an issue as stale 11 | staleLabel: wontfix 12 | # Comment to post when marking an issue as stale. Set to `false` to disable 13 | markComment: > 14 | This issue has been automatically marked as stale because it has not had 15 | recent activity. It will be closed if no further activity occurs. Thank you 16 | for your contributions. 17 | # Comment to post when closing a stale issue. Set to `false` to disable 18 | closeComment: false 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | out/ 3 | dist/ 4 | publish.sh -------------------------------------------------------------------------------- /.ncurc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | target: (dependencyName, parsedVersion) => { 3 | return dependencyName === 'protobufjs' ? 'minor' : 'latest' 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /EncryptedStorage.js: -------------------------------------------------------------------------------- 1 | let JSONdb = require('simple-json-db'); 2 | let crypto = require('crypto'); 3 | const { pbkdf2: deriveKey } = require("pbkdf2"); 4 | const events = require('events'); 5 | const util = require('util'); 6 | const fs = require("fs"); 7 | 8 | const DERIVATION_ROUNDS = 200000; 9 | const HMAC_KEY_SIZE = 32; 10 | const PASSWORD_KEY_SIZE = 32; 11 | 12 | const defaultOptions = { 13 | asyncWrite: false, 14 | syncOnWrite: true, 15 | jsonSpaces: 4, 16 | stringify: JSON.stringify, 17 | parse: JSON.parse 18 | }; 19 | 20 | function pbkdf2(password, salt, rounds, bits) { 21 | return new Promise((resolve, reject) => { 22 | deriveKey(password, salt, rounds, bits / 8, "sha256", (err, key) => { 23 | if (err) { 24 | return reject(err); 25 | } 26 | return resolve(key); 27 | }); 28 | }); 29 | } 30 | 31 | async function deriveFromPassword(password, salt, rounds) { 32 | if (!password) { 33 | throw new Error("Failed deriving key: Password must be provided"); 34 | } 35 | if (!salt) { 36 | throw new Error("Failed deriving key: Salt must be provided"); 37 | } 38 | if (!rounds || rounds <= 0 || typeof rounds !== "number") { 39 | throw new Error("Failed deriving key: Rounds must be greater than 0"); 40 | } 41 | const bits = (PASSWORD_KEY_SIZE + HMAC_KEY_SIZE) * 8; 42 | const derivedKeyData = await pbkdf2(password, salt, rounds, bits); 43 | const derivedKeyHex = derivedKeyData.toString("hex"); 44 | return Buffer.from(derivedKeyHex.substr(0, derivedKeyHex.length / 2), "hex"); 45 | } 46 | 47 | function generateSalt(length) { 48 | if (length <= 0) { 49 | throw new Error(`Failed generating salt: Invalid length supplied: ${length}`); 50 | } 51 | let output = ""; 52 | while (output.length < length) { 53 | output += crypto.randomBytes(3).toString("base64"); 54 | if (output.length > length) { 55 | output = output.substr(0, length); 56 | } 57 | } 58 | return output; 59 | } 60 | 61 | function validateJSON(fileContent) { 62 | try { 63 | JSON.parse(fileContent); 64 | } catch (e) { 65 | throw new Error('Given filePath is not empty and its content is not valid JSON.'); 66 | } 67 | return true; 68 | }; 69 | 70 | class EncryptedStorage { 71 | 72 | /** 73 | * Main constructor, manages existing storage file and parses options against default ones. 74 | * @param {string} filePath The path of the file to use as storage. 75 | * @param {string} iv Encryption initialization vector 76 | * @param {string} salt Password salt used to derive the key 77 | * @param {string} password Encryption password 78 | * @param {object} [options] Configuration options. 79 | * @param {boolean} [options.asyncWrite] Enables the storage to be asynchronously written to disk. Disabled by default (synchronous behaviour). 80 | * @param {boolean} [options.syncOnWrite] Makes the storage be written to disk after every modification. Enabled by default. 81 | * @param {boolean} [options.syncOnWrite] Makes the storage be written to disk after every modification. Enabled by default. 82 | * @param {number} [options.jsonSpaces] How many spaces to use for indentation in the output json files. Default = 4 83 | * @param {object} [options.newData] Data that will be encrypted for the first time 84 | * @constructor 85 | */ 86 | constructor(filePath, password, options) { 87 | // Mandatory arguments check 88 | if (!filePath || !filePath.length) { 89 | throw new Error('Missing file path argument.'); 90 | } else { 91 | this.filePath = filePath; 92 | } 93 | 94 | // Options parsing 95 | if (options) { 96 | for (let key in defaultOptions) { 97 | if (!options.hasOwnProperty(key)) options[key] = defaultOptions[key]; 98 | } 99 | this.options = options; 100 | } else { 101 | this.options = defaultOptions; 102 | } 103 | 104 | this.storage = {}; 105 | 106 | if (!this.options.newData) { 107 | // File existence check 108 | let stats; 109 | try { 110 | stats = fs.statSync(filePath); 111 | } catch (err) { 112 | if (err.code === 'ENOENT') { 113 | /* File doesn't exist */ 114 | this.iv = crypto.randomBytes(16).toString('hex'); 115 | this.salt = generateSalt(12); 116 | 117 | deriveFromPassword(password, this.salt, DERIVATION_ROUNDS).then(derivedKey => { 118 | try { 119 | this.derivedKey = derivedKey; 120 | this.sync(); 121 | this.emit('loaded'); 122 | } catch (error) { 123 | this.emit('error', error); 124 | } 125 | }); 126 | return; 127 | } else if (err.code === 'EACCES') { 128 | throw new Error(`Cannot access path "${filePath}".`); 129 | } else { 130 | // Other error 131 | throw new Error(`Error while checking for existence of path "${filePath}": ${err}`); 132 | } 133 | } 134 | /* File exists */ 135 | try { 136 | fs.accessSync(filePath, fs.constants.R_OK | fs.constants.W_OK); 137 | } catch (err) { 138 | throw new Error(`Cannot read & write on path "${filePath}". Check permissions!`); 139 | } 140 | if (stats.size > 0) { 141 | let data; 142 | try { 143 | data = fs.readFileSync(filePath); 144 | } catch (err) { 145 | throw err; 146 | } 147 | if (validateJSON(data)) { 148 | const input_data = JSON.parse(data); 149 | 150 | if (!input_data.iv || !input_data.salt || !input_data.data) { 151 | throw new Error('Invalid file'); 152 | } 153 | 154 | this.iv = input_data.iv; 155 | this.salt = input_data.salt; 156 | 157 | deriveFromPassword(password, this.salt, DERIVATION_ROUNDS).then(derivedKey => { 158 | try { 159 | this.derivedKey = derivedKey; 160 | 161 | const decryptTool = crypto.createDecipheriv("aes-256-cbc", this.derivedKey, Buffer.from(this.iv, 'hex')); 162 | let decryptedData = decryptTool.update(input_data.data, "base64", "utf8"); 163 | decryptedData += decryptTool.final("utf8"); 164 | 165 | if (validateJSON(decryptedData)) { 166 | this.storage = JSON.parse(decryptedData); 167 | } 168 | this.emit('loaded'); 169 | } catch (error) { 170 | this.emit('error', error); 171 | } 172 | }); 173 | } 174 | } 175 | } 176 | else { 177 | this.iv = crypto.randomBytes(16).toString('hex'); 178 | this.salt = generateSalt(12); 179 | 180 | deriveFromPassword(password, this.salt, DERIVATION_ROUNDS).then(derivedKey => { 181 | try { 182 | this.derivedKey = derivedKey; 183 | this.storage = options.newData; 184 | this.sync(); 185 | this.emit('loaded'); 186 | } catch (error) { 187 | this.emit('error', error); 188 | } 189 | }); 190 | } 191 | 192 | } 193 | 194 | sync() { 195 | const json = JSON.stringify(this.storage, null, this.options.jsonSpaces); 196 | 197 | const encryptTool = crypto.createCipheriv("aes-256-cbc", this.derivedKey, Buffer.from(this.iv, 'hex')); 198 | 199 | let encryptedData = encryptTool.update(json, "utf8", "base64"); 200 | encryptedData += encryptTool.final("base64"); 201 | 202 | const finalJson = JSON.stringify({ 203 | iv: this.iv, 204 | salt: this.salt, 205 | data: encryptedData 206 | }) 207 | 208 | if (this.options && this.options.asyncWrite) { 209 | fs.writeFile(this.filePath, finalJson, (err) => { 210 | if (err) throw err; 211 | }); 212 | } else { 213 | try { 214 | fs.writeFileSync(this.filePath, finalJson); 215 | } catch (err) { 216 | if (err.code === 'EACCES') { 217 | throw new Error(`Cannot access path "${this.filePath}".`); 218 | } else { 219 | throw new Error(`Error while writing to path "${this.filePath}": ${err}`); 220 | } 221 | } 222 | } 223 | } 224 | } 225 | 226 | util.inherits(JSONdb, events.EventEmitter); 227 | util.inherits(EncryptedStorage, JSONdb); 228 | 229 | module.exports = EncryptedStorage; -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CS:GO account checker icon 2 | 3 | > [!WARNING] 4 | > Currently broken due to missing cs2 support! 5 | 6 | [![Github All Releases](https://img.shields.io/github/downloads/dumbasPL/csgo-checker/total.svg?style=for-the-badge)](https://github.com/dumbasPL/csgo-checker/releases/latest) 7 | 8 | ## Checks CS:GO accounts for: 9 | - bans (vac/overwatch/untrusted) 10 | - cooldowns (abandon, team damage, etc) 11 | - matchmaking rank/wins/rank expiration time (competitive, wingman and dangerzone) 12 | - CS:GO profile rank 13 | - prime status 14 | - steam profile name 15 | 16 | ## Additional features: 17 | - import/export form/to `user:pass` combo file 18 | - steam guard mobile authenticator shared secrets supported 19 | - mass refresh 20 | - copy password to clipboard 21 | - copy CS:GO friend code to clipboard 22 | - copy mobile steam 2fa code to clipboard (requires shared secret to be set) 23 | - search bar 24 | - tags 25 | - sorting 26 | - steam guard protected accounts supported 27 | 28 | ## screenshots 29 | ![image](https://user-images.githubusercontent.com/29180158/119862011-56202680-bf18-11eb-97db-229ff5c13535.png) 30 | -------------------------------------------------------------------------------- /build/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dumbasPL/csgo-checker/731232d0e443070440522eebfa0fa636f5d91f63/build/icon.ico -------------------------------------------------------------------------------- /build/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dumbasPL/csgo-checker/731232d0e443070440522eebfa0fa636f5d91f63/build/icon.png -------------------------------------------------------------------------------- /build/icons/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dumbasPL/csgo-checker/731232d0e443070440522eebfa0fa636f5d91f63/build/icons/256x256.png -------------------------------------------------------------------------------- /changelog.md: -------------------------------------------------------------------------------- 1 | # 1.4.4 2 | - bug fixes 3 | 4 | # 1.4.3 5 | - updated to the new steam authentication method (this fixes [#30](https://github.com/dumbasPL/csgo-checker/issues/30)) 6 | - updated to electron 25 7 | - dropped Windows 7/8/8.1 support 8 | 9 | # 1.4.2 10 | - fix accounts failing to load when using encryption 11 | 12 | # 1.4.1 13 | - updated to electron 22 14 | - updated dependencies 15 | 16 | # 1.4.0 17 | - added linux support 18 | 19 | # 1.3.1 20 | - fixed danger zone rank names (thanks @TheEnderOfficial) 21 | 22 | # 1.3.0 23 | - added copy steam guard code button (thanks @TheEnderOfficial) 24 | 25 | # 1.2.0 26 | - updated to electron 16 27 | - updated dependencies 28 | - added portable version 29 | 30 | # 1.1.2 31 | - fixed auto updater 32 | 33 | # 1.1.1 34 | - fixed sorting algorithm causing changes to account data 35 | 36 | # 1.1.0 37 | - added support for shared secrets ([#5](https://github.com/dumbasPL/csgo-checker/issues/5)) 38 | - added new cooldown reason `Reports (Grief)` 39 | - added encryption (can be enabled in settings) 40 | - search and sorting now updates correctly when account data changes ([#6](https://github.com/dumbasPL/csgo-checker/issues/6)) 41 | - fixed tooltips not disappearing after deleting account without confirmation 42 | 43 | # 1.0.2 44 | - fixed tags not being saved when adding new account 45 | - fixed some action buttons not working on newly added accounts 46 | - fixed accounts not automatically refreshing after being added 47 | 48 | # 1.0.1 49 | - fixed overwatch bans showing remaining time 50 | - updated checker logic to latest game update 51 | 52 | # 1.0.0 53 | 54 | **⚠️ Data storage format changed, please refresh all accounts for ranks to display correctly ⚠️** 55 | 56 | - ui overhaul 57 | - migrated ui from materializecss to bootstrap 58 | - added changelog 59 | - added dangerzone ranks 60 | - added rank icons 61 | - added rank expiration time 62 | - added search bar 63 | - added ability to sort accounts by `login`, `name`, `lvl`, `prime starts`, `rank`, `ban status` 64 | - added option to export all accounts as `user:pass` combo list 65 | - added tags 66 | - added option to edit accounts 67 | - added settings 68 | - added `delete all accounts` button in settings 69 | - updated icon to match the new theme 70 | - changed minimum window width to `1100px` 71 | - changed minimum window height to `625px` 72 | - ranks are now saved as numbers instead of names 73 | 74 | # 0.1.8 75 | - fixed autoupdater 76 | 77 | # 0.1.7 78 | - fixed missing `open in browser` button accidentally deleted in last release 79 | 80 | # 0.1.6 81 | - errors no longer reset account info 82 | - set minimum window width to 960px 83 | - added copy friend code button 84 | 85 | # 0.1.5 86 | - renamed to CS:GO account checker to more accurately represent the main task of this software 87 | - added checking for prime 88 | - added icon 89 | - added installer 90 | - added auto-updater 91 | - minor bug fixes 92 | 93 | # 0.1.4 94 | - fixed overwatch bans appearing as VAC bans 95 | - added Steam Guard support 96 | 97 | # 0.1.3 98 | - added wingman ranks 99 | - added import from combo list (`user:pass` format, one per line) 100 | - added delete confirmation(ctrl + click to delete without confirmation) 101 | - added option to open steam profile in the browser for account 102 | - made navbar and table header sticky 103 | - changed icon for "copy password" 104 | - fixed some bugs 105 | 106 | # 0.1.2 107 | - added private levels 108 | - added community ban detection 109 | 110 | # 0.1.1 111 | - first release 112 | 113 | # 0.1.0 114 | - initial pre-release -------------------------------------------------------------------------------- /dev-app-update.yml: -------------------------------------------------------------------------------- 1 | owner: dumbasPL 2 | repo: csgo-checker 3 | provider: github 4 | updaterCacheDirName: csgo-checker-updater 5 | -------------------------------------------------------------------------------- /helpers/protos.js: -------------------------------------------------------------------------------- 1 | const Protobuf = require("protobufjs"); 2 | const fs = require("fs"); 3 | const path = require("path"); 4 | 5 | module.exports = Protos; 6 | 7 | function Protos(protos, ignoreErrors = true) { 8 | const protobufs = {}; 9 | 10 | for (let proto of protos) { 11 | let root = new Protobuf.Root(); 12 | let files = Array.isArray(proto.protos) ? proto.protos : fs.readdirSync(proto.protos).map(file => path.join(proto.protos, file)); 13 | 14 | for (let file of files) { 15 | if (!file.endsWith(".proto") || !fs.existsSync(file)) { 16 | continue; 17 | } 18 | 19 | try { 20 | root = root.loadSync(file, { 21 | keepCase: true 22 | }); 23 | } catch (err) { 24 | if (!ignoreErrors) { 25 | throw err; 26 | } 27 | }; 28 | } 29 | 30 | protobufs[proto.name] = root; 31 | } 32 | 33 | return protobufs; 34 | } -------------------------------------------------------------------------------- /helpers/util.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | penalty_reason_string, 3 | penalty_reason_permanent, 4 | protoDecode, 5 | protoEncode 6 | } 7 | 8 | function penalty_reason_string(id) { 9 | switch (id) 10 | { 11 | case 0: return 0; 12 | case 1: return "Kicked"; 13 | case 2: return "TK Limit"; 14 | case 3: return "TK Spawn"; 15 | case 4: return "Disconnected Too Long"; 16 | case 5: return "Abandon"; 17 | case 6: return "TD Limit"; 18 | case 7: return "TD Spawn"; 19 | case 8: 20 | case 14: return "Untrusted"; 21 | case 9: return "Kicked Too Much"; 22 | case 10: return "Overwatch (Cheat)"; 23 | case 11: return "Overwatch (Grief)"; 24 | case 16: return "Failed To Connect"; 25 | case 17: return "Kick Abuse"; 26 | case 18: 27 | case 19: 28 | case 20: return "Rank Calibration"; 29 | case 21: return "Reports (Grief)" 30 | default: return `Unknown(${id})`; 31 | } 32 | } 33 | 34 | function penalty_reason_permanent(id) { 35 | switch (id) 36 | { 37 | case 8: 38 | case 14: 39 | case 10: 40 | return true; 41 | default: 42 | return false; 43 | } 44 | } 45 | 46 | function protoDecode(proto, obj) { 47 | return proto.toObject(proto.decode(obj), { defaults: true }); 48 | } 49 | 50 | function protoEncode(proto, obj) { 51 | return proto.encode(proto.create(obj)).finish(); 52 | } -------------------------------------------------------------------------------- /html/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #222; 3 | overflow: hidden; 4 | } 5 | 6 | main::-webkit-scrollbar { 7 | width: 6px; 8 | } 9 | 10 | main::-webkit-scrollbar-track { 11 | background-color: #222; 12 | } 13 | 14 | main::-webkit-scrollbar-thumb { 15 | background: #555; 16 | border-radius: 10px; 17 | } 18 | 19 | main::-webkit-scrollbar-thumb:hover { 20 | background: #999; 21 | } 22 | 23 | main { 24 | position: fixed; 25 | top: 3.5em; 26 | bottom: 0; 27 | right: 0; 28 | left: 0; 29 | overflow-y: scroll; 30 | } 31 | 32 | .material-icons { 33 | vertical-align: middle; 34 | } 35 | 36 | .prime-green { 37 | filter: brightness(0) saturate(100%) invert(32%) sepia(100%) saturate(1307%) hue-rotate(93deg) brightness(98%) contrast(105%); 38 | } 39 | 40 | .prime-red { 41 | filter: brightness(0) saturate(100%) invert(16%) sepia(42%) saturate(6385%) hue-rotate(355deg) brightness(100%) contrast(100%); 42 | } 43 | 44 | .rank-image { 45 | height: 26px; 46 | } 47 | 48 | #main-table tr td:last-child, .prime, .level, .login, .steam_name, .rank { 49 | white-space: nowrap; 50 | width: 1%; 51 | } 52 | 53 | .rank { 54 | padding-left: 0 !important; 55 | padding-right: 0 !important; 56 | } 57 | 58 | .actions { 59 | text-align: right; 60 | } 61 | 62 | #main-table th { 63 | border-bottom: 0; 64 | position: sticky; 65 | top: 0; 66 | z-index: 1; 67 | } 68 | 69 | .prime img { 70 | height: 26px; 71 | } 72 | 73 | .form-control-color { 74 | width: 40px; 75 | } 76 | 77 | table tr td.preloader { 78 | display: none; 79 | } 80 | 81 | table tr.pending td.preloader { 82 | display: table-cell; 83 | } 84 | 85 | table tr.pending td:not(.login):not(.preloader) { 86 | display: none; 87 | } 88 | 89 | .preloader .progress { 90 | margin: 5.5px; 91 | } 92 | 93 | th { 94 | box-shadow: inset 0 -1px var(--bs-danger) !important; 95 | user-select: none; 96 | } 97 | 98 | .tooltip-inner { 99 | max-width: 500px !important; 100 | } 101 | 102 | th > .material-icons { 103 | font-size: 1.3em; 104 | } 105 | 106 | th { 107 | white-space: nowrap; 108 | } 109 | 110 | .sortable { 111 | cursor: pointer; 112 | } 113 | 114 | .sort-asc, .sort-desc { 115 | display: none; 116 | } 117 | 118 | th.sortable[data-sort-dir="ASC"] .sort-asc, th.sortable[data-sort-dir="DESC"] .sort-desc { 119 | display: inline-block; 120 | } 121 | 122 | .setup-encryption .btn-success { 123 | display: initial; 124 | } 125 | 126 | #setup-encryption.encrypted .btn-success { 127 | display: none; 128 | } 129 | 130 | #setup-encryption .btn-danger { 131 | display: none; 132 | } 133 | 134 | #setup-encryption.encrypted .btn-danger { 135 | display: initial; 136 | } 137 | -------------------------------------------------------------------------------- /html/css/material-icons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Material Icons'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: url(../font/MaterialIcons-Regular.woff2) format('woff2'); 6 | } 7 | 8 | .material-icons { 9 | font-family: 'Material Icons'; 10 | font-weight: normal; 11 | font-style: normal; 12 | font-size: 24px; 13 | line-height: 1; 14 | letter-spacing: normal; 15 | text-transform: none; 16 | display: inline-block; 17 | white-space: nowrap; 18 | word-wrap: normal; 19 | direction: ltr; 20 | -webkit-font-feature-settings: 'liga'; 21 | font-feature-settings: 'liga'; 22 | -webkit-font-smoothing: antialiased; 23 | } -------------------------------------------------------------------------------- /html/encryption_setup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CS:GO account checker 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 |

Encryption setup

16 |
17 |
18 | 19 | 20 |
Make sure you remember this password!
21 |
Password can't be empty!
22 |
23 |
24 | 25 | 26 |
Passwords must match!
27 |
28 |
29 | 30 |
31 |
32 | 55 | 56 | -------------------------------------------------------------------------------- /html/font/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dumbasPL/csgo-checker/731232d0e443070440522eebfa0fa636f5d91f63/html/font/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /html/img/prime.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 21 | 35 | 42 | 52 | 61 | 84 | 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /html/img/skillgroups/dangerzone0.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /html/img/skillgroups/dangerzone2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 63 | 64 | 65 | 66 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 167 | 168 | 169 | 170 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | -------------------------------------------------------------------------------- /html/img/skillgroups/dangerzone3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 | 24 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | -------------------------------------------------------------------------------- /html/img/skillgroups/dangerzone5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 30 | 32 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 64 | 65 | 66 | 68 | 70 | 72 | 74 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | -------------------------------------------------------------------------------- /html/img/skillgroups/dangerzone_expired.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /html/img/skillgroups/dangerzone_none.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /html/img/skillgroups/skillgroup0.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 22 | 23 | 24 | 25 | 26 | 27 | 31 | 32 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /html/img/skillgroups/skillgroup_expired.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 22 | 23 | 24 | 25 | 26 | 27 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /html/img/skillgroups/skillgroup_none.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 22 | 23 | 24 | 25 | 26 | 27 | 31 | 32 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /html/img/skillgroups/wingman0.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 36 | 37 | 38 | 41 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 63 | 64 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /html/img/skillgroups/wingman1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | -------------------------------------------------------------------------------- /html/img/skillgroups/wingman14.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 164 | 167 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 215 | 216 | 217 | 218 | 219 | -------------------------------------------------------------------------------- /html/img/skillgroups/wingman2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 142 | 143 | 144 | 145 | 146 | 147 | -------------------------------------------------------------------------------- /html/img/skillgroups/wingman3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /html/img/skillgroups/wingman5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 104 | 105 | 106 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | -------------------------------------------------------------------------------- /html/img/skillgroups/wingman_expired.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 35 | 36 | 37 | 38 | 40 | 42 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 58 | 59 | -------------------------------------------------------------------------------- /html/img/skillgroups/wingman_none.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 36 | 37 | 38 | 41 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /html/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CS:GO account checker 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 46 |
47 | 48 | 49 | 50 | 51 | 56 | 61 | 64 | 69 | 74 | 79 | 84 | 89 | 94 | 97 | 98 | 99 | 100 | 101 | 102 |
52 | login 53 | arrow_drop_up 54 | arrow_drop_down 55 | 57 | name 58 | arrow_drop_up 59 | arrow_drop_down 60 | 62 | tags 63 | 65 | lvl 66 | arrow_drop_up 67 | arrow_drop_down 68 | 70 | prime 71 | arrow_drop_up 72 | arrow_drop_down 73 | 75 | comp 76 | arrow_drop_up 77 | arrow_drop_down 78 | 80 | wm 81 | arrow_drop_up 82 | arrow_drop_down 83 | 85 | dz 86 | arrow_drop_up 87 | arrow_drop_down 88 | 90 | ban/error 91 | arrow_drop_up 92 | arrow_drop_down 93 | 95 | action 96 |
103 | 104 |
105 | 106 | 155 | 156 | 159 | 160 | 168 | 169 | 182 | 183 |
184 |
185 | 186 |
187 |
188 | 189 | 206 | 207 | 247 | 248 | 269 | 270 | 307 | 308 | 325 | 326 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | -------------------------------------------------------------------------------- /html/password.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CS:GO account checker 8 | 9 | 10 | 11 | 12 | 13 |
14 |
15 |

Decrypt data

16 |
17 |
18 | 19 | 20 |
This is the password you used when setting up encryption
21 |
22 |
23 |
24 | 25 |
26 |
27 | 45 | 46 | -------------------------------------------------------------------------------- /icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dumbasPL/csgo-checker/731232d0e443070440522eebfa0fa636f5d91f63/icons/icon.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "csgo-checker", 3 | "version": "1.4.4", 4 | "description": "Check CS:GO accounts for bans/cooldowns/wins/ranks", 5 | "main": "main.js", 6 | "scripts": { 7 | "start": "electron .", 8 | "build": "electron-builder --win --linux", 9 | "build:windows": "electron-builder --win", 10 | "build:linux": "electron-builder --linux", 11 | "publish": "electron-builder --win --linux --publish always" 12 | }, 13 | "author": "dumbasPL", 14 | "license": "GPL-3.0-or-later", 15 | "dependencies": { 16 | "axios": "^1.4.0", 17 | "csgo-friendcode": "^3.0.3", 18 | "electron-is-dev": "^2.0.0", 19 | "electron-reload": "^1.5.0", 20 | "electron-updater": "^6.1.1", 21 | "fast-deep-equal": "^3.1.3", 22 | "pbkdf2": "^3.1.2", 23 | "protobufjs": "^6.11.4", 24 | "showdown": "^2.1.0", 25 | "simple-json-db": "^2.0.0", 26 | "steam-totp": "^2.1.2", 27 | "steam-user": "^4.29.1" 28 | }, 29 | "devDependencies": { 30 | "electron": "^25.8.4", 31 | "electron-builder": "^24.13.3" 32 | }, 33 | "build": { 34 | "appId": "cc.nezu.csgochecker", 35 | "productName": "CSGO account checker", 36 | "win": { 37 | "artifactName": "CSGO Checker installer.${ext}", 38 | "target": [ 39 | "nsis", 40 | "portable" 41 | ] 42 | }, 43 | "portable": { 44 | "artifactName": "csgo-checker_portable.${ext}" 45 | }, 46 | "linux": { 47 | "artifactName": "${name}_${arch}-${version}.${ext}", 48 | "synopsis": "CS:GO account checker", 49 | "category": "Utility", 50 | "maintainer": "nezu ", 51 | "target": [ 52 | "AppImage", 53 | "flatpak", 54 | "tar.gz", 55 | "deb" 56 | ] 57 | }, 58 | "publish": [ 59 | { 60 | "provider": "github", 61 | "owner": "dumbasPL", 62 | "repo": "csgo-checker" 63 | } 64 | ] 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /preload.js: -------------------------------------------------------------------------------- 1 | const { contextBridge, ipcRenderer, clipboard, shell } = require("electron"); 2 | const equal = require('fast-deep-equal'); 3 | const friendCode = require("csgo-friendcode"); 4 | var showdown = require('showdown'); 5 | const md_converter = new showdown.Converter(); 6 | 7 | contextBridge.exposeInMainWorld("ipcRenderer", { 8 | send: (channel, data) => { 9 | ipcRenderer.send(channel, data); 10 | }, 11 | on: (channel, func) => { 12 | ipcRenderer.on(channel, (...args) => func(...args)); 13 | }, 14 | invoke: (chanel, ...args) => { 15 | return ipcRenderer.invoke(chanel, ...args); 16 | } 17 | }); 18 | 19 | contextBridge.exposeInMainWorld('fastEqual', { 20 | equal: (...args) => equal(...args) 21 | }); 22 | 23 | contextBridge.exposeInMainWorld('friendCode', { 24 | encode: (steamId) => friendCode.encode(steamId) 25 | }); 26 | 27 | contextBridge.exposeInMainWorld('clipboard', { 28 | writeText: (text, type) => clipboard.writeText(text, type) 29 | }); 30 | 31 | contextBridge.exposeInMainWorld('shell', { 32 | openExternal: (url, options) => shell.openExternal(url, options) 33 | }); 34 | 35 | contextBridge.exposeInMainWorld('md_converter', { 36 | makeHtml: (markdown) => md_converter.makeHtml(markdown) 37 | }); -------------------------------------------------------------------------------- /protos/base_gcmessages.proto: -------------------------------------------------------------------------------- 1 | import "steammessages.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum EGCBaseMsg { 7 | k_EMsgGCSystemMessage = 4001; 8 | k_EMsgGCReplicateConVars = 4002; 9 | k_EMsgGCConVarUpdated = 4003; 10 | k_EMsgGCInQueue = 4008; 11 | k_EMsgGCInviteToParty = 4501; 12 | k_EMsgGCInvitationCreated = 4502; 13 | k_EMsgGCPartyInviteResponse = 4503; 14 | k_EMsgGCKickFromParty = 4504; 15 | k_EMsgGCLeaveParty = 4505; 16 | k_EMsgGCServerAvailable = 4506; 17 | k_EMsgGCClientConnectToServer = 4507; 18 | k_EMsgGCGameServerInfo = 4508; 19 | k_EMsgGCError = 4509; 20 | k_EMsgGCReplay_UploadedToYouTube = 4510; 21 | k_EMsgGCLANServerAvailable = 4511; 22 | } 23 | 24 | enum EGCBaseProtoObjectTypes { 25 | k_EProtoObjectPartyInvite = 1001; 26 | k_EProtoObjectLobbyInvite = 1002; 27 | } 28 | 29 | enum GC_BannedWordType { 30 | GC_BANNED_WORD_DISABLE_WORD = 0; 31 | GC_BANNED_WORD_ENABLE_WORD = 1; 32 | } 33 | 34 | message CGCStorePurchaseInit_LineItem { 35 | optional uint32 item_def_id = 1; 36 | optional uint32 quantity = 2; 37 | optional uint32 cost_in_local_currency = 3; 38 | optional uint32 purchase_type = 4; 39 | } 40 | 41 | message CMsgGCStorePurchaseInit { 42 | optional string country = 1; 43 | optional int32 language = 2; 44 | optional int32 currency = 3; 45 | repeated .CGCStorePurchaseInit_LineItem line_items = 4; 46 | } 47 | 48 | message CMsgGCStorePurchaseInitResponse { 49 | optional int32 result = 1; 50 | optional uint64 txn_id = 2; 51 | optional string url = 3; 52 | repeated uint64 item_ids = 4; 53 | } 54 | 55 | message CSOPartyInvite { 56 | optional uint64 group_id = 1 [(key_field) = true]; 57 | optional fixed64 sender_id = 2; 58 | optional string sender_name = 3; 59 | } 60 | 61 | message CSOLobbyInvite { 62 | optional uint64 group_id = 1 [(key_field) = true]; 63 | optional fixed64 sender_id = 2; 64 | optional string sender_name = 3; 65 | } 66 | 67 | message CMsgSystemBroadcast { 68 | optional string message = 1; 69 | } 70 | 71 | message CMsgInviteToParty { 72 | optional fixed64 steam_id = 1; 73 | optional uint32 client_version = 2; 74 | optional uint32 team_invite = 3; 75 | } 76 | 77 | message CMsgInvitationCreated { 78 | optional uint64 group_id = 1; 79 | optional fixed64 steam_id = 2; 80 | } 81 | 82 | message CMsgPartyInviteResponse { 83 | optional uint64 party_id = 1; 84 | optional bool accept = 2; 85 | optional uint32 client_version = 3; 86 | optional uint32 team_invite = 4; 87 | } 88 | 89 | message CMsgKickFromParty { 90 | optional fixed64 steam_id = 1; 91 | } 92 | 93 | message CMsgLeaveParty { 94 | } 95 | 96 | message CMsgServerAvailable { 97 | } 98 | 99 | message CMsgLANServerAvailable { 100 | optional fixed64 lobby_id = 1; 101 | } 102 | 103 | message CSOEconGameAccountClient { 104 | optional uint32 additional_backpack_slots = 1 [default = 0]; 105 | optional fixed32 bonus_xp_timestamp_refresh = 12; 106 | optional uint32 bonus_xp_usedflags = 13; 107 | optional uint32 elevated_state = 14; 108 | optional uint32 elevated_timestamp = 15; 109 | } 110 | 111 | message CSOItemCriteriaCondition { 112 | optional int32 op = 1; 113 | optional string field = 2; 114 | optional bool required = 3; 115 | optional float float_value = 4; 116 | optional string string_value = 5; 117 | } 118 | 119 | message CSOItemCriteria { 120 | optional uint32 item_level = 1; 121 | optional int32 item_quality = 2; 122 | optional bool item_level_set = 3; 123 | optional bool item_quality_set = 4; 124 | optional uint32 initial_inventory = 5; 125 | optional uint32 initial_quantity = 6; 126 | optional bool ignore_enabled_flag = 8; 127 | repeated .CSOItemCriteriaCondition conditions = 9; 128 | optional int32 item_rarity = 10; 129 | optional bool item_rarity_set = 11; 130 | optional bool recent_only = 12; 131 | } 132 | 133 | message CSOItemRecipe { 134 | optional uint32 def_index = 1; 135 | optional string name = 2; 136 | optional string n_a = 3; 137 | optional string desc_inputs = 4; 138 | optional string desc_outputs = 5; 139 | optional string di_a = 6; 140 | optional string di_b = 7; 141 | optional string di_c = 8; 142 | optional string do_a = 9; 143 | optional string do_b = 10; 144 | optional string do_c = 11; 145 | optional bool requires_all_same_class = 12; 146 | optional bool requires_all_same_slot = 13; 147 | optional int32 class_usage_for_output = 14; 148 | optional int32 slot_usage_for_output = 15; 149 | optional int32 set_for_output = 16; 150 | repeated .CSOItemCriteria input_items_criteria = 20; 151 | repeated .CSOItemCriteria output_items_criteria = 21; 152 | repeated uint32 input_item_dupe_counts = 22; 153 | } 154 | 155 | message CMsgDevNewItemRequest { 156 | optional fixed64 receiver = 1; 157 | optional .CSOItemCriteria criteria = 2; 158 | } 159 | 160 | message CMsgIncrementKillCountAttribute { 161 | optional fixed32 killer_account_id = 1; 162 | optional fixed32 victim_account_id = 2; 163 | optional uint64 item_id = 3; 164 | optional uint32 event_type = 4; 165 | optional uint32 amount = 5; 166 | } 167 | 168 | message CMsgApplySticker { 169 | optional uint64 sticker_item_id = 1; 170 | optional uint64 item_item_id = 2; 171 | optional uint32 sticker_slot = 3; 172 | optional uint32 baseitem_defidx = 4; 173 | optional float sticker_wear = 5; 174 | } 175 | 176 | message CMsgModifyItemAttribute { 177 | optional uint64 item_id = 1; 178 | optional uint32 attr_defidx = 2; 179 | optional uint32 attr_value = 3; 180 | } 181 | 182 | message CMsgApplyStatTrakSwap { 183 | optional uint64 tool_item_id = 1; 184 | optional uint64 item_1_item_id = 2; 185 | optional uint64 item_2_item_id = 3; 186 | } 187 | 188 | message CMsgApplyStrangePart { 189 | optional uint64 strange_part_item_id = 1; 190 | optional uint64 item_item_id = 2; 191 | } 192 | 193 | message CMsgApplyPennantUpgrade { 194 | optional uint64 upgrade_item_id = 1; 195 | optional uint64 pennant_item_id = 2; 196 | } 197 | 198 | message CMsgApplyEggEssence { 199 | optional uint64 essence_item_id = 1; 200 | optional uint64 egg_item_id = 2; 201 | } 202 | 203 | message CSOEconItemAttribute { 204 | optional uint32 def_index = 1; 205 | optional uint32 value = 2; 206 | optional bytes value_bytes = 3; 207 | } 208 | 209 | message CSOEconItemEquipped { 210 | optional uint32 new_class = 1; 211 | optional uint32 new_slot = 2; 212 | } 213 | 214 | message CSOEconItem { 215 | optional uint64 id = 1; 216 | optional uint32 account_id = 2; 217 | optional uint32 inventory = 3; 218 | optional uint32 def_index = 4; 219 | optional uint32 quantity = 5; 220 | optional uint32 level = 6; 221 | optional uint32 quality = 7; 222 | optional uint32 flags = 8 [default = 0]; 223 | optional uint32 origin = 9; 224 | optional string custom_name = 10; 225 | optional string custom_desc = 11; 226 | repeated .CSOEconItemAttribute attribute = 12; 227 | optional .CSOEconItem interior_item = 13; 228 | optional bool in_use = 14 [default = false]; 229 | optional uint32 style = 15 [default = 0]; 230 | optional uint64 original_id = 16 [default = 0]; 231 | repeated .CSOEconItemEquipped equipped_state = 18; 232 | optional uint32 rarity = 19; 233 | } 234 | 235 | message CMsgAdjustItemEquippedState { 236 | optional uint64 item_id = 1; 237 | optional uint32 new_class = 2; 238 | optional uint32 new_slot = 3; 239 | optional bool swap = 4; 240 | } 241 | 242 | message CMsgAdjustItemEquippedStateMulti { 243 | repeated uint64 t_equips = 1; 244 | repeated uint64 ct_equips = 2; 245 | repeated uint64 noteam_equips = 3; 246 | } 247 | 248 | message CMsgSortItems { 249 | optional uint32 sort_type = 1; 250 | } 251 | 252 | message CSOEconClaimCode { 253 | optional uint32 account_id = 1; 254 | optional uint32 code_type = 2; 255 | optional uint32 time_acquired = 3; 256 | optional string code = 4; 257 | } 258 | 259 | message CMsgStoreGetUserData { 260 | optional fixed32 price_sheet_version = 1; 261 | optional int32 currency = 2; 262 | } 263 | 264 | message CMsgStoreGetUserDataResponse { 265 | optional int32 result = 1; 266 | optional int32 currency_deprecated = 2; 267 | optional string country_deprecated = 3; 268 | optional fixed32 price_sheet_version = 4; 269 | optional bytes price_sheet = 8; 270 | } 271 | 272 | message CMsgUpdateItemSchema { 273 | optional bytes items_game = 1; 274 | optional fixed32 item_schema_version = 2; 275 | optional string items_game_url_DEPRECATED2013 = 3; 276 | optional string items_game_url = 4; 277 | } 278 | 279 | message CMsgGCError { 280 | optional string error_text = 1; 281 | } 282 | 283 | message CMsgRequestInventoryRefresh { 284 | } 285 | 286 | message CMsgConVarValue { 287 | optional string name = 1; 288 | optional string value = 2; 289 | } 290 | 291 | message CMsgReplicateConVars { 292 | repeated .CMsgConVarValue convars = 1; 293 | } 294 | 295 | message CMsgUseItem { 296 | optional uint64 item_id = 1; 297 | optional fixed64 target_steam_id = 2; 298 | repeated uint32 gift__potential_targets = 3; 299 | optional uint32 duel__class_lock = 4; 300 | optional fixed64 initiator_steam_id = 5; 301 | } 302 | 303 | message CMsgReplayUploadedToYouTube { 304 | optional string youtube_url = 1; 305 | optional string youtube_account_name = 2; 306 | optional uint64 session_id = 3; 307 | } 308 | 309 | message CMsgConsumableExhausted { 310 | optional int32 item_def_id = 1; 311 | } 312 | 313 | message CMsgItemAcknowledged__DEPRECATED { 314 | optional uint32 account_id = 1; 315 | optional uint32 inventory = 2; 316 | optional uint32 def_index = 3; 317 | optional uint32 quality = 4; 318 | optional uint32 rarity = 5; 319 | optional uint32 origin = 6; 320 | optional uint64 item_id = 7; 321 | } 322 | 323 | message CMsgSetItemPositions { 324 | message ItemPosition { 325 | optional uint32 legacy_item_id = 1; 326 | optional uint32 position = 2; 327 | optional uint64 item_id = 3; 328 | } 329 | 330 | repeated .CMsgSetItemPositions.ItemPosition item_positions = 1; 331 | } 332 | 333 | message CMsgGCReportAbuse { 334 | optional fixed64 target_steam_id = 1; 335 | optional string description = 4; 336 | optional uint64 gid = 5; 337 | optional uint32 abuse_type = 2; 338 | optional uint32 content_type = 3; 339 | optional fixed32 target_game_server_ip = 6; 340 | optional uint32 target_game_server_port = 7; 341 | } 342 | 343 | message CMsgGCReportAbuseResponse { 344 | optional fixed64 target_steam_id = 1; 345 | optional uint32 result = 2; 346 | optional string error_message = 3; 347 | } 348 | 349 | message CMsgGCNameItemNotification { 350 | optional fixed64 player_steamid = 1; 351 | optional uint32 item_def_index = 2; 352 | optional string item_name_custom = 3; 353 | } 354 | 355 | message CMsgGCClientDisplayNotification { 356 | optional string notification_title_localization_key = 1; 357 | optional string notification_body_localization_key = 2; 358 | repeated string body_substring_keys = 3; 359 | repeated string body_substring_values = 4; 360 | } 361 | 362 | message CMsgGCShowItemsPickedUp { 363 | optional fixed64 player_steamid = 1; 364 | } 365 | 366 | message CMsgGCIncrementKillCountResponse { 367 | optional uint32 killer_account_id = 1 [(key_field) = true]; 368 | optional uint32 num_kills = 2; 369 | optional uint32 item_def = 3; 370 | optional uint32 level_type = 4; 371 | } 372 | 373 | message CSOEconItemDropRateBonus { 374 | optional uint32 account_id = 1; 375 | optional fixed32 expiration_date = 2; 376 | optional float bonus = 3; 377 | optional uint32 bonus_count = 4; 378 | optional uint64 item_id = 5; 379 | optional uint32 def_index = 6; 380 | } 381 | 382 | message CSOEconItemLeagueViewPass { 383 | optional uint32 account_id = 1 [(key_field) = true]; 384 | optional uint32 league_id = 2 [(key_field) = true]; 385 | optional uint32 admin = 3; 386 | optional uint32 itemindex = 4; 387 | } 388 | 389 | message CSOEconItemEventTicket { 390 | optional uint32 account_id = 1; 391 | optional uint32 event_id = 2; 392 | optional uint64 item_id = 3; 393 | } 394 | 395 | message CMsgGCItemPreviewItemBoughtNotification { 396 | optional uint32 item_def_index = 1; 397 | } 398 | 399 | message CMsgGCStorePurchaseCancel { 400 | optional uint64 txn_id = 1; 401 | } 402 | 403 | message CMsgGCStorePurchaseCancelResponse { 404 | optional uint32 result = 1; 405 | } 406 | 407 | message CMsgGCStorePurchaseFinalize { 408 | optional uint64 txn_id = 1; 409 | } 410 | 411 | message CMsgGCStorePurchaseFinalizeResponse { 412 | optional uint32 result = 1; 413 | repeated uint64 item_ids = 2; 414 | } 415 | 416 | message CMsgGCBannedWordListRequest { 417 | optional uint32 ban_list_group_id = 1; 418 | optional uint32 word_id = 2; 419 | } 420 | 421 | message CMsgGCRequestAnnouncements { 422 | } 423 | 424 | message CMsgGCRequestAnnouncementsResponse { 425 | optional string announcement_title = 1; 426 | optional string announcement = 2; 427 | optional string nextmatch_title = 3; 428 | optional string nextmatch = 4; 429 | } 430 | 431 | message CMsgGCBannedWord { 432 | optional uint32 word_id = 1; 433 | optional .GC_BannedWordType word_type = 2 [default = GC_BANNED_WORD_DISABLE_WORD]; 434 | optional string word = 3; 435 | } 436 | 437 | message CMsgGCBannedWordListResponse { 438 | optional uint32 ban_list_group_id = 1; 439 | repeated .CMsgGCBannedWord word_list = 2; 440 | } 441 | 442 | message CMsgGCToGCBannedWordListBroadcast { 443 | optional .CMsgGCBannedWordListResponse broadcast = 1; 444 | } 445 | 446 | message CMsgGCToGCBannedWordListUpdated { 447 | optional uint32 group_id = 1; 448 | } 449 | 450 | message CSOEconDefaultEquippedDefinitionInstanceClient { 451 | optional uint32 account_id = 1 [(key_field) = true]; 452 | optional uint32 item_definition = 2; 453 | optional uint32 class_id = 3 [(key_field) = true]; 454 | optional uint32 slot_id = 4 [(key_field) = true]; 455 | } 456 | 457 | message CMsgGCToGCDirtySDOCache { 458 | optional uint32 sdo_type = 1; 459 | optional uint64 key_uint64 = 2; 460 | } 461 | 462 | message CMsgGCToGCDirtyMultipleSDOCache { 463 | optional uint32 sdo_type = 1; 464 | repeated uint64 key_uint64 = 2; 465 | } 466 | 467 | message CMsgGCCollectItem { 468 | optional uint64 collection_item_id = 1; 469 | optional uint64 subject_item_id = 2; 470 | } 471 | 472 | message CMsgSDONoMemcached { 473 | } 474 | 475 | message CMsgGCToGCUpdateSQLKeyValue { 476 | optional string key_name = 1; 477 | } 478 | 479 | message CMsgGCToGCIsTrustedServer { 480 | optional fixed64 steam_id = 1; 481 | } 482 | 483 | message CMsgGCToGCIsTrustedServerResponse { 484 | optional bool is_trusted = 1; 485 | } 486 | 487 | message CMsgGCToGCBroadcastConsoleCommand { 488 | optional string con_command = 1; 489 | } 490 | 491 | message CMsgGCServerVersionUpdated { 492 | optional uint32 server_version = 1; 493 | } 494 | 495 | message CMsgGCClientVersionUpdated { 496 | optional uint32 client_version = 1; 497 | } 498 | 499 | message CMsgGCToGCWebAPIAccountChanged { 500 | } 501 | 502 | message CMsgGCToGCRequestPassportItemGrant { 503 | optional fixed64 steam_id = 1; 504 | optional uint32 league_id = 2; 505 | optional int32 reward_flag = 3; 506 | } 507 | 508 | message CMsgGameServerInfo { 509 | enum ServerType { 510 | UNSPECIFIED = 0; 511 | GAME = 1; 512 | PROXY = 2; 513 | } 514 | 515 | optional fixed32 server_public_ip_addr = 1; 516 | optional fixed32 server_private_ip_addr = 2; 517 | optional uint32 server_port = 3; 518 | optional uint32 server_tv_port = 4; 519 | optional string server_key = 5; 520 | optional bool server_hibernation = 6; 521 | optional .CMsgGameServerInfo.ServerType server_type = 7 [default = UNSPECIFIED]; 522 | optional uint32 server_region = 8; 523 | optional float server_loadavg = 9; 524 | optional float server_tv_broadcast_time = 10; 525 | optional float server_game_time = 11; 526 | optional fixed64 server_relay_connected_steam_id = 12; 527 | optional uint32 relay_slots_max = 13; 528 | optional int32 relays_connected = 14; 529 | optional int32 relay_clients_connected = 15; 530 | optional fixed64 relayed_game_server_steam_id = 16; 531 | optional uint32 parent_relay_count = 17; 532 | optional fixed64 tv_secret_code = 18; 533 | } 534 | -------------------------------------------------------------------------------- /protos/gcsdk_gcmessages.proto: -------------------------------------------------------------------------------- 1 | import "steammessages.proto"; 2 | 3 | option optimize_for = SPEED; 4 | option cc_generic_services = false; 5 | 6 | enum GCClientLauncherType { 7 | GCClientLauncherType_DEFAULT = 0; 8 | GCClientLauncherType_PERFECTWORLD = 1; 9 | GCClientLauncherType_STEAMCHINA = 2; 10 | } 11 | 12 | enum GCConnectionStatus { 13 | GCConnectionStatus_HAVE_SESSION = 0; 14 | GCConnectionStatus_GC_GOING_DOWN = 1; 15 | GCConnectionStatus_NO_SESSION = 2; 16 | GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE = 3; 17 | GCConnectionStatus_NO_STEAM = 4; 18 | } 19 | 20 | message CMsgSOIDOwner { 21 | optional uint32 type = 1; 22 | optional uint64 id = 2; 23 | } 24 | 25 | message CMsgSOSingleObject { 26 | optional int32 type_id = 2; 27 | optional bytes object_data = 3; 28 | optional fixed64 version = 4; 29 | optional .CMsgSOIDOwner owner_soid = 5; 30 | } 31 | 32 | message CMsgSOMultipleObjects { 33 | message SingleObject { 34 | option (msgpool_soft_limit) = 256; 35 | option (msgpool_hard_limit) = 1024; 36 | 37 | optional int32 type_id = 1; 38 | optional bytes object_data = 2; 39 | } 40 | 41 | repeated .CMsgSOMultipleObjects.SingleObject objects_modified = 2; 42 | optional fixed64 version = 3; 43 | optional .CMsgSOIDOwner owner_soid = 6; 44 | } 45 | 46 | message CMsgSOCacheSubscribed { 47 | message SubscribedType { 48 | optional int32 type_id = 1; 49 | repeated bytes object_data = 2; 50 | } 51 | 52 | repeated .CMsgSOCacheSubscribed.SubscribedType objects = 2; 53 | optional fixed64 version = 3; 54 | optional .CMsgSOIDOwner owner_soid = 4; 55 | } 56 | 57 | message CMsgSOCacheUnsubscribed { 58 | optional .CMsgSOIDOwner owner_soid = 2; 59 | } 60 | 61 | message CMsgSOCacheSubscriptionCheck { 62 | optional fixed64 version = 2; 63 | optional .CMsgSOIDOwner owner_soid = 3; 64 | } 65 | 66 | message CMsgSOCacheSubscriptionRefresh { 67 | optional .CMsgSOIDOwner owner_soid = 2; 68 | } 69 | 70 | message CMsgSOCacheVersion { 71 | optional fixed64 version = 1; 72 | } 73 | 74 | message CMsgAccountDetails { 75 | optional bool valid = 1; 76 | optional string account_name = 2; 77 | optional bool public_profile = 4; 78 | optional bool public_inventory = 5; 79 | optional bool vac_banned = 6; 80 | optional bool cyber_cafe = 7; 81 | optional bool school_account = 8; 82 | optional bool free_trial_account = 9; 83 | optional bool subscribed = 10; 84 | optional bool low_violence = 11; 85 | optional bool limited = 12; 86 | optional bool trusted = 13; 87 | optional uint32 package = 14; 88 | optional fixed32 time_cached = 15; 89 | optional bool account_locked = 16; 90 | optional bool community_banned = 17; 91 | optional bool trade_banned = 18; 92 | optional bool eligible_for_community_market = 19; 93 | } 94 | 95 | message CMsgGCMultiplexMessage { 96 | optional uint32 msgtype = 1; 97 | optional bytes payload = 2; 98 | repeated fixed64 steamids = 3; 99 | optional bool replytogc = 4; 100 | } 101 | 102 | message CMsgGCMultiplexMessage_Response { 103 | optional uint32 msgtype = 1; 104 | } 105 | 106 | message CGCToGCMsgMasterAck { 107 | optional uint32 dir_index = 1; 108 | optional uint32 gc_type = 2; 109 | } 110 | 111 | message CGCToGCMsgMasterAck_Response { 112 | optional int32 eresult = 1 [default = 2]; 113 | } 114 | 115 | message CGCToGCMsgMasterStartupComplete { 116 | } 117 | 118 | message CGCToGCMsgRouted { 119 | optional uint32 msg_type = 1; 120 | optional fixed64 sender_id = 2; 121 | optional bytes net_message = 3; 122 | optional uint32 ip = 4; 123 | } 124 | 125 | message CGCToGCMsgRoutedReply { 126 | optional uint32 msg_type = 1; 127 | optional bytes net_message = 2; 128 | } 129 | 130 | message CMsgGCUpdateSessionIP { 131 | optional fixed64 steamid = 1; 132 | optional fixed32 ip = 2; 133 | } 134 | 135 | message CMsgGCRequestSessionIP { 136 | optional fixed64 steamid = 1; 137 | } 138 | 139 | message CMsgGCRequestSessionIPResponse { 140 | optional fixed32 ip = 1; 141 | } 142 | 143 | message CMsgSOCacheHaveVersion { 144 | optional .CMsgSOIDOwner soid = 1; 145 | optional fixed64 version = 2; 146 | } 147 | 148 | message CMsgClientHello { 149 | optional uint32 version = 1; 150 | repeated .CMsgSOCacheHaveVersion socache_have_versions = 2; 151 | optional uint32 client_session_need = 3; 152 | optional uint32 client_launcher = 4; 153 | optional uint32 partner_srcid = 5; 154 | optional uint32 partner_accountid = 6; 155 | optional uint32 partner_accountflags = 7; 156 | optional uint32 partner_accountbalance = 8; 157 | optional uint32 steam_launcher = 9; 158 | } 159 | 160 | message CMsgServerHello { 161 | optional uint32 version = 1; 162 | repeated .CMsgSOCacheHaveVersion socache_have_versions = 2; 163 | optional uint32 legacy_client_session_need = 3; 164 | optional uint32 client_launcher = 4; 165 | optional bytes legacy_steamdatagram_routing = 6; 166 | optional uint32 required_internal_addr = 7; 167 | optional bytes steamdatagram_login = 8; 168 | } 169 | 170 | message CMsgClientWelcome { 171 | message Location { 172 | optional float latitude = 1; 173 | optional float longitude = 2; 174 | optional string country = 3; 175 | } 176 | 177 | optional uint32 version = 1; 178 | optional bytes game_data = 2; 179 | repeated .CMsgSOCacheSubscribed outofdate_subscribed_caches = 3; 180 | repeated .CMsgSOCacheSubscriptionCheck uptodate_subscribed_caches = 4; 181 | optional .CMsgClientWelcome.Location location = 5; 182 | optional bytes game_data2 = 6; 183 | optional uint32 rtime32_gc_welcome_timestamp = 7; 184 | optional uint32 currency = 8; 185 | optional uint32 balance = 9; 186 | optional string balance_url = 10; 187 | optional string txn_country_code = 11; 188 | } 189 | 190 | message CMsgConnectionStatus { 191 | optional .GCConnectionStatus status = 1 [default = GCConnectionStatus_HAVE_SESSION]; 192 | optional uint32 client_session_need = 2; 193 | optional int32 queue_position = 3; 194 | optional int32 queue_size = 4; 195 | optional int32 wait_seconds = 5; 196 | optional int32 estimated_wait_seconds_remaining = 6; 197 | } 198 | 199 | message CWorkshop_PopulateItemDescriptions_Request { 200 | message SingleItemDescription { 201 | optional uint32 gameitemid = 1; 202 | optional string item_description = 2; 203 | optional bool one_per_account = 3; 204 | } 205 | 206 | message ItemDescriptionsLanguageBlock { 207 | optional string language = 1; 208 | repeated .CWorkshop_PopulateItemDescriptions_Request.SingleItemDescription descriptions = 2; 209 | } 210 | 211 | optional uint32 appid = 1; 212 | repeated .CWorkshop_PopulateItemDescriptions_Request.ItemDescriptionsLanguageBlock languages = 2; 213 | } 214 | 215 | message CWorkshop_GetContributors_Request { 216 | optional uint32 appid = 1; 217 | optional uint32 gameitemid = 2; 218 | } 219 | 220 | message CWorkshop_GetContributors_Response { 221 | repeated fixed64 contributors = 1; 222 | } 223 | 224 | message CWorkshop_SetItemPaymentRules_Request { 225 | message WorkshopItemPaymentRule { 226 | optional uint64 workshop_file_id = 1; 227 | optional float revenue_percentage = 2; 228 | optional string rule_description = 3; 229 | optional uint32 rule_type = 4 [default = 1]; 230 | } 231 | 232 | message WorkshopDirectPaymentRule { 233 | optional uint64 workshop_file_id = 1; 234 | optional string rule_description = 2; 235 | } 236 | 237 | message PartnerItemPaymentRule { 238 | optional uint32 account_id = 1; 239 | optional float revenue_percentage = 2; 240 | optional string rule_description = 3; 241 | } 242 | 243 | optional uint32 appid = 1; 244 | optional uint32 gameitemid = 2; 245 | repeated .CWorkshop_SetItemPaymentRules_Request.WorkshopItemPaymentRule associated_workshop_files = 3; 246 | repeated .CWorkshop_SetItemPaymentRules_Request.PartnerItemPaymentRule partner_accounts = 4; 247 | optional bool validate_only = 5; 248 | optional bool make_workshop_files_subscribable = 6; 249 | optional .CWorkshop_SetItemPaymentRules_Request.WorkshopDirectPaymentRule associated_workshop_file_for_direct_payments = 7; 250 | } 251 | 252 | message CWorkshop_SetItemPaymentRules_Response { 253 | } 254 | 255 | message CGameServers_AggregationQuery_Request { 256 | optional string filter = 1; 257 | repeated string group_fields = 3; 258 | } 259 | 260 | message CGameServers_AggregationQuery_Response { 261 | message Group { 262 | repeated string group_values = 1; 263 | optional uint32 servers_empty = 2; 264 | optional uint32 servers_full = 3; 265 | optional uint32 servers_total = 4; 266 | optional uint32 players_humans = 5; 267 | optional uint32 players_bots = 6; 268 | optional uint32 player_capacity = 7; 269 | } 270 | 271 | repeated .CGameServers_AggregationQuery_Response.Group groups = 1; 272 | } 273 | 274 | message CWorkshop_AddSpecialPayment_Request { 275 | optional uint32 appid = 1; 276 | optional uint32 gameitemid = 2; 277 | optional string date = 3; 278 | optional uint64 payment_us_usd = 4; 279 | optional uint64 payment_row_usd = 5; 280 | } 281 | 282 | message CWorkshop_AddSpecialPayment_Response { 283 | } 284 | 285 | message CProductInfo_SetRichPresenceLocalization_Request { 286 | message Token { 287 | optional string token = 1; 288 | optional string value = 2; 289 | } 290 | 291 | message LanguageSection { 292 | optional string language = 1; 293 | repeated .CProductInfo_SetRichPresenceLocalization_Request.Token tokens = 2; 294 | } 295 | 296 | optional uint32 appid = 1; 297 | repeated .CProductInfo_SetRichPresenceLocalization_Request.LanguageSection languages = 2; 298 | optional uint64 steamid = 3; 299 | } 300 | 301 | message CProductInfo_SetRichPresenceLocalization_Response { 302 | } 303 | --------------------------------------------------------------------------------