# Notion Exchange Rate Worker A Cloudflare Workers Scheduled Worker that automatically fetches exchange rates from Open Exchange Rates API and updates a Notion database. ## Features - 🔄 Hourly automatic sync via Cron trigger - 🔌 Manual sync via HTTP endpoint - 💱 Supports 170+ currencies - ⚡ Fast and serverless ## Setup ### Prerequisites - Node.js 18+ - Cloudflare account - [Open Exchange Rates API](https://openexchangerates.org/) App ID - Notion Integration Token ### Notion Setup 1. Create a Notion database with the following properties: | Property | Type | |----------|------| | Code | Title | | Rate | Number | | Updated At | Date | 2. Create a Notion Integration at https://www.notion.so/my-integrations 3. Share your database with the integration ### Installation ```bash # Clone the repository git clone git@ssh.git.ac:kotoyuuko/notion-exrate-worker.git cd notion-exrate-worker # Install dependencies npm install ``` ### Configuration 1. Copy the example environment file: ```bash cp .dev.vars.example .dev.vars ``` 2. Fill in your credentials in `.dev.vars`: ``` OXR_APP_ID=your_open_exchange_rates_app_id NOTION_TOKEN=your_notion_integration_token NOTION_DATABASE_ID=your_notion_database_id ``` ### Local Development ```bash # Start development server npm run dev # Test scheduled handler curl "http://localhost:8787/__scheduled?cron=0+*+*+*+*" # Or use manual sync endpoint curl "http://localhost:8787/sync" ``` ### Deploy ```bash # Deploy to Cloudflare Workers npm run deploy # Set production secrets wrangler secret put OXR_APP_ID wrangler secret put NOTION_TOKEN wrangler secret put NOTION_DATABASE_ID ``` ## Usage ### Automatic Sync The worker runs automatically every hour via Cron trigger. ### Manual Sync Send a GET request to the `/sync` endpoint: ```bash curl https://your-worker.workers.dev/sync ``` Response: ```json { "success": true, "currenciesFound": 173, "ratesFetched": 172, "succeeded": 172, "failed": 0, "errors": [] } ``` ## API Reference | Endpoint | Method | Description | |----------|--------|-------------| | `/` | GET | Info page | | `/sync` | GET | Manually trigger exchange rate sync | ## Tech Stack - [Cloudflare Workers](https://workers.cloudflare.com/) - [Open Exchange Rates API](https://openexchangerates.org/) - [Notion API](https://developers.notion.com/) - TypeScript ## License MIT