mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2026-06-21 19:00:19 +00:00
43 lines
1.0 KiB
TypeScript
43 lines
1.0 KiB
TypeScript
import { z } from "zod";
|
|
|
|
type ScreenParams = {
|
|
login_for?: "oidc" | "app";
|
|
redirect_uri?: string;
|
|
oidc_ticket?: string;
|
|
oidc_scope?: string;
|
|
oidc_name?: string;
|
|
oidc_prompt?: "none" | "login";
|
|
};
|
|
|
|
const zodScreenParams = z.object({
|
|
login_for: z.enum(["oidc", "app"]).optional(),
|
|
redirect_uri: z.string().optional(),
|
|
oidc_ticket: z.string().optional(),
|
|
oidc_scope: z.string().optional(),
|
|
oidc_name: z.string().optional(),
|
|
oidc_prompt: z.enum(["none", "login"]).optional(),
|
|
});
|
|
|
|
export function useScreenParams(params: URLSearchParams): ScreenParams {
|
|
const paramsObj = Object.fromEntries(params.entries());
|
|
const parsed = zodScreenParams.safeParse(paramsObj);
|
|
if (!parsed.success) {
|
|
return {};
|
|
}
|
|
return parsed.data;
|
|
}
|
|
|
|
export function recompileScreenParams(params: ScreenParams): string {
|
|
const p = new URLSearchParams(
|
|
Object.fromEntries(
|
|
Object.entries(params).filter(([, v]) => v !== undefined),
|
|
) as Record<string, string>,
|
|
).toString();
|
|
|
|
if (p.length > 0) {
|
|
return "?" + p;
|
|
}
|
|
|
|
return "";
|
|
}
|