···55import { drizzle } from "drizzle-orm/d1";
66import { schema } from "../db";
77import { Bindings } from "../types";
88-import { BSKY_MIN_USERNAME_LENGTH } from "../limits.d";
88+import { BSKY_MAX_USERNAME_LENGTH, BSKY_MIN_USERNAME_LENGTH } from "../limits.d";
99import { lookupBskyHandle } from "../utils/bskyApi";
1010import { createDMWithUser } from "../utils/bskyMsg";
1111···7878 plugins: [
7979 username({
8080 minUsernameLength: BSKY_MIN_USERNAME_LENGTH,
8181- maxUsernameLength: 500
8181+ maxUsernameLength: BSKY_MAX_USERNAME_LENGTH
8282 })
8383 ],
8484 rateLimit: {
+1
src/limits.d.ts
···78787979// BSky limits that are inferred
8080export const BSKY_MIN_USERNAME_LENGTH: number = 4;
8181+export const BSKY_MAX_USERNAME_LENGTH: number = 256; // since these are domains, they should be about 256
8182export const BSKY_MAX_APP_PASSWORD_LENGTH: number = 20;
8283export const MAX_EMBEDS_PER_POST: number = 4;
8384
+2-1
src/validation/sharedValidations.ts
···11import * as z from "zod/v4";
22import { appPasswordRegex } from "./regexCases";
33-import { BSKY_MAX_APP_PASSWORD_LENGTH, BSKY_MIN_USERNAME_LENGTH, MAX_DASHBOARD_PASS, MIN_DASHBOARD_PASS } from "../limits.d";
33+import { BSKY_MAX_APP_PASSWORD_LENGTH, BSKY_MIN_USERNAME_LENGTH, BSKY_MAX_USERNAME_LENGTH, MAX_DASHBOARD_PASS, MIN_DASHBOARD_PASS } from "../limits.d";
4455export const UsernameSchema = z.object({
66 username: z.string().trim().toLowerCase()
77 .nonempty("username is missing")
88 .min(BSKY_MIN_USERNAME_LENGTH, "username too short")
99 .regex(z.regexes.domain, "username should be in a format like username.bsky.social or a domain")
1010+ .max(BSKY_MAX_USERNAME_LENGTH, "username too long")
1011 .nonoptional()
1112});
1213