Code Monkey home page Code Monkey logo

steamauth's Introduction

SteamAuth for NodeJS

Implementation of mobile SteamGuard 2FA codes and trading confirmations.

Installation

Expand latest SteamAuth-X.X.X.zip into your project folder.

Usage

Authenticator codes

Add require.

var SteamAuth = require("steamauth"); // if using npm registry

var SteamAuth = require("./SteamAuth"); // if using zip file installation

In normal cases, a time-sync must be done either for SteamAuth or individual SteamAuth instances. This sets the drift between the host computer and Steam servers needed to calculate the correct code.

// Perform an initial time sync
SteamAuth.Sync(function(err)
{
	// we can now create instances
});

Time syncing can also be done on a per-instance basis, by event or callback.

// create a single instance with ready event
var auth = new SteamAuth("KNUGC4TFMRJWKY3SMV2A====");
auth.once("ready", function()
{
	// auth can now be used
});

// create a single instance with callback
var auth = new SteamAuth("KNUGC4TFMRJWKY3SMV2A====", function(err)
{
	// auth can now be used
});

Creating SteamAuth instances can be done with a Base32 string or object with shared_secret.

// simple example with a Base32 code (from WinAuth)
var auth = new SteamAuth("KNUGC4TFMRJWKY3SMV2A====");
var code = auth.calculateCode();

// example with options loaded from Android Steam mobile app
var auth = new SteamAuth({
	shared_secret:"U2hhcmVkU2VjcmV0"
});
var code = auth.calculateCode();

// calculate a code for a specific time (in ms)
var code = auth.calculateCode({time:1449690657000);

If you already have the correct time, you can just jump in and create codes.

// create an authenticator with no time sync
var auth = new SteamAuth({
	shared_secret: "U2hhcmVkU2VjcmV0",
	sync: false
});
// create code for specific time
var code = auth.calculateCode({time:1449690657000});

// quickly create a code for a known secret and time
var code = SteamAuth.calculateCode("KRUGS42JONGXSQ3PMVLTGRLH", 1449690657000);

Trade Confirmations

Trade confirmations require a login to the SteamAuth instance. In this case, you must additionally pass in the deviceid and identity_secret from the steam authenticator.

// create instance with options loaded from Android Steam mobile app
var auth = new SteamAuth({
	deviceid:"android:631471e5-00c8-4e9b-b0e9-45b69426cd09",
	shared_secret:"U2hhcmVkU2VjcmV0",
	identity_secret:"SWRlbnRpdHlTZWNyZXQ="
});

You can then login with username and password.

// login the user
auth.login({
	username:"mysteamuser",
	password:"mypassword"
}, function(err, session)
{
});

Login can fail because of network errors, but also invalid password, authcode or a captcha is required. If a captcha is required, err will contain captchaid and captchurl properties. The captcha must be solved and passed back in to a new login.

// login the user with captcha
auth.login({
	username:"mysteamuser",
	password:"mypassword",
	captchid:12345678,
	captchatext:"ABCDEFG"
}, function(err, session)
{
});

On login, you can get an array of the current trade confirmations.

auth.getTradeConfirmations(function(err, trades)
{
	if (err || !trades.length) return;	
	
});

Trades are returned as summary objects containing: id:string, key:string, details:string, traded:string, when:string. The id and key are used to accept or reject.

// to accept a trade
auth.acceptTradeConfirmation(trade.id, trade.key, function(err)
{
	// trade has been accepted
});
	
// to reject a trade
auth.rejectTradeConfirmation(trade.id, trade.key, function(err)
{
	// trade has been rejected
});

Logging

SteamAuth uses bunyan to log activity. You can get the logger instance at SteamAuth.Logger and set the level, e.g.

// change logging to be "debug"
var SteamAuth = require("steamauth");
SteamAuth.Logger.level("debug");

Levels are "error", "warn", "info" and "debug". The default level is "warn".

Debug level logging will include all web request made to the Steam servers.

Tests

npm test

steamauth's People

Contributors

cdmackie avatar winauth avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.