{"id":51302285,"url":"https://github.com/wasabeef/notion-auto-lock-worker","last_synced_at":"2026-06-30T21:01:41.567Z","repository":{"id":367215791,"uuid":"1277777933","full_name":"wasabeef/notion-auto-lock-worker","owner":"wasabeef","description":"Create a Notion Worker that automatically locks stale pages after a configurable delay.","archived":false,"fork":false,"pushed_at":"2026-06-25T02:49:12.000Z","size":79,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-25T04:18:23.534Z","etag":null,"topics":["notion","npm"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wasabeef.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-23T07:18:54.000Z","updated_at":"2026-06-25T02:49:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wasabeef/notion-auto-lock-worker","commit_stats":null,"previous_names":["wasabeef/notion-auto-lock-worker"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/wasabeef/notion-auto-lock-worker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabeef%2Fnotion-auto-lock-worker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabeef%2Fnotion-auto-lock-worker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabeef%2Fnotion-auto-lock-worker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabeef%2Fnotion-auto-lock-worker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wasabeef","download_url":"https://codeload.github.com/wasabeef/notion-auto-lock-worker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabeef%2Fnotion-auto-lock-worker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34983171,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-30T02:00:05.919Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["notion","npm"],"created_at":"2026-06-30T21:01:39.720Z","updated_at":"2026-06-30T21:01:41.561Z","avatar_url":"https://github.com/wasabeef.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Notion Auto Lock Worker\n\n[English](README.md) | 日本語\n\nNotion のページを、最終更新から一定時間が経過したら自動でロックする Notion Worker を生成します。\n\n生成された Worker は、指定した root page や data source を定期的に巡回し、条件を満たす未ロックのページだけを再確認してからロックします。\n\n\u003e Notion Workers は beta です。API、CLI、料金、template、hosting の仕様は変わる可能性があります。\n\nこのプロジェクトは Notion 公式の製品ではなく、Notion による承認や提携を受けたものではありません。\n\n## できること\n\n- root page 配下にある child page、child database、data source を再帰的に確認\n- data source ID を指定し、database page を直接確認\n- `last_edited_time` が指定時間より古く、`is_locked=false` のページだけを lock\n- lock 直前にページを再取得し、直近で更新されたページを skip\n- `DRY_RUN=true` で lock せずに対象数だけ確認\n- 実行結果を managed audit database に記録\n\n## 必要なもの\n\n- Node.js 22 以上\n- npm 10.9.2 以上\n- Notion CLI の `ntn`\n- Notion connection または personal access token\n- connection capability として `Read content` と `Update content`\n\ninternal connection を使う場合は、対象の root page または database で `Connections` を開き、connection を追加してください。\n\n## クイックスタート\n\n```bash\nnpm create notion-auto-lock-worker@latest my-auto-lock-worker\ncd my-auto-lock-worker\nnpm install\nnpm run check\nntn login\n```\n\nWorker secrets を設定して deploy します。\n\n```bash\nntn workers env set AUTO_LOCK_API_TOKEN=ntn_...\nntn workers env set AUTO_LOCK_ROOT_PAGE_IDS=...\nntn workers env set DRY_RUN=true\nntn workers deploy\n```\n\n最初は `DRY_RUN=true` のまま実行し、log と audit database の結果を確認してください。問題なければ `DRY_RUN=false` に変更して再 deploy します。\n\n生成されたプロジェクトには、setup、dry run、deploy、troubleshooting を含む専用 README が入ります。\n\n## 設定\n\n| 変数 | 必須 | 初期値 | 説明 |\n| --- | --- | --- | --- |\n| `AUTO_LOCK_API_TOKEN` | はい | なし | Notion API token |\n| `AUTO_LOCK_ROOT_PAGE_IDS` | 条件付き | なし | 再帰的に巡回する root page ID。複数指定はカンマ区切り |\n| `AUTO_LOCK_DATA_SOURCE_IDS` | 条件付き | なし | 直接 query 対象にする data source ID。複数指定はカンマ区切り |\n| `WORKER_SCHEDULE` | いいえ | `1h` | Worker の実行間隔。`5m` から `7d` |\n| `LOCK_AFTER_MINUTES` | いいえ | `180` | 最終更新から lock 対象になるまでの分数 |\n| `DRY_RUN` | いいえ | `true` | lock せず対象数だけ確認 |\n| `LOCK_ROOT_PAGES` | いいえ | `false` | 指定した root page 自体も lock 対象にする |\n| `MAX_CRAWL_DEPTH` | いいえ | `10` | root page crawl の最大 depth |\n| `MAX_CRAWL_PAGES` | いいえ | `1000` | 1 回の run で crawl する最大 page 数 |\n\n`AUTO_LOCK_ROOT_PAGE_IDS` と `AUTO_LOCK_DATA_SOURCE_IDS` の少なくとも一方を設定してください。\n\n## 実行間隔と料金\n\n初期値では `WORKER_SCHEDULE=1h`、`LOCK_AFTER_MINUTES=180` です。この場合、ページは最終更新から 3 時間経過したあと、次回の scheduled sync で lock されます。\n\nNotion の sync schedule は `5m` から `7d` まで指定できます。頻度を上げるほど lock までの遅延は短くなりますが、Worker run の回数は増えます。\n\n```bash\nnpm create notion-auto-lock-worker@latest my-worker --schedule 15m\nnpm create notion-auto-lock-worker@latest my-worker --lock-after-minutes 120\n```\n\n2026 年 6 月 23 日時点の Notion Workers 料金ガイドでは、beta 期間中は Business / Enterprise plan で試用無料、2026 年 8 月 11 日から Notion credits が必要とされています。scheduled sync は実行ごとに 1 Worker run として数えられ、通常は 1 run あたり約 `$0.0023` と説明されています。\n\n| 実行間隔 | 月間実行回数の目安 | 月額費用の目安 |\n| --- | ---: | ---: |\n| `1d` | 30 | `$0.07` |\n| `1h` | 720 | `$1.66` |\n| `15m` | 2,880 | `$6.62` |\n| `5m` | 8,640 | `$19.87` |\n\n実際の使用量は Worker が処理する量や Notion 側の料金体系変更によって変わります。\n\n## 動作\n\n1. `worker.sync()` の scheduled sync として実行される\n2. root page、child page、child database、data source を巡回する\n3. `LOCK_AFTER_MINUTES` から cutoff time を計算する\n4. ページを lock する直前に再取得する\n5. `last_edited_time \u003c= cutoff time` かつ `is_locked=false` のページだけを lock する\n6. checked、eligible、locked、skipped、error count を audit database に記録する\n\n指定した root page は標準では crawl の起点として扱われ、lock 対象にはなりません。root page 自体も lock したい場合は `LOCK_ROOT_PAGES=true` を設定します。\n\n## セキュリティ\n\n- Notion token をコミットしない\n- `.env` や `.env.production` をコミットしない\n- 本番環境の値は Worker secrets に保存する\n- ログと audit row には page title、page content、property value、email、完全な page URL、token を出さない\n- personal access token より、必要なページだけに共有した internal connection を優先する\n- 脆弱性の報告は `SECURITY.md` を参照する\n\n## 開発者向け\n\n開発、test、release、CHANGELOG 運用は `DEVELOPMENT.md` を参照してください。\n\n## 参考リンク\n\n- [Notion Workers の概要](https://developers.notion.com/workers/get-started/overview)\n- [Notion 公式 Workers template](https://github.com/makenotion/workers-template)\n- [sync schedule の公式ガイド](https://developers.notion.com/workers/guides/syncs)\n- [Worker secrets の公式ガイド](https://developers.notion.com/workers/guides/secrets)\n- [connection capability の公式リファレンス](https://developers.notion.com/reference/capabilities)\n- [ページ更新 API](https://developers.notion.com/reference/patch-page)\n- [Workers 料金](https://www.notion.com/help/understand-pricing-for-workers)\n\n## ライセンス\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwasabeef%2Fnotion-auto-lock-worker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwasabeef%2Fnotion-auto-lock-worker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwasabeef%2Fnotion-auto-lock-worker/lists"}