Schedule posts to Bluesky with Cloudflare workers. skyscheduler.work
cf tool bsky-tool cloudflare bluesky schedule bsky service social-media cloudflare-workers

dep update, env smash

I am not looking forward to the better auth upgrade

+31 -67
+27 -27
package-lock.json
··· 9 9 "dependencies": { 10 10 "@atproto/api": "^0.18.21", 11 11 "@hono/standard-validator": "^0.2.2", 12 - "better-auth": "^1.4.19", 12 + "better-auth": "^1.4.20", 13 13 "better-auth-cloudflare": "^0.2.9", 14 14 "date-fns": "^4.1.0", 15 15 "drizzle-orm": "^0.45.1", ··· 30 30 "zod": "^4.3.6" 31 31 }, 32 32 "devDependencies": { 33 - "@types/node": "^24.10.15", 33 + "@types/node": "^24.11.0", 34 34 "drizzle-kit": "^0.31.9", 35 35 "minify": "^14.1.0", 36 36 "npm-run-all2": "^8.0.4", ··· 187 187 } 188 188 }, 189 189 "node_modules/@better-auth/core": { 190 - "version": "1.4.19", 191 - "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.4.19.tgz", 192 - "integrity": "sha512-uADLHG1jc5BnEJi7f6ijUN5DmPPRSj++7m/G19z3UqA3MVCo4Y4t1MMa4IIxLCqGDFv22drdfxescgW+HnIowA==", 190 + "version": "1.4.20", 191 + "resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.4.20.tgz", 192 + "integrity": "sha512-Qf29DOL4LricVJWsPOwg2Ymm+qfYQ14EkyTlnMOp8qKSPzbfMSgRvr6oiwZqmUFxystJ3ft8TzDwTvOSAuNbfA==", 193 193 "dependencies": { 194 194 "@standard-schema/spec": "^1.0.0", 195 195 "zod": "^4.3.5" ··· 204 204 } 205 205 }, 206 206 "node_modules/@better-auth/telemetry": { 207 - "version": "1.4.19", 208 - "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.4.19.tgz", 209 - "integrity": "sha512-ApGNS7olCTtDpKF8Ow3Z+jvFAirOj7c4RyFUpu8axklh3mH57ndpfUAUjhgA8UVoaaH/mnm/Tl884BlqiewLyw==", 207 + "version": "1.4.20", 208 + "resolved": "https://registry.npmjs.org/@better-auth/telemetry/-/telemetry-1.4.20.tgz", 209 + "integrity": "sha512-ItRo5WswZl6gU8MPRrcn94d7mXk7vbN2zi6gSX8y2QcILRv7aXr6WhxTNKNeh5pnBUfIPdFYZcOnGf1uwgNKxg==", 210 210 "dependencies": { 211 211 "@better-auth/utils": "0.3.0", 212 212 "@better-fetch/fetch": "1.1.21" 213 213 }, 214 214 "peerDependencies": { 215 - "@better-auth/core": "1.4.19" 215 + "@better-auth/core": "1.4.20" 216 216 } 217 217 }, 218 218 "node_modules/@better-auth/utils": { ··· 2208 2208 "peer": true 2209 2209 }, 2210 2210 "node_modules/@types/node": { 2211 - "version": "24.10.15", 2212 - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.15.tgz", 2213 - "integrity": "sha512-BgjLoRuSr0MTI5wA6gMw9Xy0sFudAaUuvrnjgGx9wZ522fYYLA5SYJ+1Y30vTcJEG+DRCyDHx/gzQVfofYzSdg==", 2211 + "version": "24.11.0", 2212 + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.11.0.tgz", 2213 + "integrity": "sha512-fPxQqz4VTgPI/IQ+lj9r0h+fDR66bzoeMGHp8ASee+32OSGIkeASsoZuJixsQoVef1QJbeubcPBxKk22QVoWdw==", 2214 2214 "dev": true, 2215 2215 "license": "MIT", 2216 2216 "dependencies": { ··· 2280 2280 } 2281 2281 }, 2282 2282 "node_modules/better-auth": { 2283 - "version": "1.4.19", 2284 - "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.4.19.tgz", 2285 - "integrity": "sha512-3RlZJcA0+NH25wYD85vpIGwW9oSTuEmLIaGbT8zg41w/Pa2hVWHKedjoUHHJtnzkBXzDb+CShkLnSw7IThDdqQ==", 2283 + "version": "1.4.20", 2284 + "resolved": "https://registry.npmjs.org/better-auth/-/better-auth-1.4.20.tgz", 2285 + "integrity": "sha512-cUQaUhZ/EZwb7xgoL9wHl78yWp0eaxC/L++B/r8RJxk23L766Tk7fLjWG6bQK8eAHDDpfQNwXsJowiei8tJWJw==", 2286 2286 "license": "MIT", 2287 2287 "dependencies": { 2288 - "@better-auth/core": "1.4.19", 2289 - "@better-auth/telemetry": "1.4.19", 2288 + "@better-auth/core": "1.4.20", 2289 + "@better-auth/telemetry": "1.4.20", 2290 2290 "@better-auth/utils": "0.3.0", 2291 2291 "@better-fetch/fetch": "1.1.21", 2292 2292 "@noble/ciphers": "^2.0.0", ··· 2546 2546 "license": "MIT" 2547 2547 }, 2548 2548 "node_modules/brace-expansion": { 2549 - "version": "5.0.3", 2550 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", 2551 - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", 2549 + "version": "5.0.4", 2550 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", 2551 + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", 2552 2552 "dev": true, 2553 2553 "license": "MIT", 2554 2554 "dependencies": { ··· 2740 2740 "version": "7.0.6", 2741 2741 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 2742 2742 "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 2743 - "dev": true, 2743 + "devOptional": true, 2744 2744 "license": "MIT", 2745 2745 "dependencies": { 2746 2746 "path-key": "^3.1.0", ··· 2755 2755 "version": "2.0.0", 2756 2756 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2757 2757 "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2758 - "dev": true, 2758 + "devOptional": true, 2759 2759 "license": "ISC" 2760 2760 }, 2761 2761 "node_modules/cross-spawn/node_modules/which": { 2762 2762 "version": "2.0.2", 2763 2763 "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2764 2764 "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2765 - "dev": true, 2765 + "devOptional": true, 2766 2766 "license": "ISC", 2767 2767 "dependencies": { 2768 2768 "isexe": "^2.0.0" ··· 4278 4278 "version": "3.1.1", 4279 4279 "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 4280 4280 "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 4281 - "dev": true, 4281 + "devOptional": true, 4282 4282 "license": "MIT", 4283 4283 "engines": { 4284 4284 "node": ">=8" ··· 4312 4312 "version": "2.0.3", 4313 4313 "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", 4314 4314 "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", 4315 - "dev": true, 4315 + "devOptional": true, 4316 4316 "license": "MIT" 4317 4317 }, 4318 4318 "node_modules/picocolors": { ··· 4599 4599 "version": "2.0.0", 4600 4600 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 4601 4601 "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 4602 - "dev": true, 4602 + "devOptional": true, 4603 4603 "license": "MIT", 4604 4604 "dependencies": { 4605 4605 "shebang-regex": "^3.0.0" ··· 4612 4612 "version": "3.0.0", 4613 4613 "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 4614 4614 "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 4615 - "dev": true, 4615 + "devOptional": true, 4616 4616 "license": "MIT", 4617 4617 "engines": { 4618 4618 "node": ">=8"
+3 -8
package.json
··· 5 5 "scripts": { 6 6 "dev": "wrangler dev --live-reload", 7 7 "dev:queue": "wrangler dev -c wrangler.toml --persist-to .wrangler/state --live-reload", 8 - "deploy": "wrangler deploy --minify --env=''", 9 - "staging": "wrangler deploy --env staging --minify", 8 + "deploy": "wrangler deploy --minify", 10 9 "auth:generate": "npx @better-auth/cli@latest generate --config src/auth/index.ts --output src/db/auth.schema.ts -y", 11 10 "auth:format": "prettier --write src/db/auth.schema.ts", 12 11 "auth": "run-s auth:*", ··· 17 16 "migrate:prod:db": "wrangler d1 migrations apply skyposts --remote", 18 17 "migrate:prod:pragma": "wrangler d1 execute skyposts --command \"PRAGMA optimize\" --remote -y", 19 18 "migrate:prod": "run-s migrate:prod:*", 20 - "migrate:staging:db": "wrangler d1 migrations apply skyposts-dev --remote", 21 - "migrate:staging:pragma": "wrangler d1 execute skyposts-dev --command \"PRAGMA optimize\" --remote -y", 22 - "migrate:staging": "run-s migrate:staging:*", 23 - "migrate:remote": "npm run migrate:prod && npm run migrate:staging", 24 19 "migrate:optimize": "run-s migrate:*:pragma", 25 20 "migrate:all": "npm run migrate:local && npm run migrate:prod", 26 21 "minify:main": "minify assets/js/main.js > assets/js/main.min.js", ··· 37 32 "dependencies": { 38 33 "@atproto/api": "^0.18.21", 39 34 "@hono/standard-validator": "^0.2.2", 40 - "better-auth": "^1.4.19", 35 + "better-auth": "^1.4.20", 41 36 "better-auth-cloudflare": "^0.2.9", 42 37 "date-fns": "^4.1.0", 43 38 "drizzle-orm": "^0.45.1", ··· 58 53 "zod": "^4.3.6" 59 54 }, 60 55 "devDependencies": { 61 - "@types/node": "^24.10.15", 56 + "@types/node": "^24.11.0", 62 57 "drizzle-kit": "^0.31.9", 63 58 "minify": "^14.1.0", 64 59 "npm-run-all2": "^8.0.4",
+1 -32
wrangler.toml
··· 111 111 TASK_SETTINGS={use_posts=true, use_reposts=true} 112 112 113 113 # set this to true in your .dev.vars to turn off turnstile 114 - IN_DEV=false 115 - 116 - [env.staging] 117 - workers_dev = true 118 - 119 - [env.staging.vars] 120 - BETTER_AUTH_URL="*" 121 - IMAGE_SETTINGS={enabled=false} 122 - SIGNUP_SETTINGS = {use_captcha=false, invite_only=false, invite_thread="", invite_uses=10} 123 - QUEUE_SETTINGS = {enabled=false, repostsEnabled=false, postNowEnabled=false, threadEnabled=true, delay_val=10, post_queues=["POST_QUEUE"], repost_queues=[]} 124 - REDIRECTS = {contact="https://bsky.app/profile/skyscheduler.work", tip="https://ko-fi.com/socksthewolf/tip"} 125 - R2_SETTINGS={auto_prune=false, prune_days=3} 126 - TASK_SETTINGS={use_posts=true, use_reposts=true} 127 - IN_DEV=true 128 - 129 - [[env.staging.d1_databases]] 130 - binding = "DB" 131 - database_name = "skyposts-dev" 132 - database_id = "9e9e3275-c12e-4209-9b8c-a1ee57f7bb8d" 133 - migrations_table = "migrations" 134 - migrations_dir = "migrations" 135 - 136 - [[env.staging.kv_namespaces]] 137 - binding = "KV" 138 - id = "9b9c6cdfd40e405aa3df63544a553b08" 139 - 140 - [env.staging.images] 141 - binding = "IMAGES" 142 - 143 - [[env.staging.r2_buckets]] 144 - binding = "R2" 145 - bucket_name = "skyembeds-dev" 114 + IN_DEV=false