@forumone/throughline 2.2.0 → 2.3.0-pr-315-e1a501e
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/CHANGELOG.md +16 -0
- package/dist/audit/types.d.ts +1 -1
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js +2 -0
- package/dist/audit/types.js.map +1 -1
- package/dist/editorial/palette/ReportsNav.d.ts +3 -1
- package/dist/editorial/palette/ReportsNav.d.ts.map +1 -1
- package/dist/editorial/palette/ReportsNav.js +3 -3
- package/dist/editorial/palette/ReportsNav.js.map +1 -1
- package/dist/exports/rsc.d.ts +1 -0
- package/dist/exports/rsc.d.ts.map +1 -1
- package/dist/exports/rsc.js +2 -0
- package/dist/exports/rsc.js.map +1 -1
- package/dist/mcp-oauth/admin/McpClientActions.d.ts +15 -0
- package/dist/mcp-oauth/admin/McpClientActions.d.ts.map +1 -0
- package/dist/mcp-oauth/admin/McpClientActions.js +79 -0
- package/dist/mcp-oauth/admin/McpClientActions.js.map +1 -0
- package/dist/mcp-oauth/admin/styles.d.ts +2 -0
- package/dist/mcp-oauth/admin/styles.d.ts.map +1 -0
- package/dist/mcp-oauth/admin/styles.js +27 -0
- package/dist/mcp-oauth/admin/styles.js.map +1 -0
- package/dist/mcp-oauth/admin/views.d.ts +4 -0
- package/dist/mcp-oauth/admin/views.d.ts.map +1 -0
- package/dist/mcp-oauth/admin/views.js +99 -0
- package/dist/mcp-oauth/admin/views.js.map +1 -0
- package/dist/mcp-oauth/auth.d.ts +12 -0
- package/dist/mcp-oauth/auth.d.ts.map +1 -0
- package/dist/mcp-oauth/auth.js +56 -0
- package/dist/mcp-oauth/auth.js.map +1 -0
- package/dist/mcp-oauth/cimd.d.ts +13 -0
- package/dist/mcp-oauth/cimd.d.ts.map +1 -0
- package/dist/mcp-oauth/cimd.js +93 -0
- package/dist/mcp-oauth/cimd.js.map +1 -0
- package/dist/mcp-oauth/clients.d.ts +42 -0
- package/dist/mcp-oauth/clients.d.ts.map +1 -0
- package/dist/mcp-oauth/clients.js +151 -0
- package/dist/mcp-oauth/clients.js.map +1 -0
- package/dist/mcp-oauth/collections.d.ts +10 -0
- package/dist/mcp-oauth/collections.d.ts.map +1 -0
- package/dist/mcp-oauth/collections.js +236 -0
- package/dist/mcp-oauth/collections.js.map +1 -0
- package/dist/mcp-oauth/crypto.d.ts +29 -0
- package/dist/mcp-oauth/crypto.d.ts.map +1 -0
- package/dist/mcp-oauth/crypto.js +91 -0
- package/dist/mcp-oauth/crypto.js.map +1 -0
- package/dist/mcp-oauth/endpoints.d.ts +11 -0
- package/dist/mcp-oauth/endpoints.d.ts.map +1 -0
- package/dist/mcp-oauth/endpoints.js +365 -0
- package/dist/mcp-oauth/endpoints.js.map +1 -0
- package/dist/mcp-oauth/index.d.ts +10 -0
- package/dist/mcp-oauth/index.d.ts.map +1 -0
- package/dist/mcp-oauth/index.js +6 -0
- package/dist/mcp-oauth/index.js.map +1 -0
- package/dist/mcp-oauth/metadata.d.ts +45 -0
- package/dist/mcp-oauth/metadata.d.ts.map +1 -0
- package/dist/mcp-oauth/metadata.js +84 -0
- package/dist/mcp-oauth/metadata.js.map +1 -0
- package/dist/mcp-oauth/plugin.d.ts +37 -0
- package/dist/mcp-oauth/plugin.d.ts.map +1 -0
- package/dist/mcp-oauth/plugin.js +90 -0
- package/dist/mcp-oauth/plugin.js.map +1 -0
- package/dist/mcp-oauth/runtime.d.ts +124 -0
- package/dist/mcp-oauth/runtime.d.ts.map +1 -0
- package/dist/mcp-oauth/runtime.js +111 -0
- package/dist/mcp-oauth/runtime.js.map +1 -0
- package/dist/mcp-oauth/store.d.ts +75 -0
- package/dist/mcp-oauth/store.d.ts.map +1 -0
- package/dist/mcp-oauth/store.js +408 -0
- package/dist/mcp-oauth/store.js.map +1 -0
- package/dist/migrate/exports.json +29 -0
- package/package.json +7 -3
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import { findAuditWriter } from '../audit/plugin.js';
|
|
2
|
+
import { fetchClientMetadata, isMetadataDocumentUrl } from './cimd.js';
|
|
3
|
+
import { classifyRedirects, MCP_CLIENT_RULES } from './clients.js';
|
|
4
|
+
import { hashToken, newClientId, newToken, TOKEN_PREFIX, verifyPkce } from './crypto.js';
|
|
5
|
+
import { keys, MCP_OAUTH_CLIENTS_SLUG, MCP_OAUTH_GRANTS_SLUG, } from './runtime.js';
|
|
6
|
+
const CIMD_REFRESH_MS = 24 * 60 * 60 * 1000;
|
|
7
|
+
function asClient(doc) {
|
|
8
|
+
return {
|
|
9
|
+
id: doc['id'],
|
|
10
|
+
clientId: String(doc['clientId']),
|
|
11
|
+
...(typeof doc['name'] === 'string' ? { name: doc['name'] } : {}),
|
|
12
|
+
kind: doc['kind'],
|
|
13
|
+
method: doc['method'],
|
|
14
|
+
redirectUris: Array.isArray(doc['redirectUris']) ? doc['redirectUris'] : [],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async function findOne(payload, collection, where) {
|
|
18
|
+
const { docs } = await payload.find({
|
|
19
|
+
collection: collection,
|
|
20
|
+
where: where,
|
|
21
|
+
limit: 1,
|
|
22
|
+
depth: 0,
|
|
23
|
+
overrideAccess: true,
|
|
24
|
+
pagination: false,
|
|
25
|
+
});
|
|
26
|
+
return docs[0];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A registration request's client, registered — or the one already registered
|
|
30
|
+
* with the same name and redirects. Registering is unauthenticated by design
|
|
31
|
+
* (RFC 7591), so identical requests share a row rather than each adding one.
|
|
32
|
+
*/
|
|
33
|
+
export async function registerClient(payload, policy, request) {
|
|
34
|
+
const classified = classifyRedirects(request.redirectUris, (kind) => policy.clients[kind]);
|
|
35
|
+
if ('error' in classified)
|
|
36
|
+
return classified;
|
|
37
|
+
const redirectUris = [...request.redirectUris].sort();
|
|
38
|
+
const name = request.name?.slice(0, 200);
|
|
39
|
+
const existing = await payload.find({
|
|
40
|
+
collection: MCP_OAUTH_CLIENTS_SLUG,
|
|
41
|
+
where: {
|
|
42
|
+
and: [
|
|
43
|
+
{ method: { equals: 'dcr' } },
|
|
44
|
+
{ kind: { equals: classified.kind } },
|
|
45
|
+
name ? { name: { equals: name } } : { name: { exists: false } },
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
limit: 20,
|
|
49
|
+
depth: 0,
|
|
50
|
+
overrideAccess: true,
|
|
51
|
+
pagination: false,
|
|
52
|
+
});
|
|
53
|
+
for (const doc of existing.docs) {
|
|
54
|
+
const client = asClient(doc);
|
|
55
|
+
if (JSON.stringify([...client.redirectUris].sort()) === JSON.stringify(redirectUris))
|
|
56
|
+
return client;
|
|
57
|
+
}
|
|
58
|
+
const created = await payload.create({
|
|
59
|
+
collection: MCP_OAUTH_CLIENTS_SLUG,
|
|
60
|
+
data: {
|
|
61
|
+
clientId: newClientId(),
|
|
62
|
+
...(name ? { name } : {}),
|
|
63
|
+
kind: classified.kind,
|
|
64
|
+
method: 'dcr',
|
|
65
|
+
redirectUris,
|
|
66
|
+
},
|
|
67
|
+
overrideAccess: true,
|
|
68
|
+
});
|
|
69
|
+
return asClient(created);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The client a `client_id` names: a registered one, or a metadata document,
|
|
73
|
+
* fetched (and cached for a day) and held to the same allowlist.
|
|
74
|
+
*/
|
|
75
|
+
export async function resolveClient(payload, policy, clientId, fetchImpl) {
|
|
76
|
+
if (typeof clientId !== 'string' || clientId === '')
|
|
77
|
+
return { error: 'client_id is required.' };
|
|
78
|
+
const found = await findOne(payload, MCP_OAUTH_CLIENTS_SLUG, { clientId: { equals: clientId } });
|
|
79
|
+
if (!isMetadataDocumentUrl(clientId)) {
|
|
80
|
+
if (!found)
|
|
81
|
+
return { error: 'This app is not registered here. Remove the connector and add it again.' };
|
|
82
|
+
const client = asClient(found);
|
|
83
|
+
if (!policy.clients[client.kind]) {
|
|
84
|
+
return {
|
|
85
|
+
error: `${MCP_CLIENT_RULES[client.kind].label} connections are turned off on this site.`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return client;
|
|
89
|
+
}
|
|
90
|
+
const fresh = found && typeof found['fetchedAt'] === 'string'
|
|
91
|
+
? Date.now() - Date.parse(found['fetchedAt']) < CIMD_REFRESH_MS
|
|
92
|
+
: false;
|
|
93
|
+
if (found && fresh) {
|
|
94
|
+
const client = asClient(found);
|
|
95
|
+
if (!policy.clients[client.kind]) {
|
|
96
|
+
return {
|
|
97
|
+
error: `${MCP_CLIENT_RULES[client.kind].label} connections are turned off on this site.`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return client;
|
|
101
|
+
}
|
|
102
|
+
const doc = await fetchClientMetadata(clientId, fetchImpl);
|
|
103
|
+
if ('error' in doc)
|
|
104
|
+
return doc;
|
|
105
|
+
const classified = classifyRedirects(doc.redirect_uris, (kind) => policy.clients[kind]);
|
|
106
|
+
if ('error' in classified)
|
|
107
|
+
return classified;
|
|
108
|
+
const data = {
|
|
109
|
+
clientId,
|
|
110
|
+
...(doc.client_name ? { name: doc.client_name.slice(0, 200) } : {}),
|
|
111
|
+
kind: classified.kind,
|
|
112
|
+
method: 'cimd',
|
|
113
|
+
redirectUris: doc.redirect_uris,
|
|
114
|
+
fetchedAt: new Date().toISOString(),
|
|
115
|
+
};
|
|
116
|
+
const saved = found
|
|
117
|
+
? await payload.update({
|
|
118
|
+
collection: MCP_OAUTH_CLIENTS_SLUG,
|
|
119
|
+
id: found['id'],
|
|
120
|
+
data: data,
|
|
121
|
+
overrideAccess: true,
|
|
122
|
+
})
|
|
123
|
+
: await payload.create({
|
|
124
|
+
collection: MCP_OAUTH_CLIENTS_SLUG,
|
|
125
|
+
data: data,
|
|
126
|
+
overrideAccess: true,
|
|
127
|
+
});
|
|
128
|
+
return asClient(saved);
|
|
129
|
+
}
|
|
130
|
+
/** Consent: a pending grant and the code that completes it. */
|
|
131
|
+
export async function createPendingGrant(payload, user, client, request) {
|
|
132
|
+
const { token: key } = keys(payload);
|
|
133
|
+
const code = newToken(TOKEN_PREFIX.code);
|
|
134
|
+
const now = Date.now();
|
|
135
|
+
// Codes nobody exchanged, from anyone, are swept here rather than by a job.
|
|
136
|
+
await payload.delete({
|
|
137
|
+
collection: MCP_OAUTH_GRANTS_SLUG,
|
|
138
|
+
where: {
|
|
139
|
+
and: [
|
|
140
|
+
{ status: { equals: 'pending' } },
|
|
141
|
+
{ codeExpiresAt: { less_than: new Date(now - 60 * 60 * 1000).toISOString() } },
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
overrideAccess: true,
|
|
145
|
+
});
|
|
146
|
+
await payload.create({
|
|
147
|
+
collection: MCP_OAUTH_GRANTS_SLUG,
|
|
148
|
+
data: {
|
|
149
|
+
user: user['id'],
|
|
150
|
+
client: client.id,
|
|
151
|
+
clientName: MCP_CLIENT_RULES[client.kind].label,
|
|
152
|
+
kind: client.kind,
|
|
153
|
+
status: 'pending',
|
|
154
|
+
redirectHost: new URL(request.redirectUri).host,
|
|
155
|
+
codeHash: hashToken(key, code),
|
|
156
|
+
codeChallenge: request.codeChallenge,
|
|
157
|
+
codeRedirectUri: request.redirectUri,
|
|
158
|
+
codeExpiresAt: new Date(now + 60 * 1000).toISOString(),
|
|
159
|
+
},
|
|
160
|
+
overrideAccess: true,
|
|
161
|
+
});
|
|
162
|
+
return code;
|
|
163
|
+
}
|
|
164
|
+
async function issue(payload, runtime, grantId, extra) {
|
|
165
|
+
const { token: key } = keys(payload);
|
|
166
|
+
const access = newToken(TOKEN_PREFIX.access);
|
|
167
|
+
const refresh = newToken(TOKEN_PREFIX.refresh);
|
|
168
|
+
const now = Date.now();
|
|
169
|
+
await payload.update({
|
|
170
|
+
collection: MCP_OAUTH_GRANTS_SLUG,
|
|
171
|
+
id: grantId,
|
|
172
|
+
data: {
|
|
173
|
+
...extra,
|
|
174
|
+
status: 'active',
|
|
175
|
+
accessHash: hashToken(key, access),
|
|
176
|
+
accessExpiresAt: new Date(now + runtime.accessTokenTtl * 1000).toISOString(),
|
|
177
|
+
refreshHash: hashToken(key, refresh),
|
|
178
|
+
refreshExpiresAt: new Date(now + runtime.refreshTokenTtl * 1000).toISOString(),
|
|
179
|
+
lastUsedAt: new Date(now).toISOString(),
|
|
180
|
+
},
|
|
181
|
+
overrideAccess: true,
|
|
182
|
+
});
|
|
183
|
+
return {
|
|
184
|
+
access_token: access,
|
|
185
|
+
token_type: 'Bearer',
|
|
186
|
+
expires_in: runtime.accessTokenTtl,
|
|
187
|
+
refresh_token: refresh,
|
|
188
|
+
scope: 'mcp',
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/** Ends a grant: its tokens stop working at once. */
|
|
192
|
+
export async function revokeGrant(payload, grant, reason) {
|
|
193
|
+
await payload.update({
|
|
194
|
+
collection: MCP_OAUTH_GRANTS_SLUG,
|
|
195
|
+
id: grant['id'],
|
|
196
|
+
data: {
|
|
197
|
+
status: 'revoked',
|
|
198
|
+
revokedAt: new Date().toISOString(),
|
|
199
|
+
revokedReason: reason,
|
|
200
|
+
accessHash: null,
|
|
201
|
+
refreshHash: null,
|
|
202
|
+
},
|
|
203
|
+
overrideAccess: true,
|
|
204
|
+
});
|
|
205
|
+
if (grant['status'] === 'active')
|
|
206
|
+
await record(payload, grant, 'mcp.disconnected', reason);
|
|
207
|
+
}
|
|
208
|
+
async function record(payload, grant, action, reason) {
|
|
209
|
+
const audit = findAuditWriter(payload);
|
|
210
|
+
if (!audit)
|
|
211
|
+
return;
|
|
212
|
+
const userId = typeof grant['user'] === 'object' && grant['user']
|
|
213
|
+
? grant['user']['id']
|
|
214
|
+
: grant['user'];
|
|
215
|
+
await audit({
|
|
216
|
+
actor: { type: 'user', userId: String(userId) },
|
|
217
|
+
action,
|
|
218
|
+
mcpServer: 'payload',
|
|
219
|
+
mcpTool: 'oauth',
|
|
220
|
+
targetCollection: MCP_OAUTH_GRANTS_SLUG,
|
|
221
|
+
targetId: String(grant['id']),
|
|
222
|
+
targetTitle: String(grant['clientName'] ?? ''),
|
|
223
|
+
summary: action === 'mcp.connected'
|
|
224
|
+
? `Connected ${String(grant['clientName'])} over MCP`
|
|
225
|
+
: `Disconnected ${String(grant['clientName'])}${reason ? `: ${reason}` : ''}`,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
async function stillAllowed(payload, runtime, policy, grant) {
|
|
229
|
+
if (!policy.clients[grant['kind']]) {
|
|
230
|
+
return { reason: `${String(grant['clientName'])} connections were turned off` };
|
|
231
|
+
}
|
|
232
|
+
const user = (await payload.findByID({
|
|
233
|
+
collection: runtime.users,
|
|
234
|
+
id: (typeof grant['user'] === 'object' && grant['user']
|
|
235
|
+
? grant['user']['id']
|
|
236
|
+
: grant['user']),
|
|
237
|
+
depth: 0,
|
|
238
|
+
overrideAccess: true,
|
|
239
|
+
disableErrors: true,
|
|
240
|
+
}));
|
|
241
|
+
if (!user)
|
|
242
|
+
return { reason: 'the account no longer exists' };
|
|
243
|
+
const verdict = runtime.eligible(user);
|
|
244
|
+
if (verdict !== true)
|
|
245
|
+
return { reason: verdict };
|
|
246
|
+
return { user };
|
|
247
|
+
}
|
|
248
|
+
/** `grant_type=authorization_code`. */
|
|
249
|
+
export async function exchangeCode(payload, runtime, policy, params) {
|
|
250
|
+
const { token: key } = keys(payload);
|
|
251
|
+
if (!params.code || !params.clientId) {
|
|
252
|
+
return { error: 'invalid_request', error_description: 'code and client_id are required.' };
|
|
253
|
+
}
|
|
254
|
+
const grant = await findOne(payload, MCP_OAUTH_GRANTS_SLUG, {
|
|
255
|
+
codeHash: { equals: hashToken(key, params.code) },
|
|
256
|
+
});
|
|
257
|
+
if (!grant)
|
|
258
|
+
return { error: 'invalid_grant', error_description: 'The authorization code is not valid.' };
|
|
259
|
+
/*
|
|
260
|
+
A code presented twice is a code somebody else has: RFC 6749 §4.1.2 says to
|
|
261
|
+
revoke what it already issued, so the legitimate app is signed out too and
|
|
262
|
+
the person reconnects, rather than an attacker keeping a session.
|
|
263
|
+
*/
|
|
264
|
+
if (grant['status'] !== 'pending') {
|
|
265
|
+
await revokeGrant(payload, grant, 'its authorization code was used twice');
|
|
266
|
+
return {
|
|
267
|
+
error: 'invalid_grant',
|
|
268
|
+
error_description: 'The authorization code has already been used.',
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
if (Date.parse(String(grant['codeExpiresAt'])) < Date.now()) {
|
|
272
|
+
return { error: 'invalid_grant', error_description: 'The authorization code has expired.' };
|
|
273
|
+
}
|
|
274
|
+
const client = await findOne(payload, MCP_OAUTH_CLIENTS_SLUG, { id: { equals: grant['client'] } });
|
|
275
|
+
if (!client || client['clientId'] !== params.clientId) {
|
|
276
|
+
return {
|
|
277
|
+
error: 'invalid_grant',
|
|
278
|
+
error_description: 'The code was issued to a different client.',
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
if (params.redirectUri !== undefined && params.redirectUri !== grant['codeRedirectUri']) {
|
|
282
|
+
return {
|
|
283
|
+
error: 'invalid_grant',
|
|
284
|
+
error_description: 'redirect_uri does not match the authorization request.',
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
if (!verifyPkce(params.codeVerifier, String(grant['codeChallenge']))) {
|
|
288
|
+
return {
|
|
289
|
+
error: 'invalid_grant',
|
|
290
|
+
error_description: 'code_verifier does not match the code challenge.',
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
const allowed = await stillAllowed(payload, runtime, policy, grant);
|
|
294
|
+
if ('reason' in allowed) {
|
|
295
|
+
await revokeGrant(payload, grant, allowed.reason);
|
|
296
|
+
return { error: 'invalid_grant', error_description: `Not connected: ${allowed.reason}.` };
|
|
297
|
+
}
|
|
298
|
+
const tokens = await issue(payload, runtime, grant['id'], {
|
|
299
|
+
connectedAt: new Date().toISOString(),
|
|
300
|
+
codeExpiresAt: new Date(0).toISOString(),
|
|
301
|
+
});
|
|
302
|
+
await payload.update({
|
|
303
|
+
collection: MCP_OAUTH_CLIENTS_SLUG,
|
|
304
|
+
id: client['id'],
|
|
305
|
+
data: { lastUsedAt: new Date().toISOString() },
|
|
306
|
+
overrideAccess: true,
|
|
307
|
+
});
|
|
308
|
+
await record(payload, grant, 'mcp.connected');
|
|
309
|
+
return tokens;
|
|
310
|
+
}
|
|
311
|
+
/*
|
|
312
|
+
How long an already-rotated refresh token is forgiven. Clients refresh
|
|
313
|
+
concurrently — a proactive refresh racing a 401-driven one — and the loser
|
|
314
|
+
presents the token the winner just rotated. Inside this window that is a race,
|
|
315
|
+
answered `invalid_grant` and nothing more; outside it, it is reuse of a stolen
|
|
316
|
+
token, and the whole grant is revoked (OAuth 2.1 §4.3.1).
|
|
317
|
+
*/
|
|
318
|
+
const ROTATION_GRACE_MS = 60 * 1000;
|
|
319
|
+
/** `grant_type=refresh_token`. */
|
|
320
|
+
export async function refresh(payload, runtime, policy, params) {
|
|
321
|
+
const { token: key } = keys(payload);
|
|
322
|
+
if (!params.refreshToken) {
|
|
323
|
+
return { error: 'invalid_request', error_description: 'refresh_token is required.' };
|
|
324
|
+
}
|
|
325
|
+
const hash = hashToken(key, params.refreshToken);
|
|
326
|
+
const grant = await findOne(payload, MCP_OAUTH_GRANTS_SLUG, { refreshHash: { equals: hash } });
|
|
327
|
+
if (!grant) {
|
|
328
|
+
const rotated = await findOne(payload, MCP_OAUTH_GRANTS_SLUG, {
|
|
329
|
+
previousRefreshHash: { equals: hash },
|
|
330
|
+
});
|
|
331
|
+
if (rotated && rotated['status'] === 'active') {
|
|
332
|
+
const since = Date.now() - Date.parse(String(rotated['rotatedAt'] ?? 0));
|
|
333
|
+
if (since > ROTATION_GRACE_MS) {
|
|
334
|
+
await revokeGrant(payload, rotated, 'a refresh token was used after it had been replaced');
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return { error: 'invalid_grant', error_description: 'The refresh token is not valid.' };
|
|
338
|
+
}
|
|
339
|
+
if (grant['status'] !== 'active') {
|
|
340
|
+
return { error: 'invalid_grant', error_description: 'This connection has been revoked.' };
|
|
341
|
+
}
|
|
342
|
+
if (Date.parse(String(grant['refreshExpiresAt'])) < Date.now()) {
|
|
343
|
+
return {
|
|
344
|
+
error: 'invalid_grant',
|
|
345
|
+
error_description: 'The refresh token has expired. Connect again.',
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
if (params.clientId) {
|
|
349
|
+
const client = await findOne(payload, MCP_OAUTH_CLIENTS_SLUG, {
|
|
350
|
+
id: { equals: grant['client'] },
|
|
351
|
+
});
|
|
352
|
+
if (!client || client['clientId'] !== params.clientId) {
|
|
353
|
+
return {
|
|
354
|
+
error: 'invalid_grant',
|
|
355
|
+
error_description: 'The refresh token was issued to a different client.',
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
const allowed = await stillAllowed(payload, runtime, policy, grant);
|
|
360
|
+
if ('reason' in allowed) {
|
|
361
|
+
await revokeGrant(payload, grant, allowed.reason);
|
|
362
|
+
return { error: 'invalid_grant', error_description: `Disconnected: ${allowed.reason}.` };
|
|
363
|
+
}
|
|
364
|
+
return issue(payload, runtime, grant['id'], {
|
|
365
|
+
previousRefreshHash: hash,
|
|
366
|
+
rotatedAt: new Date().toISOString(),
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
/** RFC 7009. Unknown tokens are not an error. */
|
|
370
|
+
export async function revokeToken(payload, token) {
|
|
371
|
+
if (typeof token !== 'string' || token === '')
|
|
372
|
+
return;
|
|
373
|
+
const { token: key } = keys(payload);
|
|
374
|
+
const hash = hashToken(key, token);
|
|
375
|
+
const grant = (await findOne(payload, MCP_OAUTH_GRANTS_SLUG, { accessHash: { equals: hash } })) ??
|
|
376
|
+
(await findOne(payload, MCP_OAUTH_GRANTS_SLUG, { refreshHash: { equals: hash } }));
|
|
377
|
+
if (grant && grant['status'] !== 'revoked')
|
|
378
|
+
await revokeGrant(payload, grant, 'the app disconnected');
|
|
379
|
+
}
|
|
380
|
+
/** An access token's grant and person, if it is live and still allowed. */
|
|
381
|
+
export async function authenticateAccessToken(payload, runtime, policy, token) {
|
|
382
|
+
const { token: key } = keys(payload);
|
|
383
|
+
const grant = await findOne(payload, MCP_OAUTH_GRANTS_SLUG, {
|
|
384
|
+
accessHash: { equals: hashToken(key, token) },
|
|
385
|
+
});
|
|
386
|
+
if (!grant || grant['status'] !== 'active')
|
|
387
|
+
return { reason: 'The access token is not valid.' };
|
|
388
|
+
if (Date.parse(String(grant['accessExpiresAt'])) < Date.now()) {
|
|
389
|
+
return { reason: 'The access token has expired.' };
|
|
390
|
+
}
|
|
391
|
+
const allowed = await stillAllowed(payload, runtime, policy, grant);
|
|
392
|
+
if ('reason' in allowed) {
|
|
393
|
+
await revokeGrant(payload, grant, allowed.reason);
|
|
394
|
+
return { reason: `Disconnected: ${allowed.reason}.` };
|
|
395
|
+
}
|
|
396
|
+
// At most one write every five minutes per connection, for "last used".
|
|
397
|
+
const last = Date.parse(String(grant['lastUsedAt'] ?? 0));
|
|
398
|
+
if (!(last > Date.now() - 5 * 60 * 1000)) {
|
|
399
|
+
await payload.update({
|
|
400
|
+
collection: MCP_OAUTH_GRANTS_SLUG,
|
|
401
|
+
id: grant['id'],
|
|
402
|
+
data: { lastUsedAt: new Date().toISOString() },
|
|
403
|
+
overrideAccess: true,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
return { user: allowed.user, grant };
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/mcp-oauth/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"CHARACTER_COUNT_TEXTAREA_PATH": ["@forumone/throughline/fields"],
|
|
56
56
|
"CHARACTER_COUNT_TEXT_PATH": ["@forumone/throughline/fields"],
|
|
57
57
|
"COMMAND_PALETTE_PATH": ["@forumone/throughline/editorial"],
|
|
58
|
+
"CONNECT_MCP_VIEW_PATH": ["@forumone/throughline/mcp-oauth"],
|
|
58
59
|
"CONTENT_BLOCK_TOOLS": ["@forumone/throughline/content"],
|
|
59
60
|
"CONTENT_BLOCK_TOOL_DESCRIPTORS": ["@forumone/throughline/content"],
|
|
60
61
|
"CONTENT_CALENDAR_VIEW_PATH": ["@forumone/throughline/editorial"],
|
|
@@ -86,6 +87,7 @@
|
|
|
86
87
|
"ComposedSectionShape": ["@forumone/throughline/media"],
|
|
87
88
|
"CompositionIssue": ["@forumone/throughline/content"],
|
|
88
89
|
"ConfigInput": ["@forumone/throughline/testing"],
|
|
90
|
+
"ConnectMcpView": ["@forumone/throughline/rsc"],
|
|
89
91
|
"ContentCalendarReport": ["@forumone/throughline/rsc"],
|
|
90
92
|
"ContentCalendarView": ["@forumone/throughline/rsc"],
|
|
91
93
|
"ContentCollectionOptions": ["@forumone/throughline/content"],
|
|
@@ -212,13 +214,28 @@
|
|
|
212
214
|
"LockHolder": ["@forumone/throughline/content"],
|
|
213
215
|
"Logger": ["@forumone/throughline"],
|
|
214
216
|
"MANUAL_SYNC_EVENT": ["@forumone/throughline/integrations"],
|
|
217
|
+
"MCP_ACCESS_SLUG": ["@forumone/throughline/mcp-oauth"],
|
|
215
218
|
"MCP_API_KEYS_SLUG": ["@forumone/throughline"],
|
|
219
|
+
"MCP_AUTHORIZE_VIEW_PATH": ["@forumone/throughline/mcp-oauth"],
|
|
220
|
+
"MCP_CLIENT_KINDS": ["@forumone/throughline/mcp-oauth"],
|
|
221
|
+
"MCP_CLIENT_RULES": ["@forumone/throughline/mcp-oauth"],
|
|
222
|
+
"MCP_OAUTH_CLIENTS_SLUG": ["@forumone/throughline/mcp-oauth"],
|
|
223
|
+
"MCP_OAUTH_GRANTS_SLUG": ["@forumone/throughline/mcp-oauth"],
|
|
224
|
+
"MCP_OAUTH_STRATEGY": ["@forumone/throughline/mcp-oauth"],
|
|
216
225
|
"ManifestSource": ["@forumone/throughline/components"],
|
|
217
226
|
"ManualSyncRefusal": ["@forumone/throughline/integrations"],
|
|
218
227
|
"MatchingConfig": ["@forumone/throughline/components"],
|
|
228
|
+
"McpAccessPolicy": ["@forumone/throughline/mcp-oauth"],
|
|
229
|
+
"McpAccessSettings": ["@forumone/throughline/mcp-oauth"],
|
|
219
230
|
"McpApiKeyAccessOptions": ["@forumone/throughline"],
|
|
231
|
+
"McpAuthorizeView": ["@forumone/throughline/rsc"],
|
|
232
|
+
"McpClientKind": ["@forumone/throughline/mcp-oauth"],
|
|
233
|
+
"McpClientRule": ["@forumone/throughline/mcp-oauth"],
|
|
220
234
|
"McpMeta": ["@forumone/throughline"],
|
|
221
235
|
"McpMetaSchema": ["@forumone/throughline"],
|
|
236
|
+
"McpOAuth": ["@forumone/throughline/mcp-oauth"],
|
|
237
|
+
"McpOAuthOptions": ["@forumone/throughline/mcp-oauth"],
|
|
238
|
+
"McpOAuthRuntime": ["@forumone/throughline/mcp-oauth"],
|
|
222
239
|
"McpToolCollector": ["@forumone/throughline"],
|
|
223
240
|
"McpToolContext": ["@forumone/throughline"],
|
|
224
241
|
"McpToolDefinition": ["@forumone/throughline"],
|
|
@@ -232,6 +249,7 @@
|
|
|
232
249
|
"OBSERVABILITY_TOOLS": ["@forumone/throughline/observability"],
|
|
233
250
|
"OBSERVABILITY_TOOL_DESCRIPTORS": ["@forumone/throughline/observability"],
|
|
234
251
|
"OPS_TOOL_NAMES": ["@forumone/throughline"],
|
|
252
|
+
"OverrideAuth": ["@forumone/throughline/mcp-oauth"],
|
|
235
253
|
"PALETTE_TOOLS": ["@forumone/throughline/editorial"],
|
|
236
254
|
"PALETTE_TOOL_DESCRIPTORS": ["@forumone/throughline/editorial"],
|
|
237
255
|
"PER_SOURCE": ["@forumone/throughline/editorial"],
|
|
@@ -357,6 +375,7 @@
|
|
|
357
375
|
"auditEventEchoJob": ["@forumone/throughline/audit"],
|
|
358
376
|
"auditPlugin": ["@forumone/throughline/audit"],
|
|
359
377
|
"auditQueryPlugin": ["@forumone/throughline/audit"],
|
|
378
|
+
"authorizationServerMetadata": ["@forumone/throughline/mcp-oauth"],
|
|
360
379
|
"blockFieldPaths": ["@forumone/throughline/content"],
|
|
361
380
|
"blockRegistry": ["@forumone/throughline/media"],
|
|
362
381
|
"buildActionUrl": ["@forumone/throughline/approvals"],
|
|
@@ -370,6 +389,8 @@
|
|
|
370
389
|
"checkAnonymousAccess": ["@forumone/throughline/testing"],
|
|
371
390
|
"checkEnvValue": ["@forumone/throughline"],
|
|
372
391
|
"checkSlug": ["@forumone/throughline/fields"],
|
|
392
|
+
"classifyRedirects": ["@forumone/throughline/mcp-oauth"],
|
|
393
|
+
"clientKindFor": ["@forumone/throughline/mcp-oauth"],
|
|
373
394
|
"clientPrefix": ["@forumone/throughline/observability"],
|
|
374
395
|
"clockFor": ["@forumone/throughline/editorial"],
|
|
375
396
|
"componentsPlugin": ["@forumone/throughline/components"],
|
|
@@ -416,6 +437,7 @@
|
|
|
416
437
|
"createManifestReachableCheck": ["@forumone/throughline/integrations"],
|
|
417
438
|
"createMoveBlockTool": ["@forumone/throughline/content"],
|
|
418
439
|
"createNamedLogger": ["@forumone/throughline"],
|
|
440
|
+
"createOverrideAuth": ["@forumone/throughline/mcp-oauth"],
|
|
419
441
|
"createPayloadReachableCheck": ["@forumone/throughline/integrations"],
|
|
420
442
|
"createQueryAuditTool": ["@forumone/throughline/audit"],
|
|
421
443
|
"createRemoveBlockTool": ["@forumone/throughline/content"],
|
|
@@ -512,6 +534,8 @@
|
|
|
512
534
|
"matchCommands": ["@forumone/throughline/editorial"],
|
|
513
535
|
"matchRank": ["@forumone/throughline/editorial"],
|
|
514
536
|
"mcpApiKeyAccess": ["@forumone/throughline"],
|
|
537
|
+
"mcpOAuth": ["@forumone/throughline/mcp-oauth"],
|
|
538
|
+
"mcpOAuthRewrites": ["@forumone/throughline/mcp-oauth"],
|
|
515
539
|
"mergePatch": ["@forumone/throughline/content"],
|
|
516
540
|
"mergeTokens": ["@forumone/throughline/email"],
|
|
517
541
|
"missingAltCheck": ["@forumone/throughline/editorial"],
|
|
@@ -529,6 +553,8 @@
|
|
|
529
553
|
"payloadJobs": ["@forumone/throughline/jobs/payload"],
|
|
530
554
|
"pointsAt": ["@forumone/throughline/media"],
|
|
531
555
|
"problemReport": ["@forumone/throughline/integrations"],
|
|
556
|
+
"protectedResourceMetadata": ["@forumone/throughline/mcp-oauth"],
|
|
557
|
+
"protectedResourceMetadataUrl": ["@forumone/throughline/mcp-oauth"],
|
|
532
558
|
"publishAtScheduledTimeJob": ["@forumone/throughline/publishing"],
|
|
533
559
|
"publishDocument": ["@forumone/throughline/publishing"],
|
|
534
560
|
"publishScheduledThroughPipeline": ["@forumone/throughline"],
|
|
@@ -538,9 +564,11 @@
|
|
|
538
564
|
"pushRecent": ["@forumone/throughline/editorial"],
|
|
539
565
|
"queryRange": ["@forumone/throughline/editorial"],
|
|
540
566
|
"readCalendarMonth": ["@forumone/throughline/editorial"],
|
|
567
|
+
"readPolicy": ["@forumone/throughline/mcp-oauth"],
|
|
541
568
|
"readRecent": ["@forumone/throughline/editorial"],
|
|
542
569
|
"readYourWork": ["@forumone/throughline/editorial"],
|
|
543
570
|
"recordStoredFacts": ["@forumone/throughline/media"],
|
|
571
|
+
"redirectRegistered": ["@forumone/throughline/mcp-oauth"],
|
|
544
572
|
"referenceRefusal": ["@forumone/throughline/media"],
|
|
545
573
|
"referencesIn": ["@forumone/throughline/media"],
|
|
546
574
|
"referencesPlugin": ["@forumone/throughline/media"],
|
|
@@ -584,6 +612,7 @@
|
|
|
584
612
|
"toolCalendar": ["@forumone/throughline/editorial"],
|
|
585
613
|
"toolReport": ["@forumone/throughline/editorial"],
|
|
586
614
|
"toolWork": ["@forumone/throughline/editorial"],
|
|
615
|
+
"toolsFor": ["@forumone/throughline/mcp-oauth"],
|
|
587
616
|
"topLevelFields": ["@forumone/throughline/content"],
|
|
588
617
|
"triggerSync": ["@forumone/throughline/client"],
|
|
589
618
|
"uniqueUploadPrefix": ["@forumone/throughline/media"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forumone/throughline",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0-pr-315-e1a501e",
|
|
4
4
|
"description": "Throughline: an editorial platform for Payload CMS. Publishing, approvals, audit, integrations, email and jobs, with every feature reachable over MCP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -66,6 +66,10 @@
|
|
|
66
66
|
"types": "./dist/content/index.d.ts",
|
|
67
67
|
"default": "./dist/content/index.js"
|
|
68
68
|
},
|
|
69
|
+
"./mcp-oauth": {
|
|
70
|
+
"types": "./dist/mcp-oauth/index.d.ts",
|
|
71
|
+
"default": "./dist/mcp-oauth/index.js"
|
|
72
|
+
},
|
|
69
73
|
"./observability": {
|
|
70
74
|
"types": "./dist/observability/index.d.ts",
|
|
71
75
|
"default": "./dist/observability/index.js"
|
|
@@ -170,7 +174,7 @@
|
|
|
170
174
|
"dependencies": {
|
|
171
175
|
"zod": "^3.23.0",
|
|
172
176
|
"zod-to-json-schema": "^3.25.2",
|
|
173
|
-
"@forumone/throughline-design-system": "2.
|
|
177
|
+
"@forumone/throughline-design-system": "2.3.0-pr-315-e1a501e"
|
|
174
178
|
},
|
|
175
179
|
"devDependencies": {
|
|
176
180
|
"@payloadcms/db-sqlite": "^3.83.0",
|
|
@@ -194,7 +198,7 @@
|
|
|
194
198
|
"typescript": "^5.6.0",
|
|
195
199
|
"vitest": "^4.1.10",
|
|
196
200
|
"@forumone/throughline-eslint-config": "0.0.1",
|
|
197
|
-
"@forumone/throughline-reference-ds": "0.3.
|
|
201
|
+
"@forumone/throughline-reference-ds": "0.3.23-pr-315-e1a501e",
|
|
198
202
|
"@forumone/throughline-tsconfig": "0.0.1"
|
|
199
203
|
},
|
|
200
204
|
"scripts": {
|