{"id":13602708,"url":"https://github.com/seishun/node-steam","last_synced_at":"2025-12-30T06:10:55.243Z","repository":{"id":4676641,"uuid":"5823102","full_name":"seishun/node-steam","owner":"seishun","description":"Interface directly with Steam servers from Node.js","archived":true,"fork":false,"pushed_at":"2020-06-05T15:24:30.000Z","size":371,"stargazers_count":1002,"open_issues_count":1,"forks_count":179,"subscribers_count":62,"default_branch":"master","last_synced_at":"2025-09-12T00:51:29.475Z","etag":null,"topics":["steam"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seishun.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-09-15T18:57:52.000Z","updated_at":"2025-08-20T19:29:57.000Z","dependencies_parsed_at":"2022-09-04T06:02:56.375Z","dependency_job_id":null,"html_url":"https://github.com/seishun/node-steam","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/seishun/node-steam","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seishun%2Fnode-steam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seishun%2Fnode-steam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seishun%2Fnode-steam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seishun%2Fnode-steam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seishun","download_url":"https://codeload.github.com/seishun/node-steam/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seishun%2Fnode-steam/sbom","scorecard":{"id":810173,"data":{"date":"2025-08-11","repo":{"name":"github.com/seishun/node-steam","commit":"a6e4603c51b49287437eec239de9876bab31f5d0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 1/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T12:55:22.065Z","repository_id":4676641,"created_at":"2025-08-23T12:55:22.065Z","updated_at":"2025-08-23T12:55:22.065Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277450938,"owners_count":25819971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-28T02:00:08.834Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["steam"],"created_at":"2024-08-01T18:01:34.980Z","updated_at":"2025-09-29T00:30:57.677Z","avatar_url":"https://github.com/seishun.png","language":"JavaScript","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=Y83UZQZBJXEXQ\u0026item_name=node%2dsteam\u0026currency_code=EUR"],"categories":["JavaScript","Packages"],"sub_categories":["Node.js"],"readme":"# Steam for Node.js\n\n[![NPM version](https://img.shields.io/npm/v/steam.svg)](https://npmjs.org/package/steam \"View this project on NPM\")\n[![Dependency Status](https://img.shields.io/david/seishun/node-steam.svg)](https://david-dm.org/seishun/node-steam)\n[![PayPal donate button](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=Y83UZQZBJXEXQ\u0026item_name=node%2dsteam\u0026currency_code=EUR\n \"Donate once-off to this project using PayPal\")\n\nThis is a Node.js port of [SteamKit2](https://github.com/SteamRE/SteamKit). It lets you interface with Steam without running an actual Steam client. Could be used to run an autonomous chat/trade bot.\n\n\n# Installation\n\n```\nnpm install steam\n```\n\nNote: installing from git requires `svn` to fetch Steam resources (Protobufs and SteamLanguage) and `curl` to fetch the server list.\n\n**Note: only Node.js v4.1.1 and above is supported.**\n\n# Usage\nFirst, `require` this module.\n```js\nvar Steam = require('steam');\n```\n`Steam` is now a namespace object containing:\n* [SteamClient class](#steamclient)\n* [Several handler classes](#handlers)\n* [`servers` property](#servers)\n* [Enums](#enums)\n\nThen you'll want to create an instance of SteamClient and any handlers you need, call [SteamClient#connect](#connect) and assign event listeners.\n\n```js\nvar steamClient = new Steam.SteamClient();\nvar steamUser = new Steam.SteamUser(steamClient);\nsteamClient.connect();\nsteamClient.on('connected', function() {\n  steamUser.logOn({\n    account_name: 'username',\n    password: 'password'\n  });\n});\nsteamClient.on('logOnResponse', function() { /* ... */});\n```\n\nSee example.js for the usage of some of the available API.\n\n# Servers\n\n`Steam.servers` contains the list of CM servers node-steam will attempt to connect to. The bootstrapped list (fetched in [prepare](https://docs.npmjs.com/misc/scripts)) can get out of date and thus contain dead servers. To avoid timeouts, replace it with your own list before logging in if you have one (see ['servers' event](#servers-1)).\n\n# SteamID\n\nSince JavaScript's Number type does not have enough precision to store 64-bit integers, SteamIDs are represented as decimal strings. (Just wrap the number in quotes)\n\n# Enums\n\nWhenever a method accepts (or an event provides) an `ESomething`, it's a Number that represents some enum value. See [enums.steamd](https://github.com/SteamRE/SteamKit/blob/master/Resources/SteamLanguage/enums.steamd) and [eresult.steamd](https://github.com/SteamRE/SteamKit/blob/master/Resources/SteamLanguage/eresult.steamd) for the whole list of them. For each enum, there is an equivalently named property on `Steam`. The property is an object; for each of the enum's members, there is an equivalently named property on the object with an equivalent value.\n\nNote that you can't easily get the string value from the number, but you probably don't need to. You can still use them in conditions (e.g. `if (type == Steam.EChatEntryType.Emote) ...`) or switch statements.\n\n# Protobufs\n\nWhenever a method accepts (or an event provides) a `CMsgSomething`, it's an object that represents a protobuf message. It has an equivalently named property for each set field in the specified message with the type as follows:\n\n* `(u)int32` and `fixed32` fields: Number\n* `uint64`, `fixed64` and `string` fields: String\n* `bytes` fields: Buffer objects\n* `bool` fields: Boolean\n\nSee the [wiki](https://github.com/seishun/node-steam/wiki/Protobufs) for descriptions of protobuf fields.\n\n# Handlers\n\nMost of the API is provided by handler classes that internally send and receive low-level client messages using ['message'/send](#messagesend):\n\n* [SteamUser](lib/handlers/user) - user account-related functionality, including logon.\n* [SteamFriends](lib/handlers/friends) - Community functionality, such as chats and friend messages.\n* [SteamTrading](lib/handlers/trading) - sending and receiving trade requests. Not to be confused with trade offers.\n* [SteamGameCoordinator](lib/handlers/game_coordinator) - sending and receiving Game Coordinator messages.\n* [SteamUnifiedMessages](lib/handlers/unified_messages) - sending and receiving unified messages.\n* [SteamRichPresence](lib/handlers/rich_presence) - sending and receiving Rich Presence messages.\n\nIf you think some unimplemented functionality belongs in one of the existing handlers, feel free to submit an issue to discuss it.\n\n# SteamClient\n\n## Properties\n\n### connected\n\nA boolean that indicates whether you are currently connected and the encryption handshake is complete. ['connected'](#connected-1) is emitted when it changes to `true`, and ['error'](#error) is emitted when it changes to `false` unless you called [disconnect](#disconnect). Sending any client messages is only allowed while this is `true`.\n\n### loggedOn\n\nA boolean that indicates whether you are currently logged on. Calling any handler methods other than [SteamUser#logOn](lib/handlers/user#logonlogondetails) is only allowed while logged on.\n\n### sessionID\n\nYour session ID while logged on, otherwise unspecified. (Note: this has nothing to do with the \"sessionid\" cookie)\n\n### steamID\n\nYour own SteamID while logged on, otherwise unspecified. Must be set to a valid initial value before sending a logon message ([SteamUser#logOn](lib/handlers/user#logonlogondetails) does that for you).\n\n## Methods\n\n### connect()\n\nConnects to Steam. It will keep trying to reconnect until encryption handshake is complete (see ['connected'](#connected-1)), unless you cancel it with [disconnect](#disconnect).\n\nYou can call this method at any time. If you are already connected, disconnects you first. If there is an ongoing connection attempt, cancels it.\n\n### disconnect()\n\nImmediately terminates the connection and prevents any events (including ['error'](#error)) from being emitted until you [connect](#connect) again. If you are already disconnected, does nothing. If there is an ongoing connection attempt, cancels it.\n\n\n## Events\n\n### 'error'\n\nConnection closed by the server. Only emitted if the encryption handshake is complete, otherwise it will reconnect automatically. [`loggedOn`](#loggedon) is now `false`.\n\n### 'connected'\n\nEncryption handshake complete. From now on, it's your responsibility to handle disconnections and reconnect (see ['error'](#error)). You'll likely want to log on now (see [SteamUser#logOn](lib/handlers/user#logonlogondetails)).\n\n### 'logOnResponse'\n* [`CMsgClientLogonResponse`](https://github.com/SteamDatabase/Protobufs/blob/master/steam/steammessages_clientserver_login.proto)\n\nLogon response received. If `eresult` is `EResult.OK`, [`loggedOn`](#loggedon) is now `true`.\n\n### 'servers'\n* an Array containing the up-to-date server list\n\nnode-steam will use this new list when reconnecting, but it will be lost when your application restarts. You might want to save it to a file or a database and assign it to [`Steam.servers`](#servers) before logging in next time.\n\nNote that `Steam.servers` will be automatically updated _after_ this event is emitted. This will be useful if you want to compare the old list with the new one for some reason - otherwise it shouldn't matter.\n\n### 'loggedOff'\n* `EResult`\n\nYou were logged off from Steam. [`loggedOn`](#loggedon) is now `false`.\n\n\n## 'message'/send\n\nSending and receiving client messages is designed to be symmetrical, so the event and the method are documented together. Both have the following arguments:\n\n* `header` - an object representing the message header. It has the following properties:\n  * `msg` - `EMsg` (no protomask).\n  * `proto` - a [`CMsgProtoBufHeader`](https://github.com/SteamDatabase/Protobufs/blob/master/steam/steammessages_base.proto) object if this message is protobuf-backed, otherwise `header.proto` is falsy. The following fields are reserved for internal use and shall be ignored: `steamid`, `client_sessionid`, `jobid_source`, `jobid_target`. (Note: pass an empty object if you don't need to set any fields)\n* `body` - a Buffer containing the rest of the message. (Note: in SteamKit2's terms, this is \"Body\" plus \"Payload\")\n* `callback` (optional) - if not falsy, then this message is a request, and `callback` shall be called with any response to it instead of 'message'/send. `callback` has the same arguments as 'message'/send.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseishun%2Fnode-steam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseishun%2Fnode-steam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseishun%2Fnode-steam/lists"}