Skip to content

Commit

Permalink
V1.2.1
Browse files Browse the repository at this point in the history
  • Loading branch information
Revadike committed Apr 18, 2020
1 parent 9775eea commit dc34a07
Show file tree
Hide file tree
Showing 5 changed files with 227 additions and 31 deletions.
173 changes: 173 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
{
"env": {
"browser": true,
"node": true,
"es6": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 2018
},
"rules": {
"accessor-pairs": "error",
"array-bracket-newline": ["error", "consistent"],
"array-bracket-spacing": ["error", "never", { "arraysInArrays": true }],
"array-callback-return": "error",
"array-element-newline": ["error", "consistent"],
"arrow-body-style": "error",
"arrow-parens": ["error", "as-needed"],
"arrow-spacing": "error",
"block-scoped-var": "error",
"block-spacing": "error",
"brace-style": ["error", "1tbs", { "allowSingleLine": true }],
"camelcase": "error",
"class-methods-use-this": "error",
"comma-dangle": ["error", "only-multiline"],
"comma-spacing": "error",
"comma-style": "error",
"complexity": "error",
"computed-property-spacing": "error",
"consistent-return": "error",
"consistent-this": "error",
"curly": "error",
"default-param-last": "error",
"dot-location": ["error", "property"],
"dot-notation": "error",
"eol-last": "error",
"eqeqeq": ["error", "smart"],
"func-call-spacing": "error",
"func-name-matching": "error",
"func-names": "error",
"func-style": ["error", "declaration", { "allowArrowFunctions": true }],
"function-call-argument-newline": ["error", "consistent"],
"function-paren-newline": ["error", "consistent"],
"generator-star-spacing": "error",
"grouped-accessor-pairs": ["error", "getBeforeSet"],
"implicit-arrow-linebreak": "error",
"indent": ["error", 4, { "SwitchCase": 1 }],
"init-declarations": "error",
"key-spacing": ["error", { "mode": "minimum", "align": "value" }],
"keyword-spacing": "error",
"linebreak-style": "error",
"lines-between-class-members": ["error", "always"],
"max-classes-per-file": "error",
"max-depth": "error",
"max-len": ["error", 130],
"max-nested-callbacks": ["error", 4],
"max-statements-per-line": ["error", { "max": 2 }],
"new-parens": "error",
"newline-per-chained-call": "error",
"no-alert": "error",
"no-array-constructor": "error",
"no-caller": "error",
"no-case-declarations": "error",
"no-confusing-arrow": "error",
"no-constructor-return": "error",
"no-dupe-else-if": "error",
"no-duplicate-imports": "error",
"no-else-return": "error",
"no-empty-function": "error",
"no-eq-null": "error",
"no-eval": "error",
"no-extend-native": "error",
"no-floating-decimal": "error",
"no-implicit-coercion": "error",
"no-implied-eval": "error",
"no-invalid-this": "error",
"no-iterator": "error",
"no-labels": "error",
"no-lone-blocks": "error",
"no-lonely-if": "error",
"no-loop-func": "error",
"no-mixed-operators": "error",
"no-multi-assign": "error",
"no-multi-spaces": "error",
"no-multi-str": "error",
"no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 0, "maxBOF": 0 }],
"no-negated-condition": "error",
"no-nested-ternary": "error",
"no-new": "error",
"no-new-func": "error",
"no-new-object": "error",
"no-new-wrappers": "error",
"no-octal": "error",
"no-octal-escape": "error",
"no-param-reassign": "error",
"no-proto": "error",
"no-redeclare": "error",
"no-return-assign": "error",
"no-return-await": "error",
"no-script-url": "error",
"no-self-compare": "error",
"no-sequences": "error",
"no-setter-return": "error",
"no-tabs": "error",
"no-template-curly-in-string": "error",
"no-throw-literal": "error",
"no-trailing-spaces": "error",
"no-undef-init": "error",
"no-undefined": "error",
"no-unmodified-loop-condition": "error",
"no-unneeded-ternary": ["error", { "defaultAssignment": false }],
"no-unused-expressions": "error",
"no-use-before-define": "error",
"no-useless-call": "error",
"no-useless-computed-key": "error",
"no-useless-concat": "error",
"no-useless-constructor": "error",
"no-useless-rename": "error",
"no-useless-return": "error",
"no-var": "error",
"no-void": "error",
"no-with": "error",
"no-whitespace-before-property": "error",
"nonblock-statement-body-position": "error",
"object-curly-newline": "error",
"object-curly-spacing": ["error", "always"],
"object-property-newline": ["error", { "allowAllPropertiesOnSameLine": true }],
"object-shorthand": "error",
"one-var-declaration-per-line": "error",
"operator-assignment": "error",
"operator-linebreak": ["error", "before"],
"padded-blocks": ["error", { "blocks": "never", "classes": "always", "switches": "never" }, { "allowSingleLineBlocks": true }],
"padding-line-between-statements": [
"error",
{ "blankLine": "always", "prev": "function", "next": "function" }
],
"prefer-arrow-callback": "error",
"prefer-destructuring": ["error", { "array": false, "object": true }],
"prefer-exponentiation-operator": "error",
"prefer-numeric-literals": "error",
"prefer-object-spread": "error",
"prefer-promise-reject-errors": "error",
"prefer-regex-literals": "error",
"prefer-rest-params": "error",
"prefer-spread": "error",
"prefer-template": "error",
"quote-props": "error",
"quotes": ["error", "double", { "avoidEscape": true }],
"radix": ["error", "as-needed"],
"require-await": "error",
"rest-spread-spacing": "error",
"semi": ["error", "always"],
"semi-spacing": "error",
"semi-style": "error",
"sort-imports": "error",
"space-before-blocks": "error",
"space-before-function-paren": ["error", "never"],
"space-in-parens": "error",
"space-infix-ops": "error",
"space-unary-ops": "error",
"spaced-comment": "error",
"strict": ["error", "global"],
"switch-colon-spacing": "error",
"symbol-description": "error",
"template-curly-spacing": "error",
"template-tag-spacing": "error",
"unicode-bom": "error",
"vars-on-top": "error",
"wrap-iife": ["error", "inside"],
"yield-star-spacing": "error",
"yoda": "error"
}
}
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Claim [available free game promotions](https://www.epicgames.com/store/free-game
1. Download/clone repo
2. (Optional) Edit `config.json` to include your EpicGames credentials
3. Run `npm install`
4. Run `node gimme_free_epic_shit` or `node gimme_free_epic_shit USERNAME PASSWORD`*
4. Run `node gimme_free_epic_shit` or `node gimme_free_epic_shit USERNAME PASSWORD 0/1`*

*Only this step is required after the initial use.

Expand All @@ -24,6 +24,10 @@ Also, this is a good alternative, in case you don't like using Epic's client or
To which I will say, why not? Most of these games are actually outstanding games! Even if you don't like Epic and their shenanigans, you will be pleased to know that Epic actually funds all the free copies that are given away: ["But we actually found it was more economical to pay developers [a lump sum] to distribute their game free for two weeks..."](https://arstechnica.com/gaming/2019/03/epic-ceo-youre-going-to-see-lower-prices-on-epic-games-store/)

## Changelog
### V1.2.1
* Makes `rememberLastSession` optional in config or launch parameter (Closes #8)
* Added ESLint linter

### V1.2.0
* Now allows web login, if normal login fails, e.g. due to captcha (Closes #3)

Expand Down
3 changes: 2 additions & 1 deletion config.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"email": "YOUR_EMAIL_HERE",
"password": "YOUR_PASSWORD_HERE"
"password": "YOUR_PASSWORD_HERE",
"rememberLastSession": true
}
52 changes: 28 additions & 24 deletions gimme_free_epic_shit.js
Original file line number Diff line number Diff line change
@@ -1,34 +1,39 @@
const { Launcher: EpicGames } = require(`epicgames-client`);
const { email, password } = require(`${__dirname}/config.json`);
"use strict";
const { "Launcher": EpicGames } = require("epicgames-client");
const { email, password, rememberLastSession } = require(`${__dirname}/config.json`);
const credentials = {
email: process.argv[2] || email,
password: process.argv[3] || password,
rememberLastSession: true
"email": process.argv[2] || email,
"password": process.argv[3] || password
};
const client = new EpicGames(credentials);

(async () => {
if (typeof process.argv[4] === "undefined") {
credentials.rememberLastSession = rememberLastSession;
} else {
credentials.rememberLastSession = Boolean(Number(process.argv[4]));
}

(async() => {
const client = new EpicGames(credentials);

if (!await client.init()) {
throw new Error('Error while initialize process.');
throw new Error("Error while initialize process.");
}

if (!await client.login().catch(() => {})) {
if (!await client.login().catch(() => false)) {
console.log(`Failed to login as ${client.config.email}, please attempt manually.`);

const ClientLoginAdapter = require(`epicgames-client-login-adapter`);
credentials.login = credentials.email;

const ClientLoginAdapter = require("epicgames-client-login-adapter");
let auth = await ClientLoginAdapter.init(credentials);
let exchangeCode = await auth.getExchangeCode();
await auth.close();

if (!await client.login(null, exchangeCode)) {
throw new Error(`Error while logging in.`);
throw new Error("Error while logging in.");
}
}

console.log(`Logged in as ${client.account.name} (${client.account.id})`);
let getAllOffers = async (namespace, pagesize=100) => {
let getAllOffers = async(namespace, pagesize = 100) => {
let i = 0;
let results = [];
while ((i * pagesize) - results.length === 0) {
Expand All @@ -38,11 +43,11 @@ const client = new EpicGames(credentials);
return results;
};

let all = await getAllOffers(`epic`);
let all = await getAllOffers("epic");
let freegames = all
.filter(game => game.categories.find(cat => cat.path === `freegames`) &&
game.customAttributes[`com.epicgames.app.offerNs`].value)
.map(game => game.customAttributes[`com.epicgames.app.offerNs`].value);
.filter(game => game.categories.find(cat => cat.path === "freegames")
&& game.customAttributes["com.epicgames.app.offerNs"].value)
.map(game => game.customAttributes["com.epicgames.app.offerNs"].value);

for (let namespace of freegames) {
let offers = await getAllOffers(namespace);
Expand All @@ -60,10 +65,9 @@ const client = new EpicGames(credentials);
}

await client.logout();
console.log(`Logged out of Epic Games`);
console.log("Logged out of Epic Games");
process.exit(0);

})().catch(err => {
console.error(err);
process.exit(1)
});
process.exit(1);
});
24 changes: 19 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
{
"name": "epicgames-freebies-claimer",
"version": "1.2.1",
"description": "Claim free game promotions from the Epic Game Store",
"version": "1.2.0",
"author": "Revadike",
"homepage": "https://revadike.com",
"url": "https://github.com/revadike/epicgames-freebies-claimer",
"license": "MIT",
"author": "Revadike <https://revadike.ga>",
"main": "gimme_free_epic_shit.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node gimme_free_epic_shit.js"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/revadike/epicgames-freebies-claimer.git"
},
"bugs": {
"url": "https://github.com/revadike/epicgames-freebies-claimer/issues"
},
"homepage": "https://github.com/revadike/epicgames-freebies-claimer",
"url": "https://github.com/revadike/epicgames-freebies-claimer",
"devDependencies": {
"eslint": "^6.8.0"
},
"dependencies": {
"epicgames-client": "^2.0.23",
"epicgames-client-login-adapter": "^0.1.0"
Expand Down

0 comments on commit dc34a07

Please sign in to comment.