UNPKG

@shift-code/cli

Version:

Redeem Gearbox SHiFT codes automatically

104 lines 4.25 kB
"use strict"; 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