Schedule posts to Bluesky with Cloudflare workers. skyscheduler.work
cf tool bsky-tool cloudflare bluesky schedule bsky service social-media cloudflare-workers
at main 38 lines 1.6 kB view raw
1import { 2 BSKY_GIF_MIME_TYPES, BSKY_IMG_MIME_TYPES, 3 BSKY_NAME_LOOKUP_LIMIT, BSKY_NAME_TYPE_AHEAD_CHARS, 4 BSKY_VIDEO_LENGTH_LIMIT, BSKY_VIDEO_MIME_TYPES, 5 GIF_UPLOAD_ALLOWED, MAX_ALT_TEXT, MAX_EMBEDS_PER_POST, 6 MAX_GIF_LENGTH_LIMIT, MAX_LENGTH, MAX_THUMBNAIL_SIZE, 7 R2_FILE_SIZE_LIMIT 8} from "../limits"; 9import { postRecordURI } from "../validation/regexCases"; 10 11const CONST_SCRIPT_VERSION: number = 8; 12 13export const ConstScriptStr: string = `/js/consts.js?v=${CONST_SCRIPT_VERSION}`; 14export function makeConstScript() { 15 const makeFileTypeStr = (typeMap: string[]) => { 16 return typeMap.map((type) => `"${type}"`).join() 17 }; 18 19 let fileTypeArray = [...BSKY_IMG_MIME_TYPES, ...BSKY_VIDEO_MIME_TYPES]; 20 if (GIF_UPLOAD_ALLOWED) { 21 fileTypeArray.push(...BSKY_GIF_MIME_TYPES); 22 } 23 24 return `const fileTypesSupported = [${makeFileTypeStr(fileTypeArray)}]; 25const imageTypes = [${makeFileTypeStr(BSKY_IMG_MIME_TYPES)}]; 26const videoTypes = [${makeFileTypeStr(BSKY_VIDEO_MIME_TYPES)}]; 27const gifTypes = [${makeFileTypeStr(BSKY_GIF_MIME_TYPES)}]; 28const MAX_LENGTH=${MAX_LENGTH}; 29const MAX_ALT_LENGTH=${MAX_ALT_TEXT}; 30const MAX_VIDEO_LENGTH=${BSKY_VIDEO_LENGTH_LIMIT}; /* in seconds */ 31const MAX_GIF_LENGTH=${MAX_GIF_LENGTH_LIMIT}; /* in seconds */ 32const MAX_AUTO_COMPLETE_NAMES=${BSKY_NAME_LOOKUP_LIMIT}; 33const MIN_CHAR_AUTO_COMPLETE_NAMES=${BSKY_NAME_TYPE_AHEAD_CHARS}; 34const FILE_DROP_MAX_SIZE=${R2_FILE_SIZE_LIMIT}; 35const FILE_DROP_MAX_THUMB_SIZE=${MAX_THUMBNAIL_SIZE}; 36const FILE_DROP_MAX_FILES=${MAX_EMBEDS_PER_POST}; 37const ATPROTO_RECORD_REGEX=${postRecordURI};`; 38}