parent
f920aa26d0
commit
43bef9b23c
1 changed files with 31 additions and 12 deletions
|
|
@ -155,6 +155,7 @@ try {
|
||||||
// await (await card.$('text=Claim')).click(); // goes to URL of game, no need to wait
|
// await (await card.$('text=Claim')).click(); // goes to URL of game, no need to wait
|
||||||
external_info.push({ title, url });
|
external_info.push({ title, url });
|
||||||
}
|
}
|
||||||
|
// external_info = [ { title: 'Fallout 76 (XBOX)', url: 'https://gaming.amazon.com/fallout-76-xbox-fgwp/dp/amzn1.pg.item.9fe17d7b-b6c2-4f58-b494-cc4e79528d0b?ingress=amzn&ref_=SM_Fallout76XBOX_S01_FGWP_CRWN' } ];
|
||||||
for (const { title, url } of external_info) {
|
for (const { title, url } of external_info) {
|
||||||
console.log('Current free game:', title); // , url);
|
console.log('Current free game:', title); // , url);
|
||||||
await page.goto(url, { waitUntil: 'domcontentloaded' });
|
await page.goto(url, { waitUntil: 'domcontentloaded' });
|
||||||
|
|
@ -185,7 +186,8 @@ try {
|
||||||
const redeem = {
|
const redeem = {
|
||||||
// 'origin': 'https://www.origin.com/redeem', // TODO still needed or now only via account linking?
|
// 'origin': 'https://www.origin.com/redeem', // TODO still needed or now only via account linking?
|
||||||
'gog.com': 'https://www.gog.com/redeem',
|
'gog.com': 'https://www.gog.com/redeem',
|
||||||
'microsoft games': 'https://redeem.microsoft.com',
|
'microsoft store': 'https://account.microsoft.com/billing/redeem',
|
||||||
|
xbox: 'https://account.microsoft.com/billing/redeem',
|
||||||
'legacy games': 'https://www.legacygames.com/primedeal',
|
'legacy games': 'https://www.legacygames.com/primedeal',
|
||||||
};
|
};
|
||||||
if (store in redeem) { // did not work for linked origin: && !await page.locator('div:has-text("Successfully Claimed")').count()
|
if (store in redeem) { // did not work for linked origin: && !await page.locator('div:has-text("Successfully Claimed")').count()
|
||||||
|
|
@ -240,27 +242,44 @@ try {
|
||||||
console.log(' Unknown Response 2 - please report in https://github.com/vogler/free-games-claimer/issues/5');
|
console.log(' Unknown Response 2 - please report in https://github.com/vogler/free-games-claimer/issues/5');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (store == 'microsoft games') {
|
} else if (store == 'microsoft store' || store == 'xbox') {
|
||||||
console.error(` Redeem on ${store} not yet implemented!`);
|
console.error(` Redeem on ${store} is experimental!`);
|
||||||
|
// await page2.pause();
|
||||||
if (page2.url().startsWith('https://login.')) {
|
if (page2.url().startsWith('https://login.')) {
|
||||||
console.error(' Not logged in! Use the browser to login manually.');
|
console.error(' Not logged in! Use the browser to login manually. Waiting for 60s.');
|
||||||
|
await page2.waitForTimeout(60 * 1000);
|
||||||
redeem_action = 'redeem (login)';
|
redeem_action = 'redeem (login)';
|
||||||
} else {
|
} else {
|
||||||
const r = page2.waitForResponse(r => r.url().startsWith('https://purchase.mp.microsoft.com/'));
|
const iframe = page2.frameLocator('#redeem-iframe');
|
||||||
await page2.fill('[name=tokenString]', code);
|
const input = iframe.locator('[name=tokenString]');
|
||||||
|
await input.waitFor();
|
||||||
|
await input.fill(code);
|
||||||
|
const r = page2.waitForResponse(r => r.url().startsWith('https://cart.production.store-web.dynamics.com/v1.0/Redeem/PrepareRedeem'));
|
||||||
// console.log(await page2.locator('.redeem_code_error').innerText());
|
// console.log(await page2.locator('.redeem_code_error').innerText());
|
||||||
const rt = await (await r).text();
|
const rt = await (await r).text();
|
||||||
console.debug(` Response: ${rt}`);
|
|
||||||
// {"code":"NotFound","data":[],"details":[],"innererror":{"code":"TokenNotFound",...
|
// {"code":"NotFound","data":[],"details":[],"innererror":{"code":"TokenNotFound",...
|
||||||
const reason = JSON.parse(rt).code;
|
const j = JSON.parse(rt);
|
||||||
if (reason == 'NotFound') {
|
const reason = j?.events?.cart.length && j.events.cart[0]?.data?.reason;
|
||||||
|
if (reason == 'TokenNotFound') {
|
||||||
redeem_action = 'redeem (not found)';
|
redeem_action = 'redeem (not found)';
|
||||||
console.error(' Code was not found!');
|
console.error(' Code was not found!');
|
||||||
} else { // TODO find out other responses
|
} else if (j?.productInfos?.length && j.productInfos[0]?.redeemable) {
|
||||||
await page2.click('#nextButton');
|
await iframe.locator('button:has-text("Next")').click();
|
||||||
redeem_action = 'redeemed?';
|
await iframe.locator('button:has-text("Confirm")').click();
|
||||||
console.log(' Redeemed successfully? Please report your Response from above (if it is new) in https://github.com/vogler/free-games-claimer/issues/5');
|
const r = page2.waitForResponse(r => r.url().startsWith('https://cart.production.store-web.dynamics.com/v1.0/Redeem/RedeemToken'));
|
||||||
|
const j = JSON.parse(await (await r).text());
|
||||||
|
if (j?.events?.cart.length && j.events.cart[0]?.data?.reason == 'UserAlreadyOwnsContent') {
|
||||||
|
redeem_action = 'already redeemed';
|
||||||
|
console.error(' error: UserAlreadyOwnsContent');
|
||||||
|
} else if (true) { // TODO what's returned on success?
|
||||||
|
redeem_action = 'redeemed';
|
||||||
db.data[user][title].status = 'claimed and redeemed?';
|
db.data[user][title].status = 'claimed and redeemed?';
|
||||||
|
console.log(' Redeemed successfully? Please report if not in https://github.com/vogler/free-games-claimer/issues/5');
|
||||||
|
}
|
||||||
|
} else { // TODO find out other responses
|
||||||
|
redeem_action = 'unknown';
|
||||||
|
console.debug(` Response: ${rt}`);
|
||||||
|
console.log(' Redeemed successfully? Please report your Response from above (if it is new) in https://github.com/vogler/free-games-claimer/issues/5');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (store == 'legacy games') {
|
} else if (store == 'legacy games') {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue