116 lines
3.4 KiB
JavaScript
116 lines
3.4 KiB
JavaScript
import puppeteer from "puppeteer-core"
|
|
import * as utils from "./utils.js"
|
|
import { processTrip } from "./processTrip.js"
|
|
import fs from "fs"
|
|
import { loginToUber } from "./navigateSite.js"
|
|
|
|
async function main() {
|
|
let options = JSON.parse(fs.readFileSync("./options.json", "utf8"))
|
|
const browser = await puppeteer.launch({
|
|
headless: false,
|
|
ignoreHTTPSErrors: true,
|
|
executablePath: "/usr/bin/chromium",
|
|
})
|
|
try {
|
|
const page = await browser.newPage()
|
|
|
|
await page.setRequestInterception(true)
|
|
let usefulRequestHeaders = {}
|
|
let testForHeaders = () => !!usefulRequestHeaders["content-type"]
|
|
page.on("request", (request) => {
|
|
let url = request.url()
|
|
if (url.includes("getWebActivityFeed")) {
|
|
usefulRequestHeaders = { ...request.headers() }
|
|
console.log("hello!", usefulRequestHeaders)
|
|
}
|
|
if (request.isInterceptResolutionHandled()) {
|
|
return
|
|
}
|
|
|
|
if (
|
|
url.endsWith(".png") ||
|
|
url.endsWith(".jpg") ||
|
|
url.endsWith(".ico")
|
|
) {
|
|
console.log("aborted: ", url)
|
|
request.abort()
|
|
} else {
|
|
console.log("requested", url)
|
|
request.continue()
|
|
}
|
|
})
|
|
|
|
page.on("response", async (response) => {
|
|
const request = response.request()
|
|
if (request.url().includes("getWebActivityFeed")) {
|
|
console.log(response)
|
|
}
|
|
})
|
|
|
|
await loginToUber(page, options, testForHeaders)
|
|
|
|
let uberJSON = []
|
|
|
|
let paginationOption = {}
|
|
while (true) {
|
|
let res = await fetch(
|
|
"https://drivers.uber.com/earnings/api/getWebActivityFeed?localeCode=en",
|
|
{
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
startDateIso: options.startDateIso ?? "2023-04-01",
|
|
endDateIso: options.endDateIso ?? "2023-04-31",
|
|
paginationOption,
|
|
}),
|
|
headers: usefulRequestHeaders,
|
|
},
|
|
)
|
|
let body = await res.json()
|
|
let trips = body?.data?.activities?.map(async (activity) => {
|
|
if (activity.formattedTotal == "$0.00") {
|
|
return ""
|
|
}
|
|
if (activity.type == "QUEST") {
|
|
// These are all duplicates of MISC items.
|
|
return ""
|
|
}
|
|
if (activity.type == "MISC" || activity.activityTitle == "Delivery") {
|
|
return {
|
|
uuid: activity.uuid,
|
|
recognizedAt: new Date(
|
|
(activity.recognizedAt ?? 1) * 1000,
|
|
).toISOString(),
|
|
pickupAddress: activity.tripMetaData?.pickupAddress,
|
|
dropOffAddress: activity.tripMetaData?.dropOffAddress,
|
|
total: Number(activity.formattedTotal),
|
|
type: activity.activityTitle,
|
|
}
|
|
}
|
|
if (activity.type == "TRIP" || activity.type == "CT") {
|
|
// Trip or Share
|
|
return await processTrip(activity, usefulRequestHeaders)
|
|
}
|
|
})
|
|
if (trips) {
|
|
let tripResults = await utils.settlePromises(trips)
|
|
uberJSON = [...uberJSON, ...tripResults]
|
|
} else {
|
|
let failedRequest = { failedRequest: res, body }
|
|
console.error(failedRequest)
|
|
uberJSON = [...uberJSON, failedRequest]
|
|
}
|
|
if (!body.data.pagination.hasMoreData) {
|
|
break
|
|
}
|
|
paginationOption.cursor = body.data.pagination.nextCursor
|
|
}
|
|
fs.writeFileSync("./uberResults.json", JSON.stringify(uberJSON))
|
|
} catch (err) {
|
|
console.error("Critical failure", err)
|
|
} finally {
|
|
await browser.close()
|
|
}
|
|
}
|
|
|
|
main()
|