-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathgenerate_once.ts
90 lines (83 loc) · 3 KB
/
generate_once.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import { SessionManager, YoutubeSessionDataCaches } from "./session_manager";
import { Command } from "@commander-js/extra-typings";
import * as fs from "fs";
import * as path from "path";
const CACHE_PATH = path.resolve(__dirname, "..", "cache.json");
const program = new Command()
.option("-v, --visitor-data <visitordata>")
.option("-d, --data-sync-id <data-sync-id>")
.option("-p, --proxy <proxy-all>")
.option("--verbose");
program.parse();
const options = program.opts();
(async () => {
const visitorData = options.visitorData;
const dataSyncId = options.dataSyncId;
const proxy = options.proxy || "";
const verbose = options.verbose || false;
let visitIdentifier: string;
const cache: YoutubeSessionDataCaches = {};
if (fs.existsSync(CACHE_PATH)) {
try {
const parsedCaches = JSON.parse(
fs.readFileSync(CACHE_PATH, "utf8"),
);
for (const visitIdentifier in parsedCaches) {
const parsedCache = parsedCaches[visitIdentifier];
if (parsedCache) {
cache[visitIdentifier] = {
poToken: parsedCache.poToken,
generatedAt: new Date(parsedCache.generatedAt),
visitIdentifier,
};
}
}
} catch (e) {
console.warn(`Error parsing cache. e = ${e}`);
}
}
const sessionManager = new SessionManager(verbose, cache);
function log(msg: string) {
if (verbose) console.log(msg);
}
if (dataSyncId) {
log(`Received request for data sync ID: '${dataSyncId}'`);
visitIdentifier = dataSyncId;
} else if (visitorData) {
log(`Received request for visitor data: '${visitorData}'`);
visitIdentifier = visitorData;
} else {
log(`Received request for visitor data, grabbing from Innertube`);
const generatedVisitorData = await sessionManager.generateVisitorData();
if (!generatedVisitorData) process.exit(1);
log(`Generated visitor data: ${generatedVisitorData}`);
visitIdentifier = generatedVisitorData;
}
try {
const sessionData = await sessionManager.generatePoToken(
visitIdentifier,
proxy,
);
try {
fs.writeFileSync(
CACHE_PATH,
JSON.stringify(
sessionManager.getYoutubeSessionDataCaches(true),
),
"utf8",
);
} catch (e) {
console.warn(
`Error writing cache. err.name = ${e.name}. err.message = ${e.message}. err.stack = ${e.stack}`,
);
} finally {
console.log(JSON.stringify(sessionData));
}
} catch (e) {
console.error(
`Failed while generating POT. err.name = ${e.name}. err.message = ${e.message}. err.stack = ${e.stack}`,
);
console.log(JSON.stringify({}));
process.exit(1);
}
})();