~james/core

core/web/src/fixtures/emails.ts -rw-r--r-- 1.7 KiB
452f17b7 — james chore(import): snapshot james.dad.town/core at f70c71c7696a 16 hours ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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();
		}
	});
};