Schedule posts to Bluesky with Cloudflare workers.
skyscheduler.work
cf
tool
bsky-tool
cloudflare
bluesky
schedule
bsky
service
social-media
cloudflare-workers
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}