Started method for pulling potokens on android

This commit is contained in:
WardPearce
2024-09-19 19:30:09 +12:00
parent 5eecd46d3e
commit a3aee97718
7 changed files with 944 additions and 470 deletions
@@ -11,6 +11,7 @@ apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
dependencies {
implementation project(':capacitor-app')
implementation project(':capacitor-browser')
implementation project(':capgo-inappbrowser')
}
@@ -7,3 +7,6 @@ project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/
include ':capacitor-browser'
project(':capacitor-browser').projectDir = new File('../node_modules/@capacitor/browser/android')
include ':capgo-inappbrowser'
project(':capgo-inappbrowser').projectDir = new File('../node_modules/@capgo/inappbrowser/android')
+1 -1
View File
@@ -8,7 +8,7 @@ const config: CapacitorConfig = {
plugins: {
CapacitorHttp: {
enabled: true
}
},
},
};
+855 -467
View File
File diff suppressed because it is too large Load Diff
+4 -1
View File
@@ -31,6 +31,7 @@
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.44.0",
"i": "^0.3.7",
"jsdom": "^25.0.0",
"npm": "^10.8.3",
"prettier": "^3.3.3",
"prettier-plugin-svelte": "^3.2.6",
@@ -49,6 +50,7 @@
"@capacitor/browser": "^6.0.2",
"@capacitor/cli": "6.1.2",
"@capacitor/core": "^6.1.2",
"@capgo/inappbrowser": "^6.6.8",
"@ffmpeg/ffmpeg": "^0.12.10",
"beercss": "^3.7.7",
"fuse.js": "^7.0.0",
@@ -64,6 +66,7 @@
"svelte-i18n": "^4.0.0",
"svelte-infinite-loading": "^1.4.0",
"svelte-persisted-store": "^0.11.0",
"terser": "^5.33.0",
"vidstack": "^1.12.9"
}
}
}
@@ -0,0 +1,79 @@
import { InAppBrowser } from '@capgo/inappbrowser';
import { minify } from 'terser';
export interface PoTokens {
visitor_data: string;
po_token: string;
}
export async function getPoToken(): Promise<PoTokens> {
return new Promise((resolve, reject) => {
const messageListener = async (data: any) => {
await InAppBrowser.close();
resolve(data);
InAppBrowser.removeAllListeners(); // Clean up the listener
};
const closeListener = async () => {
await InAppBrowser.removeAllListeners();
};
const urlChangeListener = async () => {
await InAppBrowser.clearAllCookies();
await InAppBrowser.clearCache();
// Code must be minified to ensure runs correctly.
await InAppBrowser.executeScript({
code: (await minify(`const originalOpen = XMLHttpRequest.prototype.open;
const originalSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.open = function (method, url) {
this._url = url;
originalOpen.apply(this, arguments);
};
XMLHttpRequest.prototype.send = function (body) {
const xhr = this;
if (this._url.includes("/youtubei/v1/player")) {
this.addEventListener("load", function () {
try {
const postJson = JSON.parse(body);
window.mobileApp.postMessage({visitor_data: postJson.context.client.visitorData, po_token: postJson.serviceIntegrityDimensions.poToken});
} catch (error) {
console.error("Error parsing request body:", error);
}
});
}
originalSend.apply(this, arguments);
};
function attemptClickPlayButton() {
const interval = setInterval(() => {
const playButtons = document.getElementsByClassName("ytp-play-button");
if (playButtons.length > 0) {
playButtons[0].click();
clearInterval(interval);
}
}, 100);
}
attemptClickPlayButton();
`)).code as string
});
};
InAppBrowser.addListener('messageFromWebview', messageListener);
InAppBrowser.addListener('closeEvent', closeListener);
InAppBrowser.addListener('urlChangeEvent', urlChangeListener);
setTimeout(() => {
reject(new Error('Timeout waiting for message'));
InAppBrowser.removeAllListeners();
}, 10000);
InAppBrowser.openWebView({
url: "https://www.youtube.com/embed/jNQXAC9IVRw",
isPresentAfterPageLoad: true,
});
});
}
+1 -1
View File
@@ -36,5 +36,5 @@ export default defineConfig({
],
optimizeDeps: {
exclude: ['@ffmpeg/ffmpeg', '@ffmpeg/util']
},
}
});