37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
import { Urbit } from "@urbit/http-api";
|
|
|
|
let patched = false;
|
|
|
|
export function ensureUrbitConnectPatched() {
|
|
if (patched) return;
|
|
patched = true;
|
|
Urbit.prototype.connect = async function patchedConnect() {
|
|
const resp = await fetch(`${this.url}/~/login`, {
|
|
method: "POST",
|
|
body: `password=${this.code}`,
|
|
credentials: "include",
|
|
});
|
|
|
|
if (resp.status >= 400) {
|
|
throw new Error(`Login failed with status ${resp.status}`);
|
|
}
|
|
|
|
const cookie = resp.headers.get("set-cookie");
|
|
if (cookie) {
|
|
const match = /urbauth-~([\w-]+)/.exec(cookie);
|
|
if (match) {
|
|
if (!(this as unknown as { ship?: string | null }).ship) {
|
|
(this as unknown as { ship?: string | null }).ship = match[1];
|
|
}
|
|
(this as unknown as { nodeId?: string }).nodeId = match[1];
|
|
}
|
|
(this as unknown as { cookie?: string }).cookie = cookie;
|
|
}
|
|
|
|
await (this as typeof Urbit.prototype).getShipName();
|
|
await (this as typeof Urbit.prototype).getOurName();
|
|
};
|
|
}
|
|
|
|
export { Urbit };
|