cobalt/packages/api-client/src/turnstile-api.ts
2024-09-14 19:14:47 +00:00

45 lines
1.4 KiB
TypeScript

import CobaltSessionHandler from "./internal/session";
import CobaltAPI from "./internal/base-api";
import { CobaltRequest } from "./types/request";
import { CobaltAuthError } from "./types/errors";
import type { TurnstileObject } from "turnstile-types";
export class TurnstileCobaltAPI extends CobaltAPI {
#session: CobaltSessionHandler;
#instanceHasTurnstile = true;
constructor(turnstile: TurnstileObject) {
super();
this.#session = new CobaltSessionHandler(this, turnstile);
}
needsSession() {
return this.#instanceHasTurnstile && !this.#session.hasSession();
}
setBaseURL(baseURL: string): string {
if (this.#session && super.getBaseURL() !== super.setBaseURL(baseURL)) {
this.#session.reset();
}
return super.getBaseURL()!;
}
async request(data: CobaltRequest) {
const sessionOrError = await this.#session.getSession();
const headers: Record<string, string> = {};
if ("error" in sessionOrError) {
if (sessionOrError.error.code !== CobaltAuthError.NotConfigured) {
return sessionOrError;
} else {
this.#instanceHasTurnstile = false;
}
} else {
headers['Authorization'] = `Bearer ${sessionOrError.token}`;
}
return super.request(data, headers);
}
}