Helpers
Small utilities shipped with the package - optional, not required for routing.
CryptoHelper
sha256 / sha512(payload)- lowercase hexhash(payload, algorithm)- SHA-1 | 256 | 384 | 512secureRandom()- float in [0, 1]
import { CryptoHelper } from "jsr:@webtools/expressapi";
const digest = await CryptoHelper.sha256("hello");
const n = CryptoHelper.secureRandom();StringHelper
generateRandomString(pattern?, chars?)- replaces eachX(default pattern"XXXX-XXXX-XXXX-XXXX")encodeBase64Url / decodeBase64UrlnormalizePath(...parts),slugify,escapeHtml/ unescape,clean
import { StringHelper } from "jsr:@webtools/expressapi";
const id = StringHelper.generateRandomString(); // e.g. "A3F2-…"
const path = StringHelper.normalizePath("/api/", "/users/"); // "/api/users"
const slug = StringHelper.slugify("Hello World!"); // "hello-world"JsonToken
JWT-like signer for JSON payloads (SHA-256 + Base64URL): {base64url(payload)}.{signature}. No built-in expiration - use a full JWT library for that.
import { JsonToken, z } from "jsr:@webtools/expressapi";
const tokens = new JsonToken(Deno.env.get("JWT_SECRET")!);
const payloadSchema = z.object({ userId: z.string(), role: z.string() });
const jwt = await tokens.sign({ userId: "1", role: "admin" });
const payload = await tokens.verify(jwt, payloadSchema);
// ^ { userId: string; role: string } | nullVerify compares signatures in constant time; invalid tokens return null. Pass a schema to validate the decoded payload. Recipe: Auth with JsonToken.