Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e819c5739e | ||
|
|
ac164789bd |
@@ -3,7 +3,7 @@ import type { Db, ExecResult } from "@wrnexus/db";
|
||||
import { users } from "./schema.ts";
|
||||
|
||||
export async function GetUserByEmail(db: Db, args: { email: string }): Promise<{ id: number; email: string; name: string; active: boolean; passwordHash: string; createdAt: Date } | null> {
|
||||
return (await db.one("SELECT * FROM users WHERE email = $1", [args.email], users)) as { id: number; email: string; name: string; active: boolean; passwordHash: string; createdAt: Date } | null;
|
||||
return (await db.one("SELECT * FROM users WHERE email = ?", [args.email], users)) as { id: number; email: string; name: string; active: boolean; passwordHash: string; createdAt: Date } | null;
|
||||
}
|
||||
|
||||
export async function ListUsers(db: Db): Promise<{ id: number; name: string; active: boolean }[]> {
|
||||
@@ -11,13 +11,13 @@ export async function ListUsers(db: Db): Promise<{ id: number; name: string; act
|
||||
}
|
||||
|
||||
export async function CountActive(db: Db, args: { active: boolean }): Promise<{ n: number } | null> {
|
||||
return (await db.one("SELECT COUNT(*) AS n FROM users WHERE active = $1", [args.active])) as { n: number } | null;
|
||||
return (await db.one("SELECT COUNT(*) AS n FROM users WHERE active = ?", [args.active])) as { n: number } | null;
|
||||
}
|
||||
|
||||
export async function CreateUser(db: Db, args: { email: string; name: string; active: boolean }): Promise<ExecResult> {
|
||||
return db.exec("INSERT INTO users (email, name, active) VALUES ($1, $2, $3)", [args.email, args.name, args.active]);
|
||||
return db.exec("INSERT INTO users (email, name, active) VALUES (?, ?, ?)", [args.email, args.name, args.active]);
|
||||
}
|
||||
|
||||
export async function DeactivateUser(db: Db, args: { id: number }): Promise<ExecResult> {
|
||||
return db.exec("UPDATE users SET active = 0 WHERE id = $1", [args.id]);
|
||||
return db.exec("UPDATE users SET active = 0 WHERE id = ?", [args.id]);
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import type { AssetServer } from "./runtime.ts";
|
||||
import { servePublicAsset } from "./public.ts";
|
||||
import { servePluginAsset, type ServedPluginAsset } from "./plugin-assets.ts";
|
||||
import { serveIslandArtifact, serveWrnBrowserArtifact } from "./pipeline.ts";
|
||||
import { HMR_CLIENT_HREF, HMR_CLIENT_JS } from "./runtime.ts";
|
||||
|
||||
/** Style inputs the dev asset server needs to build `/__wrnexus/styles.css`. */
|
||||
export interface DevStyles {
|
||||
@@ -99,6 +100,7 @@ export function createDevAssetServer(
|
||||
if (pathname.startsWith("/__wrnexus/island/")) {
|
||||
return serveIslandArtifact(pathname) ?? new Response("Not Found", { status: 404 });
|
||||
}
|
||||
if (pathname === HMR_CLIENT_HREF) return jsResponse(HMR_CLIENT_JS);
|
||||
if (pathname === "/__wrnexus/islands.js") return jsResponse(getIslandRuntime(true));
|
||||
if (pathname === "/__wrnexus/reactive.js") return jsResponse(getReactiveRuntime(true));
|
||||
if (pathname === "/__wrnexus/controllers.js")
|
||||
|
||||
@@ -878,8 +878,19 @@ function randomNonce(): string {
|
||||
}
|
||||
|
||||
/** The dev HMR client as a nonce-tagged inline script (strict-CSP friendly). */
|
||||
function hmrClientTag(nonce: string): string {
|
||||
return `<script nonce="${nonce}">${HMR_CLIENT_JS}</script>`;
|
||||
/** Path the dev asset server publishes the HMR client on. */
|
||||
export const HMR_CLIENT_HREF = "/__wrnexus/hmr-client.js";
|
||||
|
||||
/**
|
||||
* The HMR client is served as an external module rather than inlined.
|
||||
*
|
||||
* A document's CSP nonce is fixed at load, so an inline script arriving from a
|
||||
* later response — which is exactly what an HMR reload produces — can never
|
||||
* carry a nonce this document accepts. An external file is covered by
|
||||
* script-src 'self' and needs no nonce at all.
|
||||
*/
|
||||
function hmrClientTag(_nonce: string): string {
|
||||
return `<script src="${HMR_CLIENT_HREF}"></script>`;
|
||||
}
|
||||
|
||||
/** 403 for a rejected cross-site WebSocket handshake. */
|
||||
|
||||
Reference in New Issue
Block a user