From f18cbe8f60257105d0443dc4b1b233b0ab07f5e7 Mon Sep 17 00:00:00 2001 From: YJack0000 Date: Fri, 28 Aug 2026 16:58:52 +0800 Subject: [PATCH 1/7] =?UTF-8?q?[feature]=20SSO=20login=EF=BC=88home-realm?= =?UTF-8?q?=20discovery=EF=BC=89=E8=88=87=E5=B8=B3=E5=AF=86=E7=99=BB?= =?UTF-8?q?=E5=85=A5=EF=BC=9A@better-auth/sso=20+=20Cloudflare=20Access=20?= =?UTF-8?q?IdP=20=E6=94=AF=E6=8F=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 30 ++++- bun.lock | 63 +++++++++-- docs/sso.md | 145 ++++++++++++++++++++++++ migrations/0020_sso_provider.sql | 44 +++++++ package.json | 1 + scripts/create-user.ts | 118 +++++++++++++++++++ scripts/register-sso-provider.ts | 189 +++++++++++++++++++++++++++++++ src/app/login/page.tsx | 173 +++++++++++++++++++++++++--- src/db/auth-schema.ts | 27 +++++ src/i18n/messages/auth.ts | 30 ++++- src/lib/auth-client.ts | 4 +- src/lib/auth.ts | 55 ++++++++- 12 files changed, 852 insertions(+), 27 deletions(-) create mode 100644 docs/sso.md create mode 100644 migrations/0020_sso_provider.sql create mode 100644 scripts/create-user.ts create mode 100644 scripts/register-sso-provider.ts diff --git a/README.md b/README.md index c99aaa2..adf5add 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,9 @@ same ideas — it is [`docs/index.html`](docs/index.html), published with GitHub against it. See [`docs/mcp.md`](docs/mcp.md). - **Bilingual UI** — English and Traditional Chinese, switched per user without reloading or changing URLs. See [Internationalization](#internationalization). -- **Auth** — Google OAuth via better-auth, invite-based member management, org settings. +- **Auth** — Google OAuth, enterprise SSO (any OIDC provider, routed by email domain) and + email + password, all via better-auth; invite-based member management, org settings. + See [`docs/sso.md`](docs/sso.md). ## Tech stack @@ -128,6 +130,28 @@ The first user to sign in lands on `/onboarding`. To make someone the owner of a organization, edit `v_email` in [`scripts/bootstrap-owner.sql`](scripts/bootstrap-owner.sql) and run it against your database. +### Signing in without Google + +Google is the primary method, but it is not the only one. + +**Email + password.** Useful if you self-host and do not want to wire up Google at all. +Public password *signup* is deliberately off: better-auth links accounts by email +address, and an unverified self-registered password account on someone else's email +would let an attacker sit and wait for the real owner to arrive via Google. So accounts +are created server-side instead: + +```bash +bun scripts/create-user.ts --email you@example.com \ + --password 'a-long-passphrase' --name 'Your Name' --org your-org-slug +``` + +Minimum password length is 12. Pass the password via `CREATE_USER_PASSWORD` instead of +`--password` to keep it out of your shell history. + +**Enterprise SSO.** Any OIDC provider, routed by the email's domain — the user types +their address and gets handed to the right IdP. Registration is likewise server-side +only. See [`docs/sso.md`](docs/sso.md). + ## Configuration | Variable | Purpose | @@ -220,8 +244,8 @@ src/ i18n/ # locale config and bilingual message catalogue lib/ # auth (better-auth), session helpers, object storage, utils migrations/ # plain forward-only SQL migrations -scripts/ # one-off operational SQL (e.g. bootstrap-owner) -docs/ # landing page (GitHub Pages root), deployment guide, MCP docs, assets +scripts/ # one-off operational scripts (bootstrap-owner, create-user, register-sso-provider) +docs/ # landing page (GitHub Pages root), deployment guide, MCP + SSO docs, assets Dockerfile # vendor-neutral self-host image docker-compose.yml ``` diff --git a/bun.lock b/bun.lock index 1fbfbd5..4c55061 100644 --- a/bun.lock +++ b/bun.lock @@ -4,8 +4,9 @@ "": { "name": "internal", "dependencies": { + "@better-auth/sso": "^1.6.14", "@neondatabase/serverless": "^1.1.0", - "@opennextjs/cloudflare": "1.20.3", + "@opennextjs/cloudflare": "^1.20.3", "better-auth": "^1.6.14", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", @@ -73,6 +74,8 @@ "@ast-grep/napi-win32-x64-msvc": ["@ast-grep/napi-win32-x64-msvc@0.40.5", "", { "os": "win32", "cpu": "x64" }, "sha512-dqm5zg/o4Nh4VOQPEpMS23ot8HVd22gG0eg01t4CFcZeuzyuSgBlOL3N7xLbz3iH2sVkk7keuBwAzOIpTqziNQ=="], + "@authenio/xml-encryption": ["@authenio/xml-encryption@2.0.2", "", { "dependencies": { "@xmldom/xmldom": "^0.8.6", "escape-html": "^1.0.3", "xpath": "0.0.32" } }, "sha512-cTlrKttbrRHEw3W+0/I609A2Matj5JQaRvfLtEIGZvlN0RaPi+3ANsMeqAyCAVlH/lUIW2tmtBlSMni74lcXeg=="], + "@aws-crypto/crc32": ["@aws-crypto/crc32@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], "@aws-crypto/crc32c": ["@aws-crypto/crc32c@5.2.0", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag=="], @@ -235,6 +238,8 @@ "@better-auth/prisma-adapter": ["@better-auth/prisma-adapter@1.6.14", "", { "peerDependencies": { "@better-auth/core": "^1.6.14", "@better-auth/utils": "0.4.1", "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0", "prisma": "^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["@prisma/client", "prisma"] }, "sha512-9b9wSqhCthMmOYo0QdX+N/cOv+fNck/JE5CZQuuWwEJl5QeoYhCZesXjts5VfLAPMIf6vKw3QNBrn0SVMXXi2Q=="], + "@better-auth/sso": ["@better-auth/sso@1.6.14", "", { "dependencies": { "fast-xml-parser": "^5.8.0", "jose": "^6.1.3", "samlify": "^2.13.1", "tldts": "^6.1.0", "zod": "^4.3.6" }, "peerDependencies": { "@better-auth/core": "^1.6.14", "@better-auth/utils": "0.4.1", "@better-fetch/fetch": "1.1.21", "better-auth": "^1.6.14", "better-call": "1.3.5" } }, "sha512-P0o30yry8FVr0YwB/nCTJ4+oNIBholq6njiExzmqFI88MV17pblahov6+pmXCYrPyh1NGkI+HwTLirrFcKfLOw=="], + "@better-auth/telemetry": ["@better-auth/telemetry@1.6.14", "", { "peerDependencies": { "@better-auth/core": "^1.6.14", "@better-auth/utils": "0.4.1", "@better-fetch/fetch": "1.1.21" } }, "sha512-ALi3cEx5eyrFY+TeAdhc1uq8FqJyGvzgvIo7GQZOqGqLZxHY9nte44WN++jBFGJJbsW3e4cgLj8dQK291s6wWQ=="], "@better-auth/utils": ["@better-auth/utils@0.4.1", "", { "dependencies": { "@noble/hashes": "^2.0.1" } }, "sha512-SZBPRPF3z0nBvE5ygOkxae35wnnXPRShmqFo78S+qslLeFoPu/pMgnXAuNKFMMybac3tiLaVg1e3MQW5MC+1iA=="], @@ -481,7 +486,7 @@ "@noble/hashes": ["@noble/hashes@2.2.0", "", {}, "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg=="], - "@nodable/entities": ["@nodable/entities@2.1.1", "", {}, "sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg=="], + "@nodable/entities": ["@nodable/entities@3.0.0", "", {}, "sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw=="], "@node-minify/core": ["@node-minify/core@8.0.6", "", { "dependencies": { "@node-minify/utils": "8.0.6", "glob": "9.3.5", "mkdirp": "1.0.4" } }, "sha512-/vxN46ieWDLU67CmgbArEvOb41zlYFOkOtr9QW9CnTrBLuTyGgkyNWC2y5+khvRw3Br58p2B5ZVSx/PxCTru6g=="], @@ -925,6 +930,10 @@ "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.12.2", "", { "os": "win32", "cpu": "x64" }, "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA=="], + "@xmldom/is-dom-node": ["@xmldom/is-dom-node@1.0.1", "", {}, "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q=="], + + "@xmldom/xmldom": ["@xmldom/xmldom@0.8.15", "", {}, "sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], @@ -947,6 +956,8 @@ "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "anynum": ["anynum@1.0.1", "", {}, "sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A=="], + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], @@ -971,6 +982,8 @@ "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="], + "asn1": ["asn1@0.2.6", "", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="], + "ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="], "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="], @@ -1273,7 +1286,7 @@ "fast-xml-builder": ["fast-xml-builder@1.2.0", "", { "dependencies": { "path-expression-matcher": "^1.5.0", "xml-naming": "^0.1.0" } }, "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q=="], - "fast-xml-parser": ["fast-xml-parser@5.7.3", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.1.7", "path-expression-matcher": "^1.5.0", "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg=="], + "fast-xml-parser": ["fast-xml-parser@5.11.1", "", { "dependencies": { "@nodable/entities": "^3.0.0", "fast-xml-builder": "^1.2.0", "is-unsafe": "^2.0.0", "path-expression-matcher": "^1.6.2", "strnum": "^2.4.2", "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw=="], "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], @@ -1489,6 +1502,8 @@ "is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="], + "is-unsafe": ["is-unsafe@2.0.2", "", {}, "sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ=="], + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="], @@ -1649,6 +1664,8 @@ "node-releases": ["node-releases@2.0.47", "", {}, "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og=="], + "node-rsa": ["node-rsa@1.1.1", "", { "dependencies": { "asn1": "^0.2.4" } }, "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw=="], + "npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], @@ -1705,7 +1722,7 @@ "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], - "path-expression-matcher": ["path-expression-matcher@1.5.0", "", {}, "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ=="], + "path-expression-matcher": ["path-expression-matcher@1.6.2", "", {}, "sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], @@ -1817,6 +1834,8 @@ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + "samlify": ["samlify@2.13.1", "", { "dependencies": { "@authenio/xml-encryption": "^2.0.2", "@xmldom/xmldom": "^0.8.11", "node-rsa": "^1.1.1", "xml": "^1.0.1", "xml-crypto": "^6.1.2", "xml-escape": "^1.1.0", "xpath": "^0.0.34" } }, "sha512-vdYr/zohDGBbfWNU4miEzc1jmWOtkLySPViapC6nfGkv9KxzLq4UlGkKyryzwLw4jVlZk88Rw93HaCRVpe+t+g=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], "semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -1897,7 +1916,7 @@ "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="], - "strnum": ["strnum@2.3.0", "", {}, "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q=="], + "strnum": ["strnum@2.4.2", "", { "dependencies": { "anynum": "^1.0.1" } }, "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw=="], "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], @@ -1919,9 +1938,9 @@ "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], - "tldts": ["tldts@7.4.2", "", { "dependencies": { "tldts-core": "^7.4.2" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw=="], + "tldts": ["tldts@6.1.86", "", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], - "tldts-core": ["tldts-core@7.4.2", "", {}, "sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA=="], + "tldts-core": ["tldts-core@6.1.86", "", {}, "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], @@ -2033,7 +2052,15 @@ "wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="], - "xml-naming": ["xml-naming@0.1.0", "", {}, "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw=="], + "xml": ["xml@1.0.1", "", {}, "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw=="], + + "xml-crypto": ["xml-crypto@6.1.2", "", { "dependencies": { "@xmldom/is-dom-node": "^1.0.1", "@xmldom/xmldom": "^0.8.10", "xpath": "^0.0.33" } }, "sha512-leBOVQdVi8FvPJrMYoum7Ici9qyxfE4kVi+AkpUoYCSXaQF4IlBm1cneTK9oAxR61LpYxTx7lNcsnBIeRpGW2w=="], + + "xml-escape": ["xml-escape@1.1.0", "", {}, "sha512-B/T4sDK8Z6aUh/qNr7mjKAwwncIljFuUP+DO/D5hloYFj+90O88z8Wf7oSucZTHxBAsC1/CTP4rtx/x1Uf72Mg=="], + + "xml-naming": ["xml-naming@0.3.0", "", {}, "sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ=="], + + "xpath": ["xpath@0.0.34", "", {}, "sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA=="], "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], @@ -2061,6 +2088,8 @@ "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], + "@authenio/xml-encryption/xpath": ["xpath@0.0.32", "", {}, "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw=="], + "@aws-crypto/sha1-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], "@aws-crypto/sha256-browser/@smithy/util-utf8": ["@smithy/util-utf8@2.3.0", "", { "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A=="], @@ -2071,6 +2100,8 @@ "@aws-sdk/nested-clients/@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.31", "", { "dependencies": { "@aws-sdk/types": "^3.973.10", "@smithy/signature-v4": "^5.4.6", "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-Kn2up9SlG1KC6wRtwf0d7waTGF6rvp9DxYqB54x6UCKdQ6kyaXCqHL4WGb5vUJga5kS8FxnjhY0LqM28aMvnNQ=="], + "@aws-sdk/xml-builder/fast-xml-parser": ["fast-xml-parser@5.7.3", "", { "dependencies": { "@nodable/entities": "^2.1.0", "fast-xml-builder": "^1.1.7", "path-expression-matcher": "^1.5.0", "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg=="], + "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], "@cspotcode/source-map-support/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="], @@ -2157,6 +2188,10 @@ "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "fast-xml-builder/path-expression-matcher": ["path-expression-matcher@1.5.0", "", {}, "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ=="], + + "fast-xml-builder/xml-naming": ["xml-naming@0.1.0", "", {}, "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw=="], + "fetch-blob/web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], @@ -2199,6 +2234,8 @@ "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + "tough-cookie/tldts": ["tldts@7.4.2", "", { "dependencies": { "tldts-core": "^7.4.2" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-kCwffuaH8ntKtygnWe1b4BJKWiCUH30n5KfoTr6IchcXOwR7chAOFJxFrH3vjANafUYrIA4a7SDL+nn7SiR4Sw=="], + "tsx/esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="], "type-is/content-type": ["content-type@2.0.0", "", {}, "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ=="], @@ -2209,6 +2246,14 @@ "wrap-ansi/strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], + "xml-crypto/xpath": ["xpath@0.0.33", "", {}, "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA=="], + + "@aws-sdk/xml-builder/fast-xml-parser/@nodable/entities": ["@nodable/entities@2.1.1", "", {}, "sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg=="], + + "@aws-sdk/xml-builder/fast-xml-parser/path-expression-matcher": ["path-expression-matcher@1.5.0", "", {}, "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ=="], + + "@aws-sdk/xml-builder/fast-xml-parser/strnum": ["strnum@2.3.0", "", {}, "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q=="], + "@dotenvx/dotenvx/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "@dotenvx/dotenvx/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], @@ -2359,6 +2404,8 @@ "string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "tough-cookie/tldts/tldts-core": ["tldts-core@7.4.2", "", {}, "sha512-nwEyF4vl4RSJjwSjBUmOSxc3BFPoIFdlRthJ6e+5v9P3bHNsoD06UjuqMUspqp7vsEZ1beaHi1km+optiE17yA=="], + "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA=="], "tsx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.0", "", { "os": "android", "cpu": "arm" }, "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ=="], diff --git a/docs/sso.md b/docs/sso.md new file mode 100644 index 0000000..5530d5b --- /dev/null +++ b/docs/sso.md @@ -0,0 +1,145 @@ +# Single sign-on (SSO) + +Besides Google, the app can sign people in through **any OIDC identity provider** — +Cloudflare Access, Okta, Entra ID, Auth0, Keycloak, whatever speaks OpenID Connect. + +The login page does **home realm discovery**: the user picks *Continue with SSO* and +types their email. The email's domain is matched against the registered providers and +the browser is handed to whichever IdP owns that domain. No domain is hardcoded +anywhere in the UI — which domains work is entirely a function of what has been +registered in the database. + +First sign-in through a provider creates the user automatically (implicit signup). +It does **not** put them in an organization; they land on `/onboarding` and join via +the normal invitation flow, exactly like a first-time Google user. + +Implemented with better-auth's [`@better-auth/sso`](https://www.better-auth.com/docs/plugins/sso) +plugin (see `src/lib/auth.ts`). SAML is supported by the plugin but not used here. + +## Endpoints + +| Purpose | URL | +| --- | --- | +| Start SSO sign-in (called by the login page) | `POST /api/auth/sign-in/sso` | +| OIDC callback — **this is the IdP's redirect URL** | `/api/auth/sso/callback/` | +| Provider registration | *disabled over HTTP — see below* | + +`` is `BETTER_AUTH_URL`, the public URL of the deployment. + +## Registration is server-side only + +The plugin ships a `POST /sso/register` endpoint that is guarded by nothing more than +"you are signed in". That is not enough for this app: registering a provider means +declaring *who is allowed to mint identities here*, so any ordinary member could point +a domain at an IdP they control and issue themselves accounts. + +`src/lib/auth.ts` therefore closes that route two independent ways: + +- `disabledPaths: ["/sso/register"]` — the router answers `404` before the handler runs. +- `sso({ providersLimit: 0 })` — the handler itself returns `403` even if the route + were ever reachable. + +`disabledPaths` is enforced in the HTTP router only, so a direct server-side write still +works. Registration goes through `scripts/register-sso-provider.ts`, which needs +`DATABASE_URL` — i.e. an operator, not a user. + +`/sso/update-provider` and `/sso/delete-provider` stay enabled: they check ownership +against `sso_provider.user_id`, and that column is only ever filled by the script. + +## Setting up Cloudflare Access for SaaS + +Cloudflare Access can act as the IdP in front of whatever identity source your team +already uses (Google Workspace, Entra ID, one-time PIN, …). Zero Trust → **Access** → +**Applications** → **Add an application** → **SaaS**. + +1. **Application** — give it a name. Under *Application type* pick **OIDC**. +2. **Scopes** — tick `openid`, `email`, `profile`. These are what the app asks for. +3. **Redirect URLs** — enter the callback for the provider id you are about to use: + + ``` + https:///api/auth/sso/callback/ + ``` + + `` is a short slug you choose (e.g. `acme`). It must match the + `--provider-id` you pass to the script, because it is part of the URL. +4. Save. Cloudflare then shows three values you will need — copy them now, the client + secret is only shown once: + + | Cloudflare field | Script argument | + | --- | --- | + | Client ID | `--client-id` | + | Client secret | `--client-secret` | + | Issuer (a.k.a. *OIDC issuer*) | `--issuer` | + + The issuer looks like this, where `` is the same Client ID as above: + + ``` + https://.cloudflareaccess.com/cdn-cgi/access/sso/oidc/ + ``` + + Discovery lives at `/.well-known/openid-configuration`. You can `curl` it to + confirm the values before running the script. +5. Add an **Access policy** deciding who may use the application. Cloudflare enforces + this *before* the user ever reaches this app. + +Other IdPs work the same way — only the wording of the fields differs. + +## Registering the provider + +```bash +SSO_CLIENT_SECRET='…' bun scripts/register-sso-provider.ts \ + --provider-id acme \ + --domain acme.com \ + --issuer 'https://.cloudflareaccess.com/cdn-cgi/access/sso/oidc/' \ + --client-id '' +``` + +| Argument | Env var | Meaning | +| --- | --- | --- | +| `--provider-id` | `SSO_PROVIDER_ID` | Slug; appears in the callback URL. Must match the IdP's redirect URL. | +| `--domain` | `SSO_DOMAIN` | Email domain routed to this IdP. This is the home-realm-discovery key. | +| `--issuer` | `SSO_ISSUER` | OIDC issuer URL. | +| `--client-id` | `SSO_CLIENT_ID` | OAuth client id from the IdP. | +| `--client-secret` | `SSO_CLIENT_SECRET` | OAuth client secret. Prefer the env var so it stays out of shell history. | +| `--owner-email` | — | Optional. An existing user who may edit/delete this provider over HTTP. Omit to keep it script-managed only. | +| `--org` | — | Optional organization slug to associate. Does **not** auto-add users to it. | +| `--scopes` | — | Comma-separated. Default `openid,email,profile`. | + +The script fetches the discovery document at registration time and stores the resolved +endpoints. That is deliberate: the plugin only re-runs discovery at sign-in when the +stored config is missing endpoints, and that path validates IdP URLs against the app's +`trustedOrigins` — so pre-resolving means you never have to touch `trustedOrigins` to +add an IdP. During discovery the script trusts only the issuer's own origin, so a +malicious discovery document cannot redirect the token or JWKS endpoint elsewhere. + +`bun` reads `.env.local` automatically, so `DATABASE_URL` does not need to be passed. +Use `bun --env-file=… ` to target a different environment. + +It prints the callback URL when it finishes — check that it matches what you entered in +the IdP. + +## Verifying + +1. Open `/login`, click **Continue with SSO**, enter an address at the registered domain. +2. You should be sent to the IdP, and back to `/dashboard` (or straight back into an MCP + OAuth flow, if that is what started the login). +3. An email domain with no provider gets a friendly "SSO is not configured for this email + domain" toast rather than a raw error. + +## Removing a provider + +There is no UI. Delete the row: + +```sql +DELETE FROM sso_provider WHERE provider_id = 'acme'; +``` + +Existing sessions survive — sign-in method is not re-checked per request. Revoke access +at the IdP (or delete the sessions) if you need the users out immediately. + +## See also + +- `migrations/0020_sso_provider.sql` — the table and why each column exists. +- `src/lib/auth.ts` — plugin configuration and the registration lockdown. +- Password sign-in, the other non-Google method, is documented in the README; accounts + are provisioned with `scripts/create-user.ts`. diff --git a/migrations/0020_sso_provider.sql b/migrations/0020_sso_provider.sql new file mode 100644 index 0000000..11f6f81 --- /dev/null +++ b/migrations/0020_sso_provider.sql @@ -0,0 +1,44 @@ +-- 0020: 企業 SSO(@better-auth/sso plugin)。 +-- +-- 目的:讓客戶/自架者用自己的 IdP 登入,不必人人都有 Google 帳號。登入頁做的是 +-- home realm discovery —— 使用者只填 email,plugin 拿 email 的網域比對下面這張表的 +-- `domain` 欄,命中就導去對應的 IdP。所以「支援哪些網域」是資料,不是程式。 +-- +-- 欄位表照抄 plugin 自己的 schema 宣告(`sso()` 回傳值的 schema.ssoProvider.fields), +-- 沒有多加也沒有少放。plugin 沒有為這個 model 宣告 created_at / updated_at,這裡也就 +-- 沒有 —— 加了 better-auth 也不會去寫它。`domain_verified` 只在 plugin 開啟 +-- `domainVerification` 時才屬於 schema,本專案沒開,故不建。 +-- +-- Forward-only, additive. Run AFTER 0019_contract_billing_plan.sql. +-- "user" 是保留字,故加引號(與其他 auth 表一致)。 +-- +-- ⚠️ 這張表**沒有**對應的 HTTP 寫入口。plugin 的 POST /sso/register 只掛 +-- sessionMiddleware,任何登入中的使用者都能註冊 IdP,等於把「誰能簽發本站身分」 +-- 交出去,所以 src/lib/auth.ts 用 disabledPaths + providersLimit: 0 兩層把它封死。 +-- 註冊一律走 scripts/register-sso-provider.ts(需要 DATABASE_URL)。詳見 docs/sso.md。 + +CREATE TABLE sso_provider ( + id text PRIMARY KEY, + -- IdP 的 OIDC issuer。Cloudflare Access for SaaS 長這樣: + -- https://.cloudflareaccess.com/cdn-cgi/access/sso/oidc/ + issuer text NOT NULL, + -- 整包 OIDC 設定(endpoints、clientId、clientSecret、scopes…)序列化成 JSON + -- 字串存一欄。這是 plugin 的形狀 —— 它自己 JSON.parse 回來用。 + oidc_config text, + -- SAML 走同一張表的另一欄。本專案目前只註冊 OIDC provider。 + saml_config text, + -- 註冊這個 provider 的人。腳本註冊時填「以誰的名義」,也決定了誰能改/刪它 + -- (plugin 的 update/delete 走 checkProviderAccess,比對的就是這一欄)。 + user_id text REFERENCES "user"(id) ON DELETE CASCADE, + -- 對外可見的 provider 代號,也是 callback 路徑的一段: + -- /api/auth/sso/callback/ + provider_id text NOT NULL UNIQUE, + -- 綁定組織(選填)。本次不做組織自動配置,登入後仍走既有的邀請流程。 + organization_id text, + -- home realm discovery 的鍵:email 的網域比對這一欄。 + domain text NOT NULL +); + +-- 每次 SSO 登入都會用網域查一次;plugin 找不到精確相符時才會全表掃描做子網域比對。 +CREATE INDEX idx_sso_provider_domain ON sso_provider(domain); +CREATE INDEX idx_sso_provider_user ON sso_provider(user_id); diff --git a/package.json b/package.json index a222e18..3f15b74 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "cf:typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts" }, "dependencies": { + "@better-auth/sso": "^1.6.14", "@neondatabase/serverless": "^1.1.0", "@opennextjs/cloudflare": "^1.20.3", "better-auth": "^1.6.14", diff --git a/scripts/create-user.ts b/scripts/create-user.ts new file mode 100644 index 0000000..efd0637 --- /dev/null +++ b/scripts/create-user.ts @@ -0,0 +1,118 @@ +/** + * 建立一個 email + 密碼帳號(伺服器端專用)。 + * + * 為什麼需要這支腳本:src/lib/auth.ts 把 `emailAndPassword.disableSignUp` 設成 + * true,也就是 HTTP 上的 POST /api/auth/sign-up/email 一律拒絕。理由寫在那裡 + * ——公開的密碼註冊會開出帳號預劫持的路。所以密碼帳號只能由能拿到 DATABASE_URL + * 的人在伺服器端開,也就是這支腳本。 + * + * 它為什麼繞得過 disableSignUp:那個開關只在 /sign-up/email 這條 route 裡被檢查, + * 不在資料層。這支腳本走的是 `auth.$context` 底下的 internalAdapter —— 與 + * better-auth 官方 admin plugin 的 createUser 完全同一條路徑(見 + * better-auth/dist/plugins/admin/routes.mjs:createUser → password.hash → + * linkAccount,providerId "credential"),只是少了 HTTP 那一層。 + * + * 用法(本機,對 dev DB): + * bun scripts/create-user.ts --email reviewer@example.com \ + * --password 'a-long-passphrase' --name 'Directory Reviewer' + * + * 加上 --org 讓他直接成為某個組織的成員(不必再走邀請流程): + * bun scripts/create-user.ts --email reviewer@example.com \ + * --password 'a-long-passphrase' --name 'Directory Reviewer' \ + * --org my-org-slug --role admin + * + * bun 會自動讀取 .env.local,所以 DATABASE_URL / BETTER_AUTH_SECRET 不必另外帶。 + * 要指定別的環境檔就用 `bun --env-file=.dev.vars scripts/create-user.ts …`。 + * + * ⚠️ 密碼會出現在 shell 歷史裡。正式用途請改用 `--password "$(read -rs …)"` + * 之類的方式,或把它放進環境變數 CREATE_USER_PASSWORD(本腳本也讀這個)。 + */ +import { parseArgs } from "node:util"; +import { auth } from "@/lib/auth"; + +const { values } = parseArgs({ + options: { + email: { type: "string" }, + password: { type: "string" }, + name: { type: "string" }, + org: { type: "string" }, + role: { type: "string", default: "member" }, + }, +}); + +const email = values.email?.trim().toLowerCase(); +const password = values.password ?? process.env.CREATE_USER_PASSWORD; +const name = values.name?.trim(); +const orgSlug = values.org?.trim(); +const role = values.role ?? "member"; + +function fail(message: string): never { + console.error(`✗ ${message}`); + process.exit(1); +} + +if (!email) fail("--email is required"); +if (!password) fail("--password (or CREATE_USER_PASSWORD) is required"); +if (!name) fail("--name is required"); +if (!["owner", "admin", "member"].includes(role)) { + fail(`--role must be one of owner | admin | member (got "${role}")`); +} + +const ctx = await auth.$context; + +// 長度限制從 auth 設定本身讀,不要在這裡再寫一個數字 —— 兩邊各寫一份,遲早會不一致, +// 而且不一致的方向會是「腳本開得出登入頁拒絕的帳號」。 +const minLength = ctx.password.config.minPasswordLength; +if (password.length < minLength) { + fail(`password must be at least ${minLength} characters (got ${password.length})`); +} + +if (await ctx.internalAdapter.findUserByEmail(email)) { + fail(`a user with email ${email} already exists`); +} + +// 先找組織,再建 user:找不到組織就早一點失敗,不要留下一個半成品帳號。 +let organizationId: string | null = null; +if (orgSlug) { + const org = await ctx.adapter.findOne<{ id: string; name: string }>({ + model: "organization", + where: [{ field: "slug", value: orgSlug }], + }); + if (!org) fail(`no organization with slug "${orgSlug}"`); + organizationId = org.id; +} + +const user = await ctx.internalAdapter.createUser({ + email, + name, + // 這個帳號是人工開的,email 由開帳號的人背書 —— 系統裡不該留下一個「永遠等不到 + // 驗證信」的未驗證狀態。也讓之後同一個人改用 Google 登入時能正常連到同一個 user。 + emailVerified: true, +}); + +// providerId 必須正好是 "credential":better-auth 的密碼登入就是照這個字串去 +// account 表找那一列的 password 欄。accountId 用 user.id,與 admin plugin 一致。 +await ctx.internalAdapter.linkAccount({ + accountId: user.id, + providerId: "credential", + userId: user.id, + password: await ctx.password.hash(password), +}); + +console.log(`✓ created user ${user.email} (id ${user.id}, name "${user.name}")`); +console.log(" sign-in method: email + password (account.provider_id = 'credential')"); + +if (organizationId) { + await ctx.adapter.create({ + model: "member", + data: { + organizationId, + userId: user.id, + role, + createdAt: new Date(), + }, + }); + console.log(`✓ added as "${role}" of organization ${orgSlug} (id ${organizationId})`); +} else { + console.log(" no --org given: they will land on /onboarding until they join an org"); +} diff --git a/scripts/register-sso-provider.ts b/scripts/register-sso-provider.ts new file mode 100644 index 0000000..9dae1d8 --- /dev/null +++ b/scripts/register-sso-provider.ts @@ -0,0 +1,189 @@ +/** + * 註冊一個 OIDC 的 SSO provider(伺服器端專用)。 + * + * 為什麼是腳本而不是後台頁面:@better-auth/sso 的 POST /sso/register 只掛了 + * sessionMiddleware —— 任何一個登入中的一般使用者都能註冊一個他自己控制的 IdP, + * 等於把「誰能簽發本站身分」的權力交出去。src/lib/auth.ts 因此用 + * `disabledPaths: ["/sso/register"]` + `sso({ providersLimit: 0 })` 兩層把那條 + * route 封死,註冊只留這一條需要 DATABASE_URL 的路徑。 + * + * disabledPaths 只在 HTTP router 的 onRequest 生效,所以「封死 HTTP」與「腳本 + * 仍能寫入」並不衝突;本腳本直接走 adapter 寫 ssoProvider,寫進去的欄位與 + * /sso/register 成功時寫的完全一致(見 @better-auth/sso 的 buildOIDCConfig)。 + * + * 用法(本機,對 dev DB): + * bun scripts/register-sso-provider.ts \ + * --provider-id acme \ + * --domain acme.com \ + * --issuer "$SSO_ISSUER" \ + * --client-id "$SSO_CLIENT_ID" \ + * --client-secret "$SSO_CLIENT_SECRET" + * + * 每個參數也都能改用環境變數帶(SSO_PROVIDER_ID / SSO_DOMAIN / SSO_ISSUER / + * SSO_CLIENT_ID / SSO_CLIENT_SECRET)—— client secret 建議走這條,不要留在 + * shell 歷史裡。bun 會自動讀 .env.local。 + * + * ── Cloudflare Access for SaaS(OIDC)的對應關係 ──────────────────────────── + * 在 Zero Trust → Access → Applications 建一個 SaaS 應用、type 選 OIDC,建完後 + * Cloudflare 會給三個值: + * + * Cloudflare 給的 這支腳本的參數 + * ───────────────────────────────── ────────────────── + * Client ID --client-id + * Client secret --client-secret + * Issuer / "Public key / OIDC issuer" --issuer + * + * issuer 長這樣( 就是上面那個 Client ID): + * https://.cloudflareaccess.com/cdn-cgi/access/sso/oidc/ + * discovery 文件在 /.well-known/openid-configuration,本腳本會去抓它把 + * 各個 endpoint 寫進 DB —— 這樣之後每次登入都不必再連 discovery。 + * + * 反過來,Cloudflare 那邊的 Redirect URL 要填本站的 SSO callback: + * /api/auth/sso/callback/ + * 腳本跑完會把這個網址印出來。完整步驟見 docs/sso.md。 + */ +import { parseArgs } from "node:util"; +import { DiscoveryError, discoverOIDCConfig } from "@better-auth/sso"; +import { auth } from "@/lib/auth"; + +const { values } = parseArgs({ + options: { + "provider-id": { type: "string" }, + domain: { type: "string" }, + issuer: { type: "string" }, + "client-id": { type: "string" }, + "client-secret": { type: "string" }, + // 這個 provider 的擁有者(email)。給了才有人能透過 HTTP 的 + // /sso/update-provider、/sso/delete-provider 管它;不給就是純腳本管理。 + "owner-email": { type: "string" }, + org: { type: "string" }, + scopes: { type: "string", default: "openid,email,profile" }, + }, +}); + +function fail(message: string): never { + console.error(`✗ ${message}`); + process.exit(1); +} + +const providerId = (values["provider-id"] ?? process.env.SSO_PROVIDER_ID)?.trim(); +const domain = (values.domain ?? process.env.SSO_DOMAIN)?.trim().toLowerCase(); +const issuer = (values.issuer ?? process.env.SSO_ISSUER)?.trim(); +const clientId = (values["client-id"] ?? process.env.SSO_CLIENT_ID)?.trim(); +const clientSecret = values["client-secret"] ?? process.env.SSO_CLIENT_SECRET; +const ownerEmail = values["owner-email"]?.trim().toLowerCase(); +const orgSlug = values.org?.trim(); +const scopes = (values.scopes ?? "openid,email,profile") + .split(",") + .map((s) => s.trim()) + .filter(Boolean); + +if (!providerId) fail("--provider-id (or SSO_PROVIDER_ID) is required"); +if (!domain) fail("--domain (or SSO_DOMAIN) is required"); +if (!issuer) fail("--issuer (or SSO_ISSUER) is required"); +if (!clientId) fail("--client-id (or SSO_CLIENT_ID) is required"); +if (!clientSecret) fail("--client-secret (or SSO_CLIENT_SECRET) is required"); + +let issuerOrigin: string; +try { + issuerOrigin = new URL(issuer).origin; +} catch { + fail(`--issuer must be an absolute URL (got "${issuer}")`); +} + +const ctx = await auth.$context; + +if (await ctx.adapter.findOne({ model: "ssoProvider", where: [{ field: "providerId", value: providerId }] })) { + fail(`an SSO provider with providerId "${providerId}" already exists`); +} +if (await ctx.adapter.findOne({ model: "ssoProvider", where: [{ field: "domain", value: domain }] })) { + fail(`an SSO provider is already registered for domain "${domain}"`); +} + +let userId: string | null = null; +if (ownerEmail) { + const found = await ctx.internalAdapter.findUserByEmail(ownerEmail); + if (!found) fail(`no user with email ${ownerEmail} — have them sign in once first`); + userId = found.user.id; +} + +let organizationId: string | null = null; +if (orgSlug) { + const org = await ctx.adapter.findOne<{ id: string }>({ + model: "organization", + where: [{ field: "slug", value: orgSlug }], + }); + if (!org) fail(`no organization with slug "${orgSlug}"`); + organizationId = org.id; +} + +// 現在就把 discovery 文件抓下來、把 endpoints 存進 DB。這不只是省一次往返: +// @better-auth/sso 只有在存起來的設定缺 endpoint 時才會在登入當下重跑 discovery +// (needsRuntimeDiscovery),而那條路徑會拿本站的 trustedOrigins 去驗 IdP 的網址 —— +// 也就是說沒先水合的話,每加一個 IdP 都得改一次 trustedOrigins 才登得進去。 +// +// isTrustedOrigin 這裡只信任 issuer 自己的 origin:discovery 文件是 IdP 給的, +// 不該讓它把 token / jwks endpoint 指到第三方主機(那是一條 SSRF + 憑證外流的路)。 +// 操作者親手打進來的 issuer 才是這裡唯一的信任來源。 +let discovered; +try { + discovered = await discoverOIDCConfig({ + issuer, + isTrustedOrigin: (url) => { + try { + return new URL(url).origin === issuerOrigin; + } catch { + return false; + } + }, + }); +} catch (error) { + if (error instanceof DiscoveryError) { + fail(`OIDC discovery failed for ${issuer}: ${error.message}`); + } + throw error; +} + +// 欄位與 /sso/register 成功時寫進去的完全一致(@better-auth/sso 的 +// buildOIDCConfig,非 skipDiscovery 分支),plugin 讀回來時才不會少東西。 +const oidcConfig = { + issuer: discovered.issuer, + clientId, + clientSecret, + authorizationEndpoint: discovered.authorizationEndpoint, + tokenEndpoint: discovered.tokenEndpoint, + tokenEndpointAuthentication: discovered.tokenEndpointAuthentication, + jwksEndpoint: discovered.jwksEndpoint, + userInfoEndpoint: discovered.userInfoEndpoint, + discoveryEndpoint: discovered.discoveryEndpoint, + pkce: true, + scopes, + overrideUserInfo: false, +}; + +await ctx.adapter.create({ + model: "ssoProvider", + data: { + issuer, + domain, + providerId, + oidcConfig: JSON.stringify(oidcConfig), + samlConfig: null, + userId, + organizationId, + }, +}); + +console.log(`✓ registered SSO provider "${providerId}" for domain ${domain}`); +console.log(` issuer: ${issuer}`); +console.log(` authorization: ${discovered.authorizationEndpoint}`); +console.log(` token: ${discovered.tokenEndpoint}`); +console.log(` jwks: ${discovered.jwksEndpoint}`); +console.log(` scopes: ${scopes.join(" ")}`); +console.log(` owner: ${ownerEmail ?? "(none — script-managed only)"}`); +console.log(` organization: ${orgSlug ?? "(none)"}`); +console.log(""); +console.log("Set this as the Redirect URL in the IdP:"); +console.log(` ${ctx.baseURL}/sso/callback/${providerId}`); +console.log(""); +console.log(`Anyone with an @${domain} email can now use "Continue with SSO" on /login.`); diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 2e7303a..0676ea6 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -4,9 +4,12 @@ import { Suspense, useState } from "react"; import { useSearchParams } from "next/navigation"; import { useTranslations } from "next-intl"; import { toast } from "sonner"; -import { signIn } from "@/lib/auth-client"; +import { KeyRound } from "lucide-react"; +import { authClient, signIn } from "@/lib/auth-client"; import { LogoMark } from "@/components/logo"; import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; import { Card, CardContent, @@ -48,10 +51,16 @@ function mcpAuthorizeCallback(params: URLSearchParams): string | null { return `/api/auth/mcp/authorize?${params.toString()}`; } -function LoginButton() { +/** 展開中的第二種登入方式。一次只開一個,避免整張卡片變成一堆表單。 */ +type Method = "none" | "sso" | "password"; + +function SignInMethods() { const t = useTranslations("auth.login"); const params = useSearchParams(); + // ⚠️ 三種登入方式共用同一個 redirectTo。MCP 的 authorize query 只要有一條路徑 + // 沒接上,ChatGPT / Claude / Codex 的 OAuth 流程就會在登入後斷在這裡。 const redirectTo = mcpAuthorizeCallback(params) || params.get("redirect") || "/dashboard"; + const [method, setMethod] = useState("none"); const [pending, setPending] = useState(false); async function onGoogle() { @@ -67,17 +76,155 @@ function LoginButton() { // On success the browser is redirected to Google, so no need to reset. } + async function onSso(e: React.FormEvent) { + e.preventDefault(); + const form = new FormData(e.currentTarget); + const email = String(form.get("ssoEmail") ?? "").trim(); + setPending(true); + const { error } = await authClient.signIn.sso({ email, callbackURL: redirectTo }); + if (error) { + setPending(false); + // plugin 對「這個網域沒有註冊 IdP」回的是 404 "No provider found for the + // issuer" —— 直接顯示那句話對使用者毫無意義,換成看得懂的說法。 + toast.error( + error.status === 404 ? t("toast.ssoNotConfigured") : error.message || t("toast.failed"), + ); + return; + } + // 成功時 better-auth 的 client 會自己導去 IdP,不必重設 pending。 + } + + async function onPassword(e: React.FormEvent) { + e.preventDefault(); + const form = new FormData(e.currentTarget); + const email = String(form.get("email") ?? "").trim(); + const password = String(form.get("password") ?? ""); + setPending(true); + const { error } = await signIn.email({ email, password, callbackURL: redirectTo }); + if (error) { + setPending(false); + // 401 一律講「email 或密碼不正確」,不區分哪一個錯 —— 分開講就成了帳號探測。 + toast.error( + error.status === 401 ? t("toast.badCredentials") : error.message || t("toast.failed"), + ); + return; + } + // 成功時 client 依 callbackURL 自行導頁。 + } + return ( - +
+ + +
+ + {t("or")} + +
+ + {method === "sso" ? ( +
+
+ + +
+ + +
+ ) : null} + + {method === "password" ? ( +
+
+ + +
+
+ + +
+ + +
+ ) : null} + + {method === "none" ? ( +
+ + {/* 帳密是給目錄審核帳號與自架者的退路,刻意做成不顯眼的文字連結。 */} + +
+ ) : null} +
); } @@ -93,7 +240,7 @@ export default function LoginPage() { - + diff --git a/src/db/auth-schema.ts b/src/db/auth-schema.ts index 8533c71..b33032a 100644 --- a/src/db/auth-schema.ts +++ b/src/db/auth-schema.ts @@ -138,3 +138,30 @@ export const oauthConsent = pgTable("oauth_consent", { createdAt: timestamp("created_at").defaultNow().notNull(), updatedAt: timestamp("updated_at").defaultNow().notNull(), }); + +// ---- @better-auth/sso plugin (enterprise SSO / home-realm discovery) ---- +// 欄位表照抄 plugin 自己的 schema 宣告(`sso()` 回傳值的 +// schema.ssoProvider.fields):issuer / oidcConfig / samlConfig / userId / +// providerId / organizationId / domain。plugin 沒有為這個 model 宣告 +// createdAt / updatedAt,所以這裡也沒有。 +// +// `domainVerified` 只在 plugin 開了 `domainVerification` 時才會出現在 schema 裡, +// 本專案沒開,所以不放。adapter 是照 schema 的欄位逐一取值(@better-auth/core +// 的 adapter factory:`for (const field in fields)`),schema 裡沒有的輸入欄位 +// 會被忽略而不是報錯,所以少這一欄不會炸。 +// +// export 名稱必須正好是 `ssoProvider`:drizzle adapter 用 model 名稱去 schema +// 物件上取表。DB 表名照本專案慣例用 snake_case,見 migrations/0020_sso_provider.sql。 +export const ssoProvider = pgTable("sso_provider", { + id: text("id").primaryKey(), + issuer: text("issuer").notNull(), + // 整包 OIDC 設定(含 clientSecret)序列化成 JSON 字串塞一欄 —— 這是 plugin 的 + // 形狀,不是我們的選擇。 + oidcConfig: text("oidc_config"), + samlConfig: text("saml_config"), + userId: text("user_id").references(() => user.id, { onDelete: "cascade" }), + providerId: text("provider_id").notNull().unique(), + organizationId: text("organization_id"), + // home realm discovery 的鍵:登入時拿 email 的網域來比對這一欄。 + domain: text("domain").notNull(), +}); diff --git a/src/i18n/messages/auth.ts b/src/i18n/messages/auth.ts index 0750f13..c43687c 100644 --- a/src/i18n/messages/auth.ts +++ b/src/i18n/messages/auth.ts @@ -3,11 +3,39 @@ import type { Dictionary } from "./dictionary"; const auth = { login: { title: { "zh-TW": "登入內部管理系統", en: "Sign in to the internal admin system" }, - description: { "zh-TW": "用 Google 帳號進入後台", en: "Sign in with Google to continue" }, + description: { "zh-TW": "選擇一種方式進入後台", en: "Choose how you want to sign in" }, signInWithGoogle: { "zh-TW": "使用 Google 登入", en: "Sign in with Google" }, redirecting: { "zh-TW": "前往 Google…", en: "Redirecting to Google…" }, + or: { "zh-TW": "或", en: "or" }, + sso: { + button: { "zh-TW": "使用單一登入(SSO)", en: "Continue with SSO" }, + emailLabel: { "zh-TW": "公司 email", en: "Work email" }, + emailPlaceholder: { "zh-TW": "you@company.com", en: "you@company.com" }, + submit: { "zh-TW": "繼續", en: "Continue" }, + submitting: { "zh-TW": "前往識別提供者…", en: "Redirecting to your provider…" }, + cancel: { "zh-TW": "取消", en: "Cancel" }, + }, + password: { + toggle: { "zh-TW": "改用 email 與密碼登入", en: "Sign in with email and password" }, + emailLabel: { "zh-TW": "Email", en: "Email" }, + emailPlaceholder: { "zh-TW": "you@example.com", en: "you@example.com" }, + passwordLabel: { "zh-TW": "密碼", en: "Password" }, + submit: { "zh-TW": "登入", en: "Sign in" }, + submitting: { "zh-TW": "登入中…", en: "Signing in…" }, + cancel: { "zh-TW": "取消", en: "Cancel" }, + }, toast: { failed: { "zh-TW": "登入失敗", en: "Sign-in failed" }, + // 找不到對應 provider 時故意講「這個網域」而不是「這個帳號不存在」: + // 後者會變成帳號探測工具。 + ssoNotConfigured: { + "zh-TW": "這個 email 網域尚未設定單一登入", + en: "SSO is not configured for this email domain", + }, + badCredentials: { + "zh-TW": "email 或密碼不正確", + en: "Incorrect email or password", + }, }, }, onboarding: { diff --git a/src/lib/auth-client.ts b/src/lib/auth-client.ts index fbd3deb..3dc08cf 100644 --- a/src/lib/auth-client.ts +++ b/src/lib/auth-client.ts @@ -2,11 +2,13 @@ import { createAuthClient } from "better-auth/react"; import { genericOAuthClient, organizationClient } from "better-auth/client/plugins"; +import { ssoClient } from "@better-auth/sso/client"; export const authClient = createAuthClient({ // genericOAuthClient 提供 authClient.oauth2.link(),用來連結 Google 日曆授權 // (與登入用的 google provider 分開,見 src/lib/auth.ts 的說明)。 - plugins: [organizationClient(), genericOAuthClient()], + // ssoClient 提供 authClient.signIn.sso(),登入頁的 home realm discovery 用。 + plugins: [organizationClient(), genericOAuthClient(), ssoClient()], }); export const { diff --git a/src/lib/auth.ts b/src/lib/auth.ts index 0df6938..ebff8d1 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -1,6 +1,7 @@ import { betterAuth } from "better-auth"; import { drizzleAdapter } from "better-auth/adapters/drizzle"; import { genericOAuth, mcp, organization } from "better-auth/plugins"; +import { sso } from "@better-auth/sso"; import { nextCookies } from "better-auth/next-js"; import { eq } from "drizzle-orm"; import { getDb } from "@/db"; @@ -77,7 +78,27 @@ export const auth = betterAuth({ // neon-http has no interactive transactions; run ops sequentially. transaction: false, }), - emailAndPassword: { enabled: false }, + // --------------------------------------------------------------------- + // Email + password + // --------------------------------------------------------------------- + // 開著是為了兩種人:目錄審核用的測試帳號(審核者沒有我們的 Google 網域), + // 以及自架這套系統、不想接 Google 的人。 + // + // ⚠️ disableSignUp 必須維持 true。公開的密碼註冊會開出一條帳號預劫持 + // (account pre-hijacking)的路:better-auth 的帳號連結是以 email 為鍵, + // 而密碼註冊的 email **沒有任何人驗證過**。攻擊者可以先用 victim@company.com + // 註冊一組密碼帳號,等真正的擁有者之後用 Google 登入時,那個 provider 已驗證 + // 的身分就被連到攻擊者早就建好的 user 上,攻擊者的密碼從此能登進對方的帳號。 + // Google 登入本來就會自動建 user(email 由 provider 驗證過),所以我們不需要 + // 公開註冊;密碼帳號一律由伺服器端開(scripts/create-user.ts)。 + // + // minPasswordLength 拉到 12:這些帳號是人工發的、數量少,沒有「使用者嫌長」 + // 的問題,而 better-auth 的預設 8 對一個能看到全部帳務的後台太短。 + emailAndPassword: { + enabled: true, + disableSignUp: true, + minPasswordLength: 12, + }, socialProviders: { google: { clientId: process.env.GOOGLE_CLIENT_ID as string, @@ -155,6 +176,17 @@ export const auth = betterAuth({ }, ], }), + // 企業 SSO(OIDC)。登入頁做的是 home realm discovery:使用者只填 email, + // plugin 用 email 的網域去對 sso_provider.domain,找到就導去該 IdP。 + // 沒有任何網域寫死在程式裡 —— 要支援哪個客戶/哪個 IdP 全看 DB 裡註冊了什麼。 + // + // providersLimit: 0 是 plugin 內建的關閉開關(見 @better-auth/sso 的 + // registerSSOProvider:limit 為 0 時直接 403)。它與下面的 disabledPaths + // 是兩層互相獨立的防線,理由見 disabledPaths 的註解。 + // + // 刻意不設 organizationProvisioning:第一次 SSO 登入會自動建 user + // (implicit signup,這是我們要的),但要進哪個組織仍走既有的邀請流程。 + sso({ providersLimit: 0 }), // OAuth 2.0 / OIDC provider for MCP clients. Adds /api/auth/mcp/* endpoints // (authorize, token, register, get-session) + OAuth discovery. Unauthenticated // authorize requests are sent to loginPage, which redirects back after sign-in. @@ -170,4 +202,25 @@ export const auth = betterAuth({ }), nextCookies(), ], + // --------------------------------------------------------------------- + // SSO provider 註冊:從 HTTP 一律封死 + // --------------------------------------------------------------------- + // @better-auth/sso 的 /sso/register 只掛了 sessionMiddleware —— 也就是說 + // **任何一個登入中的一般使用者**都能註冊一個 IdP。那等於把「誰可以簽發本站身分」 + // 的權力交給每個員工:註冊一個自己控制的 IdP、宣告 domain 是某個還沒有人用過的 + // 網域,就能用它變出新帳號。organizationId 那段的 owner/admin 檢查只在有帶 + // organizationId 時才跑,不帶就完全繞過。 + // + // disabledPaths 在 router 的 onRequest 生效(better-auth/dist/api:命中就直接 + // 回 404),**只擋 HTTP**;伺服器端直接呼叫 endpoint 函式不經過 router,所以 + // 這不影響部署流程。註冊一律走 scripts/register-sso-provider.ts,那支只有能拿到 + // DATABASE_URL 的人跑得動。 + // + // 為什麼與 sso({ providersLimit: 0 }) 兩層都要:providersLimit 擋的是 handler + // 內部(連伺服器端呼叫也一起擋),disabledPaths 擋的是路由層。任何一邊被未來的 + // 版本改掉或不小心拿掉,另一邊還在。 + // + // update / delete 沒有列進來:那兩支走 checkProviderAccess,只有 provider 的 + // 擁有者(或該組織的 owner/admin)過得去,而擁有者只可能由上面那支腳本產生。 + disabledPaths: ["/sso/register"], }); From 83140afc01e56d15e2c0f2dec42c37358f85c028 Mon Sep 17 00:00:00 2001 From: YJack0000 Date: Fri, 28 Aug 2026 17:16:10 +0800 Subject: [PATCH 2/7] =?UTF-8?q?[chore]=20=E9=96=8B=E6=BA=90=E8=A1=9B?= =?UTF-8?q?=E7=94=9F=EF=BC=9A=E7=A7=BB=E9=99=A4=E8=AA=A4=E5=85=A5=E7=9A=84?= =?UTF-8?q?=20BD=20=E6=88=AA=E5=9C=96=E8=88=87=E6=AE=98=E7=95=99=20.infisi?= =?UTF-8?q?cal.json=E3=80=81docs=20=E5=8E=BB=E8=AD=98=E5=88=A5=E5=8C=96?= =?UTF-8?q?=E3=80=81=E4=BF=AE=20mcp.md=20=E5=B9=BD=E9=9D=88=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .infisical.json | 5 ----- deployment-architectures-screenshot.png | Bin 335588 -> 0 bytes docs/local-dev.md | 4 ++-- docs/mcp.md | 3 +-- 4 files changed, 3 insertions(+), 9 deletions(-) delete mode 100644 .infisical.json delete mode 100644 deployment-architectures-screenshot.png diff --git a/.infisical.json b/.infisical.json deleted file mode 100644 index bfbdfaf..0000000 --- a/.infisical.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "workspaceId": "3dbddeb7-9e1b-444c-be5a-1dedc702351c", - "defaultEnvironment": "dev", - "gitBranchToEnvironmentMapping": null -} diff --git a/deployment-architectures-screenshot.png b/deployment-architectures-screenshot.png deleted file mode 100644 index 9c30de42b6f391ed2bbfc22be35522516d076db2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335588 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�*8INID%KV%3$5{7o^@kzg?XG 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 D{`) | +| `bun run cf:preview` (built worker) | `.dev.vars` | Neon **local-preview** branch (``, a copy of production) | `next dev` reads `process.env` from `.env*`; the OpenNext/`wrangler dev` preview reads `process.env` from `.dev.vars`. That's why each can point at a different DB. diff --git a/docs/mcp.md b/docs/mcp.md index 8827141..a985ce0 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -108,8 +108,7 @@ rest is worthwhile (OpenAI's guidance is to declare one for every tool that returns structured data), but the schema is a promise: `structuredContent` must validate against it, and tools that return a bare array must not declare one. -**Discovery** — `list_organizations` (call first), `create_organization` (spin up a -new org, makes you its owner), `get_financial_overview`. +**Discovery** — `list_organizations` (call first), `get_financial_overview`. **Billing** — `list_billing_status` is the main one: the whole billing board in a single call, merging one-off charges (contract instalments / project milestones) From 1925e17e170443ba846e240d029c44f730bdccbc Mon Sep 17 00:00:00 2001 From: YJack0000 Date: Fri, 28 Aug 2026 17:32:02 +0800 Subject: [PATCH 3/7] =?UTF-8?q?[feature]=20MCP=20=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E5=85=A8=E9=9D=A2=E8=A3=9C=20outputSchema=20=E4=B8=A6=E6=95=B4?= =?UTF-8?q?=E7=90=86=20directory=20=E5=AF=A9=E6=A0=B8=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E6=8E=AA=E8=BE=AD=EF=BC=88=E8=A8=98=E5=B8=B3=E9=9D=9E=E9=87=91?= =?UTF-8?q?=E6=B5=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/mcp.md | 84 ++++++++++++++------ src/lib/mcp/handler.ts | 31 ++++++-- src/lib/mcp/shared.ts | 51 ++++++++++-- src/lib/mcp/tools-accounting.ts | 56 +++++++++++-- src/lib/mcp/tools-billing.ts | 62 +++++++++++++-- src/lib/mcp/tools-hr.ts | 122 +++++++++++++++++++++++++---- src/lib/mcp/tools-transactions.ts | 77 +++++++++++++++--- src/lib/mcp/tools.ts | 126 ++++++++++++++++++++++++------ 8 files changed, 511 insertions(+), 98 deletions(-) diff --git a/docs/mcp.md b/docs/mcp.md index a985ce0..8c3830a 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -3,13 +3,25 @@ This app exposes a [Model Context Protocol](https://modelcontextprotocol.io) server so an MCP client (Claude, etc.) can run essentially the whole app in natural language — the ledger (內外帳), parties, categories, bank accounts, invoices, -projects, recurring subscriptions, contracts, employees, payroll -(read), and reconciliations. +projects, recurring subscriptions, contracts, employees, payroll records, and +reconciliations. A headline use: **never forget when to bill a client for recurring work.** `list_upcoming_billing` projects the next charge of every active subscription from `interval_months` + `start_date`. One-off collection is tracked on contracts (已收/未收). +> **Bookkeeping only — this server moves no money.** Every write creates or edits +> a row in the organization's own books. Nothing here initiates, authorizes or +> executes a payment, transfer, payout or trade, and the server has no connection +> to a bank, card network or payment provider. `pay_employee_salary` writes a +> payslip plus the matching salary-expense ledger entry; `create_reimbursement` +> books a repaid advance; a `transfer` transaction is a book entry between two of +> the organization's own ledger accounts; `create_billing_item` adds a reminder to +> an internal board and bills nobody; `create_invoice` records an invoice, it does +> not issue one. Tool titles and descriptions are worded to say so explicitly — +> keep them that way, both directories reject anything that reads like a payment +> rail. + Design: read tools reuse the app's own query layer; writes are org-scoped and validate every referenced id against your org. Fixed value sets are exposed as enums in each tool's input schema; ids (categories, accounts, parties, …) are @@ -84,14 +96,19 @@ Every tool carries, all derived centrally in `src/lib/mcp/handler.ts` (never in the `tools-*.ts` modules): - a human-readable `title` — de-snake-cased from the tool name, with a small - override table for names that don't read well; + override table for names that don't read well, plus the ones whose default + title would read like moving money (`pay_employee_salary` → "Record a salary + payslip", `create_reimbursement` → "Record an advance reimbursement", + `create_invoice` → "Record an invoice"); - MCP `annotations`: `readOnlyHint` / `destructiveHint` / `idempotentHint` derived from the verb, plus `openWorldHint`, which is `false` for everything except `sync_billing_calendar` (the only tool that writes to a third-party - system). Two overrides correct the verb heuristic: `sync_billing_calendar` - gets `openWorldHint: true`, and `pay_employee_salary` gets - `destructiveHint: true` — it posts a salary expense to the ledger and the - month can't be re-paid, with no "unpay" tool to undo it; + system). Four overrides correct the verb heuristic: `sync_billing_calendar` + gets `openWorldHint: true`; `pay_employee_salary` gets `destructiveHint: true` + — it writes the payslip plus the salary-expense ledger entry, the month can't + be booked twice and no tool reverses it; and `set_subscription_period` + (an upsert) and `unmark_accountant_notified` (clears a flag to null) get + `idempotentHint: true`, which the `update_`/`delete_` prefix rule misses; - a `[read]` / `[write]` / `[delete]` tag prefixed to the description, so clients can group read vs write at a glance; - `securitySchemes: [{ type: "oauth2", scopes: [...] }]` (mirrored under `_meta` @@ -100,15 +117,34 @@ the `tools-*.ts` modules): - `_meta["openai/toolInvocation/invoking" | "invoked"]`, the status line ChatGPT shows while a call is in flight. -**Output schemas.** A tool may declare an `outputSchema`; when it does, the -handler additionally returns the result as MCP `structuredContent` (the JSON -text block stays, per MCP's back-compat recommendation). Only `list_organizations` -declares one today — it's the reference implementation. Adding schemas to the -rest is worthwhile (OpenAI's guidance is to declare one for every tool that -returns structured data), but the schema is a promise: `structuredContent` must -validate against it, and tools that return a bare array must not declare one. +**Output schemas.** Every tool declares an `outputSchema` — all 68 of them, as of +server version 1.2.0. When a tool declares one the handler additionally returns +the result as MCP `structuredContent` (the JSON text block stays, per MCP's +back-compat recommendation), which is what ChatGPT and Codex prefer over parsing +JSON out of text. `list_organizations` remains the reference implementation. + +The schema is a **promise**: MCP requires `structuredContent` to validate against +it, so each one is derived from what that tool's `execute` actually returns — +drizzle `numeric` columns come back as strings, `date` columns as `YYYY-MM-DD` +strings, and every nullable field is declared as `["string", "null"]` rather than +quietly typed as non-null. Schemas over whole `.returning()` rows deliberately +leave `additionalProperties` open, so a future migration that adds a column +doesn't silently invalidate them; hand-built fixed shapes are closed. + +Only an object-rooted result can carry a schema, because MCP will not mirror a +bare array into `structuredContent`. Every tool that used to answer with a bare +array — the `list_*` tools plus `get_financial_overview` — therefore returns +`{ items, count }`, built by the `listResult` / `listSchema` helpers in +`src/lib/mcp/shared.ts`. That wrapper is what makes 100% coverage possible. Two +tools predate the convention and keep their own named roots: +`list_organizations` returns `{ organizations, hint }` and +`list_upcoming_billing` returns `{ today, windowDays, upcomingCount, upcoming, +note }`. A new tool whose return shape isn't stable and object-rooted may still +omit `outputSchema`; it just keeps the JSON-in-a-text-block result shape. Do not +declare a schema you cannot guarantee. **Discovery** — `list_organizations` (call first), `get_financial_overview`. +Organizations are created in the web app, not over MCP. **Billing** — `list_billing_status` is the main one: the whole billing board in a single call, merging one-off charges (contract instalments / project milestones) @@ -129,7 +165,7 @@ board automatically. `sync_billing_calendar` pushes the board to Google Calendar **Ledger (內外帳)** — `list_transactions`, `get_transaction`, `list_outstanding_advances`, `create_transaction` (expense/income/advance/transfer), `update_transaction` (date/amount/category/project/…), `delete_transaction`, -`create_reimbursement` (settle an advance). +`create_reimbursement` (book an advance as repaid). **Accounting master data** — parties: `list_parties`/`get_party`/`create_party`/ `update_party`/`delete_party`; categories: `list_categories`/`create_category`/ @@ -158,17 +194,19 @@ handled conservatively over MCP: national ID and salary account come back **masked** (full values are web-app only), and every employee read is written to the activity log as a `read` entry — so who pulled contact data, and when, is always answerable. Payroll: -`list_payroll_runs`, `list_payslips`, `list_salary_status` (who's paid for a month -+ when), `pay_employee_salary` (records the payslip **and** posts the salary -expense to the ledger); reconciliations: `list_reconciliations` + +`list_payroll_runs`, `list_payslips`, `list_salary_status` (whose salary is +booked for a month + when), `pay_employee_salary` (writes the payslip **and** the +matching salary-expense ledger entry — bookkeeping only, it pays nobody); +reconciliations: `list_reconciliations` + `create`/`update`/`delete`; accountant notices: `list_accountant_notices`, `mark_accountant_notified`, `unmark_accountant_notified`. -**Not exposed (do in the app):** uploading invoice/receipt **files** (R2), -multi-currency FX entry, and *connecting* Google Calendar (the OAuth consent needs -a browser — do it once in 組織設定, after which `sync_billing_calendar` works over -MCP). These need file handling or extra UI. Deletes that would -break references return a clear error suggesting deactivation/archiving instead. +**Not exposed (do in the app):** creating an organization, uploading +invoice/receipt **files** (R2), multi-currency FX entry, and *connecting* Google +Calendar (the OAuth consent needs a browser — do it once in 組織設定, after which +`sync_billing_calendar` works over MCP). These need file handling or extra UI. +Deletes that would break references return a clear error suggesting +deactivation/archiving instead. ## Setup diff --git a/src/lib/mcp/handler.ts b/src/lib/mcp/handler.ts index b2eed3e..ccb54ec 100644 --- a/src/lib/mcp/handler.ts +++ b/src/lib/mcp/handler.ts @@ -40,7 +40,7 @@ function deriveMcpAudit( /** Bump on every published change to tools, schemas or instructions. Clients * (and OpenAI's plugin "Scan Tools") key their cached snapshot off this. */ -export const SERVER_VERSION = "1.1.0"; +export const SERVER_VERSION = "1.2.0"; /** Public base URL of this deployment; doubles as the OAuth issuer. * Keep in sync with the `resource` passed to `mcp()` in src/lib/auth.ts. */ @@ -75,9 +75,10 @@ const LATEST_PROTOCOL_VERSION = SUPPORTED_PROTOCOL_VERSIONS[0]; // before doing org-scoped work — important because the signed-in account may // belong to multiple organizations and we never guess. const INSTRUCTIONS = [ - "This server is the operational surface for one organization's bookkeeping: ledger transactions (內外帳), parties, categories, bank accounts, invoices, projects, subscriptions, contracts, employees, payroll (read-only), and reconciliations.", + "This server is the operational surface for one organization's bookkeeping: ledger transactions (內外帳), parties, categories, bank accounts, invoices, projects, subscriptions, contracts, employees, payroll records, and reconciliations.", + "It is a bookkeeping system and nothing else. Every write creates or edits a record in this organization's own books. No tool moves money: none of them initiates, authorizes or executes a payment, transfer, payout or trade, and the server is not connected to any bank, card or payment provider. Words like pay, payment, transfer, salary, reimbursement and advance always describe an entry being recorded, never money being sent.", "The signed-in account may belong to multiple organizations.", - "At the START of each session, before calling any org-scoped tool, call list_organizations and ask the user which organization to work in.", + "At the start of each session, before calling any org-scoped tool, call list_organizations and ask the user which organization to work in.", "Then pass that value as organizationId on every subsequent tool call. Never guess the organization.", "If a tool reports that the organization is ambiguous, stop and ask the user, then retry with organizationId.", "Before creating or editing a record that references another entity (categoryId, accountId, partyName/Id, projectId, contractId, subscriptionId), look the id up first with the relevant list_* tool (list_categories, list_bank_accounts, list_parties, list_projects, …) — never invent ids. Valid values for fixed fields are listed as enums in each tool's input schema.", @@ -218,6 +219,7 @@ function toolAnnotations(name: string, explicit?: ToolAnnotations): ToolAnnotati openWorldHint: false, ...OPENWORLD_OVERRIDES[name], ...DESTRUCTIVE_OVERRIDES[name], + ...IDEMPOTENT_OVERRIDES[name], ...explicit, }; } @@ -228,21 +230,36 @@ const OPENWORLD_OVERRIDES: Record> = { }; // Writes that are irreversible from MCP even though the verb isn't "delete". +// (Irreversible as a *bookkeeping entry* — no tool here moves real money.) const DESTRUCTIVE_OVERRIDES: Record> = { - // Records the payslip AND posts the salary expense; the month can't be re-paid - // and there is no "unpay" tool. + // Writes the payslip AND the matching salary-expense ledger entry; the month + // cannot be recorded twice and there is no tool that reverses the entry. pay_employee_salary: { destructiveHint: true }, }; +// Writes that are safe to repeat with the same arguments, but whose verb isn't +// caught by the update_/delete_ prefix rule above. +const IDEMPOTENT_OVERRIDES: Record> = { + // Upsert: same subscription + period + amount always lands the same row. + set_subscription_period: { idempotentHint: true }, + // Clears a flag to null; running it twice changes nothing the second time. + unmark_accountant_notified: { idempotentHint: true }, +}; + // Human-readable tool titles (MCP `BaseMetadata.title`; required for the OpenAI // plugin directory). Derived from the tool name so new tools get one for free — // the table only covers names that don't read well when de-snake-cased. // // NOTE: titles are derived here on purpose. Do not push them down into // src/lib/mcp/tools-*.ts. +// +// Titles for anything payroll- or payment-shaped must read as bookkeeping, not +// as moving money: this server only writes ledger rows in the workspace's own +// books and has no payment rail of any kind. const TITLE_OVERRIDES: Record = { bulk_create_transactions: "Create transactions in bulk", - create_reimbursement: "Reimburse an advance", + create_invoice: "Record an invoice", + create_reimbursement: "Record an advance reimbursement", get_financial_overview: "Financial overview", get_subscription_schedule: "Subscription schedule", list_accountant_notices: "Notices for the accountant", @@ -253,7 +270,7 @@ const TITLE_OVERRIDES: Record = { list_salary_status: "Salary status by month", list_upcoming_billing: "Upcoming billing", mark_accountant_notified: "Mark as sent to the accountant", - pay_employee_salary: "Pay an employee's salary", + pay_employee_salary: "Record a salary payslip", sync_billing_calendar: "Sync the billing calendar", unmark_accountant_notified: "Unmark as sent to the accountant", }; diff --git a/src/lib/mcp/shared.ts b/src/lib/mcp/shared.ts index 898050b..f4e4d9c 100644 --- a/src/lib/mcp/shared.ts +++ b/src/lib/mcp/shared.ts @@ -34,18 +34,57 @@ export type ToolDef = { required?: string[]; additionalProperties: boolean; }; - // Optional JSON Schema for the tool's return value. When present the handler - // advertises it on tools/list AND mirrors the result into `structuredContent` - // (MCP requires structuredContent to validate against the declared schema, so - // only declare it when the shape really is stable and object-valued — tools - // that return a bare array must not declare one). Tools without it keep the - // JSON-in-a-text-block result shape. + // JSON Schema for the tool's return value. The handler advertises it on + // tools/list AND mirrors the result into `structuredContent`, which MCP + // requires to validate against it — so the schema is a promise, and it must + // be derived from what `execute` actually returns (optional and nullable + // fields included). Only object-rooted results can carry one; list tools get + // there via `listResult` / `listSchema`. Every tool on this server declares + // one; a new tool without a stable object-rooted shape may omit it and will + // simply keep the JSON-in-a-text-block result shape. outputSchema?: JsonSchemaObject; // Optional override; otherwise derived from the tool's verb in the handler. annotations?: ToolAnnotations; execute: (args: Record, ctx: ToolContext) => Promise; }; +// ---- list results ---- + +/** + * The object root every list_* tool returns. + * + * MCP only mirrors a result into `structuredContent` when it is an object, so a + * tool that answered with a bare array could never declare an `outputSchema`. + * Wrapping the rows in `{ items, count }` is what lets every tool on this + * server publish one. Pair it with `listSchema(itemSchema)`. + */ +export function listResult(items: T[]): { items: T[]; count: number } { + return { items, count: items.length }; +} + +/** The `outputSchema` matching `listResult`, given the schema of one row. */ +export function listSchema(item: Record): JsonSchemaObject { + return { + type: "object", + properties: { + items: { type: "array", items: item }, + count: { type: "number", description: "Number of rows in `items`." }, + }, + required: ["items", "count"], + additionalProperties: false, + }; +} + +/** A closed object schema whose every declared property is always present. */ +export function rowSchema(properties: Record): JsonSchemaObject { + return { + type: "object", + properties, + required: Object.keys(properties), + additionalProperties: false, + }; +} + // ---- arg helpers (lightweight validation, no extra deps) ---- export function optString( diff --git a/src/lib/mcp/tools-accounting.ts b/src/lib/mcp/tools-accounting.ts index e3d65fd..976aef3 100644 --- a/src/lib/mcp/tools-accounting.ts +++ b/src/lib/mcp/tools-accounting.ts @@ -14,6 +14,8 @@ import { assertInOrg, fkError, type JsonSchemaObject, + listResult, + listSchema, normalizeCurrency, optBoolean, optDecimal, @@ -23,6 +25,7 @@ import { requireNumber, requireString, resolveOrg, + rowSchema, type ToolDef, } from "./shared"; @@ -161,6 +164,38 @@ function orNotFound(row: JsonSchemaObject): JsonSchemaObject { }; } +// list_parties 是自己組的 select(不是整列):多了 accountName / txnCount / totals, +// 少了 deletedAt / organizationId / createdAt。 +const PARTY_LIST_ROW: JsonSchemaObject = rowSchema({ + id: { type: "number" }, + name: { type: "string" }, + label: { type: "string", enum: [...PARTY_LABELS] }, + taxId: { type: ["string", "null"] }, + defaultCurrency: { type: ["string", "null"], description: "3-letter code." }, + defaultAccountId: { type: ["number", "null"] }, + typicalAmount: { type: ["string", "null"], description: "Decimal as a string." }, + contact: { type: ["string", "null"] }, + note: { type: ["string", "null"] }, + isActive: { type: "boolean" }, + accountName: { type: ["string", "null"], description: "Name of defaultAccountId, when set." }, + txnCount: { type: "number" }, + totals: { + type: "array", + description: "Running totals per currency; empty when nothing has been booked against this party.", + items: rowSchema({ + currency: { type: "string" }, + received: { type: "number", description: "Income booked from this party." }, + paid: { type: "number", description: "Expense/advance booked to this party." }, + }), + }, +}); + +const CATEGORY_LIST_ROW: JsonSchemaObject = rowSchema({ + id: { type: "number" }, + name: { type: "string" }, + kind: { type: "string", enum: [...CATEGORY_KINDS] }, +}); + function optLabel(args: Record): string | undefined { const v = optString(args, "label"); if (v && !PARTY_LABELS.includes(v as (typeof PARTY_LABELS)[number])) { @@ -182,11 +217,12 @@ export const accountingTools: Record = { }, additionalProperties: false, }, + outputSchema: listSchema(PARTY_LIST_ROW), execute: async (args, ctx) => { const orgId = await resolveOrg(args, ctx); const label = optLabel(args); const rows = await listParties(orgId); - return label ? rows.filter((p) => p.label === label) : rows; + return listResult(label ? rows.filter((p) => p.label === label) : rows); }, }, @@ -341,7 +377,8 @@ export const accountingTools: Record = { description: "List active accounting categories (income/cogs/expense/etc.). Use to resolve categoryId for transactions.", inputSchema: { type: "object", properties: { ...ORG_ARG }, additionalProperties: false }, - execute: async (args, ctx) => listCategories(await resolveOrg(args, ctx)), + outputSchema: listSchema(CATEGORY_LIST_ROW), + execute: async (args, ctx) => listResult(await listCategories(await resolveOrg(args, ctx))), }, create_category: { @@ -417,9 +454,10 @@ export const accountingTools: Record = { // ---- bank accounts ---- list_bank_accounts: { description: - "List cash/bank accounts. Use to resolve fromAccountId/toAccountId/accountId for transactions.", + "List the cash/bank accounts defined in these books. They are ledger buckets the user set up by hand, not linked bank accounts — nothing here talks to a bank. Use to resolve fromAccountId/toAccountId/accountId for transactions.", inputSchema: { type: "object", properties: { ...ORG_ARG }, additionalProperties: false }, - execute: async (args, ctx) => listBankAccounts(await resolveOrg(args, ctx)), + outputSchema: listSchema(BANK_ACCOUNT_ROW), + execute: async (args, ctx) => listResult(await listBankAccounts(await resolveOrg(args, ctx))), }, get_bank_account: { @@ -438,7 +476,8 @@ export const accountingTools: Record = { }, create_bank_account: { - description: "Create a cash/bank account.", + description: + "Create a cash/bank account in the books — a named bucket the ledger posts against. It is not linked to a real bank and opening it moves no money.", inputSchema: { type: "object", properties: { @@ -537,8 +576,9 @@ export const accountingTools: Record = { properties: { limit: { type: "number", description: "Default 100." }, ...ORG_ARG }, additionalProperties: false, }, + outputSchema: listSchema(INVOICE_ROW), execute: async (args, ctx) => - listInvoices(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 100), + listResult(await listInvoices(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 100)), }, get_invoice: { @@ -558,7 +598,7 @@ export const accountingTools: Record = { create_invoice: { description: - "Create an invoice record (AR/AP tracking). Bind it to a client with partyId, and to a scheduled charge with billingItemId — doing so fills that charge's 開發票日 automatically, which clears it from the 「待開發票」 list (see list_billing_status).", + "Record an invoice in the books (AR/AP tracking). This writes a bookkeeping record only — it does not issue, send or file an invoice anywhere; actual issuing happens in the external invoicing system. Bind it to a client with partyId, and to a planned charge with billingItemId — doing so fills that charge's 開發票日 automatically, which clears it from the 「待開發票」 list (see list_billing_status).", inputSchema: { type: "object", properties: { @@ -577,7 +617,7 @@ export const accountingTools: Record = { contractId: { type: "number" }, billingItemId: { type: "number", - description: "Scheduled charge this invoice covers; see list_billing_status.", + description: "Planned charge this invoice covers; see list_billing_status.", }, ...ORG_ARG, }, diff --git a/src/lib/mcp/tools-billing.ts b/src/lib/mcp/tools-billing.ts index eb90f7c..b16da74 100644 --- a/src/lib/mcp/tools-billing.ts +++ b/src/lib/mcp/tools-billing.ts @@ -9,6 +9,8 @@ import { } from "@/db/queries"; import { assertInOrg, + listResult, + listSchema, normalizeCurrency, optBoolean, optDecimal, @@ -19,6 +21,7 @@ import { requireNumber, requireString, resolveOrg, + rowSchema, type ToolDef, } from "./shared"; @@ -80,6 +83,46 @@ const BILLING_ITEM_PROPS = { // 整列回傳,欄位一定到齊(值可能是 null)。 const BILLING_ITEM_REQUIRED = Object.keys(BILLING_ITEM_PROPS); +// 看板的一列 = db/queries.ts 的 BillingRow。expected/paid 已經在那裡轉成 number; +// 一次性項目沒有 subscriptionId/periodStart,訂閱期別沒有 billingItemId/rawStatus, +// 所以幾乎每個欄位都可能是 null。 +const BILLING_BOARD_ROW = rowSchema({ + key: { + type: "string", + description: "Stable row key: `bi:` for a one-off charge, `sub::` for a subscription period.", + }, + source: { type: "string", enum: ["billing_item", "subscription"] }, + billingItemId: { type: ["number", "null"] }, + subscriptionId: { type: ["number", "null"] }, + periodStart: { type: ["string", "null"], description: "YYYY-MM-DD; subscription rows only." }, + customerPartyId: { type: ["number", "null"] }, + customerName: { type: ["string", "null"] }, + customerTaxId: { type: ["string", "null"] }, + title: { type: "string" }, + contractId: { type: ["number", "null"] }, + contractTitle: { type: ["string", "null"] }, + projectId: { type: ["number", "null"] }, + projectName: { type: ["string", "null"] }, + dueDate: { type: ["string", "null"], description: "應請款日, YYYY-MM-DD." }, + deadline: { + type: ["string", "null"], + description: "When the money is due: 實際請款日 + 月結天數, falling back to dueDate.", + }, + billedOn: { type: ["string", "null"], description: "YYYY-MM-DD." }, + paidOn: { type: ["string", "null"], description: "YYYY-MM-DD (human annotation only)." }, + invoicedOn: { type: ["string", "null"], description: "YYYY-MM-DD." }, + needsInvoice: { type: "boolean", description: "該開發票卻還沒開." }, + expected: { type: "number", description: "應收." }, + paid: { type: "number", description: "已收, computed from linked ledger transactions." }, + currency: { type: "string", description: "3-letter code." }, + status: { type: "string", enum: [...BOARD_STATUS] }, + note: { type: ["string", "null"] }, + rawStatus: { + type: ["string", "null"], + description: "The stored billing_items status; null for subscription periods, which have no row.", + }, +}); + /** update_billing_item 的欄位搬運:只有真的帶進來的欄位才會進 patch。 */ function buildBillingItemPatch( args: Record, @@ -128,6 +171,7 @@ export const billingItemTools: Record = { }, additionalProperties: false, }, + outputSchema: listSchema(BILLING_BOARD_ROW), execute: async (args, ctx) => { const orgId = await resolveOrg(args, ctx); const rows = await listBillingBoard(orgId, { @@ -136,18 +180,20 @@ export const billingItemTools: Record = { const wanted = Array.isArray(args.status) ? (args.status as string[]) : null; const customerPartyId = optNumber(args, "customerPartyId"); const invoiceOnly = optBoolean(args, "needsInvoiceOnly") ?? false; - return rows.filter( - (r) => - (!wanted || wanted.includes(r.status)) && - (customerPartyId === undefined || r.customerPartyId === customerPartyId) && - (!invoiceOnly || r.needsInvoice), + return listResult( + rows.filter( + (r) => + (!wanted || wanted.includes(r.status)) && + (customerPartyId === undefined || r.customerPartyId === customerPartyId) && + (!invoiceOnly || r.needsInvoice), + ), ); }, }, create_billing_item: { description: - "[write] Schedule one charge for a client — a contract instalment (簽約金/期中款/尾款), a project milestone, or a one-off. Recurring monthly/annual fees do NOT belong here: use create_subscription, whose periods show up on the billing board automatically.", + "[write] Add one planned charge to the internal billing board — a contract instalment (簽約金/期中款/尾款), a project milestone, or a one-off. This is a bookkeeping entry: nothing is charged, collected or sent to the customer, and no invoice is issued. Recurring monthly/annual fees do not belong here: use create_subscription, whose periods show up on the board automatically.", inputSchema: { type: "object", properties: { @@ -218,7 +264,7 @@ export const billingItemTools: Record = { update_billing_item: { description: - "[write] Update a scheduled charge (only provided fields). Use this to record 「已請款」(billedOn), 「已收款」(paidOn) or 「已開發票」(invoicedOn). Actual money received is computed from ledger transactions bound to this item, not from paidOn.", + "[write] Update a planned charge (only provided fields). Use this to note 「已請款」(billedOn), 「已收款」(paidOn) or 「已開發票」(invoicedOn) after they happened elsewhere — the dates are annotations in the books and do not collect or send anything. Money actually received is computed from ledger transactions bound to this item, not from paidOn.", inputSchema: { type: "object", properties: { @@ -313,7 +359,7 @@ export const billingItemTools: Record = { }, delete_billing_item: { - description: "[delete] Soft-delete a scheduled charge. Its calendar reminder is removed on the next sync.", + description: "[delete] Soft-delete a planned charge from the billing board. Its calendar reminder is removed on the next sync.", inputSchema: { type: "object", properties: { id: { type: "number" }, ...ORG_ARG }, diff --git a/src/lib/mcp/tools-hr.ts b/src/lib/mcp/tools-hr.ts index 221dcb7..069d295 100644 --- a/src/lib/mcp/tools-hr.ts +++ b/src/lib/mcp/tools-hr.ts @@ -24,6 +24,8 @@ import { import { assertInOrg, fkError, + listResult, + listSchema, optBoolean, optDecimal, optNumber, @@ -34,6 +36,7 @@ import { requireNumber, requireString, resolveOrg, + rowSchema, todayStr, type ToolDef, } from "./shared"; @@ -152,6 +155,73 @@ const RECONCILIATION_PROPS = { }; const RECONCILIATION_REQUIRED = Object.keys(RECONCILIATION_PROPS); +// 下面幾支清單工具回的是 db/queries.ts 的投影(不是整列),形狀照那邊的 select。 + +const ORG_MEMBER_ROW = rowSchema({ + userId: { type: "string", description: "Pass this back as `userId` when binding an employee." }, + name: { type: "string" }, + email: { type: "string" }, +}); + +const PAYROLL_RUN_ROW = rowSchema({ + id: { type: "number" }, + periodYear: { type: "number" }, + periodMonth: { type: "number", description: "1-12." }, + payDate: { type: ["string", "null"], description: "YYYY-MM-DD." }, + status: { type: "string", enum: ["draft", "finalized", "paid"] }, + note: { type: ["string", "null"] }, + payslipCount: { type: "number" }, + netTotal: { type: "string", description: "Sum of the run's net pay, decimal as a string." }, +}); + +const PAYSLIP_ROW = rowSchema({ + id: { type: "number" }, + employeeName: { type: ["string", "null"] }, + periodYear: { type: "number" }, + periodMonth: { type: "number", description: "1-12." }, + payDate: { type: ["string", "null"], description: "YYYY-MM-DD." }, + taxableTotal: { type: "string", description: "Decimal as a string." }, + nontaxableTotal: { type: "string", description: "Decimal as a string." }, + deductionTotal: { type: "string", description: "Decimal as a string." }, + netPay: { type: "string", description: "Decimal as a string." }, + paidTransactionId: { + type: ["number", "null"], + description: "The salary-expense ledger entry; null while the payslip is still unbooked.", + }, +}); + +const RECONCILIATION_LIST_ROW = rowSchema({ + id: { type: "number" }, + accountId: { type: "number" }, + accountName: { type: ["string", "null"] }, + currency: { type: ["string", "null"], description: "3-letter code, from the account." }, + asOfDate: { type: "string", description: "YYYY-MM-DD." }, + statementBalance: { type: "string", description: "Decimal as a string." }, + note: { type: ["string", "null"] }, + bookBalance: { + type: ["string", "null"], + description: "Computed book balance on asOfDate; decimal as a string.", + }, +}); + +const ACCOUNTANT_NOTICE_ROW = rowSchema({ + id: { type: "number", description: "Document id; pass as documentId to mark_accountant_notified." }, + fileName: { type: ["string", "null"] }, + r2Key: { type: "string", description: "Object-storage key of the scanned invoice." }, + notifiedAt: { + type: ["string", "null"], + description: "ISO 8601 timestamp; null while the accountant has not been told.", + }, + uploadedAt: { type: "string", description: "ISO 8601 timestamp." }, + txnId: { type: "number" }, + txnDate: { type: "string", description: "YYYY-MM-DD." }, + amount: { type: "string", description: "Decimal as a string." }, + currency: { type: "string", description: "3-letter code." }, + description: { type: ["string", "null"] }, + partyName: { type: ["string", "null"] }, + categoryName: { type: ["string", "null"] }, +}); + /** * Validate an employee → login-user binding: the user must be a member of the * org and not already bound to another (non-deleted) employee. Binding is @@ -232,15 +302,23 @@ export const hrTools: Record = { // ---- employees ---- list_employees: { description: - "List employees (for payroll, advances, reimbursements). National ID and salary account are masked; use the web app when the full values are needed.", + "List employees (for payroll records, advances, reimbursements). National ID and salary account are masked; use the web app when the full values are needed.", inputSchema: { type: "object", properties: { limit: { type: "number", description: "Default 200." }, ...ORG_ARG }, additionalProperties: false, }, + outputSchema: listSchema({ + type: "object", + properties: { ...EMPLOYEE_PROPS }, + required: EMPLOYEE_REQUIRED, + additionalProperties: false, + }), execute: async (args, ctx) => - (await listEmployees(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 200)).map( - redactEmployee, + listResult( + (await listEmployees(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 200)).map( + redactEmployee, + ), ), }, @@ -272,7 +350,8 @@ export const hrTools: Record = { description: "List login users (members) of the organization — for binding an employee to a user via create_employee / update_employee userId. Not every employee has a login; binding is optional.", inputSchema: { type: "object", properties: { ...ORG_ARG }, additionalProperties: false }, - execute: async (args, ctx) => listOrgMembers(await resolveOrg(args, ctx)), + outputSchema: listSchema(ORG_MEMBER_ROW), + execute: async (args, ctx) => listResult(await listOrgMembers(await resolveOrg(args, ctx))), }, create_employee: { @@ -438,28 +517,34 @@ export const hrTools: Record = { // ---- payroll ---- list_payroll_runs: { - description: "List payroll runs with payslip counts and net totals.", + description: "List the payroll runs recorded in the books, with payslip counts and net totals.", inputSchema: { type: "object", properties: { limit: { type: "number", description: "Default 50." }, ...ORG_ARG }, additionalProperties: false, }, - execute: async (args, ctx) => listPayrollRuns(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 50), + outputSchema: listSchema(PAYROLL_RUN_ROW), + execute: async (args, ctx) => + listResult(await listPayrollRuns(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 50)), }, list_payslips: { - description: "List payslips with employee, period, pay date, and totals.", + description: "List recorded payslips with employee, period, pay date, and totals.", inputSchema: { type: "object", properties: { limit: { type: "number", description: "Default 200." }, ...ORG_ARG }, additionalProperties: false, }, - execute: async (args, ctx) => listPayslipRecords(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 200), + outputSchema: listSchema(PAYSLIP_ROW), + execute: async (args, ctx) => + listResult( + await listPayslipRecords(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 200), + ), }, list_salary_status: { description: - "Per-employee salary status for a month: who has been paid, on what date, and the net amount. Defaults to the current month. Answers 'did everyone get paid this month, and when'.", + "Per-employee salary status for a month, read from the recorded payslips: who is booked as paid, on what date, and the net amount. Defaults to the current month. Answers 'is everyone's salary recorded for this month, and when was it paid'.", inputSchema: { type: "object", properties: { @@ -571,15 +656,18 @@ export const hrTools: Record = { pay_employee_salary: { description: - "Record a salary payment for one employee for a month. Creates the payslip AND posts a salary-expense transaction to the ledger (same as the app). One payment per employee per month — re-paying an already-paid month is rejected. Find ids via list_employees / list_bank_accounts. Amounts are TWD.", + "Book one employee's salary for a month: writes the payslip and the matching salary-expense entry in this organization's ledger, exactly as the web app does. Bookkeeping only — it does not pay anyone, initiate a bank transfer, or move money in any way; the salary is paid through the company's own bank and recorded here afterwards. One payslip per employee per month; booking a month that is already booked is rejected. Find ids via list_employees / list_bank_accounts. Amounts are TWD.", inputSchema: { type: "object", properties: { employeeId: { type: "number" }, periodYear: { type: "number" }, periodMonth: { type: "number", description: "1-12." }, - payDate: { type: "string", description: "Pay date, YYYY-MM-DD." }, - fromAccountId: { type: "number", description: "Account the salary is paid from." }, + payDate: { type: "string", description: "The date the salary was paid, YYYY-MM-DD." }, + fromAccountId: { + type: "number", + description: "Ledger account the salary expense is booked against.", + }, book: { type: "string", enum: ["both", "internal", "external"], @@ -795,7 +883,11 @@ export const hrTools: Record = { properties: { limit: { type: "number", description: "Default 100." }, ...ORG_ARG }, additionalProperties: false, }, - execute: async (args, ctx) => listReconciliations(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 100), + outputSchema: listSchema(RECONCILIATION_LIST_ROW), + execute: async (args, ctx) => + listResult( + await listReconciliations(await resolveOrg(args, ctx), optNumber(args, "limit") ?? 100), + ), }, create_reconciliation: { @@ -916,7 +1008,9 @@ export const hrTools: Record = { list_accountant_notices: { description: "Paper invoices (其他發票) that need to be / have been flagged to the accountant.", inputSchema: { type: "object", properties: { ...ORG_ARG }, additionalProperties: false }, - execute: async (args, ctx) => listAccountantNotices(await resolveOrg(args, ctx)), + outputSchema: listSchema(ACCOUNTANT_NOTICE_ROW), + execute: async (args, ctx) => + listResult(await listAccountantNotices(await resolveOrg(args, ctx))), }, mark_accountant_notified: { diff --git a/src/lib/mcp/tools-transactions.ts b/src/lib/mcp/tools-transactions.ts index e0bc988..8443403 100644 --- a/src/lib/mcp/tools-transactions.ts +++ b/src/lib/mcp/tools-transactions.ts @@ -21,6 +21,8 @@ import { import { assertInOrg, getContractProgress, + listResult, + listSchema, normalizeCurrency, optBoolean, optDate, @@ -32,6 +34,7 @@ import { requireNumber, requireString, resolveOrg, + rowSchema, type ToolDef, } from "./shared"; import { @@ -110,6 +113,56 @@ const CONTRACT_PROGRESS_SCHEMA = { ], }; +// list_transactions 回的是 db/queries.ts listTransactions 的投影(不是整列): +// 交易本身的欄位加上 join 出來的分類 / 帳戶 / 對象 / 員工 / 專案名稱。 +const TXN_LIST_ROW = rowSchema({ + id: { type: "number" }, + txnDate: { type: "string", description: "YYYY-MM-DD." }, + description: { type: ["string", "null"] }, + amount: { type: "string", description: "Decimal as a string." }, + currency: { type: "string", description: "3-letter code." }, + amountTwd: { type: ["string", "null"] }, + book: { type: "string", enum: [...BOOKS] }, + type: { type: "string", description: "expense | income | advance | transfer | reimbursement" }, + createdAt: { type: "string", description: "ISO 8601 timestamp." }, + updatedAt: { type: "string", description: "ISO 8601 timestamp." }, + categoryId: { type: ["number", "null"] }, + billedToCompanyTaxId: { type: "boolean" }, + categoryName: { type: ["string", "null"] }, + categoryKind: { type: ["string", "null"] }, + fromAccountId: { type: ["number", "null"] }, + toAccountId: { type: ["number", "null"] }, + partyId: { type: ["number", "null"] }, + settleEmployeeId: { type: ["number", "null"] }, + projectId: { type: ["number", "null"] }, + projectName: { type: ["string", "null"] }, + contractId: { type: ["number", "null"] }, + fromAccount: { type: ["string", "null"], description: "Name of fromAccountId." }, + toAccount: { type: ["string", "null"], description: "Name of toAccountId." }, + partyName: { type: ["string", "null"] }, + settleName: { type: ["string", "null"], description: "Employee who fronted an advance." }, +}); + +// getOverview 已經把聚合結果轉成 number。 +const OVERVIEW_ROW = rowSchema({ + currency: { type: "string", description: "3-letter code." }, + income: { type: "number" }, + expense: { type: "number", description: "expense + advance." }, + net: { type: "number", description: "income − expense." }, +}); + +const ADVANCE_ROW = rowSchema({ + id: { type: "number", description: "Pass this back as advanceId to create_reimbursement." }, + txnDate: { type: "string", description: "YYYY-MM-DD." }, + amount: { type: "string", description: "Decimal as a string." }, + amountTwd: { type: ["string", "null"] }, + currency: { type: "string", description: "3-letter code." }, + description: { type: ["string", "null"] }, + vendorName: { type: ["string", "null"], description: "Who the employee paid." }, + settleName: { type: ["string", "null"], description: "Employee owed the money back." }, + categoryName: { type: ["string", "null"] }, +}); + type Db = ReturnType; async function getOrCreateParty( @@ -534,6 +587,7 @@ export const transactionTools: Record = { }, additionalProperties: false, }, + outputSchema: listSchema(TXN_LIST_ROW), execute: async (args, ctx) => { const orgId = await resolveOrg(args, ctx); const filters = { @@ -550,7 +604,7 @@ export const transactionTools: Record = { await assertInOrg(db, bankAccounts, filters.accountId, orgId, "Account"); if (filters.projectId !== undefined) await assertInOrg(db, projects, filters.projectId, orgId, "Project"); - return listTransactions(orgId, filters, optNumber(args, "limit") ?? 100); + return listResult(await listTransactions(orgId, filters, optNumber(args, "limit") ?? 100)); }, }, @@ -578,20 +632,25 @@ export const transactionTools: Record = { }, get_financial_overview: { - description: "Income/expense/net totals grouped by currency for the organization.", + description: + "Income/expense/net totals grouped by currency, computed from the recorded ledger. One row per currency; currencies are never mixed.", inputSchema: { type: "object", properties: { ...ORG_ARG }, additionalProperties: false }, - execute: async (args, ctx) => getOverview(await resolveOrg(args, ctx)), + outputSchema: listSchema(OVERVIEW_ROW), + execute: async (args, ctx) => listResult(await getOverview(await resolveOrg(args, ctx))), }, list_outstanding_advances: { - description: "Employee cash advances (代墊) not yet reimbursed. Settle with create_reimbursement.", + description: + "Employee cash advances (代墊) that have no reimbursement entry booked against them yet. Once the company has repaid the employee, record it with create_reimbursement.", inputSchema: { type: "object", properties: { ...ORG_ARG }, additionalProperties: false }, - execute: async (args, ctx) => listOutstandingAdvances(await resolveOrg(args, ctx)), + outputSchema: listSchema(ADVANCE_ROW), + execute: async (args, ctx) => + listResult(await listOutstandingAdvances(await resolveOrg(args, ctx))), }, create_transaction: { description: - "Record a ledger transaction. Required per type — expense/income: accountId + partyName; advance: partyName + settleEmployeeName (no account); transfer: fromAccountId + toAccountId. categoryId is OPTIONAL — omit it to leave the txn 未分類 (unclassified; no need for a separate holding account). Resolve ids with list_bank_accounts / list_categories / list_parties first. 'reported' (報稅/上外帳) sets the book to 'both', otherwise 'internal' (transfers are always 'both'). Set billedToCompanyTaxId=true to mark 有報公司統編 (the invoice attachment itself is done in the app). To reimburse an advance use create_reimbursement. When contractId is set, the result carries `contractProgress` (amount/received/remaining/fullyCollected) — if `fullyCollected` is true while the contract is still draft/active, TELL THE USER the contract is now fully collected and ASK whether to set it to completed (已完成); on a yes, call update_contract with status='completed'. Never flip the status without asking.", + "Write one bookkeeping entry into the ledger for money that has already moved elsewhere. This records history; it never sends, collects or transfers anything, and 'transfer' here means a book entry between two of the organization's own ledger accounts. Required per type — expense/income: accountId + partyName; advance: partyName + settleEmployeeName (no account); transfer: fromAccountId + toAccountId. categoryId is optional — omit it to leave the entry 未分類 (unclassified; no need for a separate holding account). Resolve ids with list_bank_accounts / list_categories / list_parties first. 'reported' (報稅/上外帳) sets the book to 'both', otherwise 'internal' (transfers are always 'both'). Set billedToCompanyTaxId=true to mark 有報公司統編 (the invoice attachment itself is done in the app). To book a repaid advance use create_reimbursement. When contractId is set, the result carries `contractProgress` (amount/received/remaining/fullyCollected) — if `fullyCollected` is true while the contract is still draft/active, tell the user the contract is now fully collected and ask whether to set it to completed (已完成); on a yes, call update_contract with status='completed'. Never flip the status without asking.", inputSchema: { type: "object", properties: { @@ -698,7 +757,7 @@ export const transactionTools: Record = { bulk_create_transactions: { description: - "Insert MANY ledger transactions in ONE call — use this instead of calling create_transaction in a loop. Pass `items`: an array where each element mirrors create_transaction's arguments (type, txnDate, amount, currency?, description?, reported?, accountId?, partyName?, categoryId?, settleEmployeeName?, fromAccountId?, toAccountId?, projectId?, contractId?, subscriptionId?, subscriptionPeriod?). Per-type requirements match create_transaction (expense/income: accountId+partyName; advance: partyName+settleEmployeeName; transfer: fromAccountId+toAccountId); categoryId is optional (omit → 未分類, unclassified). Account/category/project/contract/subscription ids are validated against your org; party/employee names are created on demand and deduped within the batch. subscriptionPeriod (YYYY-MM-DD) is required on any item that sets subscriptionId. All rows are written in a single INSERT. Returns the created count, the ids, and — for every contract any item linked to — `contractProgress` (amount/received/remaining/fullyCollected). For each entry with `fullyCollected` true while the contract is still draft/active, TELL THE USER that contract is now fully collected and ASK whether to set it to completed (已完成); on a yes, call update_contract with status='completed'. Never flip the status without asking. Max 1000 items per call.", + "Write many ledger entries in one call — use this instead of calling create_transaction in a loop. Like create_transaction, this only records entries in the organization's own books; no money is moved. Pass `items`: an array where each element mirrors create_transaction's arguments (type, txnDate, amount, currency?, description?, reported?, accountId?, partyName?, categoryId?, settleEmployeeName?, fromAccountId?, toAccountId?, projectId?, contractId?, subscriptionId?, subscriptionPeriod?). Per-type requirements match create_transaction (expense/income: accountId+partyName; advance: partyName+settleEmployeeName; transfer: fromAccountId+toAccountId); categoryId is optional (omit → 未分類, unclassified). Account/category/project/contract/subscription ids are validated against your org; party/employee names are created on demand and deduped within the batch. subscriptionPeriod (YYYY-MM-DD) is required on any item that sets subscriptionId. All rows are written in a single database insert. Returns the created count, the ids, and — for every contract any item linked to — `contractProgress` (amount/received/remaining/fullyCollected). For each entry with `fullyCollected` true while the contract is still draft/active, tell the user that contract is now fully collected and ask whether to set it to completed (已完成); on a yes, call update_contract with status='completed'. Never flip the status without asking. Max 1000 items per call.", inputSchema: { type: "object", properties: { @@ -985,12 +1044,12 @@ export const transactionTools: Record = { create_reimbursement: { description: - "Pay back an employee advance: creates a reimbursement transaction linked to the advance. Find the advance via list_outstanding_advances.", + "Record that an employee advance (代墊) has been repaid: writes a reimbursement entry in the ledger linked to the original advance. Bookkeeping only — it does not send the employee any money; do that through your bank and record it here. Find the advance via list_outstanding_advances.", inputSchema: { type: "object", properties: { advanceId: { type: "number", description: "The advance transaction id." }, - fromAccountId: { type: "number", description: "Account paying the employee." }, + fromAccountId: { type: "number", description: "Ledger account the repayment is booked against." }, payDate: { type: "string", description: "YYYY-MM-DD." }, amount: { type: "number" }, ...ORG_ARG, diff --git a/src/lib/mcp/tools.ts b/src/lib/mcp/tools.ts index cd6d11e..75fded7 100644 --- a/src/lib/mcp/tools.ts +++ b/src/lib/mcp/tools.ts @@ -19,6 +19,10 @@ import { requireNumber, resolveOrg, todayStr, + listResult, + listSchema, + rowSchema, + type JsonSchemaObject, type ToolDef, } from "./shared"; import { accountingTools } from "./tools-accounting"; @@ -29,12 +33,75 @@ import { billingItemTools } from "./tools-billing"; export type { ToolContext, ToolDef } from "./shared"; +// ---- outputSchema 素材 ---- +// 這幾支是自己組 select 的清單工具,形狀就是 select 裡列的欄位:drizzle 的 numeric +// 讀回來是字串、date 是 YYYY-MM-DD 字串、leftJoin 帶出來的欄位可能是 null。 + +const SUBSCRIPTION_LIST_ROW: JsonSchemaObject = rowSchema({ + id: { type: "number" }, + name: { type: "string" }, + amount: { type: "string", description: "Decimal as a string." }, + currency: { type: "string", description: "3-letter code." }, + intervalMonths: { type: "number" }, + startDate: { type: "string", description: "YYYY-MM-DD." }, + endDate: { type: ["string", "null"], description: "YYYY-MM-DD." }, + status: { type: "string", enum: ["active", "paused", "ended"] }, + customer: { type: ["string", "null"], description: "Customer party name." }, + nextChargeDate: { + type: ["string", "null"], + description: "YYYY-MM-DD; null unless the subscription is active and still running.", + }, +}); + +const CONTRACT_LIST_ROW: JsonSchemaObject = rowSchema({ + id: { type: "number" }, + title: { type: "string" }, + amount: { type: ["string", "null"], description: "Decimal as a string; null when not agreed." }, + currency: { type: "string", description: "3-letter code." }, + startDate: { type: ["string", "null"], description: "YYYY-MM-DD." }, + endDate: { type: ["string", "null"], description: "YYYY-MM-DD." }, + status: { type: "string", enum: ["draft", "active", "completed", "cancelled"] }, + fileUrl: { type: ["string", "null"] }, + customer: { type: ["string", "null"], description: "Customer party name." }, + received: { type: "number", description: "已收: linked income in the contract currency." }, + cost: { type: "number", description: "Linked expense/advance; reference only." }, + remaining: { type: ["number", "null"], description: "未收 = amount − received; null when amount is unset." }, +}); + +const PROJECT_LIST_ROW: JsonSchemaObject = rowSchema({ + id: { type: "number" }, + name: { type: "string" }, + status: { type: "string", enum: ["active", "archived"] }, + description: { type: ["string", "null"] }, + client: { type: ["string", "null"], description: "Owning customer party name." }, +}); + +const CUSTOMER_LIST_ROW: JsonSchemaObject = rowSchema({ + id: { type: "number", description: "Pass this back as customerPartyId." }, + name: { type: "string" }, + taxId: { type: ["string", "null"] }, + defaultCurrency: { type: ["string", "null"], description: "3-letter code." }, + contact: { type: ["string", "null"] }, +}); + +const ACTIVITY_ROW: JsonSchemaObject = rowSchema({ + id: { type: "number" }, + actorName: { type: ["string", "null"] }, + actorEmail: { type: ["string", "null"] }, + channel: { type: "string", enum: ["web", "mcp"] }, + action: { type: "string", enum: ["create", "update", "delete", "read"] }, + entityType: { type: "string" }, + entityId: { type: ["number", "null"] }, + summary: { type: ["string", "null"] }, + createdAt: { type: "string", description: "ISO 8601 timestamp." }, +}); + // Discovery + the recurring-billing tools. Domain CRUD lives in the tools-*.ts // modules and is merged into `tools` at the bottom. const billingTools: Record = { list_organizations: { description: - "List the organizations the signed-in user can access. Call this FIRST in a session, show the user the options, and ask which organization to work in — then pass the chosen value as `organizationId` to every other tool. Required when the account belongs to more than one organization.", + "List the organizations the signed-in user can access. Call this first in a session, show the user the options, and ask which organization to work in — then pass the chosen value as `organizationId` to every other tool. Required when the account belongs to more than one organization.", inputSchema: { type: "object", properties: {}, @@ -43,8 +110,8 @@ const billingTools: Record = { // Reference implementation of an `outputSchema` (see ToolDef in shared.ts). // Declaring one makes the handler also return the result as MCP // `structuredContent`, which ChatGPT/Codex prefer over parsing the JSON text - // block. Worth adding to the other tools whose return shape is stable and - // object-valued — tools that return a bare array must NOT declare one. + // block. Every tool here declares one; the schema is a promise, so derive it + // from what `execute` really returns, nullable fields included. outputSchema: { type: "object", properties: { @@ -88,7 +155,7 @@ const billingTools: Record = { list_upcoming_billing: { description: - "Upcoming charges within the next N days, from BOTH active recurring subscriptions (next charge computed from start_date + interval_months) and scheduled one-off billing items (contract instalments / project milestones). Use this to answer 'who do I need to bill, and when'. For the full picture including overdue and unpaid items, use list_billing_status.", + "Charges coming due within the next N days, projected from the organization's own records: both active recurring subscriptions (next charge computed from start_date + interval_months) and planned one-off billing items (contract instalments / project milestones). A reminder view — it bills nobody and collects nothing. Use it to answer 'who do I need to bill, and when'. For the full picture including overdue and unpaid items, use list_billing_status.", inputSchema: { type: "object", properties: { @@ -254,6 +321,7 @@ const billingTools: Record = { }, additionalProperties: false, }, + outputSchema: listSchema(SUBSCRIPTION_LIST_ROW), execute: async (args, ctx) => { const orgId = await resolveOrg(args, ctx); const status = optString(args, "status"); @@ -282,13 +350,15 @@ const billingTools: Record = { .leftJoin(parties, eq(subscriptions.customerPartyId, parties.id)) .where(where) .orderBy(asc(subscriptions.startDate)); - return rows.map((s) => ({ - ...s, - nextChargeDate: - s.status === "active" - ? nextChargeDate(s.startDate, s.intervalMonths, today, s.endDate) - : null, - })); + return listResult( + rows.map((s) => ({ + ...s, + nextChargeDate: + s.status === "active" + ? nextChargeDate(s.startDate, s.intervalMonths, today, s.endDate) + : null, + })), + ); }, }, @@ -475,6 +545,7 @@ const billingTools: Record = { }, additionalProperties: false, }, + outputSchema: listSchema(CONTRACT_LIST_ROW), execute: async (args, ctx) => { const orgId = await resolveOrg(args, ctx); const status = optString(args, "status"); @@ -516,11 +587,13 @@ const billingTools: Record = { .where(where) .groupBy(contracts.id, parties.name) .orderBy(desc(contracts.id)); - return rows.map((r) => { - const received = Number(r.received); - const remaining = r.amount == null ? null : Number(r.amount) - received; - return { ...r, received, cost: Number(r.cost), remaining }; - }); + return listResult( + rows.map((r) => { + const received = Number(r.received); + const remaining = r.amount == null ? null : Number(r.amount) - received; + return { ...r, received, cost: Number(r.cost), remaining }; + }), + ); }, }, @@ -538,6 +611,7 @@ const billingTools: Record = { }, additionalProperties: false, }, + outputSchema: listSchema(PROJECT_LIST_ROW), execute: async (args, ctx) => { const orgId = await resolveOrg(args, ctx); const status = optString(args, "status"); @@ -549,7 +623,7 @@ const billingTools: Record = { isNull(projects.deletedAt), ) : and(eq(projects.organizationId, orgId), isNull(projects.deletedAt)); - return db + const rows = await db .select({ id: projects.id, name: projects.name, @@ -561,6 +635,7 @@ const billingTools: Record = { .leftJoin(parties, eq(projects.clientPartyId, parties.id)) .where(where) .orderBy(asc(projects.name)); + return listResult(rows); }, }, @@ -572,10 +647,11 @@ const billingTools: Record = { properties: { ...ORG_ARG }, additionalProperties: false, }, + outputSchema: listSchema(CUSTOMER_LIST_ROW), execute: async (args, ctx) => { const orgId = await resolveOrg(args, ctx); const db = getDb(); - return db + const rows = await db .select({ id: parties.id, name: parties.name, @@ -593,6 +669,7 @@ const billingTools: Record = { ), ) .orderBy(asc(parties.name)); + return listResult(rows); }, }, @@ -609,13 +686,16 @@ const billingTools: Record = { }, additionalProperties: false, }, + outputSchema: listSchema(ACTIVITY_ROW), execute: async (args, ctx) => { const orgId = await resolveOrg(args, ctx); - return listActivity(orgId, { - entityType: optString(args, "entityType"), - action: optString(args, "action"), - limit: optNumber(args, "limit"), - }); + return listResult( + await listActivity(orgId, { + entityType: optString(args, "entityType"), + action: optString(args, "action"), + limit: optNumber(args, "limit"), + }), + ); }, }, From 0edd99905df068a08b7953612f65aaf820cf876f Mon Sep 17 00:00:00 2001 From: YJack0000 Date: Fri, 28 Aug 2026 17:35:41 +0800 Subject: [PATCH 4/7] =?UTF-8?q?[feature]=20=E9=9A=B1=E7=A7=81=E6=AC=8A?= =?UTF-8?q?=E6=94=BF=E7=AD=96=E8=88=87=E6=9C=8D=E5=8B=99=E6=A2=9D=E6=AC=BE?= =?UTF-8?q?=E9=9B=99=E8=AA=9E=E5=8C=96=EF=BC=88en/zh-TW=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E7=82=BA=20directory=20=E4=B8=8A=E6=9E=B6=E5=AF=A9=E6=A0=B8?= =?UTF-8?q?=E9=8B=AA=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/mcp.md | 5 +- src/app/landing-content.ts | 43 +- src/app/landing-nav.tsx | 4 +- src/app/legal-doc.tsx | 53 ++- src/app/privacy/content-en.tsx | 442 ++++++++++++++++++ src/app/privacy/content-zh-tw.tsx | 329 +++++++++++++ src/app/privacy/page.tsx | 353 +------------- src/app/public-locale-switcher-css.ts | 43 ++ ...witcher.tsx => public-locale-switcher.tsx} | 12 +- src/app/terms/content-en.tsx | 259 ++++++++++ src/app/terms/content-zh-tw.tsx | 179 +++++++ src/app/terms/page.tsx | 201 +------- src/i18n/messages/index.ts | 2 + src/i18n/messages/legal.ts | 71 +++ 14 files changed, 1419 insertions(+), 577 deletions(-) create mode 100644 src/app/privacy/content-en.tsx create mode 100644 src/app/privacy/content-zh-tw.tsx create mode 100644 src/app/public-locale-switcher-css.ts rename src/app/{landing-locale-switcher.tsx => public-locale-switcher.tsx} (82%) create mode 100644 src/app/terms/content-en.tsx create mode 100644 src/app/terms/content-zh-tw.tsx create mode 100644 src/i18n/messages/legal.ts diff --git a/docs/mcp.md b/docs/mcp.md index 8c3830a..e379253 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -246,7 +246,10 @@ things that don't live in this repo: completed **individual or business identity verification** — publishing under an unverified name is an automatic rejection; - public listing URLs: website, support, **privacy policy**, **terms**; plus a - name, logo, short/long description and category; + name, logo, short/long description and category. `/privacy` and `/terms` are + served bilingually (en / zh-TW) and default to English for any browser that + does not ask for Chinese, so a reviewer can read them without switching + anything; the language switcher in the header is there if they want to; - **domain verification**: set `OPENAI_APPS_CHALLENGE_TOKEN` to the token the portal generates and redeploy, so `/.well-known/openai-apps-challenge` returns it as bare text; diff --git a/src/app/landing-content.ts b/src/app/landing-content.ts index c1a6687..08eb446 100644 --- a/src/app/landing-content.ts +++ b/src/app/landing-content.ts @@ -22,7 +22,13 @@ // React 元件:語言切換器與依登入狀態變化的按鈕。class 與 id="nav" 都原樣保留。 // wordmark 順帶從 Pathors Internal 縮成 Internal(頁尾同步)。 -/** docs/index.html