mirror of
https://github.com/tiennm99/store-scraper-bot.git
synced 2026-10-11 03:13:50 +00:00
Refactors source to be Worker-shaped. No live deploy yet — sister deploy plan
runs Atlas provisioning + smoke later.
- wrangler.toml with nodejs_compat_v2, daily UTC 0 cron (= 7am Asia/Ho_Chi_Minh)
- package.json: drop node-telegram-bot-api, node-cron, dotenv, pino,
pino-pretty; add wrangler devDep; bump to 0.2.0
- src/bot/telegram-api.js: raw fetch wrapper for Telegram Bot API
- src/bot/dispatch.js: per-message dispatcher extracted from polling loop
- src/repository/mongodb.js: memoized MongoClient per warm isolate, typed
MongoUnavailable error, fast-fail timeouts
- src/repository/store.js: factory binding env once
- All 4 repositories converted to factory shape
- src/api/{apple,google}-scraper.js: take store instead of importing repos
- src/index.js: Worker entry exporting { fetch, scheduled }; webhook validates
X-Telegram-Bot-Api-Secret-Token; ack-then-waitUntil pattern
- src/scheduler/scheduler.js: trimmed; runDailyCheck only (no node-cron)
- src/config.js, src/logger.js: env-driven, console.log JSON output
- scripts/register-webhook.js: setWebhook + setMyCommands; --dry-run supported
- scripts/check-secret-leaks.js: lint blocks console.log(env.<SECRET>)
- plans/260426-2015-cloudflare-worker-code-port: this code port plan
- plans/260426-2327-cloudflare-deploy-and-smoke: sister deploy plan
Validated via node --check on all 32 source files; lint clean. Real deploy
gates (bundle size, cold-start CPU) run in deploy plan.
33 lines
1.1 KiB
TOML
33 lines
1.1 KiB
TOML
name = "js-store-scraper-bot"
|
|
main = "src/index.js"
|
|
compatibility_date = "2025-10-01"
|
|
# nodejs_compat_v2 enables node:net + node:tls so the official `mongodb` driver
|
|
# can open a TCP socket to Atlas. v1 vs v2 are alternatives, not additive.
|
|
compatibility_flags = ["nodejs_compat_v2"]
|
|
|
|
[vars]
|
|
APP_CACHE_SECONDS = "600"
|
|
NUM_DAYS_WARNING_NOT_UPDATED = "30"
|
|
|
|
# Daily check job. Cloudflare cron is UTC.
|
|
# 0 UTC = 7am Asia/Ho_Chi_Minh (UTC+7).
|
|
[triggers]
|
|
crons = ["0 0 * * *"]
|
|
|
|
# Workers Observability — captures console.* logs and request metadata in the
|
|
# Cloudflare dashboard. 200k events/day on the Free plan.
|
|
[observability]
|
|
enabled = true
|
|
head_sampling_rate = 1
|
|
|
|
[observability.logs]
|
|
enabled = true
|
|
invocation_logs = true
|
|
|
|
# Secrets (set via `wrangler secret put <name>`, NOT in this file):
|
|
# TELEGRAM_BOT_TOKEN — bot token from @BotFather
|
|
# TELEGRAM_BOT_USERNAME — bot username (without @)
|
|
# TELEGRAM_WEBHOOK_SECRET — random ≥32 chars; validates the X-Telegram-Bot-Api-Secret-Token header
|
|
# MONGODB_URI — full SRV string, db inferred from URI path
|
|
# ADMIN_IDS — comma-separated Telegram user IDs
|