You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.3 KiB
TypeScript
58 lines
1.3 KiB
TypeScript
3 years ago
|
import { EventEmitter } from "events";
|
||
|
import ExtendedRequest from "./extended-request";
|
||
|
import { parseCookie } from "./util";
|
||
|
|
||
|
export class RequestCluster extends EventEmitter {
|
||
|
public requests: ExtendedRequest[] = [];
|
||
|
constructor(public id: string) {
|
||
|
super();
|
||
|
}
|
||
|
add(request: ExtendedRequest) {
|
||
|
this.requests.push(request);
|
||
|
this.emit("change");
|
||
|
}
|
||
|
|
||
|
hasCookies() {
|
||
|
for (const request of this.requests) {
|
||
|
if (request.hasCookie()) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
getCookiesContent({
|
||
|
minValueLength,
|
||
|
}: {
|
||
|
minValueLength: number;
|
||
|
}): [string, string][] {
|
||
|
const cookieValues = new Set<string>();
|
||
|
for (const request of this.requests) {
|
||
|
if (request.hasCookie()) {
|
||
|
cookieValues.add(request.getCookie());
|
||
|
}
|
||
|
}
|
||
|
return Array.from(cookieValues.values())
|
||
|
.map(parseCookie)
|
||
|
.map((o) => Object.entries(o))
|
||
|
.reduce((a, b) => a.concat(b), [])
|
||
|
.filter(([_, value]) => value.length >= minValueLength);
|
||
|
}
|
||
|
|
||
|
static sortCompare(a: RequestCluster, b: RequestCluster) {
|
||
|
if (a.hasCookies() == b.hasCookies()) {
|
||
|
if (a.id < b.id) {
|
||
|
return -1;
|
||
|
} else {
|
||
|
return 1;
|
||
|
}
|
||
|
} else {
|
||
|
if (a.hasCookies()) {
|
||
|
return -1;
|
||
|
} else {
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|