fix
This commit is contained in:
parent
571ad3dcd1
commit
fef9da2ab0
|
|
@ -1,21 +1,6 @@
|
||||||
import { _post } from "lib/utils/post";
|
import { _post } from "lib/utils/post";
|
||||||
import { addRoute, createRouter, findRoute } from "rou3";
|
import { addRoute, createRouter, findRoute } from "rou3";
|
||||||
import { ServerSession } from "./session/server-session";
|
import { ServerContext, SessionContext } from "./session/type";
|
||||||
import { SessionData } from "./session/store/session-store";
|
|
||||||
|
|
||||||
export type ServerContext = {
|
|
||||||
req: Request;
|
|
||||||
handle: (req: Request) => Promise<Response>;
|
|
||||||
mode: "dev" | "prod";
|
|
||||||
url: {
|
|
||||||
raw: URL;
|
|
||||||
pathname: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export interface SessionContext<T> extends ServerContext {
|
|
||||||
session: ServerSession<T>;
|
|
||||||
}
|
|
||||||
|
|
||||||
type RouteFn = (...arg: any[]) => Promise<any>;
|
type RouteFn = (...arg: any[]) => Promise<any>;
|
||||||
|
|
||||||
|
|
@ -38,18 +23,22 @@ export const newServerRouter = <
|
||||||
};
|
};
|
||||||
|
|
||||||
export const newClientRouter = <T extends ReturnType<typeof newServerRouter>>(
|
export const newClientRouter = <T extends ReturnType<typeof newServerRouter>>(
|
||||||
router: T
|
...routers: T[]
|
||||||
) => {
|
) => {
|
||||||
return new Proxy(
|
return new Proxy(
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
get(target, api_name, receiver) {
|
get(target, api_name, receiver) {
|
||||||
return (...args: any[]) => {
|
return (...args: any[]) => {
|
||||||
const [url, _, opt] = router[api_name as any];
|
for (const router of routers) {
|
||||||
if (opt && opt.response_as)
|
if (router[api_name as any]) {
|
||||||
return _post(url, args, { response_as: opt.response_as });
|
const [url, _, opt] = router[api_name as any];
|
||||||
|
if (opt && opt.response_as)
|
||||||
|
return _post(url, args, { response_as: opt.response_as });
|
||||||
|
|
||||||
return _post(url, args);
|
return _post(url, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,10 @@ import { ClientSession } from "./type";
|
||||||
|
|
||||||
export const newClientSession = <T>(arg?: {
|
export const newClientSession = <T>(arg?: {
|
||||||
on: Partial<{
|
on: Partial<{
|
||||||
session: ClientSession<T>;
|
messageReceived: (session: ClientSession<T>) => Promise<void>;
|
||||||
messageReceived: () => Promise<void>;
|
afterLogin: (session: ClientSession<T>) => Promise<void>;
|
||||||
afterLogin: () => Promise<void>;
|
afterLogout: (session: ClientSession<T>) => Promise<void>;
|
||||||
afterLogout: () => Promise<void>;
|
afterRecheck: (session: ClientSession<T>) => Promise<void>;
|
||||||
afterRecheck: () => Promise<void>;
|
|
||||||
}>;
|
}>;
|
||||||
}) => {
|
}) => {
|
||||||
const store = sessionClientStore<T>();
|
const store = sessionClientStore<T>();
|
||||||
|
|
@ -18,13 +17,23 @@ export const newClientSession = <T>(arg?: {
|
||||||
const session: ClientSession<T> = {
|
const session: ClientSession<T> = {
|
||||||
status: "checking",
|
status: "checking",
|
||||||
current: null,
|
current: null,
|
||||||
async recheck() {
|
async connect() {
|
||||||
const current = await store.load();
|
const url = new URL(location.href);
|
||||||
if (!current) {
|
url.protocol = "wss:";
|
||||||
this.status = "guest";
|
const ws = new WebSocket(url);
|
||||||
} else {
|
|
||||||
this.status = await client.check(current.uid, current.sid);
|
ws.onopen = () => {
|
||||||
}
|
ws.send("ok");
|
||||||
|
};
|
||||||
|
ws.onmessage = (m) => {
|
||||||
|
console.log(m);
|
||||||
|
};
|
||||||
|
// const current = await store.load();
|
||||||
|
// if (!current) {
|
||||||
|
// this.status = "guest";
|
||||||
|
// } else {
|
||||||
|
// this.status = await client.check(current.uid, current.sid);
|
||||||
|
// }
|
||||||
return { status: this.status };
|
return { status: this.status };
|
||||||
},
|
},
|
||||||
async login(arg: {
|
async login(arg: {
|
||||||
|
|
@ -35,9 +44,6 @@ export const newClientSession = <T>(arg?: {
|
||||||
async logout() {},
|
async logout() {},
|
||||||
};
|
};
|
||||||
|
|
||||||
session.recheck().then((e) => {
|
session.connect();
|
||||||
console.log(e);
|
|
||||||
});
|
|
||||||
|
|
||||||
return session;
|
return session;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
/// <reference types="bun-types" />
|
/// <reference types="bun-types" />
|
||||||
|
|
||||||
import { ServerContext, useServerRouter } from "../server-route";
|
import { useServerRouter } from "../server-route";
|
||||||
import { sessionRouter } from "./router/session-router";
|
import { sessionRouter } from "./router/session-router";
|
||||||
import { newSessionStore } from "./store/session-store";
|
import { newSessionStore } from "./store/session-store";
|
||||||
|
import { ServerContext } from "./type";
|
||||||
|
|
||||||
type SessionServerHandler = {
|
type SessionServerHandler = {
|
||||||
cleanup: () => Promise<void>;
|
cleanup: () => Promise<void>;
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ export type ClientSessionStatus = "checking" | "guest" | "expired" | "active";
|
||||||
export type ClientSession<T> = {
|
export type ClientSession<T> = {
|
||||||
status: ClientSessionStatus;
|
status: ClientSessionStatus;
|
||||||
current: null | SessionData<T>;
|
current: null | SessionData<T>;
|
||||||
recheck(): Promise<{ status: ClientSessionStatus }>;
|
connect(): Promise<{ status: ClientSessionStatus }>;
|
||||||
login(arg: {
|
login(arg: {
|
||||||
method: "user-pass";
|
method: "user-pass";
|
||||||
username: string;
|
username: string;
|
||||||
|
|
@ -52,3 +52,17 @@ export type ClientSession<T> = {
|
||||||
}): Promise<void>;
|
}): Promise<void>;
|
||||||
logout(): Promise<void>;
|
logout(): Promise<void>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export interface SessionContext<T> extends ServerContext {
|
||||||
|
session: ServerSession<T>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ServerContext = {
|
||||||
|
req: Request;
|
||||||
|
handle: (req: Request) => Promise<Response>;
|
||||||
|
mode: "dev" | "prod";
|
||||||
|
url: {
|
||||||
|
raw: URL;
|
||||||
|
pathname: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue