{"_id":"@dust2market/steam-user","_rev":"1-9a13bf742fb33393efc0b3b1aea1a62a","name":"@dust2market/steam-user","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@dust2market/steam-user","version":"1.0.0","description":"Modification of original steam-user (https://github.com/DoctorMcKay/node-steam-user), to allow integrating with Bubble.io","main":"index.js","directories":{"example":"examples"},"dependencies":{"@bbob/parser":"^2.2.0","@doctormckay/stdlib":"^1.11.1","@doctormckay/steam-crypto":"^1.2.0","adm-zip":"^0.4.13","appdirectory":"^0.1.0","binarykvparser":"^2.2.0","bytebuffer":"^5.0.0","file-manager":"^2.0.0","lzma":"^2.3.2","protobufjs":"^6.8.8","steam-appticket":"^1.0.1","steam-totp":"^2.0.1","steamid":"^1.1.0","vdf":"^0.0.2","websocket13":"^2.1.3"},"deprecated":false,"devDependencies":{"steamcommunity":"^3.39.0"},"scripts":{"generate-enums":"node scripts/generate-enums.js","generate-protos":"node scripts/generate-protos.js","prepublishOnly":"node scripts/prepublish.js"},"repository":{"type":"git","url":"git+https://github.com/dust2market/node-steam-user.git"},"keywords":["steam","login","user"],"author":{"name":"Thinh Ly"},"license":"MIT","bugs":{"url":"https://github.com/dust2market/node-steam-user/issues"},"homepage":"https://github.com/dust2market/node-steam-user#readme","_id":"@dust2market/steam-user@1.0.0","_nodeVersion":"15.1.0","_npmVersion":"7.0.8","dist":{"integrity":"sha512-vx3DpngVvcVQdsK7HUpkluvtKxJwtKj8LEAuIvai99YGjnEhBa+ikwZIp3ZMRChWnLwpapJkF6/PIocjLUjnLg==","shasum":"7a130b2a4b3d18e031b1a4f1b3282c14d40bc8d2","tarball":"https://registry.npmjs.org/@dust2market/steam-user/-/steam-user-1.0.0.tgz","fileCount":333,"unpackedSize":50341488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfrI3SCRA9TVsSAnZWagAALiMP/0f7NSssAXa3MMEL87YX\no0xQjtMRrVbgS77qwC7AngMp+vlNlB5cosetKmaEh5haTyH8SmW6z+JSxEYP\n7NC3Zu6dAn9phVO0WBYWP46jaW0fiVG0T6BnEgJEZ4ImZgxE8wotfOVJxc16\nAgR+PrxD5zLW7yxZSYK//sKDdt9y6GktZ6KK2p/XMkD4Lc3vxu5FvY/AQtfO\npmnM4FimqooRtdM9LyFXUYJqI3T00Hr1SWzn9NLg4Y8rvepDy7+EMHkxyi41\nEmmcgyKTeoh78FS2wTusR1aOVHKF5lSsEur8CGSh5QKitmB1PnwTVDMt3x/Z\ng5RMg1HPAR6DVBNV2UE1YggS66AKBG1xHbjThpHCsTwlYiVsrYkySSYG0YQD\nF2xDNiKCoyYdOLR9dBNxwNukKPrITreqdBb1u8pzI0TzUKntKQywCLXSP5hT\nGzsBsmHz8xwWFXNeIonS+3ntyaIUSp/8NCAyXo9GA3NK+2q88v/FcP6pjiAP\npEc/PwACX3p/TGiDj/Q1ZSSXAafyo5W2ksA58NDN2hqAvELiN7vgd2ugV43F\nKAkJVddYETXFxANWDzJkvMeZzyaitfatTPXPqfm8TWKcT1F3Pl5FzdGlOQCW\na6Uv2zr0WZv+6aiQzIN2pgIyNiI10BPn6uhprteygkyIi6To/0R7nikGSUdI\nqpPn\r\n=aumZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYuLS9Stldp99RDcRNClPCjYi2jm+lfGEiYPhF8FbGLgIgVXIGQMFhLjmOCEavZad91qbkTfldR06ZJYZBFkm5Vbk="}]},"_npmUser":{"name":"tgly95","email":"thinhgly@gmail.com"},"maintainers":[{"name":"tgly95","email":"thinhgly@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/steam-user_1.0.0_1605144018090_0.04403045077735013"},"_hasShrinkwrap":false}},"time":{"created":"2020-11-12T01:20:17.818Z","1.0.0":"2020-11-12T01:20:18.428Z","modified":"2022-04-05T06:09:25.057Z"},"maintainers":[{"name":"tgly95","email":"thinhgly@gmail.com"}],"description":"Modification of original steam-user (https://github.com/DoctorMcKay/node-steam-user), to allow integrating with Bubble.io","homepage":"https://github.com/dust2market/node-steam-user#readme","keywords":["steam","login","user"],"repository":{"type":"git","url":"git+https://github.com/dust2market/node-steam-user.git"},"author":{"name":"Thinh Ly"},"bugs":{"url":"https://github.com/dust2market/node-steam-user/issues"},"license":"MIT","readme":"# SteamUser\n### Allows interaction with the Steam network via the Steam client protocol\n[![npm version](https://img.shields.io/npm/v/steam-user.svg)](https://npmjs.com/package/steam-user)\n[![npm downloads](https://img.shields.io/npm/dm/steam-user.svg)](https://npmjs.com/package/steam-user)\n[![dependencies](https://img.shields.io/david/DoctorMcKay/node-steam-user.svg)](https://david-dm.org/DoctorMcKay/node-steam-user)\n[![license](https://img.shields.io/npm/l/steam-user.svg)](https://github.com/DoctorMcKay/node-steam-user/blob/master/LICENSE)\n[![paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=N36YVAT42CZ4G&item_name=node%2dsteam%2duser&currency_code=USD)\n\nSteamUser allows you to communicate with the Steam servers in the same manner as a proper Steam client. It's designed to\nbe a self-contained module which provides all the functionality expected of a Steam user client.\n\n[Subscribe to release announcements](https://github.com/DoctorMcKay/node-steam-user/releases.atom)\n\n**Have a question about the module or coding in general? *Do not create a GitHub issue.* GitHub issues are for feature requests and bug reports. Instead, post in the [dedicated forum](https://dev.doctormckay.com/forum/7-node-steam-user/). Such issues may be ignored!**\n\n## Installation\n\nInstall it from [npm](https://www.npmjs.com/package/steam-user):\n\n    $ npm install steam-user\n\n# Contents\n- [Patterns](#patterns-)\n- [Enums](#enums-)\n- [Static Methods](#static-methods-)\n- [Options](#options-)\n- [Properties](#properties-)\n- [Methods](#methods-)\n- [Events](#events-)\n\nSome of the documentation for `SteamUser`, especially documentation for experimental features (but not exclusively),\nis located in [the GitHub wiki](https://github.com/DoctorMcKay/node-steam-user/wiki).\n\n# Patterns [^](#contents)\n\nThere are a number of coding patterns that are repeated throughout `SteamUser`. **Please read this section in its\nentirety before starting work with `SteamUser`.**\n\n### Callbacks and Promises\n\nAll methods listed in this document that accept a callback also return a `Promise`. You may use either callbacks or\npromises.\n\nLegacy callbacks return their data spanning across multiple arguments. All promises (which return any data at all)\nreturn a single object containing one or more properties. The names of these properties for legacy callbacks are the\nnames of the callback arguments listed in this readme. Newer callbacks return a single object `response` argument, which\nis identical to the promise output for that method.\n\nSome methods indicate that their callback is required or optional. **You are never required to use callbacks over\npromises**, but if a callback is listed as optional then an unhandled promise rejection will not raise a warning/error.\nIf a callback is listed as required and you neither supply a callback nor handle the promise rejection, then a\npromise rejection will raise a warning, and eventually a crash in a future Node.js release.\n\n# Enums [^](#contents)\n\nThere are a lot of enums used in Steam. They're all available directly from `SteamUser`. For example, access `EResult`\nusing `SteamUser.EResult`.\n\nAll enums can be viewed [on GitHub](https://github.com/DoctorMcKay/node-steam-user/tree/master/enums).\n\nAdditionally, for convenience, the name of an enum value is available from any enum at the key identified by the enum\nvalue. For example, given an EResult of `88` you can translate it using `SteamUser.EResult[88]` which gives you\nthe string `TwoFactorCodeMismatch`.\n\n# Static Methods [^](#contents)\n\nStatic methods, or functions attached directly to `SteamUser`, are called on the root module and not on instantiated handler instances.\n\n### formatCurrency(amount, currency)\n- `amount` - The amount of the currency\n- `currency` - The currency code value in the [`ECurrencyCode`](#ecurrencycode) enum\n\nFormats a currency value and returns a string. For example:\n\n```js\nconsole.log(SteamUser.formatCurrency(12.34, SteamUser.ECurrencyCode.USD)); // $12.34\nconsole.log(SteamUser.formatCurrency(12345, SteamUser.ECurrencyCode.JPY)); // � 12345\nconsole.log(SteamUser.formatCurrency(123.45, SteamUser.ECurrencyCode.EUR)); // 123,45�\n```\n\n# Options [^](#contents)\n\nThere are a number of options which can control the behavior of the `SteamUser` object. They are:\n\n### dataDirectory\n\nControls where the Steam server list and sentry files are written. If `null`, no data will be automatically stored.\n\nDefaults to a platform-specific user data directory.\n\n- On [OpenShift](https://www.openshift.com), this is `$OPENSHIFT_DATA_DIR/node-steamuser`\n- On Windows, this is `%localappdata%\\doctormckay\\node-steamuser`\n- On Mac, this is `~/Library/Application Support/node-steamuser`\n- On Linux, this is `$XDG_DATA_HOME/node-steamuser`, or `~/.local/share/node-steamuser` if `$XDG_DATA_HOME` isn't defined or is empty\n\n#### Custom Storage Engine\n\nIf you don't want to (or can't) save data to the disk, you can implement your own storage engine. To do this, simply add the following code:\n\n```js\nuser.storage.on('save', function(filename, contents, callback) {\n\t// filename is the name of the file, as a string\n\t// contents is a Buffer containing the file's contents\n\t// callback is a function which you MUST call on completion or error, with a single error argument\n\n\t// For example:\n\tsomeStorageSystem.saveFile(filename, contents, function(err) {\n\t\tcallback(err);\n\t});\n});\n\nuser.storage.on('read', function(filename, callback) {\n\t// filename is the name of the file, as a string\n\t// callback is a function which you MUST call on completion or error, with an error argument and a Buffer argument\n\n\t// For example:\n\tsomeStorageSystem.readFile(filename, function(err, file) {\n\t\tif(err) {\n\t\t\tcallback(err);\n\t\t\treturn;\n\t\t}\n\n\t\tcallback(null, file);\n\t});\n});\n```\n\nIn this manner, you can save data to a database, a cloud service, or anything else you choose.\n\n### autoRelogin\n\nA boolean which controls whether or not `SteamUser` will automatically reconnect to Steam if disconnected due to Steam going down.\n\nDefaults to `true`.\n\n### singleSentryfile\n\nA boolean which controls whether or not `SteamUser` will use a single sentry file for all accounts.\n\nIf off, a file named `sentry.accountname.bin` will be saved for each account.\nIf on, a file named `sentry.bin` will be used for all accounts.\n\nDefaults to `false`.\n\n### machineIdType\n\nWhat kind of machine ID will SteamUser send to Steam when logging on? Should be a value from [`EMachineIDType`](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EMachineIDType.js).\n\nAdded in 1.7.0.\n\nDefaults to `AccountNameGenerated`.\n\n### machineIdFormat\n\nIf you're using `machineIdType` `AccountGenerated`, this is the format it uses. This is an array of three strings, each of which will be hashed with SHA1 before being sent to Steam. `{account_name}` will be replaced with the current account name.\n\nAdded in 1.13.0.\n\nDefaults to `[\"SteamUser Hash BB3 {account_name}\", \"SteamUser Hash FF2 {account_name}\", \"SteamUser Hash 3B3 {account_name}\"]`.\n\n### enablePicsCache\n\nIf enabled, then `node-steam-user` will internally cache data in memory about all apps and packages that it knows about.\nCurrently, `node-steam-user` \"knows about\" an app/package if:\n\n- Packages\n    - You own it, or\n    - You request info about it via `getProductInfo`\n- Apps\n    - It's in a known package, or\n    - You request info about it via `getProductInfo`, or\n    - A friend who is online plays the app, or\n    - You request info about an online user who is playing it via `getPersonas`\n\nThis option is required in order to use several methods and events. This works when logging in anonymously.\n\nAdded in 3.3.0.\n\nDefaults to `false`.\n\n### picsCacheAll\n\nIf `picsCacheAll` is enabled, `enablePicsCache` is enabled, and `changelistUpdateInterval` is nonzero, then apps and\npackages which get updated while your bot is running will also be added to the cache. Default behavior is to only cache\napps and packages that are \"known\" via the above criteria.\n\nAdded in 3.3.0.\n\nDefaults to `false`.\n\n### changelistUpdateInterval\n\nIf `enablePicsCache` is enabled, then `node-steam-user` will automatically request app/package changes (via\n`getProductChanges`) for known apps and packages, and update the internal cache when they update. This is the frequency,\nin milliseconds, for changelist update requests. Set to `0` to disable.\n\nAdded in 3.3.0.\n\nDefaults to `60000`. Minimum value `1000`, although you're recommended to not go below 10 seconds or so.\n\n### additionalHeaders\n\nSet this to an object where keys are header names and values are header values, and those headers will be included\nwith all HTTP requests `node-steam-user` makes to the Steam WebAPI.\n\nAdded in 3.29.0.\n\nDefaults to `{}`.\n\n### localAddress\n\nPass an IP here (as a string) to bind to that address, or `null` to let the OS decide.\n\nAdded in 4.0.0.\n\nDefaults to `null`.\n\n### localPort\n\nPass a port here to bind to that port, or `null` to let the OS decide.\n\nAdded in 4.0.0.\n\nDefaults to `null`.\n\n### httpProxy\n\nSpecify a URL here to use an HTTP proxy. For example, `http://user:pass@1.2.3.4:8081`\n\nAdded in 4.0.0.\n\n### protocol\n\nA value from [`EConnectionProtocol`](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EConnectionProtocol.js).\n\nAdded in 4.0.0.\n\nDefaults to `Auto`.\n\n### language\n\nSet this to the full name of a language (e.g. \"english\" or \"spanish\") to localize specific things within steam-user.\nCurrently this is only used to localize `rich_presence_string` in [`user`](#user) event data and in `requestRichPresence`.\n\nAdded in 4.0.0.\n\nDefaults to `english`.\n\n### webCompatibilityMode\n\nIf you're having trouble connecting to Steam (e.g. through a firewall or a proxy), set this to `true`. When in web\ncompatibility mode, connections to Steam will always use WebSockets (the `protocol` option will be ignored, and you\nwill get a warning if you set it to `TCP`), and only Steam servers listening on port 443 will be considered.\n\nAdded in 4.6.0.\n\nDefaults to `false`.\n\n# Properties [^](#contents)\n\n### steamID\n\n`null` if not connected, a [`SteamID`](https://www.npmjs.com/package/steamid) containing your SteamID otherwise.\n\n### options\n\nAn object containing options for this `SteamUser`. **Read-only**; use `setOption` or `setOptions` to change an option.\n\n### publicIP\n\n**v1.12.0 or later is required to use this property**\n\nOnly defined if you're currently logged on. This is your public IP as reported by Steam, in \"x.x.x.x\" format.\n\n### cellID\n\n**v1.12.0 or later is required to use this property**\n\nOnly defined if you're currently logged on. This is your cell (region ID) on the Steam network.\n\n### vanityURL\n\n**v3.7.0 or later is required to use this property**\n\nOnly defined if you're currently logged on. This is your vanity URL (the part that goes after `/id/` in your profile\nURL). Falsy if you don't have one.\n\n### accountInfo\n\nAn object containing information about your account. `null` until [`accountInfo`](#accountinfo-1) is emitted.\n\n- `name` - Your account's Steam (persona) name\n- `country` - The character code from which you're logging in (via GeoIP), e.g. \"US\"\n- `authedMachines` - How many machines are authorized to login to your account with Steam Guard\n- `flags` - Your account's bitwise [flags](https://github.com/SteamRE/SteamKit/blob/b80cdf5249891d54c655e39262d8267c7b40b249/Resources/SteamLanguage/enums.steamd#L81-L113)\n- `facebookID` - If your account is linked with Facebook, this is your Facebook account ID\n- `facebookName` - If your account is linked with Facebook, this is your (real) name on Facebook\n\n### emailInfo\n\nAn object containing information about your account's email address. `null` until [`emailInfo`](#emailinfo-1) is emitted.\n\n- `address` - Your email address\n- `validated` - `true` if your email is validated, `false` if not\n\n### limitations\n\nAn object containing information about your account's limitations. `null` until [`accountLimitations`](#accountlimitations) is emitted.\n\n- `limited` - `true` if your account is [limited](https://support.steampowered.com/kb_article.php?ref=3330-IAGK-7663), `false` if not\n- `communityBanned` - `true` if your account is banned from Steam Community, `false` if not\n- `locked` - `true` if your account is [locked](https://support.steampowered.com/kb_article.php?ref=6416-FHVM-3982), `false` if not (accounts can also be locked by Support)\n- `canInviteFriends` - `true` if your account can invite friends, `false` if not\n\n### vac\n\nAn object containing information about your account's VAC bans. `null` until [`vacBans`](#vacbans) is emitted.\n\n- `numBans` - How many bans are registered on your account\n- `appids` - An array of AppIDs from which you're banned. Since each ban affects a range of AppIDs, some of the AppIDs in this array may not exist.\n\n### wallet\n\nAn object containing information about your Steam Wallet. `null` until [`wallet`](#wallet-1) is emitted.\n\n- `hasWallet` - `true` if your account has a Steam Wallet, `false` if not\n- `currency` - The currency ID of your account's wallet (the enum of currencies is available as `SteamUser.ECurrencyCode`)\n- `balance` - Your account's current wallet balance\n\n### licenses\n\nAn array containing license data for the packages which your Steam account owns. `null` until [`licenses`](#licenses-1) is emitted.\n\n### gifts\n\nAn array containing gifts and guest passes you've received but haven't accepted (to your library or to your inventory) or declined.\n`null` until [`gifts`](#gifts-1) is emitted. Each object in the array contains these properties:\n\n- `gid` - The ID of this gift/guest pass, as a string (it's a 64-bit number)\n- `packageid` - The ID of the package which this gift/guest pass will grant\n- `TimeCreated` - A `Date` object for when this gift was purchased or guest pass was granted\n- `TimeExpiration` - A `Date` object for when this guest pass will expire (if it's a gift, this will be Mon Jan 18 2038 22:14:07 GMT-0500 (Eastern Standard Time))\n- `TimeSent` - A `Date` object for when this gift/guest pass was sent to you\n- `TimeAcked` - Appears to be the same as `TimeSent`\n- `TimeRedeemed` - Appears to always be `null`\n- `RecipientAddress` - Appears to always be an empty string\n- `SenderAddress` - Appears to always be an empty string\n- `SenderName` - The Steam display name of the user who sent you this gift\n\n### users\n\nAn object containing persona data about all Steam users we've encountered or requested data for. Key are 64-bit SteamIDs,\nand values are identical to the objects received in the [`user`](#user) event.\n\nThis property may not be updated unless you set your instance to [online](#setpersonastate-name).\n\n### groups\n\nAn object containing information about all Steam groups we've encountered. Keys are 64-bit SteamIDs, and values are\nidentical to those received in the [`group`](#group) event.\n\nThis property may not be updated unless you set your instance to [online](#setpersonastate-name).\n\n### chats\n\nAn object containing information about all legacy chat rooms we're in. Keys are 64-bit SteamIDs, values are objects with this structure:\n- `name` - The name of the chat, or empty if it's a multi-user chat\n- `private` - `true` if only group members can join, `false` if it's open to everyone\n- `invisibleToFriends` - `true` if the chat is invisible to friends, `false` if visible (unsure what this means at this time)\n- `officersOnlyChat` - `true` if only group officers can chat right now, `false` if everyone can\n- `unjoinable` - `true` if the chat can't be joined, `false` if it can (note that this doesn't necessary mean **your** effective access)\n- `members` - An object whose keys are 64-bit SteamIDs of users in this chat room, and whose values are objects with this structure:\n\t- `rank` - A value from `EClanRank`\n\t- `permissions` - A bitstring of values in `EChatPermission` for the user's permissions in this chat\n\n### myFriends\n\nAn object whose keys are 64-bit SteamIDs, and whose values are values from the `EFriendRelationship` enum. Therefore, you can deduce your friends list from this object.\n\nWhen we get unfriended, instead of setting the value to `EFriendRelationship.None`, the key is deleted from the object entirely.\n\nThis isn't populated after logon until [`friendsList`](#friendslist) is emitted.\n\n### myGroups\n\nAn object whose keys are 64-bit SteamIDs, and whose values are from the `EClanRelationship` enum. Therefore, you can deduce which groups you're in from this object.\n\nWhen we leave a group, instead of setting the value to `EClanRelationship.None`, the key is deleted from the object entirely.\n\nThis isn't populated after logon until [`groupList`](#grouplist) is emitted.\n\n### myFriendGroups\n\n**v1.10.0 or later is required to use this property**\n\nAn object containing your friend groups (in the official client, these are called *tags*). Keys are numeric group IDs, and objects as follows:\n- `name` - A `string` containing the name of the group.\n- `members` - An array containing `SteamID` objects for the members of this friend group.\n\n### myNicknames\n\n**v3.15.0 or later is required to use this property**\n\nAn object containing the nicknames you have assigned to other users. Keys are numeric 64-bit SteamIDs, properties are strings containing that user's nickname.\n\nThis is empty until [`nicknameList`](#nicknamelist) is emitted.\n\n### picsCache\n\n**v3.3.0 or later is required to use this property**\n\nAn object containing cached data about known apps and packages. Only useful if the `enablePicsCache` option is `true`.\n- `changenumber` - The last known changenumber\n- `apps` - An object whose keys are AppIDs and values are objects identical to those returned by `getProductInfo`\n- `packages` - An object whose keys are PackageIDs and values are objects identical to those returned by `getProductInfo`\n\n### chat\n\n**v4.0.0 or later is required to use this property**\n\nThis is a `SteamChatRoomClient` instance. Use this object to chat with friends and chat rooms.\n\n[Read SteamChatRoomClient docs here.](https://github.com/DoctorMcKay/node-steam-user/wiki/SteamChatRoomClient)\n\n### packageName\n\n**v4.2.0 or later is required to use this property**\n\nContains the name of this package. The value is always `\"steam-user\"`. This allows other modules to verify interoperability.\n\n### packageVersion\n\n**v4.2.0 or later is required to use this property**\n\nContains the version of this page. For example, `\"4.2.0\"`. This allows other modules to verify interoperability.\n\n# Methods [^](#contents)\n\n### Constructor(options)\n- `options` - An optional object containing zero or more [options](#options-) to set for this `SteamUser`.\n\nConstructs a new `SteamUser`.\n\n### setOption(option, value)\n- `option` - The name of the option to set\n- `value` - The value to set for this option\n\nChanges the value of an [option](#options-).\n\n### setOptions(options)\n- `options` - An object containing zero or more [options](#options-).\n\n### setSentry(sentry)\n- `sentry` - A Buffer containing the binary sentry file, binary SHA1 hash, or `null` to unset the set sentry\n\nIf you aren't using `dataDirectory` or you just want to provide your own sentry file, you can do it using this method.\n\nYou should call this before calling `logOn`. When you log on, `SteamUser` will use this sentry file.\n\nYou can provide either an entire sentryfile (preferred), or a Buffer containing the binary SHA1 hash of your sentryfile\n(e.g. the output of the `sentry` event in node-steam 0.6.x).\n\n### logOn([details])\n- `details` - An object containing details for this logon\n\t- `accountName` - If logging into a user account, the account's name\n\t- `password` - If logging into an account without a login key or a web logon token, the account's password\n\t- `loginKey` - If logging into an account with a login key, this is the account's login key\n\t- `webLogonToken` - If logging into an account with a [client logon token obtained from the web](https://github.com/DoctorMcKay/node-steamcommunity/wiki/SteamCommunity#getclientlogontokencallback), this is the token\n\t- `steamID` - If logging into an account with a client logon token obtained from the web, this is your account's SteamID, as a string or a `SteamID` object\n\t- `authCode` - If you have a Steam Guard email code, you can provide it here. You might not need to, see the [`steamGuard`](#steamguard) event. (Added in 1.9.0)\n\t- `twoFactorCode` - If you have a Steam Guard mobile two-factor authentication code, you can provide it here. You might not need to, see the [`steamGuard`](#steamguard) event. (Added in 1.9.0)\n\t- `rememberPassword` - `true` if you want to get a login key which can be used in lieu of a password for subsequent logins. `false` or omitted otherwise.\n\t- `logonID` - A 32-bit integer to identify this login. The official Steam client derives this from your machine's private IP (it's the `obfuscated_private_ip` field in `CMsgClientLogOn`). If you try to logon twice to the same account from the same public IP with the same `logonID`, the first session will be kicked with reason `SteamUser.EResult.LogonSessionReplaced`. Defaults to `0` if not specified.\n\t\t- As of v4.13.0, this can also be an IPv4 address as a string, in dotted-decimal notation (e.g. `\"192.168.1.5\"`)\n\t- `machineName` - A string containing the name of this machine that you want to report to Steam. This will be displayed on steamcommunity.com when you view your games list (when logged in).\n\t- `clientOS` - A [number](https://github.com/DoctorMcKay/node-steam-user/blob/master/enums/EOSType.js) to identify your client OS. Auto-detected if you don't provide one.\n\t- `dontRememberMachine` - If you're providing an `authCode` but you don't want Steam to remember this sentryfile, pass `true` here.\n\n**v3.11.0 or later is required to use `machineName` or `dontRememberMachine`.**  \n**v4.3.0 or later is required to use `webLogonToken`.**\n\nLogs onto Steam. Omit the `details` object if you wish to login to an anonymous user account.\n\nThere are four ways to log onto Steam:\n\n- Anonymously\n\t- Omit `accountName` (or the `details` object entirely) and you will log onto an anonymous user account.\n- Individually using account name and password\n\t- These properties are required:\n\t\t- `accountName`\n\t\t- `password`\n\t- These properties are optional:\n\t\t- `authCode` - Specify if you are using an email Steam Guard code.\n\t\t- `twoFactorCode` - Specify if you are using a TOTP two-factor code (required if your account has 2FA enabled).\n\t\t- `rememberPassword` - Specify if you want to get a login key for subsequent logins.\n\t\t- `logonID` - Defaults to 0 if not specified.\n\t\t- `machineName` - Defaults to empty string if not specified.\n\t\t- `clientOS` - Defaults to an auto-detected value if not specified.\n\t\t- `dontRememberMachine` - Only relevant if using an `authCode`. Defaults to `false` if not specified.\n\t- These properties must not be provided:\n\t\t- `loginKey`\n\t\t- `webLogonToken`\n\t\t- `steamID`\n- Individually using account name and login key\n\t- These properties are required:\n\t\t- `accountName`\n\t\t- `loginKey`\n\t- These properties are optional:\n\t\t- `rememberPassword` - Specify if you want to get a new login key for subsequent logins.\n\t\t- `logonID` - Defaults to 0 if not specified.\n\t\t- `machineName` - Defaults to empty string if not specified.\n\t\t- `clientOS` - Defaults to an auto-detected value if not specified.\n\t- These properties must not be provided:\n\t\t- `password`\n\t\t- `authCode`\n\t\t- `twoFactorCode`\n\t\t- `dontRememberMachine`\n\t\t- `webLogonToken`\n\t\t- `steamID`\n- Individually using account name and [client logon token obtained from the web](https://github.com/DoctorMcKay/node-steamcommunity/wiki/SteamCommunity#getclientlogontokencallback)\n\t- **NOTE:** If you log on this way, [`webSession`](#websession) will **NOT** be emitted automatically, and you will need to use [`webLogOn()`](#weblogon) to get a web session.\n\t- These properties are required:\n\t\t- `accountName`\n\t\t- `webLogonToken`\n\t\t- `steamID`\n\t- These properties must not be provided:\n\t\t- `password`\n\t\t- `authCode`\n\t\t- `twoFactorCode`\n\t\t- `dontRememberMachine`\n\t\t- `loginKey`\n\t\t- `rememberPassword`\n\t\t- `logonID`\n\t\t- `machineName`\n\t\t- `clientOS` \n\n### logOff()\n\nLogs you off of Steam and closes the connection.\n\n### relog()\n\n**v3.18.0 or later is required to use this method**\n\nLogs you off of Steam and then immediately back on. If you aren't logged into an anonymous account, then you **must**\nset `rememberPassword` to `true` when logging on initially to use this. You also **must** wait for the\n[`loginKey`](#loginkey) event to be emitted before you can use this. Attempts to call this method without both\ncriteria being met will result in an `Error` being thrown and nothing else will happen.\n\nWhen used, `disconnected` and then `loggedOn` will be emitted in succession. This is essentially the same as using\n`logOff()` and then calling `logOn()` immediately in the `disconnected` event callback.\n\n### webLogOn()\n\n`SteamUser` will automatically log onto steamcommunity.com when a successful connection to Steam is established (as an\nindividual user), but you can call `webLogOn()` to create a new session if your old one expires or becomes invalid.\n\nListen for the [`webSession`](#websession) event to get your cookies.\n\n### requestValidationEmail([callback])\n- `callback` - Optional. Called when a response is available\n\t- `err` - An `Error` object on failure, or `null` on success\n\nRequests Steam to send you a validation email to your registered email address.\n\n### enableTwoFactor(callback)\n- `callback` - Required. Called when the activation email has been sent.\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `response` - An object containing the response data\n\n**v2.0.0 or later is required to use this method**\n\nStarts the process to turn on TOTP for your account. You must have a phone number already linked with and verified on your account.\n\nYou'll be sent an SMS with an activation code that you'll need to provide to `finalizeTwoFactor`.\n\n**You should save the entire `response` object somewhere secure.** You can use `JSON.stringify` on it safely.\n\nProperties of note in the `response` object:\n- `status` - A value from `EResult`. If this is not `OK` (1), then the request failed.\n- `shared_secret` - This is your secret that's used for two-factor authentication.\n- `identity_secret` - This is your secret that's used for trade confirmation.\n- `revocation_code` - You will need this in the future to disable two-factor authentication.\n\n### finalizeTwoFactor(secret, activationCode, callback)\n- `secret` - A `Buffer` containing your shared secret\n- `activationCode` - A `string` containing the activation code you got in your SMS\n- `callback` - Required.\n\t- `err` - An `Error` object on failure, or `null` on success\n\n**v2.0.0 or later is required to use this method**\n\nFinishes the process of enabling TOTP two-factor authentication for your account. You can use [`steam-totp`](https://www.npmjs.com/package/steam-totp) in the future when logging on to get a code.\n\n**If TOTP two-factor authentication is enabled, a code will be required *on every login* unless a `loginKey` is used.**\n\n### getSteamGuardDetails(callback)\n- `callback` - A function to be called when the requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `isSteamGuardEnabled` - `true` if Steam Guard is enabled for your account, `false` if not\n\t- `timestampSteamGuardEnabled` - A `Date` object representing when Steam Guard was enabled for your account, or `null` if not available\n\t- `timestampMachineSteamGuardEnabled` - A `Date` object representing when your current machine was authorized with Steam Guard, or `null` if not available\n\t- `canTrade` - `true` if Steam Guard will allow you to trade, `false` if not. You may still be blocked by a trade ban or another trading limitation.\n\t- `timestampTwoFactorEnabled` - A `Date` object representing when the Steam Guard Mobile Authenticator was enabled for your account, or `null` if not enabled\n\t- `isPhoneVerified` - `true` if your account has a linked phone, `false` if not\n\n**v1.11.0 or later is required to use this method.  \nv1.12.0 or later is required to use `canTrade`.  \nv3.3.3 or later is required to use `timestampTwoFactorEnabled`.  \nv3.5.0 or later is required to use `isPhoneVerified`.**\n\nRequests details about your account's Steam Guard status. This could be used to see if your account passes the Steam Guard trading requirements.\n\nIn order to trade, **all** of the following must be true:\n- `enabled` must be `true` (account-level restriction)\n- `enabledTime` must be at least 15 days ago (account-level restriction)\n- ONE of `machineTime` OR `twoFactorTime` must be at least 7 days ago (sentryfile-level restriction)\n\n### getCredentialChangeTimes(callback)\n- `callback` - A function to be called when the requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n    - `timestampLastPasswordChange` - A `Date` object representing when your password was last changed, or `null` if never changed\n    - `timestampLastPasswordReset` - A `Date` object representing when your password was last *reset* via the \"forgot your password\" utility, or `null` if never reset\n    - `timestampLastEmailChange` - A `Date` object representing when your email address was last changed, or `null` if never changed\n\n**v3.10.0 or later is required to use this method**\n\nGets when you last changed various account credentials.\n\n### getAuthSecret(callback)\n- `callback` - A function to be called when the requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n    - `secretID` - A numeric ID assigned to your key by Steam\n    - `key` - Your account's \"auth secret\", as a `Buffer`\n\n**v3.10.0 or later is required to use this method**\n\nGets your account's auth secret, which is the pre-shared key used for in-home streaming.\n\n### getPrivacySettings(callback)\n- `callback` - A function to be called when the requested data is available\n\t- `err` - An `Error` object on failure, or `null` on success\n\t- `response` - The response object\n\t\t- `privacy_state` - The [privacy state](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EPrivacyState.js) of your profile\n\t\t- `privacy_state_inventory` - The [privacy state](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EPrivacyState.js) of your Steam inventory\n\t\t- `privacy_state_gifts` - The [privacy state](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EPrivacyState.js) of your Steam gift inventory\n\t\t- `privacy_state_ownedgames` - The [privacy state](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EPrivacyState.js) of your owned games list\n\t\t- `privacy_state_playtime` - The [privacy state](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EPrivacyState.js) of your game playtime\n\t\t- `privacy_state_friendslist` - The [privacy state](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EPrivacyState.js) of your friends list\n\n**v4.11.0 or later is required to use this method**\n\nRetrieves your account's privacy settings. You can't change your privacy state using steam-user; you'll need to use\n[steamcommunity](https://github.com/DoctorMcKay/node-steamcommunity/wiki/SteamCommunity#profilesettingssettings-callback).\n\n### kickPlayingSession([callback])\n- `callback` - Optional. A function to be called once Steam receives and responds to this request.\n    - `err` - An `Error` object on failure, or `null` on success\n\n**v3.21.0 or later is required to use this method**\n\nIf this account is being used to play a game on another logon session, calling this method will kick that other session\noff of Steam entirely (it will get an `error` event if the other session is using node-steam-user).\n\n### gamesPlayed(apps[, force])\n- `apps` - An array, object, string, or number (see below)\n- `force` - Optional, default `false`. If `true` and this account is playing a game elsewhere, calls `kickPlayingSession` first.\n\n**v3.21.0 or later is required to use `force`**\n\nReports to Steam that you're playing or using zero or more games/apps. To exit all games/apps, use an empty array `[]`.\n\nTo play a single game by AppID, use a single integer (e.g. `440`)\n\nTo play a single non-Steam game by name, use a single string (e.g. `\"Minecraft\"`)\n\nTo play a single game by AppID and name (the client-provided name is what is given to the WebAPI and mobile app), use an object of this format:\n\n```json\n{\n\t\"game_id\": 440,\n\t\"game_extra_info\": \"Team Fortress 2\"\n}\n```\n\nYou can use multiple apps by providing an array of any mixture of the above formats.\n\n### getPlayerCount(appid, callback)\n- `appid` - The AppID of the app for which you'd like the current player/user count (use `0` to get current logged-in Steam user count)\n- `callback` - Called when the requested data is available\n\t- `err` - An `Error` object on failure, or `null` on success\n\t- `playerCount` - How many Steam users are currently playing/using the app\n\nRequests a count of how many Steam users are currently playing/using an app.\n\n### serverQuery(conditions, callback)\n- `conditions` - A [filter string](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol#Filter) or an object containing one or more of the following properties:\n\t- `app_id` - The AppID of the game for which you want servers\n\t- `geo_location_ip` - The IP address of the querying client, used for geolocation (in `x.x.x.x` format)\n\t- `region_code` - The [region code](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol#Region_codes) where you want servers\n\t- `filter_text` - A [filter string](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol#Filter)\n\t- `max_servers` - Maximum number of servers to return in this response (default and hard limit 5000)\n- `callback` - Called when the response is available\n\t- `err` - If an error occurred, this is an `Error` object. Otherwise, it's `null`.\n\t- `servers` - An array of objects containing server data\n\t\t- `ip` - The server's IP in `x.x.x.x` format\n\t\t- `port` - The server's game port\n\t\t- `players` - How many authenticated players are on this server (the Steam server browser will use this value if the gameserver itself reports more players and doesn't report itself as full, to prevent inflated player counts)\n\nRequests a list of game servers from the master server.\n\n### getServerList(filter, limit, callback)\n- `filter` - A master server [filter string](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol#Filter)\n- `limit` - How many servers should be returned, at maximum. Hard limit is 20,000.\n- `callback` - Called when the requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `servers` - An array of objects containing server data\n\t\t- `addr` - The server's IP address in `x.x.x.x:p` format\n\t\t- `gameport` - The port the server is running on for game clients\n\t\t- `specport` - The port the server is running on for spectator clients (`null` for none)\n\t\t- `steamid` - A [`SteamID`](https://www.npmjs.com/package/steamid) object containing the server's SteamID\n\t\t- `name` - The server's hostname\n\t\t- `appid` - The AppID of the game which the server is serving\n\t\t- `gamedir` - The directory of the game which the server is serving\n\t\t- `version` - The version of the game which the server is serving\n\t\t- `product` - The product name of the game which the server is serving\n\t\t- `region` - The [region code](https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol#Region_codes) for where the server is located\n\t\t- `players` - How many people are currently on this server\n\t\t- `max_players` - How many people can be on the server at once\n\t\t- `bots` - How many CPU players are currently on this server\n\t\t- `map` - The name of the map which the server is currently running\n\t\t- `secure` - `true` if the server is VAC-secure, `false` if not\n\t\t- `dedicated` - `true` if the server is dedicated, `false` if listen\n\t\t- `os` - `w` if the server is running on Windows, `l` for Linux\n\t\t- `gametype` - The server's tags, separated by commas\n\n**Works when anonymous.** Requests a list gameservers from Steam matching a given filter, along with information about the server as Steam knows it.\n\n### getServerSteamIDsByIP(ips, callback)\n- `ips` - An array of IP addresses, in `x.x.x.x:p` format\n- `callback` - Called when requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `servers` - An object whose keys are IP addresses in `x.x.x.x:p` format and values are [`SteamID`](https://www.npmjs.com/package/steamid) objects\n\n**Works when anonymous.** Gets current SteamIDs for servers running on given addresses.\n\n### getServerIPsBySteamID(steamids, callback)\n- `steamids` - An array of [`SteamID`](https://www.npmjs.com/package/steamid) objects, or something which can parse into one (64-bit SteamID as string, Steam3 rendered format)\n- `callback` - Called when requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `servers` - An object whose keys are 64-bit numeric SteamIDs and values are IP addresses in `x.x.x.x:p` format\n\n**Works when anonymous.** Gets current IP addresses for servers with given SteamIDs.\n\n### getProductChanges(sinceChangenumber, callback)\n- `sinceChangenumber` - The changenumber of the last known changelist. You will get changes which have occurred since then and now. You won't get any info except the current changenumber if you request more than around 5,000 changenumbers in the past.\n- `callback` - Called when data is available\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `currentChangenumber` - The changenumber of the newest changelist\n\t- `appChanges` - An array of objects for apps which have changed. Each object has these properties:\n\t\t- `appid` - The AppID of the app\n\t\t- `change_number` - The changenumber of the latest changelist in which the app has changed\n\t\t- `needs_token` - `true` if you need an access token to get most details about this app, `null` if not\n\t- `packageChanges` - An array of objects for packages which have changed. Each object has the same properties as the `apps` array, except `appid` is `packageid`.\n\n**Works when anonymous.** Requests a list of all apps/packages which have changed since a given changenumber.\n\n### getProductInfo(apps, packages[, inclTokens], callback)\n- `apps` - Either an array of AppIDs, or an array of objects containing `appid` and `access_token` properties\n- `packages` - Either an array of PackageIDs, or an array of objects containing `packageid` and `access_token` properties\n- `inclTokens` - Optional boolean to automatically request product access tokens if they need them. The default value is false.\n- `callback` - Called when requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `apps` - An object whose keys are AppIDs and whose values are objects\n\t\t- `changenumber` - The changenumber of the latest changelist in which this app changed\n\t\t- `missingToken` - `true` if you need to provide an access token to get more details about this app\n\t\t- `appinfo` - An object whose structure is identical to the output of `app_info_print` in the [Steam console](steam://nav/console)\n\t- `packages` - An object whose keys are PackageIDs and whose values are objects. Each object has the same properties as the `apps` array, except `appinfo` is `packageinfo`.\n\t- `unknownApps` - An array of input AppIDs which don't exist\n\t- `unknownPackages` - An array of input PackageIDs which don't exist\n\n**Works when anonymous.** Requests details about one or more apps or packages.\n\nIf you have the PICS cache enabled and the risk of getting stale data is acceptable, you could check\n[the PICS cache](#picscache) if you want instead of calling `getProductInfo`.\n\n### getProductAccessToken(apps, packages, callback)\n- `apps` - An array of AppIDs\n- `packages` - An array of PackageIDs\n- `callback` - Called when requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `appTokens` - An object whose keys are AppIDs and whose values are access tokens\n\t- `packageTokens` - An object whose keys are PackageIDs and whose values are access tokens\n\t- `appDeniedTokens` - An array of AppIDs for which Steam denied you an access token\n\t- `packageDeniedTokens` - An array of PackageIDs for which Steam denied you an access token\n\n**Works when anonymous.** Requests access tokens for one or more apps or packages. These access tokens can be used with [`getProductInfo`](#productinfoapps-packages-callback).\n\nAccess tokens are global. That is, everyone who has access to an app receives the same token. Tokens do not seem to expire.\n\n### getOwnedApps([excludeSharedLicenses])\n- `excludeSharedLicenses` - Pass `true` to exclude apps that are owned via a shared license, and not directly on this account (default `false`)\n\n**v3.3.0 or later is required to use this method**  \n**v4.7.0 or later is required to use `excludeSharedLicenses`**\n\nReturns an array of AppIDs which your account owns. This cannot be safely called until `appOwnershipCached` is emitted.\n\n`enablePicsCache` must be `true` to use this method. Otherwise, an `Error` will be thrown.\n\n### ownsApp(appid[, excludeSharedLicenses])\n- `appid` - A numeric AppID\n- `excludeSharedLicenses` - Pass `true` to exclude apps that are owned via a shared license, and not directly on this account (default `false`)\n\n**v3.3.0 or later is required to use this method**  \n**v4.7.0 or later is required to use `excludeSharedLicenses`**\n\nReturns `true` if your account owns the specified AppID, or `false` if not. This cannot be safely called until\n`appOwnershipCached` is emitted.\n\n`enablePicsCache` must be `true` to use this method. Otherwise, an `Error` will be thrown.\n\n### getOwnedDepots([excludeSharedLicenses])\n- `excludeSharedLicenses` - Pass `true` to exclude depots that are owned via a shared license, and not directly on this account (default `false`)\n\n**v3.3.0 or later is required to use this method**  \n**v4.7.0 or later is required to use `excludeSharedLicenses`**\n\nReturns an array of depot IDs which your account owns. This cannot be safely called until `appOwnershipCached` is emitted.\n\n`enablePicsCache` must be `true` to use this method. Otherwise, an `Error` will be thrown.\n\n### ownsDepot(depotid[, excludeSharedLicenses])\n- `depotid` - A numeric depot ID\n- `excludeSharedLicenses` - Pass `true` to exclude depots that are owned via a shared license, and not directly on this account (default `false`)\n\n**v3.3.0 or later is required to use this method**  \n**v4.7.0 or later is required to use `excludeSharedLicenses`**\n\nReturns `true` if your account owns the specified depot, or `false` if not. This cannot be safely called until\n`appOwnershipCached` is emitted.\n\n`enablePicsCache` must be `true` to use this method. Otherwise, an `Error` will be thrown.\n\n### getOwnedPackages([excludeSharedLicenses])\n- `excludeSharedLicenses` - Pass `true` to exclude packages that are owned via a shared license, and not directly on this account (default `false`)\n\n**v3.3.0 or later is required to use this method**  \n**v4.7.0 or later is required to use `excludeSharedLicenses`**\n\nReturns an array of package IDs which your account owns. If you logged in anonymously, this can be safely called\nimmediately following logon. Otherwise, this cannot be safely called until `licenses` is emitted.\n\n### ownsPackage(packageid[, excludeSharedLicenses])\n- `packageid` - A numeric package ID\n- `excludeSharedLicenses` - Pass `true` to exclude packages that are owned via a shared license, and not directly on this account (default `false`)\n\n**v3.3.0 or later is required to use this method**  \n**v4.7.0 or later is required to use `excludeSharedLicenses`**\n\nReturns `true` if your account owns the specified package ID, or `false` if not. If you logged in anonymously, this can\nbe safely called immediately following logon. Otherwise, this cannot be safely called until `licenses` is emitted.\n\n### getStoreTagNames(language, tagIDs, callback)\n- `language` - The language you want tag names in, e.g. \"english\" or \"spanish\"\n- `tagIDs` - An array of one or more tag IDs\n- `callback` - A function to be called when the requested data is available\n\t- `err` - An `Error` object on failure, or `null` on success\n\t- `tags` - An object whose keys are tag IDs and values are objects with two properties: `name` and `englishName`\n\n**v3.26.0 or later is required to use this method**\n\nRetrieves localized names for specified store tag IDs. Tag IDs are available in the response to `getProductInfo`.  \n\n### getPublishedFileDetails(ids, callback)\n- `ids` - Either an integer, or an array of integers containing the IDs of the published file(s) you want details for\n- `callback` - A function to be called when the request has completed\n    - `err` - An `Error` object on failure, or `null` on success\n    - `files` - An object whose keys are published file IDs, and values are object containing a ton of information\n\n**v3.8.0 or later is required to use this method**\n\nGets details for one or more published files. Published files are anything with a URL like\n`https://steamcommunity.com/sharedfiles/filedetails/?id=662626851` (where `id` is the published file ID).\n\nThe amount of data available in `results` is huge, so I can only suggest that you `console.log` it to see what's\navailable.\n\n### setPersona(state[, name])\n- `state` - A value from [`EPersonaState`](https://github.com/DoctorMcKay/node-steam-user/blob/master/enums/EPersonaState.js)\n- `name` - Optional. Your new profile name\n\n**v1.9.0 or later is required to use this method**\n\nChanges our online status, and optionally your profile name. You need to call this after you logon or else you'll show up as offline.\nYou won't receive any persona data about your friends if you don't go online.\n\n### setUIMode(mode)\n- `mode` - A value from [`EClientUIMode`](https://github.com/DoctorMcKay/node-steam-user/blob/master/resources/EClientUIMode.js)\n\n**v3.7.0 or later is required to use this method**\n\nSets your current UI mode, which displays as an icon next to your online status in Steam chat and the friends list.\n\n### addFriend(steamID[, callback])\n- `steamID` - The SteamID of the user you want to add as a friend, as a `SteamID` object or a string that can parse into one\n- `callback` - Optional. Called when Steam responds to this request.\n    - `err` - An `Error` object on failure, or `null` on success. If this is an `Error` object, it will have an `eresult` property.\n    - `personaName` - If successful, the current persona name of the user you added.\n\n**v1.9.0 or later is required to use this method. v3.10.0 or later is required to use `callback`.**\n\nSends a friend request to the user with the specified `SteamID`. If they've already sent you a friend request, accepts it.\n\nIf you provide a callback, the `message` of the `err` will be `DuplicateName` and the `eresult` will be `14` if we are\nalready friends with the requested user, or if we've sent them a friend request already that they haven't accepted or\nignored. `message` will be `Blocked` and `eresult` will be `40` if they've blocked us.\n\n### removeFriend(steamID)\n- `steamID` - The SteamID of the user you want to remove from your friends list, as a `SteamID` object or a string that can parse into one\n\n**v1.9.0 or later is required to use this method**\n\nRemoved a specified user from your friends list. Also ignores an outstanding friend request from this user.\n\n### blockUser(steamID[, callback])\n- `steamID` - The SteamID of the user you want to block, as a `SteamID` object or a string that can parse into one\n- `callback` - Optional. Called when the request completes\n\t- `err` - An `Error` object on failure, or `null` on success\n\n**v1.9.0 or later is required to use this method**\n\nBlocks all communication with a specified user.\n\n### unblockUser(steamID[, callback])\n- `steamID` - The SteamID of the user you want to unblock, as a `SteamID` object or a string that can parse into one\n- `callback` - Optional. Called when the request completes\n\t- `err` - An `Error` object on failure, or `null` on success\n\n**v1.9.0 or later is required to use this method**\n\nUnblocks all communication with a specified user.\n\n### createQuickInviteLink([options,] callback)\n- `options` - Optional. An object with zero or more of these properties:\n\t- `inviteLimit` - How many times this link can be used before it's no longer valid. Defaults to 1.\n\t- `inviteDuration` - How long in seconds this link can be used before it's no longer valid. Defaults to `null` (no time limit).\n- `callback` - Called when the request completes\n\t- `err` - An `Error` object on failure, or `null` on success\n\t- `response` - The response object\n\t\t- `token` - An object with these properties:\n\t\t\t- `invite_link` - The link that can be used to add your account as a friend directly\n\t\t\t- `invite_token` - Just the token part of the link\n\t\t\t- `invite_limit` - How many times the link can be used before it's no longer valid\n\t\t\t- `invite_duration` - How many seconds are left until the link expires. `null` if it never expires.\n\t\t\t- `time_created` - A `Date` object representing when the link was created\n\t\t\t- `valid` - `true` if the link is currently valid, or `false` if not\n\n**v4.11.0 or later is required to use this method**\n\n**v4.13.0 or later is required to use `inviteDuration`**\n\nCreates a quick-invite link that can be used by anyone who has it to add you to their friends list without needing to\nsend an invite that you must to approve.\n\n### listQuickInviteLinks(callback)\n- `callback` - Called when the request completes\n\t- `err` - An `Error` object on failure, or `null` on success\n\t- `response` - The response object\n\t\t- `tokens` - An array of objects, each of which is identical to the output of `createQuickInviteLink`\n\n**v4.11.0 or later is required to use this method**\n\nRetrieves the list of quick-invite links on your account. Links that you've revoked won't appear here.\n\n### revokeQuickInviteLink(linkOrToken[, callback])\n- `linkOrToken` - Either the full link, or just the token part of the link\n- `callback` - Optional. Called when the request completes\n\t- `err` - An `Error` object on failure, or `null` on success\n\n**v4.11.0 or later is required to use this method**\n\nRevokes a quick-invite link. Can also be used to delete an already-used code from `listQuickInviteLinks`.\n\n### getQuickInviteLinkSteamID(link)\n- `link` - The full quick-invite link\n\n**v4.11.0 or later is required to use this method**\n\nDecodes a quick-invite link and returns a `SteamID` object representing the user account to whom this link belongs.\nReturns `null` if the link is not well-formed.\n\nThis happens offline and thus returns immediately, without need for a callback or Promise.\n\n### checkQuickInviteLinkValidity(link, callback)\n- `link` - The full quick-invite link\n- `callback` - Called when the request completes\n\t- `err` - An `Error` object on failure, or `null` on success\n\t- `response` - The response object\n\t\t- `valid` - `true` if the link exists and is valid, `false` if the link exists but is not valid (e.g. it's already been used); it's an error if the link doesn't exist at all\n\t\t- `steamid` - A `SteamID` object representing who the link belongs to\n\t\t- `invite_duration` - How many seconds are left until the link expires. `null` if it never expires.\n\n**v4.11.0 or later is required to use this method**\n\nChecks whether a quick-invite link is valid.\n\n### redeemQuickInviteLink(link[, callback])\n- `link` - The full quick-invite link\n- `callback` - Optional. Called when the request completes\n\t- `err` - An `Error` object on failure, or `null` on success\n\n**v4.11.0 or later is required to use this method**\n\nRedeems a quick-invite link and adds the user to your friends list.\n\n### getPersonas(steamids[, callback])\n- `steamids` - An array of `SteamID` objects or strings which can parse into `SteamID` objects\n- `callback` - Optional. Called when the requested data is available.\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `personas` - An object whose keys are 64-bit SteamIDs and whose values are objects identical to those received in the [`user`](#user) event\n\n**v1.9.0 or later is required to use this method**\n\nRequests persona data for one or more users from Steam. The response will arrive in the [`user`](#user) event, or in the callback if provided.\n\n### uploadRichPresence(appID, richPresence)\n- `appID` - The ID of the app for which you want to upload rich presence data. You should be [playing](#gamesplayedapps-force) this app.\n- `richPresence` - An object containing your rich presence data. All values should be strings.\n\n**v4.4.0 or later is required to use this method**\n\nUploads rich presence data to Steam. In order to display text in the Steam friends list, you need a key named `steam_display`,\nwhich **must** be a rich presence localization key (you can see RP keys for apps [on SteamDB](https://steamdb.info/app/440/localization/)).\n\n`%placeholders%` in the rich presence localization value will be replaced with the value of the corresponding key that\nyou upload. For example, to get a TF2 RP string of \"Special Event - Hello, World!\", then you should upload:\n\n```json\n{\n\t\"steam_display\": \"#TF_RichPresence_Display\",\n\t\"state\": \"PlayingMatchGroup\",\n\t\"matchgrouploc\": \"SpecialEvent\",\n\t\"currentmap\": \"Hello, World!\"\n}\n```\n\nThis will subsequently be parsed like this:\n\n1. `#TF_RichPresence_Display` = `{#TF_RichPresence_State_%state%}`\n2. `{#TF_RichPresence_State_PlayingMatchGroup}` = `{#TF_RichPresence_MatchGroup_%matchgrouploc%} - %currentmap%`\n3. `{#TF_RichPresence_MatchGroup_SpecialEvent} - Hello, World!`\n4. `Special Event - Hello, World!`\n\n### getAppRichPresenceLocalization(appID, language, callback)\n- `appID` - The ID of the app for which you want rich presence localizations\n- `language` - The full name of the language you want, e.g. \"english\" or \"spanish\"\n- `callback` - Called when the requested data is available.\n\t- `err` - An `Error` object on failure, or `null` on success\n\t- `response` - The response object\n\t\t- `tokens` - An object where keys are localization tokens (prefixed with `#`, e.g. `#TF_RichPresence_Display`) and values are localized strings\n\n**v4.0.0 or later is required to use this method**\n\nRequests localized rich presence strings for a particular app in the given language. This will allow you to decode the\n`rich_presence` array in the [`user`](#user) event into the localized string displayed in the Steam client.\n\n### requestRichPresence(appID, steamIDs, callback)\n- `appID` - The ID of the app for which you want to get rich presence data for\n- `steamIDs` - An array of SteamID objects or strings that can parse into SteamID objects\n- `language` - Optional. A string containing a full language name (e.g. `'english'` or `'spanish'`). Defaults to language passed in constructor or `setOption` if omitted.\n- `callback` - Called when the requested data is available.\n\t- `err` - An `Error` object on failure, or `null` on success\n\t- `response` - The response object\n\t    - `users` - An object whose keys are 64-bit SteamIDs (as strings) and whose values are objects containing the received rich presence data. If no data was received for a SteamID there will be no key for that SteamID (and therefore no value).\n\n**v4.18.0 or later is required to use this method**\n\nRequests rich presence key/value data and localized strings as displayed in Steam for a list of given users, for a given\napp. Response object looks like this:\n\n```json\n{\n    \"users\": {\n        \"76561198006409530\": {\n            \"richPresence\": {\n                \"status\": \"Playing CS:GO\",\n                \"version\": \"13765\",\n                \"time\": \"15.851017\",\n                \"game:state\": \"lobby\",\n                \"steam_display\": \"#display_Menu\",\n                \"connect\": \"+gcconnectG02C0193A\"\n            },\n            \"localizedString\": \"Playing CS:GO\"\n        }\n    }\n}\n```\n\nIf the Steam display string cannot be localized, then `localizedString` will be null. This is the case when there exists\nno translation for the language you selected.\n\n### getSteamLevels(steamids, callback)\n- `steamids` - An array of `SteamID` objects or strings that can parse into `SteamID` objects\n- `callback` - Called when the requested data is available.\n    - `err` - An `Error` object on failure, or `null` on success\n\t- `users` - An object whose keys are 64-bit SteamIDs (as strings) and whose values are Steam levels\n\n**v1.9.0 or later is required to use this method**\n\nGets the Steam Level for one or more Steam users (who do not have to be on your friends list).\n\n### getAliases(steamids, callback)\n- `steamids` - An array of `SteamID` objects or strings that can parse into `SteamID` objects\n- `callback` - Called when the requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n    - `users` - An object whose keys are 64-bit SteamIDs (as strings) and whose values are objects containing the following properties:\n        - `name` - The new name adopted by the user, as a string\n        - `name_since` - A `Date` object representing when the user adopted this name\n\n**v3.10.0 or later is required to use this method**\n\nGets the last 10 persona names (including the current one) used by one or more Steam users (who do not have to be on your friends list).\n\n### getNicknames([callback])\n- `callback` - Optional. Called when the requested data is available\n    - `err` - An `Error` object on failure, or `null` on success\n    - `nicknames` - An object whose keys are 64-bit SteamIDs (as strings) and whose values are nicknames for the corresponding users (as strings)\n\n**v3.23.0 or later is required to use this method**\n\nRetrieves an up-to-date nickname list (see [`nicknameList`](#nicknamelist)) from Steam. The `nicknameList` event will be\nemitted when the response to this request is received, immediately after the callback fires. If you provide no callback,\nthe `nicknameList` event is still emitted.\n\nIn theory, the nickname list in `myNicknames` will always be up-to-date since v3.23.0, but you may wish to use this if\nyou want to be doubly sure.\n\n### setNickname(steamID, nickname[, callback])\n- `steamID` - The SteamID of the user on whom you want to set a nickname, as a `SteamID` object or a string that can parse into one\n- `nickname` - The user's new nickname, as a string. Empty string to remove.\n- `callback` - Optional. Called when the request completes.\n    - `err` - An `Error` object on failure or `null` on success.\n\n**v3.15.0 or later is required to use this method**\n\nSets a nickname on a user. If one already exists, overwrites it. The `myNicknames` property will be updated just before\nthe callback fires, on success.\n\n**Note:** It appears to be possible for Steam to report success when using this method, when in reality your nickname\nwasn't saved on the server. You can detect this case by calling `getNicknames`.\n\n### getGameBadgeLevel(appid, callback)\n- `appid` - The AppID of the game you want to get your badge level for\n- `callback` - Called when the requested data is available.\n    - `err` - An `Error` object on failure, or `null` on success\n    - `steamLevel` - Your own Steam level\n    - `regularBadgeLevel` - The level on your badge for this game (0 if you don't have one)\n    - `foilBadgeLevel` - The level on your foil badge for this game (0 if you don't have one)\n\n**v3.8.0 or later is required to use this method**\n\nGets your own Steam Level, and the level you have on a badge for a particular game.\n\n### getUserOwnedApps(steamID[, options], callback)\n- `steamID` - Either a `SteamID` object or a string that can parse into one\n- `options` - Optional. An object with zero or more of these properties:\n    - `includePlayedFreeGames` - Set to `true` to include free games that the user has used before. Default `false`.\n    - `filterAppids` - Pass an array of numeric AppIDs here to only retrieve those apps\n    - `includeFreeSub` - Set to `true` to include apps owned through Steam Sub 0\n- `callback` - Called when the request completes.\n    - `err` - An `Error` object on failure or `null` on success.\n    - `response` - The response object\n        - `game_count` - A number indicating how many total apps this user owns\n        - `games` - An array of objects:\n            - `appid` - The ID of the app\n            - `name` - The name of the app\n            - `playtime_2weeks` - How many minutes this user has played in the past 2 weeks (may be `null`)\n            - `playtime_forever` - How many minutes this user has played all time\n            - `img_icon_url` - A URL to the app's 32x32 square icon image\n            - `img_logo_url` - A URL to the app's 184x69 capsule logo image\n            - `has_community_visible_stats` - `true` if this app has visible community stats (e.g. /profiles/:steamID/stats/:appid)\n            - `playtime_windows_forever` - How many minutes this user has played all time on Windows\n            - `playtime_mac_forever` - How many minutes this user has played all time on Mac\n            - `playtime_linux_forever` - How many minutes this user has played all time on Linux\n\n**v4.16.0 or later is required to use this method**\n\nRetrieves a user's list of owned apps. The user's games must not be private.\n\n*This is functionally identical to [IPlayerService/GetOwnedGames](https://steamapi.xpaw.me/#IPlayerService/GetOwnedGames)\nbut with some minor data processing.*\n\n### getOwnedProfileItems([options,] callback)\n- `options` - Optional. An object with zero or more of these properties:\n    - `language` - A language to localize item data into. Defaults to `english`\n- `callback` - Called when the request completes.\n    - `err` - An `Error` object on failure or `null` on success.\n    - `response` - The response object. Each property is an array of [profile item data](#profile-item-data) objects.\n        - `profile_backgrounds` - Owned profile backgrounds\n        - `mini_profile_backgrounds` - Owned miniprofile backgrounds\n        - `avatar_frames` - Owned avatar frames\n        - `animated_avatars` - Owned animated avatars\n        - `profile_modifiers` - Owned profile modifiers\n\n**v4.16.0 or later is required to use this method**\n\nRetrieves a listing of all profile items you currently own.\n\n#### Profile Item Data\n\nProfile item objects have these properties:\n\n- `communityitemid` - The asset ID of the item\n- `image_small` - The URL to the image shown in the inventory. May be `null`.\n- `image_large` - The URL to the full size of the item's image. May be `null` if not a profile background.\n- `name` - The internal name of the item\n- `item_title` - The localized name of the item\n- `item_description` - The localized description of the item\n- `appid` - The AppID of the app which owns this background\n- `item_type`\n- `item_class`\n- `movie_webm` - The URL to a webm version of a video associated with this item, likely for animated avatars.\n- `movie_mp4` - The URL to an mp4 version of a video associated with this item, likely for animated avatars.\n- `equipped_flags` - Unknown at this time\n\n### getEquippedProfileItems(steamID[, options], callback)\n- `steamID` - Either a `SteamID` object or a string that can parse into one for the user whose currently-equiped profile items you want to see\n- `options` - Optional. An object with zero or more of these properties:\n    - `language` - A language to localize item data into. Defaults to `english`\n- `callback` - Called when the request completes.\n    - `err` - An `Error` object on failure or `null` on success\n    - `response` - The response object. Each property is either `null` or a [profile item data](#profile-item-data) object\n        - `profile_background`\n        - `mini_profile_background`\n        - `avatar_frame`\n        - `animated_avatars`\n        - `profile_modifiers`\n\n**v4.16.0 or later is required to use this method**\n\nRetrieves a list of a given user's equipped profile items.\n\n### setProfileBackground(backgroundAssetID[, callback])\n- `backgroundAssetID` - The asset ID of the item you want to set as your background. Use `0` to remove your background.\n- `callback` - Optional. Called when the request completes.\n    - `err` - An `Error` object on failure or `null` on success.\n\n**v4.16.0 or later is required to use this method**\n\nChanges your own profile background.\n\n### inviteToGroup(userSteamID, groupSteamID)\n- `userSteamID` - The SteamID of the user you want to invite, as a `SteamID` object or a string which can parse into one\n- `groupSteamID` - The SteamID of the group you want to invite the user to, as a `SteamID` object or a string which can parse into one\n\n**v3.7.0 or later is required to use this method**\n\nInvites a user to a Steam group.\n\n**Warning:** Group invites can only be sent to users on your friends list. [Why is this?](https://support.steampowered.com/kb_article.php?ref=2092-QLZX-8453#answer)\n\n### respondToGroupInvite(groupSteamID, accept)\n- `groupSteamID` - The SteamID of the group you were invited to, as a `SteamID` object or a string which can parse into one\n- `accept` - `true` to join the group, `false` to ignore the invitation\n\n**v3.7.0 or later is required to use this method**\n\nJoins a group you were invited to or ignores the invite.\n\n### createFriendsGroup(groupName[, callback])\n- `groupName` - The name to create the friends group with\n- `callback` - Optional. Called when requested data is available\n\t- `err` - An `Error` object o","readmeFilename":"README.md"}