# 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 - 🧮 Currency conversion API - ⚡ Fast and serverless ## Setup ### Prerequisites - Node.js 18+ - Cloudflare account - [Open Exchange Rates API](https://openexchangerates.org/) App ID - Notion Integration Token ### Notion Setup Create a Notion database with the following properties: | Property | Type | |------------|--------| | Code | Title | | Rate | Number | | Updated At | Date | Then: 1. Create a Notion Integration at https://www.notion.so/my-integrations 2. 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 ``` ## API Reference ### Endpoints | Endpoint | Method | Description | |----------|--------|-------------| | `/convert` | GET | Convert currency | | `/sync` | GET | Sync rates to Notion | ### Convert Currency ```bash GET /convert?from=USD&to=CNY&amount=100 ``` Parameters: - `from` - Source currency code (e.g., USD, EUR, JPY) - `to` - Target currency code - `amount` - Amount to convert Response: ```json { "success": true, "from": "USD", "to": "CNY", "amount": 100, "rate": 6.9002, "result": 690.02, "timestamp": 1773900000000 } ``` ### Manual Sync to Notion ```bash GET /sync ``` Response: ```json { "success": true, "currenciesFound": 173, "ratesFetched": 172, "succeeded": 172, "failed": 0, "errors": [] } ``` ## Tech Stack - [Cloudflare Workers](https://workers.cloudflare.com/) - [Open Exchange Rates API](https://openexchangerates.org/) - [Notion API](https://developers.notion.com/) - TypeScript ## License MIT