decentralised message store

feat: at uri validator

serenity afd9926f 263dd1d5

Changed files
+25
src
lib
types
utils
+5
src/lib/types/atproto.ts
···
+
export interface AtUri {
+
authority: string;
+
collection?: string;
+
rKey?: string;
+
}
+20
src/lib/utils/validate.ts
···
+
import type { AtUri } from "@/lib/types/atproto";
+
+
// thank u julie
+
const atUriRegex =
+
/^at:\/\/([a-zA-Z0-9._:%-]+)(?:\/([a-zA-Z0-9-.]+)(?:\/([a-zA-Z0-9._~:@!$&%')(*+,;=-]+))?)?(?:#(\/[a-zA-Z0-9._~:@!$&%')(*+,;=\-[\]/\\]*))?$/;
+
+
export const validateAtUri = (inputString: string) => {
+
const regexTestResult = atUriRegex.test(inputString);
+
if (!regexTestResult) return { ok: false };
+
const parts = inputString.split("/");
+
const authority = parts[2];
+
const collection = parts[3];
+
const rKey = parts[4];
+
const atUri: AtUri = {
+
authority,
+
collection,
+
rKey,
+
};
+
return { ok: true, value: inputString, atUri };
+
};