This commit is contained in:
rizky 2024-09-02 07:06:06 -07:00
parent 6f69c78543
commit 86551c1ba8
6 changed files with 4 additions and 133 deletions

View File

@ -84,7 +84,7 @@ export const useServerRouter = <T extends ReturnType<typeof newServerRouter>>(
try {
params = await req.json();
} catch (e) {}
result = await route.handler.default.bind(arg)(...params);
result = await route.handler.default.bind(arg)(params);
}
if (typeof result === "object" && result instanceof Response) {

View File

@ -21,106 +21,9 @@ export const newClientSession = <T>(arg?: {
const session: ClientSession<T> = {
status: "checking",
wsid: "",
current: null,
connected: false,
get connectURL() {
const url = new URL(location.href);
url.protocol = "wss:";
url.hash = "";
return url;
},
connect(auth?: SessionAuth) {
return new Promise<void>(async (done, reject) => {
const current = this.current;
if (current || auth) {
if (this.ws) {
await wsReady(this.ws);
}
const ws = new WebSocket(this.connectURL);
this.ws = ws;
ws.onclose = () => {
session.connected = false;
console.log(this.status);
if (this.status === "logout") {
store.clear();
this.current = null;
if (arg?.on?.afterLogout) {
arg.on.afterLogout(session);
}
logout_promise.resolve();
logout_promise.resolve = null;
logout_promise.reject = null;
} else {
setTimeout(() => {
console.warn("Reconnecting Session WS...");
this.connect();
}, 2000);
}
};
ws.onopen = () => {
if (session.current) {
ws.send(
JSON.stringify({
uid: session.current.uid,
sid: session.current.sid,
})
);
} else {
if (auth) {
ws.send(JSON.stringify(auth));
} else {
if (ws.readyState === ws.OPEN) {
ws.close();
}
}
}
};
ws.onmessage = async (m) => {
if (!session.connected) {
try {
const parsed = JSON.parse(m.data) as
| {
status: "ok";
wsid: string;
session: SessionData<T>;
}
| { status: "failed" };
if (parsed.status === "ok") {
session.wsid = parsed.wsid;
session.current = parsed.session;
if (login_promise.resolve) {
session.connected = true;
login_promise.resolve(session.current);
await store.save(session.current);
}
} else {
if (login_promise.reject) login_promise.reject();
}
login_promise.resolve = null;
login_promise.reject = null;
if (arg?.on?.afterLogin) {
arg.on.afterLogin(session);
}
done();
return;
} catch (e) {
reject(e);
}
if (ws.readyState === ws.OPEN) {
ws.close();
}
}
};
} else {
done();
}
});
},
async connect(auth) {},
async init() {
const current = await store.load();
if (!current) {
@ -190,12 +93,6 @@ Login is prevented, please logout first before re-login!`
logout_promise.resolve = resolve;
logout_promise.reject = reject;
if (this.status === "active" && this.ws) {
await wsReady(this.ws);
this.status = "logout";
this.ws.send(JSON.stringify({ action: "logout" }));
}
});
},
};

View File

@ -2,7 +2,6 @@ import { newServerRouter } from "lib/server/server-route";
export const sessionRouter = newServerRouter({
check: ["/_session/check", () => import("./session-check")],
login: ["/_session/login", () => import("./session-login")],
logout: ["/_session/logout", () => import("./session-logout")],
track: ["/_session/track", () => import("./session-track")],
});

View File

@ -1,18 +0,0 @@
import { EsensiSession } from "app/server/session";
import { sessionContext } from "lib/server/context";
import { ClientSessionStatus, SessionAuth } from "../type";
export default async function (this: any, arg: SessionAuth) {
const ctx = sessionContext<EsensiSession>(this);
// let result = "invalid" as ClientSessionStatus;
// const session = ctx.session.findFirst({ uid, sid });
// if (session) {
// if (!session.expired_at || session.expired_at > Date.now()) {
// result = "active";
// } else {
// result = "expired";
// }
// }
return { status: "ok" };
}

View File

@ -22,10 +22,6 @@ export const initSessionServer = <T>(
arg: {
encrypt?: boolean;
router?: ReturnType<typeof useServerRouter>;
login: (
session: SessionStore<T>,
arg: SessionAuth
) => Promise<SingleSession<T> | false>;
}
) => {
try {

View File

@ -53,9 +53,6 @@ export type ClientSessionStatus =
export type ClientSession<T> = {
status: ClientSessionStatus;
current: null | SessionData<T>;
wsid: string;
connectURL: URL;
ws?: WebSocket;
init(): Promise<{ status: ClientSessionStatus }>;
connect(auth?: SessionAuth): Promise<void>;
connected: boolean;
@ -81,4 +78,4 @@ export type SessionAuth = {
method: "user-pass";
username: string;
password: string;
};
} & Record<string, any>;