This commit is contained in:
2026-01-24 17:02:05 +08:00
22 changed files with 1196 additions and 14 deletions

View File

@@ -1,22 +1,52 @@
import { ConvexClient, AuthTokenFetcher } from "convex/browser";
import { api } from "./convex/_generated/api.js";
import * as jose from "jose";
const url = process.env["CONVEX_URL"]
const client = new ConvexClient(url!);
console.log("Client created", url);
// 加载测试私钥
const keys = JSON.parse(await Bun.file("./jwt/privateKey.json").text());
const privateKey = await jose.importJWK(keys, "RS256");
// 生成 RS256 JWT
const payload = {
iss: "https://convex.kevisual.cn",
sub: "user:8fa2be73c2229e85",
aud: "convex-app",
exp: Math.floor(Date.now() / 1000) + 3600,
name: "Test User AA",
email: "test@example.com",
};
const token = await new jose.SignJWT(payload)
.setProtectedHeader({
"alg": "RS256",
"typ": "JWT",
"kid": "kid-key-1"
})
.setIssuedAt()
.sign(privateKey);
console.log("Generated RS256 token:", token);
const authTokenFetcher: AuthTokenFetcher = async ({ forceRefreshToken }: { forceRefreshToken: boolean }) => {
console.log("AuthTokenFetcher called, forceRefreshToken:", forceRefreshToken);
return null;
return token;
}
const _auth = await client.setAuth(authTokenFetcher, () => { })
const auth = client.getAuth();
console.log("Client auth", auth);
client.setAuth(authTokenFetcher, (isAuthenticated) => {
console.log("Auth isAuthenticated:", isAuthenticated);
});
// console.log("Auth set up", auth);
await Bun.sleep(1000);
// const auth = client.getAuth();
// console.log("Client auth", auth);
const unsubscribe = client.onUpdate(api.abcv.get, {}, async (tasks) => {
console.log(tasks);
});
// const list = await client.query(api.abcv.get, {});
// console.log("Initial list:", list);
const list = await client.query(api.abcv.get, {});
console.log("Initial list:", list);
// for (let i = 0; i < list.length; i++) {
// const a = list[i];
// console.log(`Item ${i}:`, a.title);
@@ -25,6 +55,18 @@ const unsubscribe = client.onUpdate(api.abcv.get, {}, async (tasks) => {
// console.log("Chat response:", list);
const xiongList = await client.query(api.xiong.get, {});
console.log("Xiong list:", xiongList);
// const redisIsConnected = await client.action(api.actions.redis.isConnected, {});
// console.log("Redis isConnected:", redisIsConnected);
// const sign = await api.auth.signIn({ provider: "convex" })
// const sign = await httpClient.action("/auth", { method: "POST" });
// console.log("Sign in result:", sign);
const res = await fetch("http://convex.kevisual.cn:3211/auth", {
method: "POST",
});
const data = await res.json();
console.log("Custom endpoint response:", data);
await Bun.sleep(1000);
unsubscribe();
await client.close();