@frontmcp/sdk 1.9.0 → 1.9.1-rc.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 (40) hide show
  1. package/auth/flows/oauth.auth-ui.flow.d.ts +1 -1
  2. package/auth/flows/oauth.authorize.flow.d.ts +3 -3
  3. package/auth/flows/oauth.callback.flow.d.ts +2 -2
  4. package/auth/flows/oauth.connect.flow.d.ts +1 -1
  5. package/auth/flows/oauth.provider-callback.flow.d.ts +2 -2
  6. package/auth/flows/oauth.register.flow.d.ts +1 -1
  7. package/auth/flows/oauth.token.flow.d.ts +1 -1
  8. package/auth/flows/oauth.userinfo.flow.d.ts +1 -1
  9. package/auth/flows/well-known.jwks.flow.d.ts +3 -3
  10. package/auth/flows/well-known.oauth-authorization-server.flow.d.ts +2 -2
  11. package/auth/flows/well-known.prm.flow.d.ts +1 -1
  12. package/browser/index.cjs +77 -20
  13. package/browser/index.mjs +94 -38
  14. package/common/metadata/app.metadata.d.ts +2 -2
  15. package/common/metadata/front-mcp.metadata.d.ts +64 -64
  16. package/common/metadata/front-mcp.metadata.d.ts.map +1 -1
  17. package/common/metadata/output-policy.d.ts +1 -1
  18. package/common/metadata/tool.metadata.d.ts +1 -1
  19. package/common/schemas/http-output.schema.d.ts +24 -24
  20. package/common/types/options/skills-http/schema.d.ts +8 -8
  21. package/errors/index.d.ts +1 -1
  22. package/errors/index.d.ts.map +1 -1
  23. package/errors/registry.errors.d.ts +7 -0
  24. package/errors/registry.errors.d.ts.map +1 -1
  25. package/esm/index.mjs +94 -38
  26. package/front-mcp/static-startup.check.d.ts.map +1 -1
  27. package/index.d.ts +4 -4
  28. package/index.js +77 -20
  29. package/package.json +11 -11
  30. package/scope/scope.instance.d.ts.map +1 -1
  31. package/scope/server-entries.helper.d.ts +8 -0
  32. package/scope/server-entries.helper.d.ts.map +1 -0
  33. package/skill/cache/skill-http-cache.holder.d.ts.map +1 -1
  34. package/skill/flows/http/llm-full-txt.flow.d.ts +1 -1
  35. package/skill/flows/http/llm-txt.flow.d.ts +1 -1
  36. package/skill/flows/http/skills-api.flow.d.ts +1 -1
  37. package/tool/flows/call-tool.flow.d.ts.map +1 -1
  38. package/transport/flows/handle.streamable-http.flow.d.ts +1 -1
  39. package/utils/lineage.utils.d.ts +7 -0
  40. package/utils/lineage.utils.d.ts.map +1 -1
package/browser/index.mjs CHANGED
@@ -5423,7 +5423,7 @@ var init_normalization_errors = __esm({
5423
5423
  });
5424
5424
 
5425
5425
  // libs/sdk/src/errors/registry.errors.ts
5426
- var RegistryDefinitionNotFoundError, RegistryGraphEntryNotFoundError, RegistryDependencyNotRegisteredError, InvalidRegistryKindError, NameDisambiguationError, EntryValidationError, ToolNameConflictError, FlowNotRegisteredError, UnsupportedHookOwnerKindError;
5426
+ var RegistryDefinitionNotFoundError, RegistryGraphEntryNotFoundError, RegistryDependencyNotRegisteredError, InvalidRegistryKindError, NameDisambiguationError, EntryValidationError, ToolNameConflictError, ReservedAppIdError, FlowNotRegisteredError, UnsupportedHookOwnerKindError;
5427
5427
  var init_registry_errors = __esm({
5428
5428
  "libs/sdk/src/errors/registry.errors.ts"() {
5429
5429
  "use strict";
@@ -5466,6 +5466,14 @@ var init_registry_errors = __esm({
5466
5466
  super(`A tool named "${toolName}" is already registered`, "TOOL_NAME_CONFLICT");
5467
5467
  }
5468
5468
  };
5469
+ ReservedAppIdError = class extends InternalMcpError {
5470
+ constructor(appId) {
5471
+ super(
5472
+ `App id "${appId}" is reserved while @FrontMcp declares tools or resources: a server-level entry named like an app's is listed as "${appId}:<name>". Give the app another id.`,
5473
+ "RESERVED_APP_ID"
5474
+ );
5475
+ }
5476
+ };
5469
5477
  FlowNotRegisteredError = class extends InternalMcpError {
5470
5478
  constructor(flowName) {
5471
5479
  super(`Flow "${flowName}" is not registered`, "FLOW_NOT_REGISTERED");
@@ -6115,6 +6123,7 @@ __export(errors_exports, {
6115
6123
  RemoteUnsupportedTransportError: () => RemoteUnsupportedTransportError,
6116
6124
  RequestContextNotAvailableError: () => RequestContextNotAvailableError,
6117
6125
  RequiredConfigUndefinedError: () => RequiredConfigUndefinedError,
6126
+ ReservedAppIdError: () => ReservedAppIdError,
6118
6127
  ResourceNotFoundError: () => ResourceNotFoundError,
6119
6128
  ResourceReadError: () => ResourceReadError,
6120
6129
  SamplingNotAvailableError: () => SamplingNotAvailableError,
@@ -13944,7 +13953,19 @@ var init_flow_context_providers = __esm({
13944
13953
  }
13945
13954
  });
13946
13955
 
13956
+ // libs/sdk/src/front-mcp/front-mcp.tokens.ts
13957
+ var FrontMcpConfig;
13958
+ var init_front_mcp_tokens2 = __esm({
13959
+ "libs/sdk/src/front-mcp/front-mcp.tokens.ts"() {
13960
+ "use strict";
13961
+ FrontMcpConfig = /* @__PURE__ */ Symbol("FrontMcpConfig");
13962
+ }
13963
+ });
13964
+
13947
13965
  // libs/sdk/src/utils/lineage.utils.ts
13966
+ function isServerEntryOwner(owner) {
13967
+ return owner?.kind === serverEntryOwner.kind && owner.id === serverEntryOwner.id && owner.ref === serverEntryOwner.ref;
13968
+ }
13948
13969
  function ownerKeyOf(lineage) {
13949
13970
  return lineage.map((o) => `${o.kind}:${o.id}`).join("/");
13950
13971
  }
@@ -13959,10 +13980,12 @@ function appOwnerIdOf(lineage, owner) {
13959
13980
  const owners2 = owner ? [...lineage, owner] : lineage;
13960
13981
  return owners2.find((candidate) => candidate.kind === "app")?.id;
13961
13982
  }
13962
- var EntryLineageIndex;
13983
+ var serverEntryOwner, EntryLineageIndex;
13963
13984
  var init_lineage_utils = __esm({
13964
13985
  "libs/sdk/src/utils/lineage.utils.ts"() {
13965
13986
  "use strict";
13987
+ init_front_mcp_tokens2();
13988
+ serverEntryOwner = { kind: "scope", id: "server", ref: FrontMcpConfig };
13966
13989
  EntryLineageIndex = class {
13967
13990
  lineages = /* @__PURE__ */ new Map();
13968
13991
  /** Replace the index with these rows; an entry held by several rows keeps the first row's lineage. */
@@ -14411,9 +14434,9 @@ var init_call_tool_flow = __esm({
14411
14434
  "checkToolAuthorization: incrementalAuth enabled but the verified token carries no authorized_apps claim \u2014 failing closed"
14412
14435
  );
14413
14436
  }
14414
- const appId = tool?.owner?.id;
14437
+ const appId = isServerEntryOwner(tool?.owner) ? void 0 : tool?.owner?.id;
14415
14438
  if (!appId) {
14416
- this.logger.verbose("checkToolAuthorization:skip (no owner)");
14439
+ this.logger.verbose("checkToolAuthorization:skip (no app owner)");
14417
14440
  return;
14418
14441
  }
14419
14442
  const isAppAuthorized = (claimAuthorizedApps?.has(appId) ?? false) || (legacyAuthorization?.authorizedAppIds?.includes(appId) ?? false) || appId in (legacyAuthorization?.authorizedApps || {});
@@ -16523,15 +16546,6 @@ var init_instance_file_logger = __esm({
16523
16546
  }
16524
16547
  });
16525
16548
 
16526
- // libs/sdk/src/front-mcp/front-mcp.tokens.ts
16527
- var FrontMcpConfig;
16528
- var init_front_mcp_tokens2 = __esm({
16529
- "libs/sdk/src/front-mcp/front-mcp.tokens.ts"() {
16530
- "use strict";
16531
- FrontMcpConfig = /* @__PURE__ */ Symbol("FrontMcpConfig");
16532
- }
16533
- });
16534
-
16535
16549
  // libs/sdk/src/regsitry/registry.base.ts
16536
16550
  var RegistryAbstract;
16537
16551
  var init_registry_base = __esm({
@@ -53967,7 +53981,7 @@ var init_skill_http_cache = __esm({
53967
53981
  });
53968
53982
 
53969
53983
  // libs/sdk/src/skill/cache/skill-http-cache.factory.ts
53970
- import { attachRedisErrorListener as attachRedisErrorListener3 } from "@frontmcp/utils";
53984
+ import { attachRedisErrorListener as attachRedisErrorListener3, getEnv as getEnv11, StorageConfigError } from "@frontmcp/utils";
53971
53985
  function hasRedisProvider(redis) {
53972
53986
  if (!redis?.provider) return false;
53973
53987
  const provider = redis.provider;
@@ -53995,9 +54009,15 @@ async function createSkillHttpCache(options = {}) {
53995
54009
  async function createRedisCache(redis, keyPrefix, ttlMs, logger) {
53996
54010
  const provider = redis.provider;
53997
54011
  if (provider === "vercel-kv" || provider === "@vercel/kv") {
53998
- const { kv } = __require("@vercel/kv");
54012
+ const url = getEnv11("KV_REST_API_URL");
54013
+ const token = getEnv11("KV_REST_API_TOKEN");
54014
+ if (!url || !token) {
54015
+ throw new StorageConfigError("vercel-kv", "KV_REST_API_URL and KV_REST_API_TOKEN must be set.");
54016
+ }
54017
+ const { createClient } = __require("@vercel/kv");
54018
+ const client2 = createClient({ url, token, automaticDeserialization: false });
53999
54019
  return new RedisSkillHttpCache({
54000
- getClient: async () => kv,
54020
+ getClient: async () => client2,
54001
54021
  keyPrefix,
54002
54022
  ttlMs
54003
54023
  });
@@ -54043,7 +54063,7 @@ async function getSkillHttpCache(scope) {
54043
54063
  if (pending) {
54044
54064
  return pending;
54045
54065
  }
54046
- const creationPromise = createCacheForScope(scopeId, cacheConfig);
54066
+ const creationPromise = createCacheForScope(scopeId, cacheConfig, scope.logger);
54047
54067
  pendingCreation.set(scopeId, creationPromise);
54048
54068
  try {
54049
54069
  const cache2 = await creationPromise;
@@ -54053,12 +54073,13 @@ async function getSkillHttpCache(scope) {
54053
54073
  pendingCreation.delete(scopeId);
54054
54074
  }
54055
54075
  }
54056
- async function createCacheForScope(scopeId, cacheConfig) {
54076
+ async function createCacheForScope(scopeId, cacheConfig, logger) {
54057
54077
  try {
54058
54078
  const { cache: cache2 } = await createSkillHttpCache({
54059
54079
  redis: cacheConfig.redis,
54060
54080
  ttlMs: cacheConfig.ttlMs,
54061
- keyPrefix: cacheConfig.keyPrefix ?? `frontmcp:skills:${scopeId}:cache:`
54081
+ keyPrefix: cacheConfig.keyPrefix ?? `frontmcp:skills:${scopeId}:cache:`,
54082
+ logger
54062
54083
  });
54063
54084
  return cache2;
54064
54085
  } catch (error) {
@@ -59712,7 +59733,7 @@ var init_handle_mcp_20260728_flow = __esm({
59712
59733
  });
59713
59734
 
59714
59735
  // libs/sdk/src/ha/ha-headers.ts
59715
- import { buildSetCookie, getEnv as getEnv11, getMachineId as getMachineId3, getRuntimeContext as getRuntimeContext13 } from "@frontmcp/utils";
59736
+ import { buildSetCookie, getEnv as getEnv12, getMachineId as getMachineId3, getRuntimeContext as getRuntimeContext13 } from "@frontmcp/utils";
59716
59737
  function machineIdHeader() {
59717
59738
  if (getRuntimeContext13().deployment !== "distributed") return void 0;
59718
59739
  return [DEFAULT_FRONTMCP_MACHINE_ID_HEADER, getMachineId3()];
@@ -59724,9 +59745,9 @@ function applyMachineIdHeader(response) {
59724
59745
  return true;
59725
59746
  }
59726
59747
  function affinityCookieOptions() {
59727
- const name44 = getEnv11("FRONTMCP_AFFINITY_COOKIE")?.trim() || DEFAULT_FRONTMCP_NODE_COOKIE;
59728
- const domain = getEnv11("FRONTMCP_AFFINITY_COOKIE_DOMAIN")?.trim() || void 0;
59729
- const rawSameSite = getEnv11("FRONTMCP_AFFINITY_COOKIE_SAMESITE")?.trim().toLowerCase();
59748
+ const name44 = getEnv12("FRONTMCP_AFFINITY_COOKIE")?.trim() || DEFAULT_FRONTMCP_NODE_COOKIE;
59749
+ const domain = getEnv12("FRONTMCP_AFFINITY_COOKIE_DOMAIN")?.trim() || void 0;
59750
+ const rawSameSite = getEnv12("FRONTMCP_AFFINITY_COOKIE_SAMESITE")?.trim().toLowerCase();
59730
59751
  const sameSite = rawSameSite === "strict" ? "Strict" : rawSameSite === "lax" ? "Lax" : rawSameSite === "none" ? "None" : void 0;
59731
59752
  return { name: name44, ...domain ? { domain } : {}, ...sameSite ? { sameSite } : {} };
59732
59753
  }
@@ -64247,6 +64268,29 @@ var init_http_request_flow = __esm({
64247
64268
  }
64248
64269
  });
64249
64270
 
64271
+ // libs/sdk/src/scope/server-entries.helper.ts
64272
+ async function registerServerEntries(providers, entries, appIds) {
64273
+ if (!entries.tools?.length && !entries.resources?.length) return;
64274
+ if (appIds.includes(serverEntryOwner.id)) throw new ReservedAppIdError(serverEntryOwner.id);
64275
+ const registries = [];
64276
+ if (entries.tools?.length) {
64277
+ registries.push(new ToolRegistry(providers, entries.tools, serverEntryOwner, { adopt: false }).ready);
64278
+ }
64279
+ if (entries.resources?.length) {
64280
+ registries.push(new ResourceRegistry(providers, entries.resources, serverEntryOwner, { adopt: false }).ready);
64281
+ }
64282
+ await Promise.all(registries);
64283
+ }
64284
+ var init_server_entries_helper = __esm({
64285
+ "libs/sdk/src/scope/server-entries.helper.ts"() {
64286
+ "use strict";
64287
+ init_errors();
64288
+ init_resource_registry();
64289
+ init_tool_registry();
64290
+ init_lineage_utils();
64291
+ }
64292
+ });
64293
+
64250
64294
  // libs/sdk/src/scope/scope.instance.ts
64251
64295
  import "reflect-metadata";
64252
64296
  import {
@@ -64313,6 +64357,7 @@ var init_scope_instance = __esm({
64313
64357
  init_http_ip_filter_flow();
64314
64358
  init_http_request_flow();
64315
64359
  init_optional_dependency_util();
64360
+ init_server_entries_helper();
64316
64361
  SCOPE_NON_DISPATCHABLE_FLOWS = /* @__PURE__ */ new Set(["http:request"]);
64317
64362
  Scope = class _Scope extends ScopeEntry {
64318
64363
  id;
@@ -64744,6 +64789,11 @@ var init_scope_instance = __esm({
64744
64789
  await scopeAdapters.ready;
64745
64790
  this.onDispose(() => scopeAdapters.dispose());
64746
64791
  }
64792
+ await registerServerEntries(
64793
+ this.scopeProviders,
64794
+ this.metadata,
64795
+ this.scopeApps.getApps().map((app) => app.id)
64796
+ );
64747
64797
  this.initAuthoritiesFromConfig();
64748
64798
  this.scopeTools = new ToolRegistry(this.scopeProviders, [], scopeRef);
64749
64799
  this.scopeResources = new ResourceRegistry(this.scopeProviders, [], scopeRef);
@@ -66927,9 +66977,9 @@ var init_ipc_server_transport = __esm({
66927
66977
  });
66928
66978
 
66929
66979
  // libs/sdk/src/server/middleware/cors-env.ts
66930
- import { getEnv as getEnv12 } from "@frontmcp/utils";
66980
+ import { getEnv as getEnv13 } from "@frontmcp/utils";
66931
66981
  function readCorsFromEnv() {
66932
- const rawOrigins = getEnv12("FRONTMCP_CORS_ORIGINS");
66982
+ const rawOrigins = getEnv13("FRONTMCP_CORS_ORIGINS");
66933
66983
  if (!rawOrigins) return void 0;
66934
66984
  let origins;
66935
66985
  try {
@@ -66940,9 +66990,9 @@ function readCorsFromEnv() {
66940
66990
  const list = (Array.isArray(origins) ? origins : [origins]).filter((origin) => typeof origin === "string").map((origin) => origin.trim()).filter((origin) => origin.length > 0);
66941
66991
  if (list.length === 0) return void 0;
66942
66992
  const cors = { origin: list.includes("*") ? true : list };
66943
- const credentials = getEnv12("FRONTMCP_CORS_CREDENTIALS");
66993
+ const credentials = getEnv13("FRONTMCP_CORS_CREDENTIALS");
66944
66994
  if (credentials !== void 0) cors.credentials = credentials === "true" || credentials === "1";
66945
- const maxAge = Number(getEnv12("FRONTMCP_CORS_MAX_AGE"));
66995
+ const maxAge = Number(getEnv13("FRONTMCP_CORS_MAX_AGE"));
66946
66996
  if (Number.isFinite(maxAge) && maxAge > 0) cors.maxAge = maxAge;
66947
66997
  return cors;
66948
66998
  }
@@ -66956,10 +67006,10 @@ var init_cors_env = __esm({
66956
67006
  });
66957
67007
 
66958
67008
  // libs/sdk/src/server/middleware/csp.middleware.ts
66959
- import { getEnv as getEnv13, getEnvFlag as getEnvFlag2 } from "@frontmcp/utils";
67009
+ import { getEnv as getEnv14, getEnvFlag as getEnvFlag2 } from "@frontmcp/utils";
66960
67010
  function readCspFromEnv() {
66961
67011
  if (!getEnvFlag2("FRONTMCP_CSP_ENABLED")) return void 0;
66962
- const rawDirectives = getEnv13("FRONTMCP_CSP_DIRECTIVES") ?? "";
67012
+ const rawDirectives = getEnv14("FRONTMCP_CSP_DIRECTIVES") ?? "";
66963
67013
  const directives = {};
66964
67014
  for (const part of rawDirectives.split(";")) {
66965
67015
  const trimmed = part.trim();
@@ -66974,7 +67024,7 @@ function readCspFromEnv() {
66974
67024
  return {
66975
67025
  enabled: true,
66976
67026
  directives,
66977
- reportUri: getEnv13("FRONTMCP_CSP_REPORT_URI"),
67027
+ reportUri: getEnv14("FRONTMCP_CSP_REPORT_URI"),
66978
67028
  reportOnly: getEnvFlag2("FRONTMCP_CSP_REPORT_ONLY")
66979
67029
  };
66980
67030
  }
@@ -67000,12 +67050,12 @@ function readSecurityHeadersFromEnv() {
67000
67050
  };
67001
67051
  }
67002
67052
  function readHeaderEnv(name44, fallback) {
67003
- const value = getEnv13(name44);
67053
+ const value = getEnv14(name44);
67004
67054
  if (value === void 0 || value === "") return fallback;
67005
67055
  return ["off", "false", "none"].includes(value.trim().toLowerCase()) ? void 0 : value;
67006
67056
  }
67007
67057
  function readCustomHeadersFromEnv() {
67008
- const raw = getEnv13("FRONTMCP_HEADERS_CUSTOM");
67058
+ const raw = getEnv14("FRONTMCP_HEADERS_CUSTOM");
67009
67059
  if (!raw) return void 0;
67010
67060
  try {
67011
67061
  const parsed = JSON.parse(raw);
@@ -67948,7 +67998,7 @@ var init_server_instance = __esm({
67948
67998
 
67949
67999
  // libs/sdk/src/front-mcp/front-mcp.providers.ts
67950
68000
  import { ProviderScope as ProviderScope9 } from "@frontmcp/di";
67951
- import { getEnv as getEnv14 } from "@frontmcp/utils";
68001
+ import { getEnv as getEnv15 } from "@frontmcp/utils";
67952
68002
  function createMcpGlobalProviders(metadata) {
67953
68003
  const isCli = !!metadata["__cliMode"];
67954
68004
  const isNoServe = metadata.serve === false;
@@ -67972,7 +68022,7 @@ var init_front_mcp_providers = __esm({
67972
68022
  useValue: metadata
67973
68023
  })
67974
68024
  };
67975
- defaultHttpOptions = () => ({ port: Number(getEnv14("PORT")) || 3e3, entryPath: "/mcp", bodyLimit: "4mb" });
68025
+ defaultHttpOptions = () => ({ port: Number(getEnv15("PORT")) || 3e3, entryPath: "/mcp", bodyLimit: "4mb" });
67976
68026
  frontMcpServer = AsyncProvider({
67977
68027
  name: "frontmcp:server",
67978
68028
  scope: ProviderScope9.GLOBAL,
@@ -68065,9 +68115,10 @@ function collectStaticEntries(config) {
68065
68115
  };
68066
68116
  const visitEntries = (owner, app) => {
68067
68117
  const reach = app ? { app } : "every-plugin";
68118
+ const toolReach = app ? { app } : "every-app";
68068
68119
  for (const item of owner.tools ?? []) {
68069
68120
  const record = tryNormalize(() => normalizeTool(item));
68070
- if (record) add(`Tool "${record.metadata.id || record.metadata.name}"`, record.metadata, reach);
68121
+ if (record) add(`Tool "${record.metadata.id || record.metadata.name}"`, record.metadata, toolReach);
68071
68122
  }
68072
68123
  for (const item of owner.resources ?? []) {
68073
68124
  if (tryNormalize(() => isResourceTemplate(item))) {
@@ -68100,7 +68151,10 @@ function collectStaticEntries(config) {
68100
68151
  visitPlugins(owner.plugins, app);
68101
68152
  };
68102
68153
  const server = config;
68103
- visitEntries({ skills: server.skills, plugins: server.plugins }, void 0);
68154
+ visitEntries(
68155
+ { tools: server.tools, resources: server.resources, skills: server.skills, plugins: server.plugins },
68156
+ void 0
68157
+ );
68104
68158
  for (const app of server.apps ?? []) {
68105
68159
  const record = tryNormalize(() => normalizeApp(app));
68106
68160
  if (record?.kind === "LOCAL_CLASS" /* LOCAL_CLASS */) visitEntries(record.metadata, record);
@@ -68108,6 +68162,7 @@ function collectStaticEntries(config) {
68108
68162
  const everyPluginKeys = /* @__PURE__ */ new Set([...everyAppKeys, ...[...ownAppKeys.values()].flatMap((keys) => [...keys])]);
68109
68163
  const keysReaching = (reach) => {
68110
68164
  if (reach === "every-plugin") return everyPluginKeys;
68165
+ if (reach === "every-app") return everyAppKeys;
68111
68166
  if ("agentKeys" in reach) return reach.agentKeys;
68112
68167
  return /* @__PURE__ */ new Set([...everyAppKeys, ...ownAppKeys.get(reach.app) ?? []]);
68113
68168
  };
@@ -68156,7 +68211,7 @@ var front_mcp_exports = {};
68156
68211
  __export(front_mcp_exports, {
68157
68212
  FrontMcpInstance: () => FrontMcpInstance
68158
68213
  });
68159
- import { fileExists as fileExists6, getEnv as getEnv15, isEdgeRuntime as isEdgeRuntime2, randomUUID as randomUUID28, unlink } from "@frontmcp/utils";
68214
+ import { fileExists as fileExists6, getEnv as getEnv16, isEdgeRuntime as isEdgeRuntime2, randomUUID as randomUUID28, unlink } from "@frontmcp/utils";
68160
68215
  function resolveConfigInput(optionsOrClass) {
68161
68216
  if (typeof optionsOrClass === "function") {
68162
68217
  const stored = getDecoratorConfig(optionsOrClass);
@@ -68224,7 +68279,7 @@ var init_front_mcp = __esm({
68224
68279
  for (const scope of this.getScopes()) {
68225
68280
  await scope.emitServerStarted();
68226
68281
  }
68227
- if (getEnv15("FRONTMCP_DEV_BOOTSTRAP_SENTINEL") === "1") {
68282
+ if (getEnv16("FRONTMCP_DEV_BOOTSTRAP_SENTINEL") === "1") {
68228
68283
  process.stderr.write(`__FRONTMCP_BOOTSTRAP_COMPLETE__ ${JSON.stringify(this.devListenerInfo(server))}
68229
68284
  `);
68230
68285
  }
@@ -71496,6 +71551,7 @@ export {
71496
71551
  RemoveWorkflowTool,
71497
71552
  RequestContextNotAvailableError,
71498
71553
  RequiredConfigUndefinedError,
71554
+ ReservedAppIdError,
71499
71555
  Resource,
71500
71556
  ResourceContext,
71501
71557
  ResourceEntry,
@@ -644,9 +644,9 @@ export declare const frontMcpLocalAppMetadataSchema: import("@frontmcp/lazy-zod"
644
644
  allowNonFinite: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>;
645
645
  schemaMode: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
646
646
  description: "description";
647
- none: "none";
648
647
  definition: "definition";
649
648
  both: "both";
649
+ none: "none";
650
650
  }>>;
651
651
  schemaDescriptionFormat: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{
652
652
  summary: "summary";
@@ -899,8 +899,8 @@ export declare const frontMcpRemoteAppMetadataSchema: import("@frontmcp/lazy-zod
899
899
  mode: import("@frontmcp/lazy-zod").ZodLiteral<"static">;
900
900
  credentials: import("@frontmcp/lazy-zod").ZodObject<{
901
901
  type: import("@frontmcp/lazy-zod").ZodEnum<{
902
- basic: "basic";
903
902
  bearer: "bearer";
903
+ basic: "basic";
904
904
  apiKey: "apiKey";
905
905
  }>;
906
906
  value: import("@frontmcp/lazy-zod").ZodString;