@dereekb/firebase-server 13.25.0 → 13.26.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/mcp/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/mcp",
3
- "version": "13.25.0",
3
+ "version": "13.26.0",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.25.0",
6
- "@dereekb/date": "13.25.0",
7
- "@dereekb/firebase": "13.25.0",
8
- "@dereekb/firebase-server": "13.25.0",
9
- "@dereekb/firebase-server/oidc": "13.25.0",
10
- "@dereekb/model": "13.25.0",
11
- "@dereekb/nestjs": "13.25.0",
12
- "@dereekb/rxjs": "13.25.0",
13
- "@dereekb/util": "13.25.0",
14
- "@dereekb/zoho": "13.25.0",
5
+ "@dereekb/analytics": "13.26.0",
6
+ "@dereekb/date": "13.26.0",
7
+ "@dereekb/firebase": "13.26.0",
8
+ "@dereekb/firebase-server": "13.26.0",
9
+ "@dereekb/firebase-server/oidc": "13.26.0",
10
+ "@dereekb/model": "13.26.0",
11
+ "@dereekb/nestjs": "13.26.0",
12
+ "@dereekb/rxjs": "13.26.0",
13
+ "@dereekb/util": "13.26.0",
14
+ "@dereekb/zoho": "13.26.0",
15
15
  "@modelcontextprotocol/sdk": "1.29.0",
16
16
  "@nestjs/common": "^11.1.19",
17
17
  "@nestjs/core": "^11.1.19",
@@ -1,4 +1,6 @@
1
+ import { OidcProviderConfigService } from '@dereekb/firebase-server/oidc';
1
2
  import { McpModuleConfig } from '../mcp.config';
3
+ import { type OidcScope } from '@dereekb/firebase';
2
4
  /**
3
5
  * Discovery document body for the OAuth protected-resource indicator.
4
6
  *
@@ -7,6 +9,12 @@ import { McpModuleConfig } from '../mcp.config';
7
9
  export interface OAuthProtectedResourceMetadata {
8
10
  readonly resource: string;
9
11
  readonly authorization_servers: ReadonlyArray<string>;
12
+ /**
13
+ * Scopes the resource accepts (RFC 9728 §2). Advertised so dynamic-registration
14
+ * MCP clients (e.g. the Claude Code CLI) know which scopes to request on the
15
+ * authorization call. Omitted when {@link McpModuleConfig.scopesSupported} is unset.
16
+ */
17
+ readonly scopes_supported?: ReadonlyArray<OidcScope>;
10
18
  }
11
19
  /**
12
20
  * Serves the `GET /.well-known/oauth-protected-resource` metadata document so
@@ -20,6 +28,7 @@ export interface OAuthProtectedResourceMetadata {
20
28
  */
21
29
  export declare class McpWellKnownController {
22
30
  private readonly mcpConfig;
23
- constructor(mcpConfig: McpModuleConfig);
31
+ private readonly oidcProviderConfigService;
32
+ constructor(mcpConfig: McpModuleConfig, oidcProviderConfigService: OidcProviderConfigService);
24
33
  getProtectedResourceMetadata(): OAuthProtectedResourceMetadata;
25
34
  }
@@ -1,4 +1,5 @@
1
1
  import { type AuthClaims, type AuthRoleSet } from '@dereekb/util';
2
+ import { type OidcScope } from '@dereekb/firebase';
2
3
  /**
3
4
  * Default path the MCP Streamable HTTP transport is mounted at.
4
5
  *
@@ -79,6 +80,13 @@ export interface McpReasonParameterConfig {
79
80
  */
80
81
  readonly parameterName?: string;
81
82
  }
83
+ /**
84
+ * Filter applied to the OIDC provider's advertised scope list when building the MCP
85
+ * protected-resource metadata's `scopes_supported`. Receives every scope the provider
86
+ * issues (from `OidcProviderConfigService.scopesSupported`) and returns the subset to
87
+ * advertise. Supplied via {@link McpModuleConfig.scopesSupported}; when unset, all are advertised.
88
+ */
89
+ export type McpScopesSupportedFilter = (allScopes: readonly OidcScope[]) => readonly OidcScope[];
82
90
  /**
83
91
  * Configuration for the firebase-server/mcp module.
84
92
  *
@@ -114,6 +122,25 @@ export declare abstract class McpModuleConfig {
114
122
  * @example 'https://api.example.com/mcp'
115
123
  */
116
124
  readonly mcpUrl: string;
125
+ /**
126
+ * Optional filter applied to the OIDC provider's scope list when building the
127
+ * protected-resource discovery document's `scopes_supported` (RFC 9728 §2).
128
+ *
129
+ * The base list is pulled automatically from the OIDC provider config via the
130
+ * injected {@link OidcProviderConfigService.scopesSupported} (i.e.
131
+ * `Object.keys(providerConfig.claims)`), so the MCP resource advertises exactly
132
+ * the scopes the issuer supports without the app restating them. Provide this
133
+ * only to narrow that set — it receives every scope the provider issues and
134
+ * returns the subset to advertise. When unset, all of them are advertised.
135
+ *
136
+ * Advertising these matters because dynamic-registration MCP clients (the Claude
137
+ * Code CLI) read `scopes_supported` to decide which scopes to request on the
138
+ * authorization call; with none advertised they authorize with no `scope`, leaving
139
+ * the OIDC provider nothing to grant and ending the interaction in `access_denied`.
140
+ *
141
+ * @example (allScopes) => allScopes.filter((scope) => scope === 'openid' || scope.startsWith('model.'))
142
+ */
143
+ readonly scopesSupported?: McpScopesSupportedFilter;
117
144
  /**
118
145
  * Optional name advertised on the MCP `initialize` handshake. Defaults to
119
146
  * {@link DEFAULT_MCP_SERVER_NAME}.
@@ -16,10 +16,14 @@ export interface McpModuleMetadataConfig extends Pick<ModuleMetadata, 'imports'
16
16
  * Must provide:
17
17
  * - {@link ModelApiDispatchConfig} — so the MCP server can reuse the call model dispatch chain.
18
18
  * - {@link McpModuleConfig} — issuer + resource URLs for protected-resource discovery.
19
+ * - `OidcProviderConfigService` (from `@dereekb/firebase-server/oidc`) — the `McpWellKnownController`
20
+ * reads the provider's `scopesSupported` to advertise them on the protected-resource document.
19
21
  *
20
22
  * In practice, downstream apps typically import their own `*ModelApiModule` first (which provides
21
23
  * `ModelApiCallModelDispatchService` + `MODEL_API_NEST_APPLICATION_CONTEXT`) and add the
22
- * `McpModuleConfig` provider in the dependency module passed here.
24
+ * `McpModuleConfig` provider in the dependency module passed here. The `OidcProviderConfigService`
25
+ * export is satisfied by re-exporting the app's `*OidcModule` from the dependency module (the shared
26
+ * `oidcModuleMetadata` exports the service, so re-exporting the module propagates it to the controller).
23
27
  */
24
28
  readonly dependencyModule: ClassType;
25
29
  }
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/model",
3
- "version": "13.25.0",
3
+ "version": "13.26.0",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.25.0",
6
- "@dereekb/date": "13.25.0",
7
- "@dereekb/firebase": "13.25.0",
8
- "@dereekb/firebase-server": "13.25.0",
9
- "@dereekb/model": "13.25.0",
10
- "@dereekb/nestjs": "13.25.0",
11
- "@dereekb/rxjs": "13.25.0",
12
- "@dereekb/util": "13.25.0",
5
+ "@dereekb/analytics": "13.26.0",
6
+ "@dereekb/date": "13.26.0",
7
+ "@dereekb/firebase": "13.26.0",
8
+ "@dereekb/firebase-server": "13.26.0",
9
+ "@dereekb/model": "13.26.0",
10
+ "@dereekb/nestjs": "13.26.0",
11
+ "@dereekb/rxjs": "13.26.0",
12
+ "@dereekb/util": "13.26.0",
13
13
  "@nestjs/common": "^11.1.19",
14
14
  "@nestjs/config": "^4.0.4",
15
15
  "archiver": "^7.0.1",
package/oidc/index.cjs.js CHANGED
@@ -7447,6 +7447,7 @@ function _unsupported_iterable_to_array(o, minLen) {
7447
7447
  exports: [
7448
7448
  OidcClientService,
7449
7449
  exports.OidcService,
7450
+ exports.OidcProviderConfigService,
7450
7451
  OidcModuleConfig,
7451
7452
  OidcAuthMiddlewareConfig,
7452
7453
  OidcServerFirestoreCollections
package/oidc/index.esm.js CHANGED
@@ -7445,6 +7445,7 @@ function _unsupported_iterable_to_array(o, minLen) {
7445
7445
  exports: [
7446
7446
  OidcClientService,
7447
7447
  OidcService,
7448
+ OidcProviderConfigService,
7448
7449
  OidcModuleConfig,
7449
7450
  OidcAuthMiddlewareConfig,
7450
7451
  OidcServerFirestoreCollections
package/oidc/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/oidc",
3
- "version": "13.25.0",
3
+ "version": "13.26.0",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.25.0",
6
- "@dereekb/date": "13.25.0",
7
- "@dereekb/firebase": "13.25.0",
8
- "@dereekb/firebase-server": "13.25.0",
9
- "@dereekb/model": "13.25.0",
10
- "@dereekb/nestjs": "13.25.0",
11
- "@dereekb/rxjs": "13.25.0",
12
- "@dereekb/util": "13.25.0",
13
- "@dereekb/zoho": "13.25.0",
5
+ "@dereekb/analytics": "13.26.0",
6
+ "@dereekb/date": "13.26.0",
7
+ "@dereekb/firebase": "13.26.0",
8
+ "@dereekb/firebase-server": "13.26.0",
9
+ "@dereekb/model": "13.26.0",
10
+ "@dereekb/nestjs": "13.26.0",
11
+ "@dereekb/rxjs": "13.26.0",
12
+ "@dereekb/util": "13.26.0",
13
+ "@dereekb/zoho": "13.26.0",
14
14
  "@nestjs/common": "^11.1.19",
15
15
  "@nestjs/config": "^4.0.4",
16
16
  "express": "^5.2.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server",
3
- "version": "13.25.0",
3
+ "version": "13.26.0",
4
4
  "sideEffects": false,
5
5
  "exports": {
6
6
  "./test": {
@@ -57,15 +57,15 @@
57
57
  "types": "./src/index.d.ts",
58
58
  "peerDependencies": {
59
59
  "@cantoo/pdf-lib": "^2.6.5",
60
- "@dereekb/analytics": "13.25.0",
61
- "@dereekb/date": "13.25.0",
62
- "@dereekb/dbx-core": "13.25.0",
63
- "@dereekb/firebase": "13.25.0",
64
- "@dereekb/model": "13.25.0",
65
- "@dereekb/nestjs": "13.25.0",
66
- "@dereekb/rxjs": "13.25.0",
67
- "@dereekb/util": "13.25.0",
68
- "@dereekb/zoho": "13.25.0",
60
+ "@dereekb/analytics": "13.26.0",
61
+ "@dereekb/date": "13.26.0",
62
+ "@dereekb/dbx-core": "13.26.0",
63
+ "@dereekb/firebase": "13.26.0",
64
+ "@dereekb/model": "13.26.0",
65
+ "@dereekb/nestjs": "13.26.0",
66
+ "@dereekb/rxjs": "13.26.0",
67
+ "@dereekb/util": "13.26.0",
68
+ "@dereekb/zoho": "13.26.0",
69
69
  "@google-cloud/firestore": "^7.11.6",
70
70
  "@google-cloud/storage": "^7.19.0",
71
71
  "@modelcontextprotocol/sdk": "1.29.0",
package/test/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/test",
3
- "version": "13.25.0",
3
+ "version": "13.26.0",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.25.0",
6
- "@dereekb/date": "13.25.0",
7
- "@dereekb/firebase": "13.25.0",
8
- "@dereekb/firebase-server": "13.25.0",
9
- "@dereekb/firebase-server/oidc": "13.25.0",
10
- "@dereekb/model": "13.25.0",
11
- "@dereekb/nestjs": "13.25.0",
12
- "@dereekb/rxjs": "13.25.0",
13
- "@dereekb/util": "13.25.0",
5
+ "@dereekb/analytics": "13.26.0",
6
+ "@dereekb/date": "13.26.0",
7
+ "@dereekb/firebase": "13.26.0",
8
+ "@dereekb/firebase-server": "13.26.0",
9
+ "@dereekb/firebase-server/oidc": "13.26.0",
10
+ "@dereekb/model": "13.26.0",
11
+ "@dereekb/nestjs": "13.26.0",
12
+ "@dereekb/rxjs": "13.26.0",
13
+ "@dereekb/util": "13.26.0",
14
14
  "@google-cloud/firestore": "^7.11.6",
15
15
  "@google-cloud/storage": "^7.19.0",
16
16
  "@nestjs/common": "^11.1.19",
@@ -23,7 +23,7 @@
23
23
  "supertest": "^7.2.2"
24
24
  },
25
25
  "devDependencies": {
26
- "@dereekb/nestjs": "13.25.0"
26
+ "@dereekb/nestjs": "13.26.0"
27
27
  },
28
28
  "exports": {
29
29
  "./package.json": "./package.json",
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/twilio",
3
- "version": "13.25.0",
3
+ "version": "13.26.0",
4
4
  "peerDependencies": {
5
- "@dereekb/date": "13.25.0",
6
- "@dereekb/firebase": "13.25.0",
7
- "@dereekb/firebase-server": "13.25.0",
8
- "@dereekb/model": "13.25.0",
9
- "@dereekb/nestjs": "13.25.0",
10
- "@dereekb/rxjs": "13.25.0",
11
- "@dereekb/util": "13.25.0"
5
+ "@dereekb/date": "13.26.0",
6
+ "@dereekb/firebase": "13.26.0",
7
+ "@dereekb/firebase-server": "13.26.0",
8
+ "@dereekb/model": "13.26.0",
9
+ "@dereekb/nestjs": "13.26.0",
10
+ "@dereekb/rxjs": "13.26.0",
11
+ "@dereekb/util": "13.26.0"
12
12
  },
13
13
  "exports": {
14
14
  "./package.json": "./package.json",
package/zoho/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/zoho",
3
- "version": "13.25.0",
3
+ "version": "13.26.0",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.25.0",
6
- "@dereekb/date": "13.25.0",
7
- "@dereekb/model": "13.25.0",
8
- "@dereekb/nestjs": "13.25.0",
9
- "@dereekb/rxjs": "13.25.0",
10
- "@dereekb/firebase": "13.25.0",
11
- "@dereekb/util": "13.25.0",
12
- "@dereekb/zoho": "13.25.0"
5
+ "@dereekb/analytics": "13.26.0",
6
+ "@dereekb/date": "13.26.0",
7
+ "@dereekb/model": "13.26.0",
8
+ "@dereekb/nestjs": "13.26.0",
9
+ "@dereekb/rxjs": "13.26.0",
10
+ "@dereekb/firebase": "13.26.0",
11
+ "@dereekb/util": "13.26.0",
12
+ "@dereekb/zoho": "13.26.0"
13
13
  },
14
14
  "exports": {
15
15
  "./package.json": "./package.json",