@vantageos/cloud-identity 0.12.0 → 0.15.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.
@@ -343,6 +343,64 @@ export async function assertTargetBelongsTo(principal, target, lookups, opts = {
343
343
  }
344
344
  return { ok: true };
345
345
  }
346
+ /** Refusal reasons that say only "this ROW is not the principal's". */
347
+ const ROW_NOT_OURS = new Set([
348
+ "target-unstamped",
349
+ "target-other-organisation",
350
+ "target-owner-mismatch",
351
+ "reserved-fleet-scope",
352
+ ]);
353
+ /**
354
+ * Keeps the rows that belong to the principal, deciding by STORED ID only.
355
+ * The ID-keyed replacement for the name-keyed `scopeFilterList`.
356
+ *
357
+ * Each row is judged by `assertTargetBelongsTo` (never re-derived here), so
358
+ * the same organisation, operator-org, unstamped, `ownerOnly` and
359
+ * `fleetCrossOrg` rules apply.
360
+ *
361
+ * - The principal is proved FIRST, before any row is read. An absent or
362
+ * unresolved principal, or a failed organisation-kind lookup for it,
363
+ * returns `{ ok: false, refusal }` naming the door, even for an empty
364
+ * list: a refusal is never an `ok: true` with no rows.
365
+ * - `fleetCrossOrg: true` from a principal that is not `kind: "fleet"` is a
366
+ * misconfigured door and is refused `reserved-fleet-scope` up front, for
367
+ * any list. Per row, `reserved-fleet-scope` therefore only means "this row
368
+ * is in the operator scope" and the row is dropped.
369
+ * - A resolved principal whose rows all belong elsewhere gets
370
+ * `{ ok: true, rows: [] }`: an absence, distinguishable from a refusal.
371
+ * - A row that does not belong (other organisation, operator-org row,
372
+ * unstamped, owner mismatch) is dropped. A same-NAME row of another
373
+ * organisation is dropped: no name field is read.
374
+ * - A lookup failure on any row refuses the whole call. It is never a
375
+ * silent drop and never a pass; any refusal reason not known to mean
376
+ * "this row is not yours" refuses too.
377
+ * - The order of the kept rows is the order of the input.
378
+ */
379
+ export async function filterTargetsBelongingTo(principal, rows, lookups, opts = {}) {
380
+ const door = opts.door ?? "filterTargetsBelongingTo";
381
+ const doorOpts = { ...opts, door };
382
+ // A door asking for cross-organisation reach that the principal does not
383
+ // hold is a misconfigured door: refused, never an absence of rows.
384
+ if (opts.fleetCrossOrg === true && principal != null && principal.kind !== "fleet") {
385
+ return denied("reserved-fleet-scope", door, "Cross-organisation reach is held only by the operator organisation's service account.");
386
+ }
387
+ // Prove the principal on a target that is its own organisation's, owner
388
+ // check off: only a principal-level fault can refuse this.
389
+ const proof = await assertTargetBelongsTo(principal, { orgId: principal?.orgId }, lookups, { ...doorOpts, ownerOnly: false, fleetCrossOrg: false });
390
+ if (!proof.ok)
391
+ return proof;
392
+ const kept = [];
393
+ for (const row of rows) {
394
+ const verdict = await assertTargetBelongsTo(principal, row, lookups, doorOpts);
395
+ if (verdict.ok) {
396
+ kept.push(row);
397
+ }
398
+ else if (!ROW_NOT_OURS.has(verdict.refusal.reason)) {
399
+ return verdict;
400
+ }
401
+ }
402
+ return { ok: true, rows: kept };
403
+ }
346
404
  /**
347
405
  * Admits a principal as ADMIN of the target organisation, deciding by ID only.
348
406
  * The principal must come from `resolveActingPrincipal`; the role is the
@@ -385,4 +443,172 @@ export function assertOrgAdmin(principal, targetOrgId, opts) {
385
443
  }
386
444
  return { ok: true };
387
445
  }
446
+ /**
447
+ * Admits a principal only when its AGENT ID is an entry of a stored list that
448
+ * belongs to its own organisation. The principal must come from
449
+ * `resolveActingPrincipal`; synchronous, no lookup, no name read anywhere.
450
+ *
451
+ * Refusal by default. Each of these refuses with a typed `RBAC_DENIED`
452
+ * carrying the door (default `"assertPrincipalListed"`):
453
+ *
454
+ * - an absent principal, or one with an empty ID or organisation
455
+ * (`credential-invalid`). A principal carrying only a name has no ID.
456
+ * - a principal that is not `kind: "agent"` (`principal-not-an-agent`): the
457
+ * list holds agent IDs, so a person, a service account and the fleet
458
+ * principal are not admitted by it. An agent acting through a service
459
+ * account is `kind: "agent"` and is judged by its own ID.
460
+ * - an absent list (`list-absent`).
461
+ * - a list with a missing or empty `orgId` (`target-unstamped`), or one
462
+ * stored under another organisation (`target-other-organisation`).
463
+ * - an empty or malformed `principalIds` (`list-empty`).
464
+ * - an ID that is not byte-equal to an entry (`principal-not-listed`). No
465
+ * case folding, no trimming, no prefix match.
466
+ *
467
+ * There is no wildcard: a `"*"` entry is an ordinary string, never "everyone".
468
+ * The fleet sentinel is out of scope here.
469
+ */
470
+ export function assertPrincipalListed(principal, list, opts) {
471
+ const door = opts?.door ?? "assertPrincipalListed";
472
+ if (principal === null ||
473
+ typeof principal !== "object" ||
474
+ !nonEmpty(principal.principalId) ||
475
+ !nonEmpty(principal.orgId)) {
476
+ return denied("credential-invalid", door, "No resolved principal stands behind this call.");
477
+ }
478
+ if (principal.kind !== "agent") {
479
+ return denied("principal-not-an-agent", door, "The list holds agent IDs; this principal is not an agent.");
480
+ }
481
+ if (list === null || list === undefined || typeof list !== "object") {
482
+ return denied("list-absent", door, "No list was supplied, so nobody is listed.");
483
+ }
484
+ if (!nonEmpty(list.orgId)) {
485
+ return denied("target-unstamped", door, "The list carries no organisation, so it admits nobody.");
486
+ }
487
+ if (list.orgId !== principal.orgId) {
488
+ return denied("target-other-organisation", door, "The list belongs to another organisation than the principal.");
489
+ }
490
+ const ids = list.principalIds;
491
+ if (!Array.isArray(ids) || ids.length === 0) {
492
+ return denied("list-empty", door, "The list holds no principal IDs, so nobody is listed.");
493
+ }
494
+ if (!ids.some((id) => id === principal.principalId)) {
495
+ return denied("principal-not-listed", door, "The principal's ID is not on the list.");
496
+ }
497
+ return { ok: true };
498
+ }
499
+ /**
500
+ * Decides whether a sender may address a recipient, across organisations
501
+ * included, by AGENT ID only. The sender must come from
502
+ * `resolveActingPrincipal`. No name is read anywhere; a name never matches.
503
+ *
504
+ * Admitted iff one of these holds:
505
+ * (a) same organisation: the sender's `orgId` equals the recipient's;
506
+ * (b) client to operator: the sender is in a client organisation, the
507
+ * recipient is in the operator organisation, and the RECIPIENT's ID is
508
+ * on the SENDER organisation's roster;
509
+ * (c) operator to client: the sender is in the operator organisation, the
510
+ * recipient is in a client organisation, and the SENDER's ID is on the
511
+ * RECIPIENT organisation's roster.
512
+ *
513
+ * Everything else is refused with a typed `RBAC_DENIED` carrying the door
514
+ * (default `"assertRecipientAddressable"`): an absent sender or one without an
515
+ * ID (`credential-invalid`), a sender that is not `kind: "agent"`
516
+ * (`principal-not-an-agent`), an absent recipient or one without an agent ID
517
+ * or organisation (`target-unstamped`), client to client across organisations
518
+ * and an organisation kind that is neither operator nor client
519
+ * (`target-other-organisation`), a missing or throwing `orgKindOf` /
520
+ * `rosterOf` (`principal-lookup-failed`), an absent roster (`list-absent`), and
521
+ * a roster that is empty, stored under the wrong organisation or does not list
522
+ * the ID (the refusals of {@link assertPrincipalListed}, which is reused for
523
+ * that check).
524
+ */
525
+ export async function assertRecipientAddressable(sender, recipient, lookups, opts) {
526
+ const door = opts?.door ?? "assertRecipientAddressable";
527
+ if (sender === null ||
528
+ typeof sender !== "object" ||
529
+ !nonEmpty(sender.principalId) ||
530
+ !nonEmpty(sender.orgId)) {
531
+ return denied("credential-invalid", door, "No resolved sender stands behind this call.");
532
+ }
533
+ if (sender.kind !== "agent") {
534
+ return denied("principal-not-an-agent", door, "Only an agent addresses a recipient; the sender is not an agent.");
535
+ }
536
+ if (recipient === null ||
537
+ typeof recipient !== "object" ||
538
+ !nonEmpty(recipient.agentId) ||
539
+ !nonEmpty(recipient.orgId)) {
540
+ return denied("target-unstamped", door, "The recipient carries no agent ID and organisation.");
541
+ }
542
+ if (recipient.orgId === sender.orgId)
543
+ return { ok: true };
544
+ const senderKind = await loadOrgKind(lookups, sender.orgId, door);
545
+ if (!senderKind.ok)
546
+ return senderKind;
547
+ const recipientKind = await loadOrgKind(lookups, recipient.orgId, door);
548
+ if (!recipientKind.ok)
549
+ return recipientKind;
550
+ let clientOrgId;
551
+ let listed;
552
+ if (senderKind.kind === "client" && recipientKind.kind === "operator") {
553
+ clientOrgId = sender.orgId;
554
+ listed = { principalId: recipient.agentId };
555
+ }
556
+ else if (senderKind.kind === "operator" && recipientKind.kind === "client") {
557
+ clientOrgId = recipient.orgId;
558
+ listed = { principalId: sender.principalId };
559
+ }
560
+ else {
561
+ return denied("target-other-organisation", door, "The recipient belongs to another organisation that this sender may not reach.");
562
+ }
563
+ const rosterOf = lookups?.rosterOf;
564
+ if (typeof rosterOf !== "function") {
565
+ return denied("principal-lookup-failed", door, "No lookup was supplied for the roster.");
566
+ }
567
+ let roster;
568
+ try {
569
+ roster = await rosterOf(clientOrgId);
570
+ }
571
+ catch {
572
+ return denied("principal-lookup-failed", door, "The roster could not be read, so none is resolved.");
573
+ }
574
+ return assertPrincipalListed({ ...listed, orgId: clientOrgId, kind: "agent" }, roster, { door });
575
+ }
576
+ // ---------------------------------------------------------------------------
577
+ // resolveCallerStanding (0.14.0)
578
+ // ---------------------------------------------------------------------------
579
+ /**
580
+ * A verified session that carries a person but NO organisation (a signed-in
581
+ * user who has not joined one). `resolveActingPrincipal` cannot express this:
582
+ * a person credential requires `verifiedOrgId`, so a no-organisation session
583
+ * is refused there exactly as a garbled credential is. This kind exists so
584
+ * the consumer can say "verified, and no organisation" on purpose; an absent
585
+ * `verifiedOrgId` on a `person` credential stays a garbled credential.
586
+ */
587
+ const preOrgCredentialSchema = z.strictObject({
588
+ kind: z.literal("person-no-org"),
589
+ personId: z.string().min(1),
590
+ });
591
+ /**
592
+ * Derives a caller's STANDING from a verified credential. It adds one case to
593
+ * the existing primitives, the signed-in session with no organisation, and
594
+ * reuses them for everything else: `resolveActingPrincipal` decides who the
595
+ * caller is (and `fleet`), `assertOrgAdmin` decides `admin` against the
596
+ * principal's own organisation. Any other resolved principal (a person
597
+ * without the admin role, an agent, a non-operator service account) is a
598
+ * `member`; read `principal.kind` to tell them apart.
599
+ */
600
+ export async function resolveCallerStanding(credential, lookups, opts) {
601
+ const door = opts?.door ?? "resolveCallerStanding";
602
+ const preOrg = preOrgCredentialSchema.safeParse(credential);
603
+ if (preOrg.success)
604
+ return { standing: "pre-org", personId: preOrg.data.personId };
605
+ const resolved = await resolveActingPrincipal(credential, lookups, door);
606
+ if (!resolved.ok)
607
+ return { standing: "anonymous", refusal: resolved.refusal };
608
+ const { principal } = resolved;
609
+ if (principal.kind === "fleet")
610
+ return { standing: "fleet", principal };
611
+ const admin = assertOrgAdmin(principal, principal.orgId, { adminRoles: opts?.adminRoles, door });
612
+ return { standing: admin.ok ? "admin" : "member", principal };
613
+ }
388
614
  //# sourceMappingURL=principal-by-id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"principal-by-id.js","sourceRoot":"","sources":["../src/principal-by-id.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"principal-by-id.js","sourceRoot":"","sources":["../src/principal-by-id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import type { ClerkJwks } from "./clerk-session.js";
2
+ import type { VerifiedClerkSession } from "./clerk-session.js";
3
+ import { type IdentityRefusal } from "./identity-refusal.js";
4
+ export interface ProtectedResourceMetadataConfig {
5
+ /** Canonical identifier of this resource (the MCP server URL). Absolute URL, no fragment. */
6
+ resource: string;
7
+ /** Issuer URL(s) of the authorization server(s). At least one. */
8
+ authorizationServers: readonly string[];
9
+ /** Bearer transports accepted. Default `["header"]`. */
10
+ bearerMethodsSupported?: readonly string[];
11
+ /** Scopes this resource understands. */
12
+ scopesSupported?: readonly string[];
13
+ /** Human-readable label of the resource, emitted as RFC 9728 `resource_name`. A display string, never an identity: the package rule bans name-like inputs. */
14
+ resourceLabel?: string;
15
+ /** URL of developer documentation for the resource. */
16
+ resourceDocumentation?: string;
17
+ }
18
+ export interface ProtectedResourceMetadata {
19
+ resource: string;
20
+ authorization_servers: string[];
21
+ bearer_methods_supported: string[];
22
+ scopes_supported?: string[];
23
+ resource_name?: string;
24
+ resource_documentation?: string;
25
+ }
26
+ /**
27
+ * Builds the RFC 9728 document served at `/.well-known/oauth-protected-resource`.
28
+ * A config that cannot produce a valid document throws: a document without a
29
+ * resource or an authorization server leaves a client unable to discover where
30
+ * to authenticate.
31
+ */
32
+ export declare function buildProtectedResourceMetadata(config: ProtectedResourceMetadataConfig): ProtectedResourceMetadata;
33
+ export interface UnauthorizedChallengeConfig {
34
+ /** Protection realm, for example `"mcp"`. */
35
+ realm: string;
36
+ /** Absolute URL of this resource's RFC 9728 metadata document. */
37
+ resourceMetadataUrl: string;
38
+ /** RFC 6750 `error`; omit when no token was presented. */
39
+ error?: "invalid_request" | "invalid_token" | "insufficient_scope";
40
+ /** RFC 6750 `error_description`. */
41
+ errorDescription?: string;
42
+ /** RFC 6750 `scope`: scopes needed, space separated. */
43
+ scope?: string;
44
+ }
45
+ export interface UnauthorizedChallenge {
46
+ status: 401;
47
+ headers: {
48
+ "WWW-Authenticate": string;
49
+ };
50
+ }
51
+ /**
52
+ * Builds the `401` envelope: status and a `WWW-Authenticate: Bearer` value that
53
+ * always carries `resource_metadata`, so a client can complete discovery. Every
54
+ * value is quoted and escaped; a value cannot inject a parameter or a header.
55
+ */
56
+ export declare function unauthorizedChallenge(config: UnauthorizedChallengeConfig): UnauthorizedChallenge;
57
+ export interface ClerkDiscoveryUrls {
58
+ discoveryUrl: string;
59
+ jwksUrl: string;
60
+ }
61
+ /**
62
+ * Derives the OIDC discovery and JWKS URLs of a Clerk issuer. The issuer must
63
+ * be an absolute `https` URL; anything else throws rather than producing a
64
+ * URL the client fails against later.
65
+ */
66
+ export declare function deriveClerkDiscoveryUrls(issuer: string): ClerkDiscoveryUrls;
67
+ export interface McpResourceServerConfig {
68
+ /** Realm of the challenge. */
69
+ realm: string;
70
+ /** Absolute URL of this resource's RFC 9728 metadata document. */
71
+ resourceMetadataUrl: string;
72
+ /** Exact `iss` the token must carry. */
73
+ issuer: string;
74
+ /** This resource's identifier: the token's `aud` must contain it. Required, never optional. */
75
+ audience: string;
76
+ /** The key set, or a function returning it (the consumer owns fetching and caching). */
77
+ jwks: ClerkJwks | (() => Promise<ClerkJwks>);
78
+ /** Clock tolerance in seconds for `exp` / `nbf`. Default 5. */
79
+ clockToleranceSeconds?: number;
80
+ /** The consumer's name for the entry point, carried in every refusal. */
81
+ door?: string;
82
+ }
83
+ export type VerifyMcpAccessTokenResult = {
84
+ ok: true;
85
+ session: VerifiedClerkSession;
86
+ } | ({
87
+ ok: false;
88
+ refusal: IdentityRefusal;
89
+ } & UnauthorizedChallenge) | {
90
+ ok: false;
91
+ refusal: IdentityRefusal;
92
+ status: 503;
93
+ };
94
+ /**
95
+ * Verifies the `Authorization` header of an MCP request against this resource.
96
+ *
97
+ * - no header: `401`, `invalid_request`, reason `bearer-missing`
98
+ * - not a non-empty `Bearer` credential: `401`, `invalid_request`, `bearer-malformed`
99
+ * - signature, issuer, audience, expiry or not-before wrong: `401`,
100
+ * `invalid_token`, `token-invalid` (one answer, so the cause is not an oracle)
101
+ * - key set unreachable: `503`, no challenge, `jwks-unavailable` (an outage is
102
+ * never reported as a bad credential)
103
+ *
104
+ * A missing issuer, or a missing or non-URL audience, in the config throws: the check is never skipped.
105
+ * `nowMs` is injectable for tests. The token never appears in a result.
106
+ */
107
+ export declare function verifyMcpAccessToken(authorization: string | undefined, config: McpResourceServerConfig, nowMs?: number): Promise<VerifyMcpAccessTokenResult>;
108
+ //# sourceMappingURL=resource-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-server.d.ts","sourceRoot":"","sources":["../src/resource-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ import { verifyClerkSessionToken } from "./clerk-session.js";
2
+ import { refusal } from "./identity-refusal.js";
3
+ /**
4
+ * Resource-server primitives for an MCP server that is an OAuth 2.1 protected
5
+ * resource: the discovery document (RFC 9728), the `401` challenge (RFC 6750,
6
+ * RFC 9728 section 5.1), the issuer discovery URLs, and the verification of an
7
+ * inbound access token bound to this resource (RFC 8707 audience, RFC 9207
8
+ * issuer).
9
+ *
10
+ * Token verification is NOT a second verifier: it delegates signature, `iss`,
11
+ * `aud`, `exp` and `nbf` to `verifyClerkSessionToken` (RS256 only) and adds the
12
+ * `Authorization` header handling, the mandatory audience, and the HTTP
13
+ * envelope. Nothing here fetches a key set or calls the network.
14
+ */
15
+ const DEFAULT_DOOR = "mcp-resource-server";
16
+ function requireNonEmpty(fn, name, value) {
17
+ if (typeof value !== "string" || value.length === 0) {
18
+ throw new Error(`cloud-identity: ${fn} requires a non-empty ${name}`);
19
+ }
20
+ }
21
+ function requireAbsoluteUrl(fn, name, value) {
22
+ requireNonEmpty(fn, name, value);
23
+ try {
24
+ return new URL(value);
25
+ }
26
+ catch {
27
+ throw new Error(`cloud-identity: ${fn}: ${name} must be an absolute URL`);
28
+ }
29
+ }
30
+ /**
31
+ * A resource identifier (RFC 8707 section 2, RFC 9728): an absolute URL with no
32
+ * fragment. The one validator for the metadata `resource` and the token audience.
33
+ */
34
+ function requireResourceIdentifier(fn, name, value) {
35
+ const url = requireAbsoluteUrl(fn, name, value);
36
+ if (url.hash !== "" || value.includes("#")) {
37
+ throw new Error(`cloud-identity: ${fn}: ${name} must not carry a fragment`);
38
+ }
39
+ return url;
40
+ }
41
+ /**
42
+ * Builds the RFC 9728 document served at `/.well-known/oauth-protected-resource`.
43
+ * A config that cannot produce a valid document throws: a document without a
44
+ * resource or an authorization server leaves a client unable to discover where
45
+ * to authenticate.
46
+ */
47
+ export function buildProtectedResourceMetadata(config) {
48
+ const fn = "buildProtectedResourceMetadata";
49
+ requireResourceIdentifier(fn, "resource", config.resource);
50
+ if (!Array.isArray(config.authorizationServers) || config.authorizationServers.length === 0) {
51
+ throw new Error(`cloud-identity: ${fn} requires at least one authorizationServer`);
52
+ }
53
+ for (const as of config.authorizationServers) {
54
+ requireAbsoluteUrl(fn, "authorizationServer", as);
55
+ }
56
+ const methods = config.bearerMethodsSupported ?? ["header"];
57
+ if (methods.length === 0) {
58
+ throw new Error(`cloud-identity: ${fn}: bearerMethodsSupported must not be empty`);
59
+ }
60
+ const doc = {
61
+ resource: config.resource,
62
+ authorization_servers: [...config.authorizationServers],
63
+ bearer_methods_supported: [...methods],
64
+ };
65
+ if (config.scopesSupported)
66
+ doc.scopes_supported = [...config.scopesSupported];
67
+ if (config.resourceLabel)
68
+ doc.resource_name = config.resourceLabel;
69
+ if (config.resourceDocumentation)
70
+ doc.resource_documentation = config.resourceDocumentation;
71
+ return doc;
72
+ }
73
+ function quoted(fn, name, value) {
74
+ if (/[\r\n]/.test(value)) {
75
+ throw new Error(`cloud-identity: ${fn}: ${name} must not contain a line break`);
76
+ }
77
+ return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
78
+ }
79
+ /**
80
+ * Builds the `401` envelope: status and a `WWW-Authenticate: Bearer` value that
81
+ * always carries `resource_metadata`, so a client can complete discovery. Every
82
+ * value is quoted and escaped; a value cannot inject a parameter or a header.
83
+ */
84
+ export function unauthorizedChallenge(config) {
85
+ const fn = "unauthorizedChallenge";
86
+ requireNonEmpty(fn, "realm", config.realm);
87
+ requireAbsoluteUrl(fn, "resourceMetadataUrl", config.resourceMetadataUrl);
88
+ const parts = [
89
+ `Bearer realm=${quoted(fn, "realm", config.realm)}`,
90
+ `resource_metadata=${quoted(fn, "resourceMetadataUrl", config.resourceMetadataUrl)}`,
91
+ ];
92
+ if (config.error)
93
+ parts.push(`error=${quoted(fn, "error", config.error)}`);
94
+ if (config.errorDescription) {
95
+ parts.push(`error_description=${quoted(fn, "errorDescription", config.errorDescription)}`);
96
+ }
97
+ if (config.scope)
98
+ parts.push(`scope=${quoted(fn, "scope", config.scope)}`);
99
+ return { status: 401, headers: { "WWW-Authenticate": parts.join(", ") } };
100
+ }
101
+ /**
102
+ * Derives the OIDC discovery and JWKS URLs of a Clerk issuer. The issuer must
103
+ * be an absolute `https` URL; anything else throws rather than producing a
104
+ * URL the client fails against later.
105
+ */
106
+ export function deriveClerkDiscoveryUrls(issuer) {
107
+ const fn = "deriveClerkDiscoveryUrls";
108
+ const url = requireAbsoluteUrl(fn, "issuer", issuer);
109
+ if (url.protocol !== "https:") {
110
+ throw new Error(`cloud-identity: ${fn}: issuer must use https`);
111
+ }
112
+ const base = issuer.endsWith("/") ? issuer.slice(0, -1) : issuer;
113
+ return {
114
+ discoveryUrl: `${base}/.well-known/openid-configuration`,
115
+ jwksUrl: `${base}/.well-known/jwks.json`,
116
+ };
117
+ }
118
+ /**
119
+ * Verifies the `Authorization` header of an MCP request against this resource.
120
+ *
121
+ * - no header: `401`, `invalid_request`, reason `bearer-missing`
122
+ * - not a non-empty `Bearer` credential: `401`, `invalid_request`, `bearer-malformed`
123
+ * - signature, issuer, audience, expiry or not-before wrong: `401`,
124
+ * `invalid_token`, `token-invalid` (one answer, so the cause is not an oracle)
125
+ * - key set unreachable: `503`, no challenge, `jwks-unavailable` (an outage is
126
+ * never reported as a bad credential)
127
+ *
128
+ * A missing issuer, or a missing or non-URL audience, in the config throws: the check is never skipped.
129
+ * `nowMs` is injectable for tests. The token never appears in a result.
130
+ */
131
+ export async function verifyMcpAccessToken(authorization, config, nowMs = Date.now()) {
132
+ const fn = "verifyMcpAccessToken";
133
+ requireNonEmpty(fn, "issuer", config.issuer);
134
+ requireResourceIdentifier(fn, "audience", config.audience);
135
+ requireNonEmpty(fn, "realm", config.realm);
136
+ requireAbsoluteUrl(fn, "resourceMetadataUrl", config.resourceMetadataUrl);
137
+ const door = config.door ?? DEFAULT_DOOR;
138
+ const deny = (reason, error, detail) => ({
139
+ ok: false,
140
+ refusal: refusal("CREDENTIAL_REFUSED", reason, door, detail),
141
+ ...unauthorizedChallenge({
142
+ realm: config.realm,
143
+ resourceMetadataUrl: config.resourceMetadataUrl,
144
+ error,
145
+ }),
146
+ });
147
+ if (authorization === undefined || authorization === null || authorization === "") {
148
+ return deny("bearer-missing", "invalid_request", "No Authorization header was presented.");
149
+ }
150
+ const match = /^bearer[ \t]+(\S+)[ \t]*$/i.exec(authorization);
151
+ if (!match || !match[1]) {
152
+ return deny("bearer-malformed", "invalid_request", "The Authorization header is not a Bearer credential.");
153
+ }
154
+ const verified = await verifyClerkSessionToken(match[1], {
155
+ issuer: config.issuer,
156
+ jwks: config.jwks,
157
+ audience: config.audience,
158
+ clockToleranceSeconds: config.clockToleranceSeconds,
159
+ }, nowMs);
160
+ if (verified.ok)
161
+ return { ok: true, session: verified.session };
162
+ if (verified.refusal.reason === "jwks-unavailable") {
163
+ return {
164
+ ok: false,
165
+ status: 503,
166
+ refusal: refusal("CREDENTIAL_REFUSED", "jwks-unavailable", door, "The signing keys could not be retrieved; retry later."),
167
+ };
168
+ }
169
+ return deny("token-invalid", "invalid_token", "The access token was refused.");
170
+ }
171
+ //# sourceMappingURL=resource-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-server.js","sourceRoot":"","sources":["../src/resource-server.ts"],"names":[],"mappings":"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"}
@@ -123,9 +123,10 @@ export type GrantFieldDeclaration = readonly string[];
123
123
  * @deprecated Since 0.11.0. A `createdBy` name matched against
124
124
  * `fromAllowList` selects the row, which backend standard R-53 clause 1
125
125
  * forbids: a name never selects or authorises a row. Use
126
- * `resolveActingPrincipal` and `assertTargetBelongsTo`, which compare stored
127
- * IDs. Behaviour unchanged; it stays exported until consumers migrate off it,
128
- * and is removed in a major release.
126
+ * `resolveActingPrincipal` and `assertTargetBelongsTo` (one row) or
127
+ * `filterTargetsBelongingTo` (a list), which compare stored IDs. Behaviour
128
+ * unchanged; it stays exported until consumers migrate off it, and is removed
129
+ * in a major release.
129
130
  */
130
131
  export declare function passesScopeFilter<T extends ScopeFilterable>(oauthCtx: OAuthCtx, row: T, grantFields?: GrantFieldDeclaration): boolean;
131
132
  /**
@@ -136,9 +137,10 @@ export declare function passesScopeFilter<T extends ScopeFilterable>(oauthCtx: O
136
137
  *
137
138
  * @deprecated Since 0.11.0. It selects rows through `passesScopeFilter`,
138
139
  * where a `createdBy` name selects the row, which backend standard R-53
139
- * clause 1 forbids. Use `resolveActingPrincipal` and `assertTargetBelongsTo`,
140
- * which compare stored IDs. Behaviour unchanged; it stays exported until
141
- * consumers migrate off it, and is removed in a major release.
140
+ * clause 1 forbids. Use `resolveActingPrincipal` and `assertTargetBelongsTo`
141
+ * (one row) or `filterTargetsBelongingTo` (a list), which compare stored IDs.
142
+ * Behaviour unchanged; it stays exported until consumers migrate off it, and
143
+ * is removed in a major release.
142
144
  */
143
145
  export declare function scopeFilterList<T extends ScopeFilterable>(oauthCtx: OAuthCtx, rows: T[], grantFields?: GrantFieldDeclaration): T[];
144
146
  /**
@@ -151,9 +153,10 @@ export declare function scopeFilterList<T extends ScopeFilterable>(oauthCtx: OAu
151
153
  *
152
154
  * @deprecated Since 0.11.0. It admits the row through `passesScopeFilter`,
153
155
  * where a `createdBy` name selects the row, which backend standard R-53
154
- * clause 1 forbids. Use `resolveActingPrincipal` and `assertTargetBelongsTo`,
155
- * which compare stored IDs. Behaviour unchanged; it stays exported until
156
- * consumers migrate off it, and is removed in a major release.
156
+ * clause 1 forbids. Use `resolveActingPrincipal` and `assertTargetBelongsTo`
157
+ * (one row) or `filterTargetsBelongingTo` (a list), which compare stored IDs.
158
+ * Behaviour unchanged; it stays exported until consumers migrate off it, and
159
+ * is removed in a major release.
157
160
  */
158
161
  export declare function scopeFilterGet<T extends ScopeFilterable>(oauthCtx: OAuthCtx, row: T | null | undefined, grantFields?: GrantFieldDeclaration): T | null;
159
162
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"scope-filter.d.ts","sourceRoot":"","sources":["../src/scope-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAKjC,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjF;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAIpD;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,qBAAqB,GAAG,SAAS,MAAM,EAAE,CAAC;AActD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EACzD,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,EACN,WAAW,GAAE,qBAAuC,GACnD,OAAO,CAeT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EACvD,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,CAAC,EAAE,EACT,WAAW,GAAE,qBAAuC,GACnD,CAAC,EAAE,CAGL;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,eAAe,EACtD,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACzB,WAAW,GAAE,qBAAuC,GACnD,CAAC,GAAG,IAAI,CAIV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAGtD"}
1
+ {"version":3,"file":"scope-filter.d.ts","sourceRoot":"","sources":["../src/scope-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAKjC,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjF;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAIpD;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,qBAAqB,GAAG,SAAS,MAAM,EAAE,CAAC;AActD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,eAAe,EACzD,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,EACN,WAAW,GAAE,qBAAuC,GACnD,OAAO,CAeT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,eAAe,EACvD,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,CAAC,EAAE,EACT,WAAW,GAAE,qBAAuC,GACnD,CAAC,EAAE,CAGL;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,eAAe,EACtD,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACzB,WAAW,GAAE,qBAAuC,GACnD,CAAC,GAAG,IAAI,CAIV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAGtD"}