fix lib
This commit is contained in:
parent
6f69c78543
commit
86551c1ba8
|
|
@ -84,7 +84,7 @@ export const useServerRouter = <T extends ReturnType<typeof newServerRouter>>(
|
||||||
try {
|
try {
|
||||||
params = await req.json();
|
params = await req.json();
|
||||||
} catch (e) {}
|
} 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) {
|
if (typeof result === "object" && result instanceof Response) {
|
||||||
|
|
|
||||||
|
|
@ -21,106 +21,9 @@ export const newClientSession = <T>(arg?: {
|
||||||
|
|
||||||
const session: ClientSession<T> = {
|
const session: ClientSession<T> = {
|
||||||
status: "checking",
|
status: "checking",
|
||||||
wsid: "",
|
|
||||||
current: null,
|
current: null,
|
||||||
connected: false,
|
connected: false,
|
||||||
get connectURL() {
|
async connect(auth) {},
|
||||||
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 init() {
|
async init() {
|
||||||
const current = await store.load();
|
const current = await store.load();
|
||||||
if (!current) {
|
if (!current) {
|
||||||
|
|
@ -190,12 +93,6 @@ Login is prevented, please logout first before re-login!`
|
||||||
|
|
||||||
logout_promise.resolve = resolve;
|
logout_promise.resolve = resolve;
|
||||||
logout_promise.reject = reject;
|
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({
|
export const sessionRouter = newServerRouter({
|
||||||
check: ["/_session/check", () => import("./session-check")],
|
check: ["/_session/check", () => import("./session-check")],
|
||||||
login: ["/_session/login", () => import("./session-login")],
|
|
||||||
logout: ["/_session/logout", () => import("./session-logout")],
|
logout: ["/_session/logout", () => import("./session-logout")],
|
||||||
track: ["/_session/track", () => import("./session-track")],
|
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: {
|
arg: {
|
||||||
encrypt?: boolean;
|
encrypt?: boolean;
|
||||||
router?: ReturnType<typeof useServerRouter>;
|
router?: ReturnType<typeof useServerRouter>;
|
||||||
login: (
|
|
||||||
session: SessionStore<T>,
|
|
||||||
arg: SessionAuth
|
|
||||||
) => Promise<SingleSession<T> | false>;
|
|
||||||
}
|
}
|
||||||
) => {
|
) => {
|
||||||
try {
|
try {
|
||||||
|
|
@ -33,7 +29,7 @@ export const initSessionServer = <T>(
|
||||||
const session_router = useServerRouter(sessionRouter);
|
const session_router = useServerRouter(sessionRouter);
|
||||||
const server_handler: SessionServerHandler = {
|
const server_handler: SessionServerHandler = {
|
||||||
async cleanup() {},
|
async cleanup() {},
|
||||||
|
|
||||||
async handle(server_arg) {
|
async handle(server_arg) {
|
||||||
const { req, handle, url } = server_arg;
|
const { req, handle, url } = server_arg;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,9 +53,6 @@ export type ClientSessionStatus =
|
||||||
export type ClientSession<T> = {
|
export type ClientSession<T> = {
|
||||||
status: ClientSessionStatus;
|
status: ClientSessionStatus;
|
||||||
current: null | SessionData<T>;
|
current: null | SessionData<T>;
|
||||||
wsid: string;
|
|
||||||
connectURL: URL;
|
|
||||||
ws?: WebSocket;
|
|
||||||
init(): Promise<{ status: ClientSessionStatus }>;
|
init(): Promise<{ status: ClientSessionStatus }>;
|
||||||
connect(auth?: SessionAuth): Promise<void>;
|
connect(auth?: SessionAuth): Promise<void>;
|
||||||
connected: boolean;
|
connected: boolean;
|
||||||
|
|
@ -81,4 +78,4 @@ export type SessionAuth = {
|
||||||
method: "user-pass";
|
method: "user-pass";
|
||||||
username: string;
|
username: string;
|
||||||
password: string;
|
password: string;
|
||||||
};
|
} & Record<string, any>;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue