fix lib
This commit is contained in:
parent
6f69c78543
commit
86551c1ba8
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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" }));
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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")],
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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" };
|
||||
}
|
||||
|
|
@ -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 {
|
||||
|
|
@ -33,7 +29,7 @@ export const initSessionServer = <T>(
|
|||
const session_router = useServerRouter(sessionRouter);
|
||||
const server_handler: SessionServerHandler = {
|
||||
async cleanup() {},
|
||||
|
||||
|
||||
async handle(server_arg) {
|
||||
const { req, handle, url } = server_arg;
|
||||
|
||||
|
|
|
|||
|
|
@ -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>;
|
||||
|
|
|
|||
Loading…
Reference in New Issue