@zykeco/sync-server 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -17
- package/dist/env.d.ts +10 -0
- package/dist/env.js +45 -6
- package/dist/env.js.map +1 -1
- package/dist/mcp/oauth.d.ts +48 -0
- package/dist/mcp/oauth.js +118 -1
- package/dist/mcp/oauth.js.map +1 -1
- package/dist/routes/mcp.js +44 -18
- package/dist/routes/mcp.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -112,12 +112,15 @@ The server ships an [MCP](https://modelcontextprotocol.io) endpoint at `POST /mc
|
|
|
112
112
|
|
|
113
113
|
### Required env vars
|
|
114
114
|
|
|
115
|
-
| Var
|
|
116
|
-
|
|
|
117
|
-
| `MCP_ENABLED`
|
|
118
|
-
| `MCP_CLIENT_ID`
|
|
119
|
-
| `MCP_TOKEN_SECRET`
|
|
120
|
-
| `MCP_TOKEN_TTL_SECONDS`
|
|
115
|
+
| Var | Default | Purpose |
|
|
116
|
+
| ----------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
117
|
+
| `MCP_ENABLED` | `true` | Set `false` to disable the `/mcp` mount entirely. |
|
|
118
|
+
| `MCP_CLIENT_ID` | _req._ | Bootstrap client ID for the headless `client_credentials` grant. Public — pick anything memorable. |
|
|
119
|
+
| `MCP_TOKEN_SECRET` | _req._ | HMAC key for signing access + refresh tokens. **Must be ≥ 32 chars (enforced at startup)** — generate with `openssl rand -hex 32`. Treat as a secret. |
|
|
120
|
+
| `MCP_TOKEN_TTL_SECONDS` | `3600` | Bearer (access) token lifetime. |
|
|
121
|
+
| `MCP_REFRESH_ENABLED` | `true` | Issue refresh tokens on the auth-code grant so clients renew without re-login. `false` to disable. |
|
|
122
|
+
| `MCP_REFRESH_TTL_SECONDS` | `2592000` | Sliding refresh-token lifetime (30 d). Each refresh re-issues with a fresh window. |
|
|
123
|
+
| `MCP_REFRESH_MAX_TTL_SECONDS` | `7776000` | Absolute cap on a refresh chain from first issue (90 d). After this, re-auth is required. |
|
|
121
124
|
|
|
122
125
|
### HTTPS requirement & `PUBLIC_URL`
|
|
123
126
|
|
|
@@ -133,15 +136,15 @@ When `PUBLIC_URL` is set, it always wins. Without it, the server falls back to `
|
|
|
133
136
|
|
|
134
137
|
### Endpoints
|
|
135
138
|
|
|
136
|
-
| Method | Path | Purpose
|
|
137
|
-
| ------ | ----------------------------------------- |
|
|
138
|
-
| GET | `/.well-known/oauth-authorization-server` | RFC 8414 metadata (root-level, what MCP clients probe).
|
|
139
|
-
| GET | `/.well-known/oauth-protected-resource` | RFC 9728 resource metadata pointing back to the AS.
|
|
140
|
-
| POST | `/mcp/register` | Dynamic Client Registration (RFC 7591).
|
|
141
|
-
| GET | `/mcp/authorize` | Consent screen (PKCE flow).
|
|
142
|
-
| POST | `/mcp/authorize` | Consent form submit — issues an authorization code.
|
|
143
|
-
| POST | `/mcp/oauth/token` | Token endpoint (
|
|
144
|
-
| POST | `/mcp` | MCP JSON-RPC. Requires `Authorization: Bearer <token>`.
|
|
139
|
+
| Method | Path | Purpose |
|
|
140
|
+
| ------ | ----------------------------------------- | ----------------------------------------------------------------------------- |
|
|
141
|
+
| GET | `/.well-known/oauth-authorization-server` | RFC 8414 metadata (root-level, what MCP clients probe). |
|
|
142
|
+
| GET | `/.well-known/oauth-protected-resource` | RFC 9728 resource metadata pointing back to the AS. |
|
|
143
|
+
| POST | `/mcp/register` | Dynamic Client Registration (RFC 7591). |
|
|
144
|
+
| GET | `/mcp/authorize` | Consent screen (PKCE flow). |
|
|
145
|
+
| POST | `/mcp/authorize` | Consent form submit — issues an authorization code. |
|
|
146
|
+
| POST | `/mcp/oauth/token` | Token endpoint (`authorization_code`, `client_credentials`, `refresh_token`). |
|
|
147
|
+
| POST | `/mcp` | MCP JSON-RPC. Requires `Authorization: Bearer <token>`. |
|
|
145
148
|
|
|
146
149
|
### Connecting Claude.ai (web or desktop) as a custom connector
|
|
147
150
|
|
|
@@ -168,8 +171,9 @@ That means it's hitting the host root instead of the discovered path. Two causes
|
|
|
168
171
|
|
|
169
172
|
#### Token / client lifetime
|
|
170
173
|
|
|
171
|
-
- Bearer tokens expire after `MCP_TOKEN_TTL_SECONDS` (default 1 h).
|
|
172
|
-
-
|
|
174
|
+
- Bearer (access) tokens expire after `MCP_TOKEN_TTL_SECONDS` (default 1 h).
|
|
175
|
+
- When `MCP_REFRESH_ENABLED` is on (default), the auth-code grant also returns a **refresh token**. Clients (claude.ai, Claude Code) silently exchange it for a new access token via `grant_type=refresh_token`, so you no longer re-run the consent flow every time the access token expires. Refresh tokens are stateless and signed: they keep working across server restarts and slide forward on each use, up to the `MCP_REFRESH_MAX_TTL_SECONDS` cap. Because they are stateless, this is sliding re-issuance, **not** reuse-detected rotation: the refresh token you just exchanged stays valid until its own expiry (it is not invalidated by the re-issue), and individual tokens **cannot be revoked** before then — rotate `MCP_TOKEN_SECRET` to invalidate all of them at once.
|
|
176
|
+
- DCR client registrations are **in-memory** — they don't survive a server restart. Refresh tokens do (the client binding is in the signature), so a restart no longer forces a re-login; only brand-new connections need DCR to re-run, which claude.ai does automatically.
|
|
173
177
|
|
|
174
178
|
### Connecting from headless agents (`client_credentials`)
|
|
175
179
|
|
|
@@ -187,6 +191,20 @@ curl -X POST https://YOUR_HOST/mcp \
|
|
|
187
191
|
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
|
|
188
192
|
```
|
|
189
193
|
|
|
194
|
+
The `authorization_code` grant additionally returns a `refresh_token`. To renew
|
|
195
|
+
an access token without re-running the consent flow:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
curl -X POST https://YOUR_HOST/mcp/oauth/token \
|
|
199
|
+
-d grant_type=refresh_token \
|
|
200
|
+
-d client_id=$CLIENT_ID \
|
|
201
|
+
-d refresh_token=$REFRESH_TOKEN
|
|
202
|
+
# -> { access_token, token_type, expires_in, refresh_token } (a new refresh_token is re-issued)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
(The headless `client_credentials` grant does **not** return a refresh token — it
|
|
206
|
+
just re-requests with the static secret.)
|
|
207
|
+
|
|
190
208
|
## Data model
|
|
191
209
|
|
|
192
210
|
- **`daily_metrics`**, **`weekly_metrics`** — `{ id (PK), isoDate / weekStartIsoDate, metricKey, value, createdAt, updatedAt }`. Composite unique on `(date, metricKey)`.
|
package/dist/env.d.ts
CHANGED
|
@@ -18,5 +18,15 @@ export interface McpEnv {
|
|
|
18
18
|
clientId: string;
|
|
19
19
|
tokenSecret: string;
|
|
20
20
|
tokenTtlSeconds: number;
|
|
21
|
+
/** Whether to issue refresh tokens on the authorization_code grant. */
|
|
22
|
+
refreshEnabled: boolean;
|
|
23
|
+
/** Lifetime of a freshly issued (or re-issued) refresh token, in seconds. */
|
|
24
|
+
refreshTtlSeconds: number;
|
|
25
|
+
/**
|
|
26
|
+
* Absolute cap on a refresh-token chain, in seconds from first issue. Once a
|
|
27
|
+
* refresh token's chain is older than this, re-issue stops extending it and
|
|
28
|
+
* the user must re-authenticate. Prevents an indefinitely sliding session.
|
|
29
|
+
*/
|
|
30
|
+
refreshMaxTtlSeconds: number;
|
|
21
31
|
}
|
|
22
32
|
export declare function loadEnv(): Env;
|
package/dist/env.js
CHANGED
|
@@ -6,15 +6,54 @@ export function loadEnv() {
|
|
|
6
6
|
const writeSecret = required('WRITE_SECRET');
|
|
7
7
|
const publicUrl = process.env.PUBLIC_URL ? normalizePublicUrl(process.env.PUBLIC_URL) : null;
|
|
8
8
|
const mcpEnabled = (process.env.MCP_ENABLED ?? 'true').toLowerCase() !== 'false';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
let mcp = null;
|
|
10
|
+
if (mcpEnabled) {
|
|
11
|
+
const refreshTtlSeconds = positiveIntEnv('MCP_REFRESH_TTL_SECONDS', 2592000); // 30d
|
|
12
|
+
const refreshMaxTtlSeconds = positiveIntEnv('MCP_REFRESH_MAX_TTL_SECONDS', 7776000); // 90d
|
|
13
|
+
if (refreshMaxTtlSeconds < refreshTtlSeconds) {
|
|
14
|
+
throw new Error(`MCP_REFRESH_MAX_TTL_SECONDS (${refreshMaxTtlSeconds}) must be >= MCP_REFRESH_TTL_SECONDS (${refreshTtlSeconds})`);
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
mcp = {
|
|
17
|
+
clientId: required('MCP_CLIENT_ID'),
|
|
18
|
+
tokenSecret: requiredSecret('MCP_TOKEN_SECRET', 32),
|
|
19
|
+
tokenTtlSeconds: positiveIntEnv('MCP_TOKEN_TTL_SECONDS', 3600),
|
|
20
|
+
refreshEnabled: (process.env.MCP_REFRESH_ENABLED ?? 'true').toLowerCase() !== 'false',
|
|
21
|
+
refreshTtlSeconds,
|
|
22
|
+
refreshMaxTtlSeconds,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
16
25
|
return { port, databaseUrl, readSecret, writeSecret, publicUrl, mcp };
|
|
17
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse an env var as a positive (>= 1) integer number of seconds, falling back
|
|
29
|
+
* to `def` when unset. Throws on non-numeric, non-finite, non-integer, zero, or
|
|
30
|
+
* negative values so a typo'd TTL fails loudly at startup rather than silently
|
|
31
|
+
* minting unusable tokens.
|
|
32
|
+
*/
|
|
33
|
+
function positiveIntEnv(name, def) {
|
|
34
|
+
const raw = process.env[name];
|
|
35
|
+
if (raw === undefined || raw === '')
|
|
36
|
+
return def;
|
|
37
|
+
const n = Number(raw);
|
|
38
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
39
|
+
throw new Error(`${name} must be a positive integer (got: ${raw})`);
|
|
40
|
+
}
|
|
41
|
+
return n;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Like `required`, but additionally enforces a minimum length. Used for the
|
|
45
|
+
* HMAC signing secret: it now protects refresh tokens that live for weeks, so a
|
|
46
|
+
* short/guessable value would let an attacker forge long-lived bearer tokens.
|
|
47
|
+
* The `>= 32 chars` floor admits a raw 32-byte secret (and any longer hex/base64
|
|
48
|
+
* encoding of one) while rejecting placeholder values like `change-me-...`.
|
|
49
|
+
*/
|
|
50
|
+
function requiredSecret(name, minLen) {
|
|
51
|
+
const value = required(name);
|
|
52
|
+
if (value.length < minLen) {
|
|
53
|
+
throw new Error(`${name} must be at least ${minLen} characters (got ${value.length})`);
|
|
54
|
+
}
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
18
57
|
function normalizePublicUrl(raw) {
|
|
19
58
|
let u;
|
|
20
59
|
try {
|
package/dist/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/oauth.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { AuthStore } from './auth-store.js';
|
|
|
3
3
|
export interface TokenIssueResult {
|
|
4
4
|
accessToken: string;
|
|
5
5
|
expiresIn: number;
|
|
6
|
+
/** Present only when refresh tokens are enabled (authorization_code grant). */
|
|
7
|
+
refreshToken?: string;
|
|
6
8
|
}
|
|
7
9
|
export type TokenVerifyResult = {
|
|
8
10
|
ok: true;
|
|
@@ -11,6 +13,14 @@ export type TokenVerifyResult = {
|
|
|
11
13
|
ok: false;
|
|
12
14
|
reason: 'malformed' | 'bad_signature' | 'expired';
|
|
13
15
|
};
|
|
16
|
+
export type RefreshVerifyResult = {
|
|
17
|
+
ok: true;
|
|
18
|
+
clientId: string;
|
|
19
|
+
absoluteMaxAt: number;
|
|
20
|
+
} | {
|
|
21
|
+
ok: false;
|
|
22
|
+
reason: 'malformed' | 'bad_signature' | 'expired' | 'wrong_type';
|
|
23
|
+
};
|
|
14
24
|
/**
|
|
15
25
|
* Issue an opaque, HMAC-signed bearer token.
|
|
16
26
|
*
|
|
@@ -21,6 +31,24 @@ export type TokenVerifyResult = {
|
|
|
21
31
|
*/
|
|
22
32
|
export declare function issueToken(env: McpEnv, nowMs?: number): TokenIssueResult;
|
|
23
33
|
export declare function verifyToken(token: string, env: McpEnv, nowMs?: number): TokenVerifyResult;
|
|
34
|
+
/**
|
|
35
|
+
* Issue a stateless, HMAC-signed refresh token.
|
|
36
|
+
*
|
|
37
|
+
* Token layout: `${b64url(JSON(payload))}.${hex(hmac_sha256(b64url, secret))}`
|
|
38
|
+
* where the payload binds the issuing `client_id` (`cid`), a sliding expiry
|
|
39
|
+
* (`exp`) and the absolute chain cap (`max`). Because the binding is carried in
|
|
40
|
+
* the signature — not in server state — the token keeps working across server
|
|
41
|
+
* restarts (the in-memory client registry being lost does not matter).
|
|
42
|
+
*
|
|
43
|
+
* `absoluteMaxAt` (unix seconds) caps the chain on re-issue; omit it on first
|
|
44
|
+
* issue to start a fresh `refreshMaxTtlSeconds` window.
|
|
45
|
+
*
|
|
46
|
+
* NOTE: these tokens are stateless, so re-issue is NOT reuse-detected
|
|
47
|
+
* rotation — a previously issued refresh token remains valid until its own
|
|
48
|
+
* `exp`. See `grantRefreshToken`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function issueRefreshToken(env: McpEnv, clientId: string, nowMs?: number, absoluteMaxAt?: number): string;
|
|
51
|
+
export declare function verifyRefreshToken(token: string, env: McpEnv, nowMs?: number): RefreshVerifyResult;
|
|
24
52
|
export interface ClientCredentialsRequest {
|
|
25
53
|
clientId: string;
|
|
26
54
|
clientSecret: string;
|
|
@@ -59,3 +87,23 @@ export interface AuthCodeRequest {
|
|
|
59
87
|
* of validation outcome past the lookup.
|
|
60
88
|
*/
|
|
61
89
|
export declare function grantAuthorizationCode(req: AuthCodeRequest, env: McpEnv, store: AuthStore, nowMs?: number): GrantResult;
|
|
90
|
+
export interface RefreshTokenRequest {
|
|
91
|
+
grantType: string;
|
|
92
|
+
refreshToken: string;
|
|
93
|
+
clientId: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Validate a refresh_token grant and exchange it for a fresh access token plus
|
|
97
|
+
* a re-issued refresh token. Stateless: the refresh token's own signature is
|
|
98
|
+
* the sole credential, and the re-issued token inherits the original chain cap
|
|
99
|
+
* (`absoluteMaxAt`) so a session cannot slide forever.
|
|
100
|
+
*
|
|
101
|
+
* SECURITY NOTE: because there is no server-side state, this is sliding
|
|
102
|
+
* re-issuance, NOT reuse-detected rotation. The presented refresh token is
|
|
103
|
+
* still valid until its own `exp` after this call, so a leaked refresh token
|
|
104
|
+
* cannot be individually revoked before then (it can be replayed to mint
|
|
105
|
+
* parallel chains, all bounded by the same `absoluteMaxAt`). Rotate
|
|
106
|
+
* `tokenSecret` to invalidate every outstanding token at once. Reuse detection
|
|
107
|
+
* would require persisting `jti` — out of scope for the stateless design.
|
|
108
|
+
*/
|
|
109
|
+
export declare function grantRefreshToken(req: RefreshTokenRequest, env: McpEnv, nowMs?: number): GrantResult;
|
package/dist/mcp/oauth.js
CHANGED
|
@@ -60,6 +60,79 @@ export function verifyToken(token, env, nowMs = Date.now()) {
|
|
|
60
60
|
}
|
|
61
61
|
return { ok: true, expiresAt };
|
|
62
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Issue a stateless, HMAC-signed refresh token.
|
|
65
|
+
*
|
|
66
|
+
* Token layout: `${b64url(JSON(payload))}.${hex(hmac_sha256(b64url, secret))}`
|
|
67
|
+
* where the payload binds the issuing `client_id` (`cid`), a sliding expiry
|
|
68
|
+
* (`exp`) and the absolute chain cap (`max`). Because the binding is carried in
|
|
69
|
+
* the signature — not in server state — the token keeps working across server
|
|
70
|
+
* restarts (the in-memory client registry being lost does not matter).
|
|
71
|
+
*
|
|
72
|
+
* `absoluteMaxAt` (unix seconds) caps the chain on re-issue; omit it on first
|
|
73
|
+
* issue to start a fresh `refreshMaxTtlSeconds` window.
|
|
74
|
+
*
|
|
75
|
+
* NOTE: these tokens are stateless, so re-issue is NOT reuse-detected
|
|
76
|
+
* rotation — a previously issued refresh token remains valid until its own
|
|
77
|
+
* `exp`. See `grantRefreshToken`.
|
|
78
|
+
*/
|
|
79
|
+
export function issueRefreshToken(env, clientId, nowMs = Date.now(), absoluteMaxAt) {
|
|
80
|
+
const nowSec = Math.floor(nowMs / 1000);
|
|
81
|
+
const max = absoluteMaxAt ?? nowSec + env.refreshMaxTtlSeconds;
|
|
82
|
+
const exp = Math.min(nowSec + env.refreshTtlSeconds, max);
|
|
83
|
+
const payload = {
|
|
84
|
+
v: 1,
|
|
85
|
+
typ: 'refresh',
|
|
86
|
+
cid: clientId,
|
|
87
|
+
jti: randomBytes(12).toString('base64url'),
|
|
88
|
+
exp,
|
|
89
|
+
max,
|
|
90
|
+
};
|
|
91
|
+
const b64 = b64urlEncode(Buffer.from(JSON.stringify(payload)));
|
|
92
|
+
const sig = sign(Buffer.from(b64), env.tokenSecret);
|
|
93
|
+
return `${b64}.${sig}`;
|
|
94
|
+
}
|
|
95
|
+
export function verifyRefreshToken(token, env, nowMs = Date.now()) {
|
|
96
|
+
const dot = token.indexOf('.');
|
|
97
|
+
if (dot <= 0)
|
|
98
|
+
return { ok: false, reason: 'malformed' };
|
|
99
|
+
const b64 = token.slice(0, dot);
|
|
100
|
+
const sigHex = token.slice(dot + 1);
|
|
101
|
+
if (sigHex.length !== SIG_HEX_LEN)
|
|
102
|
+
return { ok: false, reason: 'malformed' };
|
|
103
|
+
const expectedSigHex = sign(Buffer.from(b64), env.tokenSecret);
|
|
104
|
+
const a = Buffer.from(sigHex, 'hex');
|
|
105
|
+
const b = Buffer.from(expectedSigHex, 'hex');
|
|
106
|
+
if (a.length !== b.length || !timingSafeEqual(a, b)) {
|
|
107
|
+
return { ok: false, reason: 'bad_signature' };
|
|
108
|
+
}
|
|
109
|
+
const raw = b64urlDecode(b64);
|
|
110
|
+
if (!raw)
|
|
111
|
+
return { ok: false, reason: 'malformed' };
|
|
112
|
+
let payload;
|
|
113
|
+
try {
|
|
114
|
+
payload = JSON.parse(raw.toString('utf8'));
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return { ok: false, reason: 'malformed' };
|
|
118
|
+
}
|
|
119
|
+
if (payload.typ !== 'refresh')
|
|
120
|
+
return { ok: false, reason: 'wrong_type' };
|
|
121
|
+
if (payload.v !== 1)
|
|
122
|
+
return { ok: false, reason: 'malformed' };
|
|
123
|
+
if (typeof payload.cid !== 'string' ||
|
|
124
|
+
payload.cid.length === 0 ||
|
|
125
|
+
typeof payload.jti !== 'string' ||
|
|
126
|
+
payload.jti.length === 0 ||
|
|
127
|
+
typeof payload.exp !== 'number' ||
|
|
128
|
+
typeof payload.max !== 'number') {
|
|
129
|
+
return { ok: false, reason: 'malformed' };
|
|
130
|
+
}
|
|
131
|
+
if (Math.floor(nowMs / 1000) >= payload.exp) {
|
|
132
|
+
return { ok: false, reason: 'expired' };
|
|
133
|
+
}
|
|
134
|
+
return { ok: true, clientId: payload.cid, absoluteMaxAt: payload.max };
|
|
135
|
+
}
|
|
63
136
|
/**
|
|
64
137
|
* Validate a client_credentials grant request against the configured MCP env
|
|
65
138
|
* + the read secret. Returns the access token on success.
|
|
@@ -144,6 +217,50 @@ export function grantAuthorizationCode(req, env, store, nowMs = Date.now()) {
|
|
|
144
217
|
if (!timingSafeEqualStr(expected, rec.codeChallenge)) {
|
|
145
218
|
return { ok: false, status: 400, error: 'invalid_grant', description: 'pkce mismatch' };
|
|
146
219
|
}
|
|
147
|
-
|
|
220
|
+
const token = issueToken(env, nowMs);
|
|
221
|
+
if (env.refreshEnabled) {
|
|
222
|
+
token.refreshToken = issueRefreshToken(env, rec.clientId, nowMs);
|
|
223
|
+
}
|
|
224
|
+
return { ok: true, token };
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Validate a refresh_token grant and exchange it for a fresh access token plus
|
|
228
|
+
* a re-issued refresh token. Stateless: the refresh token's own signature is
|
|
229
|
+
* the sole credential, and the re-issued token inherits the original chain cap
|
|
230
|
+
* (`absoluteMaxAt`) so a session cannot slide forever.
|
|
231
|
+
*
|
|
232
|
+
* SECURITY NOTE: because there is no server-side state, this is sliding
|
|
233
|
+
* re-issuance, NOT reuse-detected rotation. The presented refresh token is
|
|
234
|
+
* still valid until its own `exp` after this call, so a leaked refresh token
|
|
235
|
+
* cannot be individually revoked before then (it can be replayed to mint
|
|
236
|
+
* parallel chains, all bounded by the same `absoluteMaxAt`). Rotate
|
|
237
|
+
* `tokenSecret` to invalidate every outstanding token at once. Reuse detection
|
|
238
|
+
* would require persisting `jti` — out of scope for the stateless design.
|
|
239
|
+
*/
|
|
240
|
+
export function grantRefreshToken(req, env, nowMs = Date.now()) {
|
|
241
|
+
if (req.grantType !== 'refresh_token') {
|
|
242
|
+
return { ok: false, status: 400, error: 'unsupported_grant_type' };
|
|
243
|
+
}
|
|
244
|
+
if (!env.refreshEnabled) {
|
|
245
|
+
return {
|
|
246
|
+
ok: false,
|
|
247
|
+
status: 400,
|
|
248
|
+
error: 'unsupported_grant_type',
|
|
249
|
+
description: 'refresh tokens are disabled',
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
if (!req.refreshToken || !req.clientId) {
|
|
253
|
+
return { ok: false, status: 400, error: 'invalid_request', description: 'missing parameter' };
|
|
254
|
+
}
|
|
255
|
+
const v = verifyRefreshToken(req.refreshToken, env, nowMs);
|
|
256
|
+
if (!v.ok) {
|
|
257
|
+
return { ok: false, status: 400, error: 'invalid_grant', description: `refresh ${v.reason}` };
|
|
258
|
+
}
|
|
259
|
+
if (!timingSafeEqualStr(v.clientId, req.clientId)) {
|
|
260
|
+
return { ok: false, status: 400, error: 'invalid_grant', description: 'client_id mismatch' };
|
|
261
|
+
}
|
|
262
|
+
const token = issueToken(env, nowMs);
|
|
263
|
+
token.refreshToken = issueRefreshToken(env, v.clientId, nowMs, v.absoluteMaxAt);
|
|
264
|
+
return { ok: true, token };
|
|
148
265
|
}
|
|
149
266
|
//# sourceMappingURL=oauth.js.map
|
package/dist/mcp/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/mcp/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/mcp/oauth.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/mcp.js
CHANGED
|
@@ -2,7 +2,7 @@ import { timingSafeEqual } from 'node:crypto';
|
|
|
2
2
|
import { Hono } from 'hono';
|
|
3
3
|
import { createAuthStore } from '../mcp/auth-store.js';
|
|
4
4
|
import { renderConsent } from '../mcp/consent.js';
|
|
5
|
-
import { grantAuthorizationCode, grantClientCredentials, verifyToken } from '../mcp/oauth.js';
|
|
5
|
+
import { grantAuthorizationCode, grantClientCredentials, grantRefreshToken, verifyToken, } from '../mcp/oauth.js';
|
|
6
6
|
import { createMcpServer } from '../mcp/server.js';
|
|
7
7
|
import { buildTools } from '../mcp/tools.js';
|
|
8
8
|
import { createTimezoneResolver } from '../mcp/timezones.js';
|
|
@@ -27,13 +27,16 @@ function issuerFrom(req, publicUrl) {
|
|
|
27
27
|
const host = fwdHost || u.host;
|
|
28
28
|
return `${proto}://${host}`;
|
|
29
29
|
}
|
|
30
|
-
function authMetadata(issuer) {
|
|
30
|
+
function authMetadata(issuer, refreshEnabled) {
|
|
31
|
+
const grantTypes = ['authorization_code', 'client_credentials'];
|
|
32
|
+
if (refreshEnabled)
|
|
33
|
+
grantTypes.push('refresh_token');
|
|
31
34
|
return {
|
|
32
35
|
issuer,
|
|
33
36
|
authorization_endpoint: `${issuer}/mcp/authorize`,
|
|
34
37
|
token_endpoint: `${issuer}/mcp/oauth/token`,
|
|
35
38
|
registration_endpoint: `${issuer}/mcp/register`,
|
|
36
|
-
grant_types_supported:
|
|
39
|
+
grant_types_supported: grantTypes,
|
|
37
40
|
response_types_supported: ['code'],
|
|
38
41
|
code_challenge_methods_supported: ['S256'],
|
|
39
42
|
token_endpoint_auth_methods_supported: ['none', 'client_secret_post', 'client_secret_basic'],
|
|
@@ -67,7 +70,7 @@ export function mcpRoutes(deps) {
|
|
|
67
70
|
// Kept under `/mcp/oauth/...` for backward compat with older clients.
|
|
68
71
|
app.get('/oauth/.well-known/oauth-authorization-server', (c) => {
|
|
69
72
|
addCorsHeaders(c);
|
|
70
|
-
return c.json(authMetadata(issuerFrom(c.req, env.publicUrl)));
|
|
73
|
+
return c.json(authMetadata(issuerFrom(c.req, env.publicUrl), mcp.refreshEnabled));
|
|
71
74
|
});
|
|
72
75
|
// --- Dynamic Client Registration (RFC 7591) ------------------------------
|
|
73
76
|
app.post('/register', async (c) => {
|
|
@@ -98,7 +101,9 @@ export function mcpRoutes(deps) {
|
|
|
98
101
|
client_id_issued_at: Math.floor(client.createdAt / 1000),
|
|
99
102
|
redirect_uris: client.redirectUris,
|
|
100
103
|
...(client.clientName ? { client_name: client.clientName } : {}),
|
|
101
|
-
grant_types:
|
|
104
|
+
grant_types: mcp.refreshEnabled
|
|
105
|
+
? ['authorization_code', 'refresh_token']
|
|
106
|
+
: ['authorization_code'],
|
|
102
107
|
response_types: ['code'],
|
|
103
108
|
token_endpoint_auth_method: 'none',
|
|
104
109
|
}, 201);
|
|
@@ -202,6 +207,19 @@ export function mcpRoutes(deps) {
|
|
|
202
207
|
return c.json({ error: 'invalid_request', error_description: 'malformed body' }, 400);
|
|
203
208
|
}
|
|
204
209
|
const grantType = params.get('grant_type') ?? '';
|
|
210
|
+
// RFC 6749 §2.3.1: client credentials may also be supplied via HTTP Basic.
|
|
211
|
+
// Parse once up front so every grant branch can see the client_id.
|
|
212
|
+
let basicClientId = '';
|
|
213
|
+
let basicClientSecret = '';
|
|
214
|
+
const basic = c.req.header('authorization');
|
|
215
|
+
if (basic?.toLowerCase().startsWith('basic ')) {
|
|
216
|
+
const decoded = Buffer.from(basic.slice(6), 'base64').toString('utf8');
|
|
217
|
+
const sep = decoded.indexOf(':');
|
|
218
|
+
if (sep > 0) {
|
|
219
|
+
basicClientId = decoded.slice(0, sep);
|
|
220
|
+
basicClientSecret = decoded.slice(sep + 1);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
205
223
|
if (grantType === 'authorization_code') {
|
|
206
224
|
const result = grantAuthorizationCode({
|
|
207
225
|
grantType,
|
|
@@ -220,22 +238,30 @@ export function mcpRoutes(deps) {
|
|
|
220
238
|
access_token: result.token.accessToken,
|
|
221
239
|
token_type: 'Bearer',
|
|
222
240
|
expires_in: result.token.expiresIn,
|
|
241
|
+
...(result.token.refreshToken ? { refresh_token: result.token.refreshToken } : {}),
|
|
223
242
|
});
|
|
224
243
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
clientSecret = decoded.slice(sep + 1);
|
|
244
|
+
if (grantType === 'refresh_token') {
|
|
245
|
+
const result = grantRefreshToken({
|
|
246
|
+
grantType,
|
|
247
|
+
refreshToken: params.get('refresh_token') ?? '',
|
|
248
|
+
clientId: params.get('client_id') || basicClientId,
|
|
249
|
+
}, mcp);
|
|
250
|
+
if (!result.ok) {
|
|
251
|
+
return c.json({
|
|
252
|
+
error: result.error,
|
|
253
|
+
...(result.description ? { error_description: result.description } : {}),
|
|
254
|
+
}, result.status);
|
|
237
255
|
}
|
|
256
|
+
return c.json({
|
|
257
|
+
access_token: result.token.accessToken,
|
|
258
|
+
token_type: 'Bearer',
|
|
259
|
+
expires_in: result.token.expiresIn,
|
|
260
|
+
...(result.token.refreshToken ? { refresh_token: result.token.refreshToken } : {}),
|
|
261
|
+
});
|
|
238
262
|
}
|
|
263
|
+
const clientId = params.get('client_id') || basicClientId;
|
|
264
|
+
const clientSecret = params.get('client_secret') || basicClientSecret;
|
|
239
265
|
const result = grantClientCredentials({ clientId, clientSecret, grantType }, mcp, env.readSecret);
|
|
240
266
|
if (!result.ok) {
|
|
241
267
|
return c.json({
|
|
@@ -318,7 +344,7 @@ export function mcpRoutes(deps) {
|
|
|
318
344
|
});
|
|
319
345
|
discovery.get('/.well-known/oauth-authorization-server', (c) => {
|
|
320
346
|
addCorsHeaders(c);
|
|
321
|
-
return c.json(authMetadata(issuerFrom(c.req, env.publicUrl)));
|
|
347
|
+
return c.json(authMetadata(issuerFrom(c.req, env.publicUrl), mcp.refreshEnabled));
|
|
322
348
|
});
|
|
323
349
|
discovery.get('/.well-known/oauth-protected-resource', (c) => {
|
|
324
350
|
addCorsHeaders(c);
|
package/dist/routes/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/routes/mcp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zykeco/sync-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Self-hosted Zyke sync server (Hono + Drizzle + libsql). Imports to auto-start; ships a migrate CLI.",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"author": "P2LS9K GmbH <office@p2ls9k.com>",
|