"use strict;" async function getAuthToken() { let storageData, dec, tok; storageData = window.sessionStorage.getItem("token"); while (!tok) { storageData = window.sessionStorage.getItem("token"); dec = JSON.parse(storageData); if (!!dec && "accessToken" in dec) { let tokInspect = dec.accessToken; if (tokInspect && tokInspect.startsWith("eyJ")) { tok = tokInspect; } } else { console.log("No accessToken available. Sleeping...") await new Promise(res => setTimeout(res, 5000)); } } return tok; } function correlationId() { return crypto.randomUUID() + "_" + crypto.randomUUID() } async function getKundenkontoV2(){ let tok = await getAuthToken(); let req = await fetch("https://www.bahn.de/web/api/kundenkonto/v2", { headers: [ ["Accept", "application/json"], ["authorization", "Bearer " + tok], //["X-Correlation-ID", correlationId()] ] }); if(req.ok){ const data = await req.json(); return { "addr__appellation": data.anrede, "addr__firstName": data.vorname, "addr__surName": data.nachname, "bday": data.geburtsdatum, "addr__email": data.email, "addr__placename": data.hauptadresse.ort, "addr__postcode": data.hauptadresse.plz, "addr__street": data.hauptadresse.strasse, "addr__country": data.hauptadresse.land } } return {} } async function getBahncardInfo() { let tok = await getAuthToken(); let req = await fetch("https://www.bahn.de/web/api/kundenkonto/bahncard", { headers: [ ["Accept", "application/json"], ["authorization", "Bearer " + tok], //["X-Correlation-ID", correlationId()] ] }); if (req.ok) { const data = await req.json(); console.log(data); const orders = data.bahnCardBestellungen.filter((order) => { return order.bahncardTyp === "BC100" && (Date.parse(order.gueltigAb) < Date.now()) }); console.log("BahnCard candidates:", orders); if (orders[0] !== undefined) { // Orders are returned in reverse chronological order. // TODO Ask which one if there are multiple. // (Maybe inject a element here, those have and dropdowns.) return orders[0].bcNummer || false; } } else { console.log("Request failed:", req); return false; } } browser.storage.sync.get(["acquireAll","acquireBahncard"]).then(v => { if (v.acquireAll!=false){ Promise.all([getKundenkontoV2(), getBahncardInfo()]).then(data => { const saveData = {...data[0], "bcnum": data[1]}; console.log("Saving", saveData); browser.storage.sync.set(saveData).then(()=>{ alert("Saved all available data to settings.\nPlease enter your bank details on the bottom of the settings page."); window.close(); }) }) } if (v.acquireBahncard != false) { // may also be undefined, so no identity check here getBahncardInfo().then(v => { if (!!v && v.length == 16) { const saveData = { "bcnum": v, "acquireBahncard": false } console.log("Saving", saveData); browser.storage.sync.set(saveData).then(() => { alert("Saved your BahnCard number to settings.\nReload the settings page to continue."); window.close(); }); } }, f => console.log("Could not acquire BahnCard number.", f)) } })