@dereekb/firebase-server 13.12.2 → 13.12.3

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,20 +1,21 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/mcp",
3
- "version": "13.12.2",
3
+ "version": "13.12.3",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.12.2",
6
- "@dereekb/date": "13.12.2",
7
- "@dereekb/firebase": "13.12.2",
8
- "@dereekb/firebase-server": "13.12.2",
9
- "@dereekb/firebase-server/oidc": "13.12.2",
10
- "@dereekb/model": "13.12.2",
11
- "@dereekb/nestjs": "13.12.2",
12
- "@dereekb/rxjs": "13.12.2",
13
- "@dereekb/util": "13.12.2",
14
- "@dereekb/zoho": "13.12.2",
5
+ "@dereekb/analytics": "13.12.3",
6
+ "@dereekb/date": "13.12.3",
7
+ "@dereekb/firebase": "13.12.3",
8
+ "@dereekb/firebase-server": "13.12.3",
9
+ "@dereekb/firebase-server/oidc": "13.12.3",
10
+ "@dereekb/model": "13.12.3",
11
+ "@dereekb/nestjs": "13.12.3",
12
+ "@dereekb/rxjs": "13.12.3",
13
+ "@dereekb/util": "13.12.3",
14
+ "@dereekb/zoho": "13.12.3",
15
15
  "@modelcontextprotocol/sdk": "1.29.0",
16
16
  "@nestjs/common": "^11.1.19",
17
17
  "@nestjs/core": "^11.1.19",
18
+ "arktype": "^2.2.0",
18
19
  "express": "^5.2.1",
19
20
  "firebase-admin": "^13.8.0"
20
21
  },
@@ -14,6 +14,15 @@ export declare const MODEL_INFO_DISPATCH_CALL = "info";
14
14
  * apps avoiding collisions should not register a real model literally named "model".
15
15
  */
16
16
  export declare const MODEL_INFO_DISPATCH_MODEL_TYPE = "model";
17
+ /**
18
+ * Group label applied to manifest entries that declare no `modelGroup`. Keeps the `groups` mode
19
+ * total reconcilable with the catalog size (sum of group counts always equals `totalModels`).
20
+ */
21
+ export declare const MODEL_INFO_UNGROUPED_LABEL = "(ungrouped)";
22
+ /**
23
+ * Hint string surfaced alongside the default `groups` response so callers know how to drill in.
24
+ */
25
+ export declare const MODEL_INFO_GROUPS_HINT = "Pass `model` for one/many models, `modelGroup` for a group, or `all:true` for the full catalog.";
17
26
  /**
18
27
  * Constructor dependencies for {@link createModelInfoTool}.
19
28
  */
@@ -25,13 +34,43 @@ export interface CreateModelInfoToolDeps {
25
34
  readonly manifest: readonly McpManifestModelEntry[];
26
35
  }
27
36
  /**
28
- * Shape of the `model-info` tool input. Omit `model` to list every model in the manifest.
37
+ * Public shape of the `model-info` tool input. Every field is optional; the combination selects
38
+ * the response mode (see {@link createModelInfoTool}).
29
39
  */
30
40
  export interface ModelInfoToolInput {
31
- readonly model?: string;
41
+ /**
42
+ * One model (string) or many (string array), each matched by `modelType`, `identityConst`, or
43
+ * `collectionPrefix`. A string yields `mode: 'single'`; an array yields `mode: 'multiple'`.
44
+ */
45
+ readonly model?: string | ReadonlyArray<string>;
46
+ /**
47
+ * Returns the summary list of models in this group (`mode: 'list'`). Matched case-insensitively.
48
+ */
49
+ readonly modelGroup?: string;
50
+ /**
51
+ * Opt in to the full catalog summary (every model). Never the default.
52
+ */
53
+ readonly all?: boolean;
54
+ /**
55
+ * Forces (`true`) or suppresses (`false`) full persisted-field detail in `list` / `multiple`
56
+ * modes. Defaults to summary rows for `list`, full entries for `single` / `multiple`.
57
+ */
58
+ readonly fields?: boolean;
32
59
  }
33
60
  /**
34
- * Summary row returned in list mode.
61
+ * Normalized form of {@link ModelInfoToolInput} produced by {@link parseModelInfoInput}. The
62
+ * `model` arg is collapsed to a query array plus a flag recording whether it arrived as an array
63
+ * (which drives `single` vs `multiple` mode).
64
+ */
65
+ export interface ParsedModelInfoInput {
66
+ readonly modelQueries?: ReadonlyArray<string>;
67
+ readonly modelIsArray: boolean;
68
+ readonly modelGroup?: string;
69
+ readonly all: boolean;
70
+ readonly fields?: boolean;
71
+ }
72
+ /**
73
+ * Summary row returned in list/group modes and (when `fields: false`) in single/multiple modes.
35
74
  */
36
75
  export interface ModelInfoSummaryRow {
37
76
  readonly modelType: string;
@@ -47,22 +86,63 @@ export interface ModelInfoSummaryRow {
47
86
  readonly serviceFactoryExport?: string;
48
87
  }
49
88
  /**
50
- * Output payload for the `model-info` tool. `mode === 'list'` carries `models[]`;
51
- * `mode === 'single'` carries the full `model` entry.
89
+ * One row in a model-bearing response: either a compact {@link ModelInfoSummaryRow} or the full
90
+ * {@link McpManifestModelEntry} (including persisted `fields`). The `fields` toggle and the active
91
+ * mode decide which form is emitted.
92
+ */
93
+ export type ModelInfoModelRow = ModelInfoSummaryRow | McpManifestModelEntry;
94
+ /**
95
+ * One model group and the number of models it contains. Returned in the default `groups` mode.
96
+ */
97
+ export interface ModelInfoGroupCount {
98
+ readonly modelGroup: string;
99
+ readonly modelCount: number;
100
+ }
101
+ /**
102
+ * A model query that matched nothing. Mirrors `model-get`'s per-key `{ key, message }` error shape
103
+ * with `query` standing in for `key`.
104
+ */
105
+ export interface ModelInfoNotFound {
106
+ readonly query: string;
107
+ readonly message: string;
108
+ }
109
+ /**
110
+ * Output payload for the `model-info` tool. The `mode` field discriminates the variant:
111
+ * - `groups`: model groups + counts (the default, no-arg response).
112
+ * - `list`: a summary (or, with `fields: true`, full) list — used by `modelGroup` and `all`.
113
+ * - `single`: full detail for one `model` string.
114
+ * - `multiple`: full detail per match for a `model` array, with misses in `notFound`.
52
115
  */
53
116
  export type ModelInfoToolOutput = {
117
+ readonly mode: 'groups';
118
+ readonly groups: ReadonlyArray<ModelInfoGroupCount>;
119
+ readonly totalModels: number;
120
+ readonly hint: string;
121
+ } | {
54
122
  readonly mode: 'list';
55
- readonly models: ReadonlyArray<ModelInfoSummaryRow>;
123
+ readonly models: ReadonlyArray<ModelInfoModelRow>;
124
+ readonly modelGroup?: string;
56
125
  } | {
57
126
  readonly mode: 'single';
58
- readonly model: McpManifestModelEntry;
127
+ readonly model: ModelInfoModelRow;
128
+ } | {
129
+ readonly mode: 'multiple';
130
+ readonly models: ReadonlyArray<ModelInfoModelRow>;
131
+ readonly notFound?: ReadonlyArray<ModelInfoNotFound>;
59
132
  };
60
133
  /**
61
134
  * Builds the built-in `model-info` MCP tool definition.
62
135
  *
63
- * Mirrors dbx-cli's `model-info [model]` command:
64
- * - Without a `model` arg: returns a summary list (modelType, modelName, prefix, group, identity, field count).
65
- * - With a `model` arg: matches by `modelType`, `identityConst`, or `collectionPrefix` and returns the full entry.
136
+ * Modes (selected by input):
137
+ * - No args: returns model groups + counts (`mode: 'groups'`) — the cheap default for browsing.
138
+ * - `model` (string): returns the full entry for one model (`mode: 'single'`).
139
+ * - `model` (string array): returns full detail per match (`mode: 'multiple'`); misses land in `notFound`.
140
+ * - `modelGroup`: returns the summary list of that group's models (`mode: 'list'`).
141
+ * - `all: true`: returns the full catalog summary (`mode: 'list'`).
142
+ * - `fields`: forces (`true`) or suppresses (`false`) full persisted-field detail in list/multiple modes.
143
+ *
144
+ * Each `model` query matches by `modelType`, `identityConst`, or `collectionPrefix`. When several
145
+ * params are supplied, precedence is `model` > `modelGroup` > `all` > the default `groups` view.
66
146
  *
67
147
  * Output is delivered as both stringified JSON in `content[0].text` and `structuredContent`
68
148
  * so MCP clients can consume either form.
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/model",
3
- "version": "13.12.2",
3
+ "version": "13.12.3",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.12.2",
6
- "@dereekb/date": "13.12.2",
7
- "@dereekb/firebase": "13.12.2",
8
- "@dereekb/firebase-server": "13.12.2",
9
- "@dereekb/model": "13.12.2",
10
- "@dereekb/nestjs": "13.12.2",
11
- "@dereekb/rxjs": "13.12.2",
12
- "@dereekb/util": "13.12.2",
5
+ "@dereekb/analytics": "13.12.3",
6
+ "@dereekb/date": "13.12.3",
7
+ "@dereekb/firebase": "13.12.3",
8
+ "@dereekb/firebase-server": "13.12.3",
9
+ "@dereekb/model": "13.12.3",
10
+ "@dereekb/nestjs": "13.12.3",
11
+ "@dereekb/rxjs": "13.12.3",
12
+ "@dereekb/util": "13.12.3",
13
13
  "@nestjs/common": "^11.1.19",
14
14
  "@nestjs/config": "^4.0.4",
15
15
  "archiver": "^7.0.1",
package/oidc/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/oidc",
3
- "version": "13.12.2",
3
+ "version": "13.12.3",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.12.2",
6
- "@dereekb/date": "13.12.2",
7
- "@dereekb/firebase": "13.12.2",
8
- "@dereekb/firebase-server": "13.12.2",
9
- "@dereekb/model": "13.12.2",
10
- "@dereekb/nestjs": "13.12.2",
11
- "@dereekb/rxjs": "13.12.2",
12
- "@dereekb/util": "13.12.2",
13
- "@dereekb/zoho": "13.12.2",
5
+ "@dereekb/analytics": "13.12.3",
6
+ "@dereekb/date": "13.12.3",
7
+ "@dereekb/firebase": "13.12.3",
8
+ "@dereekb/firebase-server": "13.12.3",
9
+ "@dereekb/model": "13.12.3",
10
+ "@dereekb/nestjs": "13.12.3",
11
+ "@dereekb/rxjs": "13.12.3",
12
+ "@dereekb/util": "13.12.3",
13
+ "@dereekb/zoho": "13.12.3",
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.12.2",
3
+ "version": "13.12.3",
4
4
  "sideEffects": false,
5
5
  "exports": {
6
6
  "./test": {
@@ -56,17 +56,19 @@
56
56
  "main": "./index.cjs.js",
57
57
  "types": "./src/index.d.ts",
58
58
  "peerDependencies": {
59
- "@dereekb/analytics": "13.12.2",
60
- "@dereekb/date": "13.12.2",
61
- "@dereekb/dbx-core": "13.12.2",
62
- "@dereekb/firebase": "13.12.2",
63
- "@dereekb/model": "13.12.2",
64
- "@dereekb/nestjs": "13.12.2",
65
- "@dereekb/rxjs": "13.12.2",
66
- "@dereekb/util": "13.12.2",
67
- "@dereekb/zoho": "13.12.2",
59
+ "@cantoo/pdf-lib": "^2.6.5",
60
+ "@dereekb/analytics": "13.12.3",
61
+ "@dereekb/date": "13.12.3",
62
+ "@dereekb/dbx-core": "13.12.3",
63
+ "@dereekb/firebase": "13.12.3",
64
+ "@dereekb/model": "13.12.3",
65
+ "@dereekb/nestjs": "13.12.3",
66
+ "@dereekb/rxjs": "13.12.3",
67
+ "@dereekb/util": "13.12.3",
68
+ "@dereekb/zoho": "13.12.3",
68
69
  "@google-cloud/firestore": "^7.11.6",
69
70
  "@google-cloud/storage": "^7.19.0",
71
+ "@modelcontextprotocol/sdk": "1.29.0",
70
72
  "@nestjs/common": "^11.1.19",
71
73
  "@nestjs/config": "^4.0.4",
72
74
  "@nestjs/core": "^11.1.19",
@@ -84,6 +86,7 @@
84
86
  "nanoid": "^5.1.9",
85
87
  "oidc-provider": "^9.8.2",
86
88
  "rxjs": "^7.8.2",
89
+ "sharp": "0.34.5",
87
90
  "supertest": "^7.2.2",
88
91
  "ts-essentials": "^10.2.0"
89
92
  },
@@ -18,11 +18,11 @@ export declare abstract class FirebaseServerEnvService {
18
18
  */
19
19
  abstract readonly isTestingEnv: boolean;
20
20
  /**
21
- * Whether the server is running in production.
21
+ * Whether the server is running in production mode. (This may be true in both prod or a staging running as production).
22
22
  */
23
23
  abstract readonly isProduction: boolean;
24
24
  /**
25
- * Whether the server is running in a staging environment.
25
+ * Whether the server is running in a staging environment. isProduction is also typically true when this is true.
26
26
  */
27
27
  abstract readonly isStaging: boolean;
28
28
  /**
package/test/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@dereekb/firebase-server/test",
3
- "version": "13.12.2",
3
+ "version": "13.12.3",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.12.2",
6
- "@dereekb/date": "13.12.2",
7
- "@dereekb/firebase": "13.12.2",
8
- "@dereekb/firebase-server": "13.12.2",
9
- "@dereekb/firebase-server/oidc": "13.12.2",
10
- "@dereekb/model": "13.12.2",
11
- "@dereekb/nestjs": "13.12.2",
12
- "@dereekb/rxjs": "13.12.2",
13
- "@dereekb/util": "13.12.2",
5
+ "@dereekb/analytics": "13.12.3",
6
+ "@dereekb/date": "13.12.3",
7
+ "@dereekb/firebase": "13.12.3",
8
+ "@dereekb/firebase-server": "13.12.3",
9
+ "@dereekb/firebase-server/oidc": "13.12.3",
10
+ "@dereekb/model": "13.12.3",
11
+ "@dereekb/nestjs": "13.12.3",
12
+ "@dereekb/rxjs": "13.12.3",
13
+ "@dereekb/util": "13.12.3",
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.12.2"
26
+ "@dereekb/nestjs": "13.12.3"
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.12.2",
3
+ "version": "13.12.3",
4
4
  "peerDependencies": {
5
- "@dereekb/date": "13.12.2",
6
- "@dereekb/firebase": "13.12.2",
7
- "@dereekb/firebase-server": "13.12.2",
8
- "@dereekb/model": "13.12.2",
9
- "@dereekb/nestjs": "13.12.2",
10
- "@dereekb/rxjs": "13.12.2",
11
- "@dereekb/util": "13.12.2"
5
+ "@dereekb/date": "13.12.3",
6
+ "@dereekb/firebase": "13.12.3",
7
+ "@dereekb/firebase-server": "13.12.3",
8
+ "@dereekb/model": "13.12.3",
9
+ "@dereekb/nestjs": "13.12.3",
10
+ "@dereekb/rxjs": "13.12.3",
11
+ "@dereekb/util": "13.12.3"
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.12.2",
3
+ "version": "13.12.3",
4
4
  "peerDependencies": {
5
- "@dereekb/analytics": "13.12.2",
6
- "@dereekb/date": "13.12.2",
7
- "@dereekb/model": "13.12.2",
8
- "@dereekb/nestjs": "13.12.2",
9
- "@dereekb/rxjs": "13.12.2",
10
- "@dereekb/firebase": "13.12.2",
11
- "@dereekb/util": "13.12.2",
12
- "@dereekb/zoho": "13.12.2"
5
+ "@dereekb/analytics": "13.12.3",
6
+ "@dereekb/date": "13.12.3",
7
+ "@dereekb/model": "13.12.3",
8
+ "@dereekb/nestjs": "13.12.3",
9
+ "@dereekb/rxjs": "13.12.3",
10
+ "@dereekb/firebase": "13.12.3",
11
+ "@dereekb/util": "13.12.3",
12
+ "@dereekb/zoho": "13.12.3"
13
13
  },
14
14
  "exports": {
15
15
  "./package.json": "./package.json",