No Description

kotoyuuko 629dbb45c1 style: change indentation from tabs to 2 spaces 3 days ago
.vscode 629dbb45c1 style: change indentation from tabs to 2 spaces 3 days ago
src 629dbb45c1 style: change indentation from tabs to 2 spaces 3 days ago
.dev.vars.example c89209bf32 feat: implement hourly exchange rate sync to Notion 3 days ago
.editorconfig 629dbb45c1 style: change indentation from tabs to 2 spaces 3 days ago
.gitignore 5e2ef53199 Initial commit (by create-cloudflare CLI) 4 days ago
.prettierrc 629dbb45c1 style: change indentation from tabs to 2 spaces 3 days ago
AGENTS.md 5e2ef53199 Initial commit (by create-cloudflare CLI) 4 days ago
CLAUDE.md c89209bf32 feat: implement hourly exchange rate sync to Notion 3 days ago
README.md 4199d95a6e docs: add README.md 3 days ago
package-lock.json 5e2ef53199 Initial commit (by create-cloudflare CLI) 4 days ago
package.json 629dbb45c1 style: change indentation from tabs to 2 spaces 3 days ago
tsconfig.json 629dbb45c1 style: change indentation from tabs to 2 spaces 3 days ago
worker-configuration.d.ts 5e2ef53199 Initial commit (by create-cloudflare CLI) 4 days ago
wrangler.jsonc 629dbb45c1 style: change indentation from tabs to 2 spaces 3 days ago

README.md

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

Notion Setup

  1. Create a Notion database with the following properties:

| Property | Type | |----------|------| | Code | Title | | Rate | Number | | Updated At | Date |

  1. Create a Notion Integration at https://www.notion.so/my-integrations
  2. Share your database with the integration

Installation

# 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:

    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

# 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

# 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:

curl https://your-worker.workers.dev/sync

Response:

{
  "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

License

MIT