@shift-code/cli
Version:
Redeem Gearbox SHiFT codes automatically
104 lines • 4.25 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.redeemCommand = redeemCommand;
const api_1 = require("@shift-code/api");
const get_1 = require("@shift-code/get");
const chalk_1 = __importDefault(require("chalk"));
const promises_1 = require("fs/promises");
const cache_1 = require("../cache");
const names_1 = require("../names");
async function redeemCode(session, code, filter) {
try {
let game;
process.stdout.write(`[${chalk_1.default.yellow(code)}] Redeeming...`);
for await (const result of (0, api_1.redeem)(session, code, filter)) {
const platform = (0, names_1.isPlatformName)(result.service) ? names_1.PlatformName[result.service] : result.service;
if (!game) {
process.stdout.write("\r\x1b[K");
game = (0, names_1.isGameName)(result.title) ? names_1.GameName[result.title] : result.title;
const gameName = game ? ` ${game}` : '';
console.log(`[${chalk_1.default.yellow(code)}]${gameName}`);
}
const scope = platform ? `[${platform}] ` : '';
const message = `${scope}${result.status}`.trim();
switch (result.error) {
case api_1.ErrorCodes.Success:
console.info(` > ${message}`);
break;
case api_1.ErrorCodes.LoginRequired:
console.error(` > ${chalk_1.default.red('Failed to redeem due to invalid session. Please login again!')}`);
return [false, false];
case api_1.ErrorCodes.LaunchGame:
console.error(` > ${chalk_1.default.redBright('You need to launch a Shift-enabled game to continue redeeming.')}`);
return [false, false];
case api_1.ErrorCodes.SkippedDueToFilter:
console.error(` > ${message}`);
return [true, false];
default:
console.error(` > ${message}`);
break;
}
}
}
catch (err) {
const message = err instanceof Error ? err.message : 'Unknown error';
console.error(chalk_1.default.bgRed.white(message));
}
return [true, true];
}
async function* getCodesSource(args) {
if (args.codes && args.codes.length > 0) {
for (const code of args.codes) {
yield { code };
}
}
else if (args.file) {
const data = await (0, promises_1.readFile)(args.file, 'utf8');
for (const line of data.split('\n')) {
const code = line.trim();
if (code) {
yield { code };
}
}
}
else {
yield* (0, get_1.getShiftCodes)();
}
}
async function redeemCommand(args) {
const { activeAccountID } = await (0, cache_1.loadMetaCache)();
if (!activeAccountID) {
console.error('No active user, please login.');
console.info('$ shift-code login');
return;
}
const { session, codes } = await (0, cache_1.loadAccountCache)(activeAccountID);
if (!session) {
console.error('No active user, please login.');
console.info('$ shift-code login');
return;
}
const user = await (0, api_1.account)(session);
await (0, cache_1.saveAccount)(user.id, user);
console.info(`Starting code redemption for: ${chalk_1.default.bold(user.email)}`);
const codeCache = codes ?? [];
const source = getCodesSource(args);
for await (const { code } of source) {
if (codeCache.includes(code)) {
console.info(`[${chalk_1.default.yellow(code)}] Code found in cache, skipping.`);
continue;
}
const [cont, cache] = await redeemCode(session, code, { game: args.game, platform: args.platform });
if (!cont)
return;
if (cache) {
codeCache.push(code);
await (0, cache_1.appendCodeCache)(user.id, code);
}
}
console.log(chalk_1.default.green('Complete'));
}
//# sourceMappingURL=redeem.js.map
;