firebase-tools 14.14.0 → 14.15.1

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.
Files changed (79) hide show
  1. package/lib/apphosting/backend.js +40 -15
  2. package/lib/auth.js +37 -2
  3. package/lib/command.js +19 -5
  4. package/lib/commands/apphosting-backends-create.js +8 -5
  5. package/lib/commands/dataconnect-sdk-generate.js +3 -5
  6. package/lib/commands/dataconnect-sql-diff.js +2 -2
  7. package/lib/commands/dataconnect-sql-grant.js +2 -2
  8. package/lib/commands/dataconnect-sql-migrate.js +2 -2
  9. package/lib/commands/dataconnect-sql-setup.js +2 -2
  10. package/lib/commands/dataconnect-sql-shell.js +2 -2
  11. package/lib/commands/init.js +11 -0
  12. package/lib/commands/login.js +12 -7
  13. package/lib/crashlytics/addNote.js +27 -0
  14. package/lib/crashlytics/deleteNote.js +23 -0
  15. package/lib/crashlytics/getIssueDetails.js +5 -20
  16. package/lib/crashlytics/getSampleCrash.js +6 -20
  17. package/lib/crashlytics/listNotes.js +29 -0
  18. package/lib/crashlytics/listTopDevices.js +33 -0
  19. package/lib/crashlytics/listTopIssues.js +8 -23
  20. package/lib/crashlytics/listTopOperatingSystems.js +32 -0
  21. package/lib/crashlytics/listTopVersions.js +32 -0
  22. package/lib/crashlytics/updateIssue.js +35 -0
  23. package/lib/crashlytics/utils.js +38 -0
  24. package/lib/dataconnect/appFinder.js +103 -0
  25. package/lib/dataconnect/load.js +105 -6
  26. package/lib/deploy/dataconnect/prepare.js +1 -3
  27. package/lib/emulator/controller.js +2 -2
  28. package/lib/emulator/downloadableEmulatorInfo.json +17 -17
  29. package/lib/experiments.js +5 -0
  30. package/lib/init/features/dataconnect/create_app.js +48 -0
  31. package/lib/init/features/dataconnect/index.js +19 -45
  32. package/lib/init/features/dataconnect/sdk.js +218 -161
  33. package/lib/init/features/index.js +3 -3
  34. package/lib/init/index.js +5 -2
  35. package/lib/management/apps.js +3 -3
  36. package/lib/mcp/prompts/core/deploy.js +51 -8
  37. package/lib/mcp/prompts/crashlytics/common.js +10 -0
  38. package/lib/mcp/prompts/crashlytics/fix_issue.js +89 -0
  39. package/lib/mcp/prompts/crashlytics/index.js +6 -0
  40. package/lib/mcp/prompts/crashlytics/prioritize_issues.js +79 -0
  41. package/lib/mcp/prompts/dataconnect/index.js +9 -0
  42. package/lib/mcp/prompts/dataconnect/schema.js +68 -0
  43. package/lib/mcp/prompts/index.js +5 -3
  44. package/lib/mcp/tools/core/init.js +16 -3
  45. package/lib/mcp/tools/crashlytics/add_note.js +32 -0
  46. package/lib/mcp/tools/crashlytics/constants.js +11 -0
  47. package/lib/mcp/tools/crashlytics/delete_note.js +35 -0
  48. package/lib/mcp/tools/crashlytics/get_issue_details.js +2 -4
  49. package/lib/mcp/tools/crashlytics/get_sample_crash.js +4 -4
  50. package/lib/mcp/tools/crashlytics/index.js +16 -2
  51. package/lib/mcp/tools/crashlytics/list_notes.js +37 -0
  52. package/lib/mcp/tools/crashlytics/list_top_devices.js +33 -0
  53. package/lib/mcp/tools/crashlytics/list_top_issues.js +5 -7
  54. package/lib/mcp/tools/crashlytics/list_top_operating_systems.js +33 -0
  55. package/lib/mcp/tools/crashlytics/list_top_versions.js +33 -0
  56. package/lib/mcp/tools/crashlytics/update_issue.js +37 -0
  57. package/lib/mcp/tools/dataconnect/compile.js +43 -0
  58. package/lib/mcp/tools/dataconnect/execute_graphql.js +4 -4
  59. package/lib/mcp/tools/dataconnect/execute_graphql_read.js +4 -4
  60. package/lib/mcp/tools/dataconnect/execute_mutation.js +4 -4
  61. package/lib/mcp/tools/dataconnect/execute_query.js +4 -4
  62. package/lib/mcp/tools/dataconnect/generate_operation.js +2 -2
  63. package/lib/mcp/tools/dataconnect/get_connector.js +3 -3
  64. package/lib/mcp/tools/dataconnect/get_schema.js +3 -3
  65. package/lib/mcp/tools/dataconnect/index.js +2 -0
  66. package/lib/mcp/tools/firestore/list_collections.js +0 -3
  67. package/lib/mcp/tools/index.js +3 -0
  68. package/lib/mcp/util/dataconnect/compile.js +18 -0
  69. package/lib/mcp/util/dataconnect/content.js +655 -0
  70. package/lib/utils.js +11 -1
  71. package/package.json +1 -1
  72. package/templates/init/dataconnect/connector.yaml +0 -16
  73. package/templates/init/dataconnect/dataconnect.yaml +2 -1
  74. package/templates/init/dataconnect/mutations.gql +29 -29
  75. package/templates/init/dataconnect/queries.gql +73 -73
  76. package/templates/init/dataconnect/schema.gql +48 -48
  77. package/lib/dataconnect/fileUtils.js +0 -168
  78. /package/lib/mcp/{tools → util}/dataconnect/converter.js +0 -0
  79. /package/lib/mcp/{tools → util}/dataconnect/emulator.js +0 -0
@@ -5,14 +5,12 @@ const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const util_1 = require("../../util");
7
7
  const listTopIssues_1 = require("../../../crashlytics/listTopIssues");
8
+ const constants_1 = require("./constants");
8
9
  exports.list_top_issues = (0, tool_1.tool)({
9
10
  name: "list_top_issues",
10
11
  description: "List the top crashes from crashlytics happening in the application.",
11
12
  inputSchema: zod_1.z.object({
12
- app_id: zod_1.z
13
- .string()
14
- .optional()
15
- .describe("AppId for which the issues list should be fetched. For an Android application, read the mobilesdk_app_id value specified in the google-services.json file for the current package name. For an iOS Application, read the GOOGLE_APP_ID from GoogleService-Info.plist. If neither is available, use the `firebase_list_apps` tool to find an app_id to pass to this tool."),
13
+ app_id: constants_1.APP_ID_FIELD,
16
14
  issue_count: zod_1.z
17
15
  .number()
18
16
  .optional()
@@ -21,6 +19,7 @@ exports.list_top_issues = (0, tool_1.tool)({
21
19
  issue_type: zod_1.z
22
20
  .enum(["FATAL", "NON-FATAL", "ANR"])
23
21
  .optional()
22
+ .default("FATAL")
24
23
  .describe("Types of issues that can be fetched comma-separated. Defaults to `FATAL` (Crashes). Other values include NON-FATAL (Non-fatal issues), ANR (Application not responding)."),
25
24
  }),
26
25
  annotations: {
@@ -29,12 +28,11 @@ exports.list_top_issues = (0, tool_1.tool)({
29
28
  },
30
29
  _meta: {
31
30
  requiresAuth: true,
32
- requiresProject: true,
33
31
  },
34
- }, async ({ app_id, issue_type, issue_count }, { projectId }) => {
32
+ }, async ({ app_id, issue_type, issue_count }) => {
35
33
  if (!app_id)
36
34
  return (0, util_1.mcpError)(`Must specify 'app_id' parameter.`);
37
35
  issue_type !== null && issue_type !== void 0 ? issue_type : (issue_type = "FATAL");
38
36
  issue_count !== null && issue_count !== void 0 ? issue_count : (issue_count = 10);
39
- return (0, util_1.toContent)(await (0, listTopIssues_1.listTopIssues)(projectId, app_id, issue_type, issue_count));
37
+ return (0, util_1.toContent)(await (0, listTopIssues_1.listTopIssues)(app_id, issue_type, issue_count));
40
38
  });
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.list_top_operating_systems = void 0;
4
+ const zod_1 = require("zod");
5
+ const tool_1 = require("../../tool");
6
+ const util_1 = require("../../util");
7
+ const listTopOperatingSystems_1 = require("../../../crashlytics/listTopOperatingSystems");
8
+ const constants_1 = require("./constants");
9
+ exports.list_top_operating_systems = (0, tool_1.tool)({
10
+ name: "list_top_operating_systems",
11
+ description: "List the top operating systems from Crashlytics for an application.",
12
+ inputSchema: zod_1.z.object({
13
+ app_id: constants_1.APP_ID_FIELD,
14
+ issue_id: zod_1.z.string().optional().describe("The issue id to filter on"),
15
+ os_count: zod_1.z
16
+ .number()
17
+ .optional()
18
+ .default(10)
19
+ .describe("Number of operating systems that needs to be fetched. Defaults to 10 if unspecified."),
20
+ }),
21
+ annotations: {
22
+ title: "List Top Crashlytics Operating Systems.",
23
+ readOnlyHint: true,
24
+ },
25
+ _meta: {
26
+ requiresAuth: true,
27
+ },
28
+ }, async ({ app_id, issue_id, os_count }) => {
29
+ if (!app_id)
30
+ return (0, util_1.mcpError)(`Must specify 'app_id' parameter.`);
31
+ os_count !== null && os_count !== void 0 ? os_count : (os_count = 10);
32
+ return (0, util_1.toContent)(await (0, listTopOperatingSystems_1.listTopOperatingSystems)(app_id, os_count, issue_id));
33
+ });
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.list_top_versions = void 0;
4
+ const zod_1 = require("zod");
5
+ const tool_1 = require("../../tool");
6
+ const util_1 = require("../../util");
7
+ const listTopVersions_1 = require("../../../crashlytics/listTopVersions");
8
+ const constants_1 = require("./constants");
9
+ exports.list_top_versions = (0, tool_1.tool)({
10
+ name: "list_top_versions",
11
+ description: "List the top versions from Crashlytics for an application.",
12
+ inputSchema: zod_1.z.object({
13
+ app_id: constants_1.APP_ID_FIELD,
14
+ issue_id: zod_1.z.string().optional().describe("The issue id to filter on"),
15
+ version_count: zod_1.z
16
+ .number()
17
+ .optional()
18
+ .default(10)
19
+ .describe("Number of versions that needs to be fetched. Defaults to 10 if unspecified."),
20
+ }),
21
+ annotations: {
22
+ title: "List Top Crashlytics Versions.",
23
+ readOnlyHint: true,
24
+ },
25
+ _meta: {
26
+ requiresAuth: true,
27
+ },
28
+ }, async ({ app_id, issue_id, version_count }) => {
29
+ if (!app_id)
30
+ return (0, util_1.mcpError)(`Must specify 'app_id' parameter.`);
31
+ version_count !== null && version_count !== void 0 ? version_count : (version_count = 10);
32
+ return (0, util_1.toContent)(await (0, listTopVersions_1.listTopVersions)(app_id, version_count, issue_id));
33
+ });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.update_issue = void 0;
4
+ const zod_1 = require("zod");
5
+ const tool_1 = require("../../tool");
6
+ const util_1 = require("../../util");
7
+ const updateIssue_1 = require("../../../crashlytics/updateIssue");
8
+ const constants_1 = require("./constants");
9
+ exports.update_issue = (0, tool_1.tool)({
10
+ name: "update_issue",
11
+ description: "Update the state of an issue in Crashlytics.",
12
+ inputSchema: zod_1.z.object({
13
+ app_id: constants_1.APP_ID_FIELD,
14
+ issue_id: zod_1.z.string().describe("The issue id to update."),
15
+ state: zod_1.z
16
+ .nativeEnum(updateIssue_1.IssueState)
17
+ .describe("The new state for the issue. Can be 'OPEN' or 'CLOSED'."),
18
+ }),
19
+ annotations: {
20
+ title: "Update Crashlytics issue state.",
21
+ readOnlyHint: true,
22
+ },
23
+ _meta: {
24
+ requiresAuth: true,
25
+ },
26
+ }, async ({ app_id, issue_id, state }) => {
27
+ if (!app_id) {
28
+ return (0, util_1.mcpError)(`Must specify 'app_id' parameter.`);
29
+ }
30
+ if (!issue_id) {
31
+ return (0, util_1.mcpError)(`Must specify 'issue_id' parameter.`);
32
+ }
33
+ if (!state) {
34
+ return (0, util_1.mcpError)(`Must specify 'state' parameter.`);
35
+ }
36
+ return (0, util_1.toContent)(await (0, updateIssue_1.updateIssue)(app_id, issue_id, state));
37
+ });
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compile = void 0;
4
+ const zod_1 = require("zod");
5
+ const tool_1 = require("../../tool");
6
+ const load_1 = require("../../../dataconnect/load");
7
+ const compile_1 = require("../../util/dataconnect/compile");
8
+ exports.compile = (0, tool_1.tool)({
9
+ name: "build",
10
+ description: "Use this to compile Firebase Data Connect schema, operations, and/or connectors and check for build errors.",
11
+ inputSchema: zod_1.z.object({
12
+ error_filter: zod_1.z
13
+ .enum(["all", "schema", "operations"])
14
+ .describe("filter errors to a specific type only. defaults to `all` if omitted.")
15
+ .optional(),
16
+ service_id: zod_1.z
17
+ .string()
18
+ .optional()
19
+ .describe("The Firebase Data Connect service ID to look for. If omitted, builds all services defined in `firebase.json`."),
20
+ }),
21
+ annotations: {
22
+ title: "Compile Data Connect",
23
+ readOnlyHint: true,
24
+ },
25
+ _meta: {
26
+ requiresProject: false,
27
+ requiresAuth: false,
28
+ },
29
+ }, async ({ service_id, error_filter }, { projectId, config }) => {
30
+ const serviceInfo = await (0, load_1.pickService)(projectId, config, service_id || undefined);
31
+ const errors = await (0, compile_1.compileErrors)(serviceInfo.sourceDirectory, error_filter);
32
+ if (errors)
33
+ return {
34
+ content: [
35
+ {
36
+ type: "text",
37
+ text: `The following errors were encountered while compiling Data Connect from directory \`${serviceInfo.sourceDirectory}\`:\n\n${errors}`,
38
+ },
39
+ ],
40
+ isError: true,
41
+ };
42
+ return { content: [{ type: "text", text: "Compiled successfully." }] };
43
+ });
@@ -4,9 +4,9 @@ exports.execute_graphql = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const dataplane = require("../../../dataconnect/dataplaneClient");
7
- const fileUtils_1 = require("../../../dataconnect/fileUtils");
8
- const converter_1 = require("./converter");
9
- const emulator_1 = require("./emulator");
7
+ const load_1 = require("../../../dataconnect/load");
8
+ const converter_1 = require("../../util/dataconnect/converter");
9
+ const emulator_1 = require("../../util/dataconnect/emulator");
10
10
  exports.execute_graphql = (0, tool_1.tool)({
11
11
  name: "execute_graphql",
12
12
  description: "Executes an arbitrary GraphQL against a Data Connect service or its emulator.",
@@ -31,7 +31,7 @@ exports.execute_graphql = (0, tool_1.tool)({
31
31
  requiresAuth: true,
32
32
  },
33
33
  }, async ({ query, service_id, variables: unparsedVariables, use_emulator }, { projectId, config, host }) => {
34
- const serviceInfo = await (0, fileUtils_1.pickService)(projectId, config, service_id || undefined);
34
+ const serviceInfo = await (0, load_1.pickService)(projectId, config, service_id || undefined);
35
35
  let apiClient;
36
36
  if (use_emulator) {
37
37
  apiClient = await (0, emulator_1.getDataConnectEmulatorClient)(host);
@@ -4,9 +4,9 @@ exports.execute_graphql_read = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const dataplane = require("../../../dataconnect/dataplaneClient");
7
- const fileUtils_1 = require("../../../dataconnect/fileUtils");
8
- const converter_1 = require("./converter");
9
- const emulator_1 = require("./emulator");
7
+ const load_1 = require("../../../dataconnect/load");
8
+ const converter_1 = require("../../util/dataconnect/converter");
9
+ const emulator_1 = require("../../util/dataconnect/emulator");
10
10
  exports.execute_graphql_read = (0, tool_1.tool)({
11
11
  name: "execute_graphql_read",
12
12
  description: "Executes an arbitrary GraphQL query against a Data Connect service or its emulator. Cannot write data.",
@@ -31,7 +31,7 @@ exports.execute_graphql_read = (0, tool_1.tool)({
31
31
  requiresAuth: true,
32
32
  },
33
33
  }, async ({ query, service_id, variables: unparsedVariables, use_emulator }, { projectId, config, host }) => {
34
- const serviceInfo = await (0, fileUtils_1.pickService)(projectId, config, service_id || undefined);
34
+ const serviceInfo = await (0, load_1.pickService)(projectId, config, service_id || undefined);
35
35
  let apiClient;
36
36
  if (use_emulator) {
37
37
  apiClient = await (0, emulator_1.getDataConnectEmulatorClient)(host);
@@ -5,9 +5,9 @@ const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const util_1 = require("../../util");
7
7
  const dataplane = require("../../../dataconnect/dataplaneClient");
8
- const fileUtils_1 = require("../../../dataconnect/fileUtils");
9
- const converter_1 = require("./converter");
10
- const emulator_1 = require("./emulator");
8
+ const load_1 = require("../../../dataconnect/load");
9
+ const converter_1 = require("../../util/dataconnect/converter");
10
+ const emulator_1 = require("../../util/dataconnect/emulator");
11
11
  exports.execute_mutation = (0, tool_1.tool)({
12
12
  name: "execute_mutation",
13
13
  description: "Executes a deployed Data Connect mutation against a service or its emulator. Can read and write data.",
@@ -36,7 +36,7 @@ exports.execute_mutation = (0, tool_1.tool)({
36
36
  requiresAuth: true,
37
37
  },
38
38
  }, async ({ operationName, service_id, connector_id, variables: unparsedVariables, use_emulator }, { projectId, config, host }) => {
39
- const serviceInfo = await (0, fileUtils_1.pickService)(projectId, config, service_id || undefined);
39
+ const serviceInfo = await (0, load_1.pickService)(projectId, config, service_id || undefined);
40
40
  let apiClient;
41
41
  if (!connector_id) {
42
42
  if (serviceInfo.connectorInfo.length === 0) {
@@ -5,9 +5,9 @@ const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const util_1 = require("../../util");
7
7
  const dataplane = require("../../../dataconnect/dataplaneClient");
8
- const fileUtils_1 = require("../../../dataconnect/fileUtils");
9
- const converter_1 = require("./converter");
10
- const emulator_1 = require("./emulator");
8
+ const load_1 = require("../../../dataconnect/load");
9
+ const converter_1 = require("../../util/dataconnect/converter");
10
+ const emulator_1 = require("../../util/dataconnect/emulator");
11
11
  exports.execute_query = (0, tool_1.tool)({
12
12
  name: "execute_query",
13
13
  description: "Executes a deployed Data Connect query against a service or its emulator. Cannot write any data.",
@@ -36,7 +36,7 @@ exports.execute_query = (0, tool_1.tool)({
36
36
  requiresAuth: true,
37
37
  },
38
38
  }, async ({ operationName, service_id, connector_id, variables: unparsedVariables, use_emulator }, { projectId, config, host }) => {
39
- const serviceInfo = await (0, fileUtils_1.pickService)(projectId, config, service_id || undefined);
39
+ const serviceInfo = await (0, load_1.pickService)(projectId, config, service_id || undefined);
40
40
  let apiClient;
41
41
  if (!connector_id) {
42
42
  if (serviceInfo.connectorInfo.length === 0) {
@@ -5,7 +5,7 @@ const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const util_1 = require("../../util");
7
7
  const fdcExperience_1 = require("../../../gemini/fdcExperience");
8
- const fileUtils_1 = require("../../../dataconnect/fileUtils");
8
+ const load_1 = require("../../../dataconnect/load");
9
9
  exports.generate_operation = (0, tool_1.tool)({
10
10
  name: "generate_operation",
11
11
  description: "Generates a single Firebase Data Connect query or mutation based on the currently deployed schema and the provided prompt.",
@@ -28,7 +28,7 @@ exports.generate_operation = (0, tool_1.tool)({
28
28
  requiresGemini: true,
29
29
  },
30
30
  }, async ({ prompt, service_id }, { projectId, config }) => {
31
- const serviceInfo = await (0, fileUtils_1.pickService)(projectId, config, service_id || undefined);
31
+ const serviceInfo = await (0, load_1.pickService)(projectId, config, service_id || undefined);
32
32
  const schema = await (0, fdcExperience_1.generateOperation)(prompt, serviceInfo.serviceName, projectId);
33
33
  return (0, util_1.toContent)(schema);
34
34
  });
@@ -5,8 +5,8 @@ const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const util_1 = require("../../util");
7
7
  const client = require("../../../dataconnect/client");
8
- const fileUtils_1 = require("../../../dataconnect/fileUtils");
9
- const converter_1 = require("./converter");
8
+ const load_1 = require("../../../dataconnect/load");
9
+ const converter_1 = require("../../util/dataconnect/converter");
10
10
  exports.get_connectors = (0, tool_1.tool)({
11
11
  name: "get_connectors",
12
12
  description: "Get the Firebase Data Connect Connectors in the project, which includes the pre-defined GraphQL queries accessible to client SDKs.",
@@ -25,7 +25,7 @@ exports.get_connectors = (0, tool_1.tool)({
25
25
  requiresAuth: true,
26
26
  },
27
27
  }, async ({ service_id }, { projectId, config }) => {
28
- const serviceInfo = await (0, fileUtils_1.pickService)(projectId, config, service_id || undefined);
28
+ const serviceInfo = await (0, load_1.pickService)(projectId, config, service_id || undefined);
29
29
  const connectors = await client.listConnectors(serviceInfo.serviceName, ["*"]);
30
30
  return (0, util_1.toContent)(connectors.map(converter_1.connectorToText).join("\n\n"));
31
31
  });
@@ -5,8 +5,8 @@ const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const util_1 = require("../../util");
7
7
  const client = require("../../../dataconnect/client");
8
- const fileUtils_1 = require("../../../dataconnect/fileUtils");
9
- const converter_1 = require("./converter");
8
+ const load_1 = require("../../../dataconnect/load");
9
+ const converter_1 = require("../../util/dataconnect/converter");
10
10
  exports.get_schema = (0, tool_1.tool)({
11
11
  name: "get_schema",
12
12
  description: "Retrieve information about the Firebase Data Connect Schema in the project, including Cloud SQL data sources and the GraphQL Schema describing the data model.",
@@ -25,7 +25,7 @@ exports.get_schema = (0, tool_1.tool)({
25
25
  requiresAuth: true,
26
26
  },
27
27
  }, async ({ service_id }, { projectId, config }) => {
28
- const serviceInfo = await (0, fileUtils_1.pickService)(projectId, config, service_id || undefined);
28
+ const serviceInfo = await (0, load_1.pickService)(projectId, config, service_id || undefined);
29
29
  const schemas = await client.listSchemas(serviceInfo.serviceName, ["*"]);
30
30
  return (0, util_1.toContent)(schemas === null || schemas === void 0 ? void 0 : schemas.map(converter_1.schemaToText).join("\n\n"));
31
31
  });
@@ -10,7 +10,9 @@ const execute_graphql_1 = require("./execute_graphql");
10
10
  const execute_graphql_read_1 = require("./execute_graphql_read");
11
11
  const execute_query_1 = require("./execute_query");
12
12
  const execute_mutation_1 = require("./execute_mutation");
13
+ const compile_1 = require("./compile");
13
14
  exports.dataconnectTools = [
15
+ compile_1.compile,
14
16
  list_services_1.list_services,
15
17
  generate_schema_1.generate_schema,
16
18
  generate_operation_1.generate_operation,
@@ -5,7 +5,6 @@ const zod_1 = require("zod");
5
5
  const tool_1 = require("../../tool");
6
6
  const util_1 = require("../../util");
7
7
  const firestore_1 = require("../../../gcp/firestore");
8
- const errors_1 = require("../../errors");
9
8
  const types_1 = require("../../../emulator/types");
10
9
  exports.list_collections = (0, tool_1.tool)({
11
10
  name: "list_collections",
@@ -30,7 +29,5 @@ exports.list_collections = (0, tool_1.tool)({
30
29
  if (use_emulator) {
31
30
  emulatorUrl = await host.getEmulatorUrl(types_1.Emulators.FIRESTORE);
32
31
  }
33
- if (!projectId)
34
- return errors_1.NO_PROJECT_ERROR;
35
32
  return (0, util_1.toContent)(await (0, firestore_1.listCollectionIds)(projectId, database, emulatorUrl));
36
33
  });
@@ -16,6 +16,9 @@ function availableTools(activeFeatures) {
16
16
  if (!(activeFeatures === null || activeFeatures === void 0 ? void 0 : activeFeatures.length)) {
17
17
  activeFeatures = Object.keys(tools);
18
18
  }
19
+ if (!activeFeatures.includes("core")) {
20
+ activeFeatures.unshift("core");
21
+ }
19
22
  for (const key of activeFeatures) {
20
23
  toolDefs.push(...tools[key]);
21
24
  }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compileErrors = void 0;
4
+ const graphqlError_1 = require("../../../dataconnect/graphqlError");
5
+ const dataconnectEmulator_1 = require("../../../emulator/dataconnectEmulator");
6
+ async function compileErrors(configDir, errorFilter) {
7
+ const errors = (await dataconnectEmulator_1.DataConnectEmulator.build({ configDir })).errors;
8
+ return ((errors === null || errors === void 0 ? void 0 : errors.filter((e) => {
9
+ var _a;
10
+ const isOperationError = ["query", "mutation"].includes((_a = e.path) === null || _a === void 0 ? void 0 : _a[0]);
11
+ if (errorFilter === "operations")
12
+ return isOperationError;
13
+ if (errorFilter === "schema")
14
+ return !isOperationError;
15
+ return true;
16
+ }).map(graphqlError_1.prettify).join("\n")) || "");
17
+ }
18
+ exports.compileErrors = compileErrors;