import type { ListEmailItem } from "#lib/api/emails.ts";
import { installFetch } from "#storybook/installFetch.ts";
export const deliberiUrl = "https://deliberi.example.test";
export const primaryEmail = "alice@example.com";
export const secondaryEmail = "alice@work.example.com";
export const unverifiedEmail = "a.liddell@mail.example.com";
export const emails: ListEmailItem[] = [
{ address: primaryEmail, verified: true, primary: true, createdAt: "2026-05-12T09:14:00Z" },
{ address: secondaryEmail, verified: true, primary: false, createdAt: "2026-07-03T16:40:00Z" },
{ address: unverifiedEmail, verified: false, primary: false, createdAt: "2026-09-16T11:02:00Z" }
];
export type Answer = () => Promise<Response>;
export const ok =
(body?: unknown): Answer =>
() =>
Promise.resolve(
body === undefined ? new Response(null, { status: 200 }) : Response.json(body)
);
export const pending: Answer = () => new Promise(() => {});
export const failed =
(status: number, message = "deliberi is down"): Answer =>
() =>
Promise.resolve(Response.json({ error: "InternalError", message }, { status }));
export const offline: Answer = () => Promise.reject(new TypeError("Failed to fetch"));
export interface EmailAnswers {
listEmails?: Answer;
addEmail?: Answer;
deleteEmail?: Answer;
setPrimaryEmail?: Answer;
verifyEmail?: Answer;
}
export const installEmailFetch = ({ parameters }: { parameters: Record<string, unknown> }) => {
const answers = (parameters.deliberi as EmailAnswers | undefined) ?? {};
return installFetch((url) => {
for (const [name, answer] of Object.entries(answers)) {
if (answer && url.pathname.includes(`org.tangled.temp.account.${name}`))
return answer();
}
});
};