https://github.com/wasabeef/notion-auto-lock-worker
Create a Notion Worker that automatically locks stale pages after a configurable delay.
https://github.com/wasabeef/notion-auto-lock-worker
notion npm
Last synced: about 1 month ago
JSON representation
Create a Notion Worker that automatically locks stale pages after a configurable delay.
- Host: GitHub
- URL: https://github.com/wasabeef/notion-auto-lock-worker
- Owner: wasabeef
- License: mit
- Created: 2026-06-23T07:18:54.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-25T02:49:12.000Z (about 2 months ago)
- Last Synced: 2026-06-25T04:18:23.534Z (about 2 months ago)
- Topics: notion, npm
- Language: TypeScript
- Homepage:
- Size: 77.1 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Security: SECURITY.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Notion Auto Lock Worker
[English](README.md) | 日本語
Notion のページを、最終更新から一定時間が経過したら自動でロックする Notion Worker を生成します。
生成された Worker は、指定した root page や data source を定期的に巡回し、条件を満たす未ロックのページだけを再確認してからロックします。
> Notion Workers は beta です。API、CLI、料金、template、hosting の仕様は変わる可能性があります。
このプロジェクトは Notion 公式の製品ではなく、Notion による承認や提携を受けたものではありません。
## できること
- root page 配下にある child page、child database、data source を再帰的に確認
- data source ID を指定し、database page を直接確認
- `last_edited_time` が指定時間より古く、`is_locked=false` のページだけを lock
- lock 直前にページを再取得し、直近で更新されたページを skip
- `DRY_RUN=true` で lock せずに対象数だけ確認
- 実行結果を managed audit database に記録
## 必要なもの
- Node.js 22 以上
- npm 10.9.2 以上
- Notion CLI の `ntn`
- Notion connection または personal access token
- connection capability として `Read content` と `Update content`
internal connection を使う場合は、対象の root page または database で `Connections` を開き、connection を追加してください。
## クイックスタート
```bash
npm create notion-auto-lock-worker@latest my-auto-lock-worker
cd my-auto-lock-worker
npm install
npm run check
ntn login
```
Worker secrets を設定して deploy します。
```bash
ntn workers env set AUTO_LOCK_API_TOKEN=ntn_...
ntn workers env set AUTO_LOCK_ROOT_PAGE_IDS=...
ntn workers env set DRY_RUN=true
ntn workers deploy
```
最初は `DRY_RUN=true` のまま実行し、log と audit database の結果を確認してください。問題なければ `DRY_RUN=false` に変更して再 deploy します。
生成されたプロジェクトには、setup、dry run、deploy、troubleshooting を含む専用 README が入ります。
## 設定
| 変数 | 必須 | 初期値 | 説明 |
| --- | --- | --- | --- |
| `AUTO_LOCK_API_TOKEN` | はい | なし | Notion API token |
| `AUTO_LOCK_ROOT_PAGE_IDS` | 条件付き | なし | 再帰的に巡回する root page ID。複数指定はカンマ区切り |
| `AUTO_LOCK_DATA_SOURCE_IDS` | 条件付き | なし | 直接 query 対象にする data source ID。複数指定はカンマ区切り |
| `WORKER_SCHEDULE` | いいえ | `1h` | Worker の実行間隔。`5m` から `7d` |
| `LOCK_AFTER_MINUTES` | いいえ | `180` | 最終更新から lock 対象になるまでの分数 |
| `DRY_RUN` | いいえ | `true` | lock せず対象数だけ確認 |
| `LOCK_ROOT_PAGES` | いいえ | `false` | 指定した root page 自体も lock 対象にする |
| `MAX_CRAWL_DEPTH` | いいえ | `10` | root page crawl の最大 depth |
| `MAX_CRAWL_PAGES` | いいえ | `1000` | 1 回の run で crawl する最大 page 数 |
`AUTO_LOCK_ROOT_PAGE_IDS` と `AUTO_LOCK_DATA_SOURCE_IDS` の少なくとも一方を設定してください。
## 実行間隔と料金
初期値では `WORKER_SCHEDULE=1h`、`LOCK_AFTER_MINUTES=180` です。この場合、ページは最終更新から 3 時間経過したあと、次回の scheduled sync で lock されます。
Notion の sync schedule は `5m` から `7d` まで指定できます。頻度を上げるほど lock までの遅延は短くなりますが、Worker run の回数は増えます。
```bash
npm create notion-auto-lock-worker@latest my-worker --schedule 15m
npm create notion-auto-lock-worker@latest my-worker --lock-after-minutes 120
```
2026 年 6 月 23 日時点の Notion Workers 料金ガイドでは、beta 期間中は Business / Enterprise plan で試用無料、2026 年 8 月 11 日から Notion credits が必要とされています。scheduled sync は実行ごとに 1 Worker run として数えられ、通常は 1 run あたり約 `$0.0023` と説明されています。
| 実行間隔 | 月間実行回数の目安 | 月額費用の目安 |
| --- | ---: | ---: |
| `1d` | 30 | `$0.07` |
| `1h` | 720 | `$1.66` |
| `15m` | 2,880 | `$6.62` |
| `5m` | 8,640 | `$19.87` |
実際の使用量は Worker が処理する量や Notion 側の料金体系変更によって変わります。
## 動作
1. `worker.sync()` の scheduled sync として実行される
2. root page、child page、child database、data source を巡回する
3. `LOCK_AFTER_MINUTES` から cutoff time を計算する
4. ページを lock する直前に再取得する
5. `last_edited_time <= cutoff time` かつ `is_locked=false` のページだけを lock する
6. checked、eligible、locked、skipped、error count を audit database に記録する
指定した root page は標準では crawl の起点として扱われ、lock 対象にはなりません。root page 自体も lock したい場合は `LOCK_ROOT_PAGES=true` を設定します。
## セキュリティ
- Notion token をコミットしない
- `.env` や `.env.production` をコミットしない
- 本番環境の値は Worker secrets に保存する
- ログと audit row には page title、page content、property value、email、完全な page URL、token を出さない
- personal access token より、必要なページだけに共有した internal connection を優先する
- 脆弱性の報告は `SECURITY.md` を参照する
## 開発者向け
開発、test、release、CHANGELOG 運用は `DEVELOPMENT.md` を参照してください。
## 参考リンク
- [Notion Workers の概要](https://developers.notion.com/workers/get-started/overview)
- [Notion 公式 Workers template](https://github.com/makenotion/workers-template)
- [sync schedule の公式ガイド](https://developers.notion.com/workers/guides/syncs)
- [Worker secrets の公式ガイド](https://developers.notion.com/workers/guides/secrets)
- [connection capability の公式リファレンス](https://developers.notion.com/reference/capabilities)
- [ページ更新 API](https://developers.notion.com/reference/patch-page)
- [Workers 料金](https://www.notion.com/help/understand-pricing-for-workers)
## ライセンス
MIT