Schedule posts to Bluesky with Cloudflare workers.
skyscheduler.work
cf
tool
bsky-tool
cloudflare
bluesky
schedule
bsky
service
social-media
cloudflare-workers
1import * as z from "zod/v4";
2import {
3 BSKY_MAX_APP_PASSWORD_LENGTH, BSKY_MIN_USERNAME_LENGTH,
4 MAX_DASHBOARD_PASS, MIN_DASHBOARD_PASS
5} from "../limits";
6import { appPasswordRegex } from "./regexCases";
7
8export const AccountUpdateSchema = z.object({
9 username: z.string().trim().toLowerCase()
10 .min(BSKY_MIN_USERNAME_LENGTH, "username too short")
11 .regex(z.regexes.domain, "username must be in the format of a custom domain or USERNAME.bsky.social")
12 .optional()
13 .or(z.literal("")),
14 password: z.string().trim()
15 .min(MIN_DASHBOARD_PASS, "password too short")
16 .max(MAX_DASHBOARD_PASS, "password too long")
17 .optional()
18 .or(z.literal("")),
19 bskyAppPassword: z.string().trim()
20 .max(BSKY_MAX_APP_PASSWORD_LENGTH, "app password too long")
21 .regex(appPasswordRegex, "not a valid bsky app password")
22 .optional()
23 .or(z.literal("")),
24 bskyUserPDS: z.url("PDS should be in the format of an URL").trim()
25 .optional()
26 .or(z.literal(""))
27});