@frontmcp/sdk 0.5.1 → 0.6.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.
Files changed (204) hide show
  1. package/package.json +7 -18
  2. package/src/adapter/adapter.instance.js +5 -0
  3. package/src/adapter/adapter.instance.js.map +1 -1
  4. package/src/auth/authorization/authorization.class.d.ts +1 -4
  5. package/src/auth/authorization/authorization.class.js +6 -13
  6. package/src/auth/authorization/authorization.class.js.map +1 -1
  7. package/src/auth/flows/session.verify.flow.d.ts +1 -0
  8. package/src/auth/flows/session.verify.flow.js +11 -1
  9. package/src/auth/flows/session.verify.flow.js.map +1 -1
  10. package/src/auth/flows/well-known.jwks.flow.js +2 -2
  11. package/src/auth/flows/well-known.jwks.flow.js.map +1 -1
  12. package/src/auth/jwks/dev-key-persistence.d.ts +63 -0
  13. package/src/auth/jwks/dev-key-persistence.js +219 -0
  14. package/src/auth/jwks/dev-key-persistence.js.map +1 -0
  15. package/src/auth/jwks/index.d.ts +1 -0
  16. package/src/auth/jwks/index.js +1 -0
  17. package/src/auth/jwks/index.js.map +1 -1
  18. package/src/auth/jwks/jwks.service.d.ts +7 -4
  19. package/src/auth/jwks/jwks.service.js +81 -12
  20. package/src/auth/jwks/jwks.service.js.map +1 -1
  21. package/src/auth/jwks/jwks.types.d.ts +7 -0
  22. package/src/auth/jwks/jwks.types.js.map +1 -1
  23. package/src/auth/machine-id.d.ts +5 -0
  24. package/src/auth/machine-id.js +32 -0
  25. package/src/auth/machine-id.js.map +1 -0
  26. package/src/auth/session/index.d.ts +1 -0
  27. package/src/auth/session/index.js +3 -1
  28. package/src/auth/session/index.js.map +1 -1
  29. package/src/auth/session/record/session.base.js +5 -3
  30. package/src/auth/session/record/session.base.js.map +1 -1
  31. package/src/auth/session/record/session.stateless.d.ts +2 -2
  32. package/src/auth/session/record/session.stateless.js +5 -3
  33. package/src/auth/session/record/session.stateless.js.map +1 -1
  34. package/src/auth/session/redis-session.store.d.ts +64 -0
  35. package/src/auth/session/redis-session.store.js +204 -0
  36. package/src/auth/session/redis-session.store.js.map +1 -0
  37. package/src/auth/session/session.service.d.ts +0 -2
  38. package/src/auth/session/session.service.js +1 -7
  39. package/src/auth/session/session.service.js.map +1 -1
  40. package/src/auth/session/transport-session.manager.js +3 -5
  41. package/src/auth/session/transport-session.manager.js.map +1 -1
  42. package/src/auth/session/transport-session.types.d.ts +4 -0
  43. package/src/auth/session/transport-session.types.js +4 -3
  44. package/src/auth/session/transport-session.types.js.map +1 -1
  45. package/src/auth/session/utils/session-id.utils.d.ts +12 -1
  46. package/src/auth/session/utils/session-id.utils.js +48 -9
  47. package/src/auth/session/utils/session-id.utils.js.map +1 -1
  48. package/src/auth/ui/base-layout.d.ts +0 -8
  49. package/src/auth/ui/base-layout.js +1 -14
  50. package/src/auth/ui/base-layout.js.map +1 -1
  51. package/src/auth/ui/index.d.ts +3 -4
  52. package/src/auth/ui/index.js +10 -11
  53. package/src/auth/ui/index.js.map +1 -1
  54. package/src/auth/ui/{htmx-templates.d.ts → templates.d.ts} +5 -6
  55. package/src/auth/ui/{htmx-templates.js → templates.js} +8 -15
  56. package/src/auth/ui/templates.js.map +1 -0
  57. package/src/common/decorators/decorator-utils.js.map +1 -1
  58. package/src/common/decorators/front-mcp.decorator.js +28 -2
  59. package/src/common/decorators/front-mcp.decorator.js.map +1 -1
  60. package/src/common/index.d.ts +0 -1
  61. package/src/common/index.js +0 -1
  62. package/src/common/index.js.map +1 -1
  63. package/src/common/interfaces/adapter.interface.d.ts +6 -0
  64. package/src/common/interfaces/adapter.interface.js.map +1 -1
  65. package/src/common/interfaces/execution-context.interface.d.ts +52 -3
  66. package/src/common/interfaces/execution-context.interface.js +88 -3
  67. package/src/common/interfaces/execution-context.interface.js.map +1 -1
  68. package/src/common/interfaces/flow.interface.d.ts +13 -0
  69. package/src/common/interfaces/flow.interface.js +24 -0
  70. package/src/common/interfaces/flow.interface.js.map +1 -1
  71. package/src/common/interfaces/server.interface.d.ts +9 -0
  72. package/src/common/interfaces/server.interface.js.map +1 -1
  73. package/src/common/metadata/app.metadata.d.ts +108 -0
  74. package/src/common/metadata/front-mcp.metadata.d.ts +659 -2
  75. package/src/common/metadata/front-mcp.metadata.js +3 -1
  76. package/src/common/metadata/front-mcp.metadata.js.map +1 -1
  77. package/src/common/metadata/provider.metadata.d.ts +14 -0
  78. package/src/common/metadata/provider.metadata.js +18 -2
  79. package/src/common/metadata/provider.metadata.js.map +1 -1
  80. package/src/common/metadata/tool.metadata.d.ts +1 -1
  81. package/src/common/metadata/tool.metadata.js.map +1 -1
  82. package/src/common/migrate/auth-transport.migrate.d.ts +62 -0
  83. package/src/common/migrate/auth-transport.migrate.js +140 -0
  84. package/src/common/migrate/auth-transport.migrate.js.map +1 -0
  85. package/src/common/migrate/index.d.ts +1 -0
  86. package/src/common/migrate/index.js +6 -0
  87. package/src/common/migrate/index.js.map +1 -0
  88. package/src/common/schemas/index.d.ts +1 -0
  89. package/src/common/schemas/index.js +1 -0
  90. package/src/common/schemas/index.js.map +1 -1
  91. package/src/common/schemas/session-header.schema.d.ts +16 -0
  92. package/src/common/schemas/session-header.schema.js +42 -0
  93. package/src/common/schemas/session-header.schema.js.map +1 -0
  94. package/src/common/tokens/front-mcp.tokens.js +3 -1
  95. package/src/common/tokens/front-mcp.tokens.js.map +1 -1
  96. package/src/common/types/options/auth.options.d.ts +233 -3
  97. package/src/common/types/options/auth.options.js +29 -40
  98. package/src/common/types/options/auth.options.js.map +1 -1
  99. package/src/common/types/options/index.d.ts +2 -0
  100. package/src/common/types/options/index.js +2 -0
  101. package/src/common/types/options/index.js.map +1 -1
  102. package/src/common/types/options/redis.options.d.ts +22 -0
  103. package/src/common/types/options/redis.options.js +45 -0
  104. package/src/common/types/options/redis.options.js.map +1 -0
  105. package/src/common/types/options/transport.options.d.ts +84 -0
  106. package/src/common/types/options/transport.options.js +121 -0
  107. package/src/common/types/options/transport.options.js.map +1 -0
  108. package/src/context/frontmcp-context-storage.d.ts +94 -0
  109. package/src/context/frontmcp-context-storage.js +183 -0
  110. package/src/context/frontmcp-context-storage.js.map +1 -0
  111. package/src/context/frontmcp-context.d.ts +269 -0
  112. package/src/context/frontmcp-context.js +360 -0
  113. package/src/context/frontmcp-context.js.map +1 -0
  114. package/src/context/frontmcp-context.provider.d.ts +43 -0
  115. package/src/context/frontmcp-context.provider.js +61 -0
  116. package/src/context/frontmcp-context.provider.js.map +1 -0
  117. package/src/context/index.d.ts +34 -0
  118. package/src/context/index.js +64 -0
  119. package/src/context/index.js.map +1 -0
  120. package/src/context/request-context-storage.d.ts +89 -0
  121. package/src/context/request-context-storage.js +183 -0
  122. package/src/context/request-context-storage.js.map +1 -0
  123. package/src/context/request-context.d.ts +184 -0
  124. package/src/context/request-context.js +209 -0
  125. package/src/context/request-context.js.map +1 -0
  126. package/src/context/request-context.provider.d.ts +37 -0
  127. package/src/context/request-context.provider.js +51 -0
  128. package/src/context/request-context.provider.js.map +1 -0
  129. package/src/context/session-key.provider.d.ts +45 -0
  130. package/src/context/session-key.provider.js +65 -0
  131. package/src/context/session-key.provider.js.map +1 -0
  132. package/src/context/trace-context.d.ts +43 -0
  133. package/src/context/trace-context.js +142 -0
  134. package/src/context/trace-context.js.map +1 -0
  135. package/src/errors/index.d.ts +1 -1
  136. package/src/errors/index.js +3 -1
  137. package/src/errors/index.js.map +1 -1
  138. package/src/errors/mcp.error.d.ts +7 -0
  139. package/src/errors/mcp.error.js +11 -1
  140. package/src/errors/mcp.error.js.map +1 -1
  141. package/src/flows/flow.instance.d.ts +16 -0
  142. package/src/flows/flow.instance.js +166 -80
  143. package/src/flows/flow.instance.js.map +1 -1
  144. package/src/flows/flow.registry.d.ts +5 -0
  145. package/src/flows/flow.registry.js +45 -3
  146. package/src/flows/flow.registry.js.map +1 -1
  147. package/src/front-mcp/front-mcp.d.ts +12 -0
  148. package/src/front-mcp/front-mcp.js +22 -3
  149. package/src/front-mcp/front-mcp.js.map +1 -1
  150. package/src/front-mcp/front-mcp.providers.d.ts +266 -1
  151. package/src/front-mcp/front-mcp.providers.js +2 -1
  152. package/src/front-mcp/front-mcp.providers.js.map +1 -1
  153. package/src/front-mcp/serverless-handler.d.ts +28 -0
  154. package/src/front-mcp/serverless-handler.js +61 -0
  155. package/src/front-mcp/serverless-handler.js.map +1 -0
  156. package/src/hooks/hooks.utils.d.ts +1 -1
  157. package/src/hooks/hooks.utils.js +10 -3
  158. package/src/hooks/hooks.utils.js.map +1 -1
  159. package/src/index.d.ts +8 -4
  160. package/src/index.js +20 -1
  161. package/src/index.js.map +1 -1
  162. package/src/logger/instances/instance.logger.js +0 -1
  163. package/src/logger/instances/instance.logger.js.map +1 -1
  164. package/src/notification/notification.service.js +5 -1
  165. package/src/notification/notification.service.js.map +1 -1
  166. package/src/provider/provider.registry.d.ts +97 -5
  167. package/src/provider/provider.registry.js +306 -9
  168. package/src/provider/provider.registry.js.map +1 -1
  169. package/src/provider/provider.types.d.ts +21 -3
  170. package/src/provider/provider.types.js.map +1 -1
  171. package/src/scope/flows/http.request.flow.js +43 -7
  172. package/src/scope/flows/http.request.flow.js.map +1 -1
  173. package/src/scope/scope.instance.js +12 -5
  174. package/src/scope/scope.instance.js.map +1 -1
  175. package/src/server/adapters/base.host.adapter.d.ts +9 -0
  176. package/src/server/adapters/base.host.adapter.js.map +1 -1
  177. package/src/server/adapters/express.host.adapter.d.ts +12 -0
  178. package/src/server/adapters/express.host.adapter.js +21 -1
  179. package/src/server/adapters/express.host.adapter.js.map +1 -1
  180. package/src/server/server.instance.d.ts +3 -0
  181. package/src/server/server.instance.js +14 -7
  182. package/src/server/server.instance.js.map +1 -1
  183. package/src/tool/flows/call-tool.flow.d.ts +21 -11
  184. package/src/tool/flows/call-tool.flow.js +240 -194
  185. package/src/tool/flows/call-tool.flow.js.map +1 -1
  186. package/src/tool/flows/tools-list.flow.d.ts +6 -10
  187. package/src/tool/flows/tools-list.flow.js +82 -31
  188. package/src/tool/flows/tools-list.flow.js.map +1 -1
  189. package/src/tool/tool.instance.d.ts +1 -4
  190. package/src/transport/adapters/transport.streamable-http.adapter.js +1 -0
  191. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  192. package/src/transport/flows/handle.sse.flow.js +9 -2
  193. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  194. package/src/transport/flows/handle.streamable-http.flow.js +63 -6
  195. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  196. package/src/transport/mcp-handlers/initialize-request.handler.js +12 -2
  197. package/src/transport/mcp-handlers/initialize-request.handler.js.map +1 -1
  198. package/src/transport/transport.registry.d.ts +68 -4
  199. package/src/transport/transport.registry.js +313 -11
  200. package/src/transport/transport.registry.js.map +1 -1
  201. package/src/auth/ui/htmx-templates.js.map +0 -1
  202. package/src/common/providers/session.provider.d.ts +0 -13
  203. package/src/common/providers/session.provider.js +0 -27
  204. package/src/common/providers/session.provider.js.map +0 -1
@@ -7,6 +7,7 @@ const token_utils_1 = require("../utils/token.utils");
7
7
  const metadata_utils_1 = require("../utils/metadata.utils");
8
8
  const regsitry_1 = require("../regsitry");
9
9
  const scope_1 = require("../scope");
10
+ const session_key_provider_1 = require("../context/session-key.provider");
10
11
  class ProviderRegistry extends regsitry_1.RegistryAbstract {
11
12
  parentProviders;
12
13
  /** used to track which registry provided which token */
@@ -16,6 +17,18 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
16
17
  // /** scoped instance stores by key */
17
18
  // private scoped = new Map<string, Map<Token, any>>();
18
19
  registries = new Map();
20
+ /** Session-scoped provider instance cache by sessionKey */
21
+ sessionStores = new Map();
22
+ /** Locks to prevent concurrent session builds (race condition prevention) */
23
+ sessionBuildLocks = new Map();
24
+ /** Maximum number of sessions to cache (LRU eviction) */
25
+ static MAX_SESSION_CACHE_SIZE = 10000;
26
+ /** Session cache TTL in milliseconds (1 hour) */
27
+ static SESSION_CACHE_TTL_MS = 3600000;
28
+ /** Cleanup interval in milliseconds (1 minute) */
29
+ static SESSION_CLEANUP_INTERVAL_MS = 60000;
30
+ /** Handle for the session cleanup interval */
31
+ sessionCleanupInterval = null;
19
32
  constructor(list, parentProviders) {
20
33
  super('ProviderRegistry', parentProviders, list, false);
21
34
  this.parentProviders = parentProviders;
@@ -141,6 +154,13 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
141
154
  throw new Error(`Failed constructing ${(0, token_utils_1.tokenName)(token)}: ${msg}`);
142
155
  }
143
156
  }
157
+ // Start background session cleanup after initialization
158
+ // This ensures expired sessions are periodically cleaned up (TTL enforcement)
159
+ // Only start for scope-level registries (those with parentProviders) since
160
+ // SESSION providers are stored in scope registries, not the global registry
161
+ if (this.parentProviders) {
162
+ this.startSessionCleanup();
163
+ }
144
164
  }
145
165
  /* -------------------- Views & session stores -------------------- */
146
166
  /** Return the live singleton map as a read-only view. No copying. */
@@ -153,8 +173,26 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
153
173
  invocationTokens(_token, rec) {
154
174
  return (0, provider_utils_1.providerInvocationTokens)(rec, (k, phase) => (0, token_utils_1.depsOfClass)(k, phase));
155
175
  }
176
+ /**
177
+ * Normalize deprecated scopes to their modern equivalents.
178
+ *
179
+ * - SESSION → CONTEXT (deprecated)
180
+ * - REQUEST → CONTEXT (deprecated)
181
+ *
182
+ * This enables backwards compatibility while unifying the scope model.
183
+ */
184
+ normalizeScope(scope) {
185
+ switch (scope) {
186
+ case common_1.ProviderScope.SESSION:
187
+ case common_1.ProviderScope.REQUEST:
188
+ return common_1.ProviderScope.CONTEXT;
189
+ default:
190
+ return scope;
191
+ }
192
+ }
156
193
  getProviderScope(rec) {
157
- return rec.metadata?.scope ?? common_1.ProviderScope.GLOBAL;
194
+ const rawScope = rec.metadata?.scope ?? common_1.ProviderScope.GLOBAL;
195
+ return this.normalizeScope(rawScope);
158
196
  }
159
197
  getScope() {
160
198
  return this.getActiveScope();
@@ -553,19 +591,278 @@ class ProviderRegistry extends regsitry_1.RegistryAbstract {
553
591
  getActiveServer() {
554
592
  return this.getWithParents(common_1.FrontMcpServer);
555
593
  }
594
+ /* -------------------- Session Cache Management -------------------- */
595
+ /**
596
+ * Clean up a specific session's provider cache.
597
+ * Call this when a session is terminated or expired.
598
+ *
599
+ * @param sessionKey - The session identifier to clean up
600
+ */
601
+ cleanupSession(sessionKey) {
602
+ this.sessionStores.delete(sessionKey);
603
+ // Resolve any waiters before deleting the lock to prevent hung promises
604
+ const lock = this.sessionBuildLocks.get(sessionKey);
605
+ if (lock) {
606
+ lock.resolve();
607
+ this.sessionBuildLocks.delete(sessionKey);
608
+ }
609
+ }
610
+ /**
611
+ * Clean up expired sessions from the cache.
612
+ * Sessions older than SESSION_CACHE_TTL_MS are removed.
613
+ *
614
+ * @returns Number of sessions cleaned up
615
+ */
616
+ cleanupExpiredSessions() {
617
+ const now = Date.now();
618
+ const cutoff = now - ProviderRegistry.SESSION_CACHE_TTL_MS;
619
+ let cleaned = 0;
620
+ for (const [key, entry] of this.sessionStores) {
621
+ if (entry.lastAccess < cutoff) {
622
+ this.sessionStores.delete(key);
623
+ // Resolve any waiters before deleting the lock to prevent hung promises
624
+ const lock = this.sessionBuildLocks.get(key);
625
+ if (lock) {
626
+ lock.resolve();
627
+ this.sessionBuildLocks.delete(key);
628
+ }
629
+ cleaned++;
630
+ }
631
+ }
632
+ return cleaned;
633
+ }
556
634
  /**
557
- * Build provider instance views for different scopes
558
- * NOTE: This is currently a stub implementation returning empty maps.
559
- * Actual view building logic is planned as part of the session management refactoring.
560
- * See the ProviderRegistryInterface TODO for fixing the session type.
635
+ * Start the background session cleanup timer.
636
+ * This periodically removes expired sessions from the cache.
561
637
  */
562
- async buildViews(session) {
638
+ startSessionCleanup() {
639
+ // Only start if not already running
640
+ if (this.sessionCleanupInterval) {
641
+ return;
642
+ }
643
+ this.sessionCleanupInterval = setInterval(() => {
644
+ const cleaned = this.cleanupExpiredSessions();
645
+ if (cleaned > 0) {
646
+ console.debug(`[ProviderRegistry] Cleaned up ${cleaned} expired sessions`);
647
+ }
648
+ }, ProviderRegistry.SESSION_CLEANUP_INTERVAL_MS);
649
+ // Allow the process to exit even if the interval is running
650
+ // This is important for graceful shutdown in serverless environments
651
+ if (this.sessionCleanupInterval.unref) {
652
+ this.sessionCleanupInterval.unref();
653
+ }
654
+ }
655
+ /**
656
+ * Stop the background session cleanup timer.
657
+ * Call this when shutting down the server gracefully.
658
+ */
659
+ stopSessionCleanup() {
660
+ if (this.sessionCleanupInterval) {
661
+ clearInterval(this.sessionCleanupInterval);
662
+ this.sessionCleanupInterval = null;
663
+ }
664
+ }
665
+ /**
666
+ * Dispose of the registry, cleaning up all resources.
667
+ * Call this when the registry/scope is being destroyed to prevent:
668
+ * - Memory leaks from retained interval handles
669
+ * - Orphaned session cleanup timers
670
+ *
671
+ * @example
672
+ * ```typescript
673
+ * // In scope teardown
674
+ * scope.providers.dispose();
675
+ * ```
676
+ */
677
+ dispose() {
678
+ this.stopSessionCleanup();
679
+ // Clear all session stores to help garbage collection
680
+ this.sessionStores.clear();
681
+ // Resolve any pending locks to prevent hung promises
682
+ for (const lock of this.sessionBuildLocks.values()) {
683
+ lock.resolve();
684
+ }
685
+ this.sessionBuildLocks.clear();
686
+ }
687
+ /**
688
+ * Get session cache statistics for monitoring.
689
+ */
690
+ getSessionCacheStats() {
691
+ return {
692
+ size: this.sessionStores.size,
693
+ maxSize: ProviderRegistry.MAX_SESSION_CACHE_SIZE,
694
+ ttlMs: ProviderRegistry.SESSION_CACHE_TTL_MS,
695
+ };
696
+ }
697
+ /* -------------------- Scoped Provider Views -------------------- */
698
+ /**
699
+ * Build provider instance views for different scopes.
700
+ *
701
+ * This method creates a complete view of providers across all scopes:
702
+ * - GLOBAL: Returns existing singleton instances (read-only)
703
+ * - CONTEXT: Builds per-context providers (unified session + request)
704
+ *
705
+ * Note: For backwards compatibility, SESSION and REQUEST scopes are normalized
706
+ * to CONTEXT. The returned views include `session` and `request` aliases that
707
+ * both point to the `context` store.
708
+ *
709
+ * @param sessionKey - Unique context/session identifier for CONTEXT-scoped providers
710
+ * @param contextProviders - Optional pre-built CONTEXT-scoped providers (e.g., FrontMcpContext)
711
+ * @returns ProviderViews with global and context provider maps (session/request as aliases)
712
+ */
713
+ async buildViews(sessionKey, contextProviders) {
714
+ // Early validation BEFORE any cache operations or lock acquisition
715
+ // This prevents cache pollution with invalid session keys
716
+ session_key_provider_1.SessionKey.validate(sessionKey);
717
+ // 1. Global providers - return existing singletons
718
+ const global = this.getAllSingletons();
719
+ // 2. Context providers - build per-context (unified session+request)
720
+ // Note: We don't cache context providers because they're per-request.
721
+ // The unified context model means all non-global providers are fresh per-request.
722
+ const contextStore = new Map(contextProviders);
723
+ // Inject SessionKey for backwards compatibility with providers that depend on it
724
+ // @deprecated - Providers should migrate to using FRONTMCP_CONTEXT instead
725
+ if (!contextStore.has(session_key_provider_1.SessionKey)) {
726
+ contextStore.set(session_key_provider_1.SessionKey, new session_key_provider_1.SessionKey(sessionKey));
727
+ }
728
+ // Build all CONTEXT-scoped providers (including normalized SESSION/REQUEST)
729
+ for (const token of this.order) {
730
+ const rec = this.defs.get(token);
731
+ if (!rec)
732
+ continue;
733
+ // getProviderScope() already normalizes SESSION/REQUEST → CONTEXT
734
+ if (this.getProviderScope(rec) !== common_1.ProviderScope.CONTEXT)
735
+ continue;
736
+ if (contextStore.has(token))
737
+ continue;
738
+ await this.buildIntoStoreWithViews(token, rec, contextStore, sessionKey, contextStore, global);
739
+ }
740
+ // Return views with backwards-compatible aliases
741
+ // All three (context, session, request) point to the same map
563
742
  return {
564
- global: new Map(),
565
- session: new Map(),
566
- request: new Map(),
743
+ global,
744
+ context: contextStore,
745
+ // Backwards compatibility aliases
746
+ session: contextStore,
747
+ request: contextStore,
567
748
  };
568
749
  }
750
+ /**
751
+ * Build a provider into a store, with access to context and global views for dependencies.
752
+ */
753
+ async buildIntoStoreWithViews(token, rec, store, scopeKey, contextStore, globalStore) {
754
+ if (store.has(token))
755
+ return;
756
+ try {
757
+ switch (rec.kind) {
758
+ case common_1.ProviderKind.VALUE: {
759
+ store.set(token, rec.useValue);
760
+ return;
761
+ }
762
+ case common_1.ProviderKind.FACTORY: {
763
+ const deps = this.invocationTokens(token, rec);
764
+ const args = [];
765
+ for (const d of deps) {
766
+ args.push(await this.resolveFromViews(d, contextStore, globalStore, scopeKey));
767
+ }
768
+ const out = rec.useFactory(...args);
769
+ const val = (0, token_utils_1.isPromise)(out)
770
+ ? await this.withTimeout(out, this.asyncTimeoutMs, `${(0, token_utils_1.tokenName)(token)}.useFactory(...)`)
771
+ : out;
772
+ store.set(token, val);
773
+ return;
774
+ }
775
+ case common_1.ProviderKind.CLASS:
776
+ case common_1.ProviderKind.CLASS_TOKEN: {
777
+ const depsTokens = this.invocationTokens(token, rec);
778
+ const deps = [];
779
+ for (const d of depsTokens) {
780
+ deps.push(await this.resolveFromViews(d, contextStore, globalStore, scopeKey));
781
+ }
782
+ const klass = rec.kind === common_1.ProviderKind.CLASS ? rec.useClass : rec.provide;
783
+ if ((0, metadata_utils_1.hasAsyncWith)(klass)) {
784
+ const out = klass.with(...deps);
785
+ const val = (0, token_utils_1.isPromise)(out)
786
+ ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)
787
+ : out;
788
+ store.set(token, val);
789
+ }
790
+ else {
791
+ const instance = new klass(...deps);
792
+ const init = instance?.init;
793
+ if (typeof init === 'function') {
794
+ const ret = init.call(instance);
795
+ if ((0, token_utils_1.isPromise)(ret))
796
+ await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);
797
+ }
798
+ store.set(token, instance);
799
+ }
800
+ return;
801
+ }
802
+ }
803
+ }
804
+ catch (e) {
805
+ const msg = e?.message ?? e;
806
+ console.error(`Failed constructing (context-scoped):`, msg);
807
+ throw new Error(`Failed constructing (context-scoped) ${(0, token_utils_1.tokenName)(token)}: ${msg}`);
808
+ }
809
+ }
810
+ /**
811
+ * Resolve a dependency from the available views (context → global).
812
+ */
813
+ async resolveFromViews(token, contextStore, globalStore, scopeKey) {
814
+ // Check stores in order: context -> global -> instances
815
+ if (contextStore.has(token))
816
+ return contextStore.get(token);
817
+ if (globalStore.has(token))
818
+ return globalStore.get(token);
819
+ if (this.instances.has(token))
820
+ return this.instances.get(token);
821
+ // Try to build if it's a registered provider
822
+ const rec = this.defs.get(token);
823
+ if (rec) {
824
+ const scope = this.getProviderScope(rec);
825
+ if (scope === common_1.ProviderScope.GLOBAL) {
826
+ throw new Error(`GLOBAL dependency ${(0, token_utils_1.tokenName)(token)} is not instantiated`);
827
+ }
828
+ else {
829
+ // CONTEXT scope - build into context store
830
+ await this.buildIntoStoreWithViews(token, rec, contextStore, scopeKey, contextStore, globalStore);
831
+ return contextStore.get(token);
832
+ }
833
+ }
834
+ // Check parent hierarchy
835
+ const up = this.lookupDefInHierarchy(token);
836
+ if (up) {
837
+ const sc = up.registry.getProviderScope(up.rec);
838
+ if (sc === common_1.ProviderScope.GLOBAL) {
839
+ const v = up.registry.instances.get(token);
840
+ if (v !== undefined)
841
+ return v;
842
+ throw new Error(`GLOBAL dependency ${(0, token_utils_1.tokenName)(token)} is not instantiated in parent`);
843
+ }
844
+ }
845
+ throw new Error(`Cannot resolve dependency ${(0, token_utils_1.tokenName)(token)} from views`);
846
+ }
847
+ /**
848
+ * Get a provider from the given views, checking context → global.
849
+ *
850
+ * @param token - The provider token to look up
851
+ * @param views - The provider views to search
852
+ * @returns The provider instance
853
+ * @throws Error if provider not found in any view
854
+ */
855
+ getScoped(token, views) {
856
+ // Check context first (unified session+request store)
857
+ if (views.context.has(token))
858
+ return views.context.get(token);
859
+ if (views.global.has(token))
860
+ return views.global.get(token);
861
+ // Check instances as fallback for global providers
862
+ if (this.instances.has(token))
863
+ return this.instances.get(token);
864
+ throw new Error(`Provider ${(0, token_utils_1.tokenName)(token)} not found in views. Ensure it was built via buildViews().`);
865
+ }
569
866
  }
570
867
  exports.default = ProviderRegistry;
571
868
  //# sourceMappingURL=provider.registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.registry.js","sourceRoot":"","sources":["../../../src/provider/provider.registry.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport {\n Ctor,\n ProviderInterface,\n ProviderType,\n ProviderScope,\n Token,\n ProviderRegistryInterface,\n ProviderRecord,\n ProviderKind,\n ProviderInjectedRecord,\n ScopeEntry,\n RegistryKind,\n RegistryType,\n ProviderEntry,\n FrontMcpServer,\n} from '../common';\nimport { normalizeProvider, providerDiscoveryDeps, providerInvocationTokens } from './provider.utils';\nimport { depsOfClass, isClass, isPromise, tokenName } from '../utils/token.utils';\nimport { hasAsyncWith } from '../utils/metadata.utils';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport { ProviderViews } from './provider.types';\nimport { Scope } from '../scope';\nimport HookRegistry from '../hooks/hook.registry';\n\nexport default class ProviderRegistry\n extends RegistryAbstract<ProviderEntry, ProviderRecord, ProviderType[], ProviderRegistry | undefined>\n implements ProviderRegistryInterface\n{\n /** used to track which registry provided which token */\n private readonly providedBy: Map<Token, ProviderRegistry>;\n /** topo order (deps first) */\n private order: Set<Token> = new Set();\n\n // /** scoped instance stores by key */\n // private scoped = new Map<string, Map<Token, any>>();\n\n private registries: Map<RegistryKind, Set<RegistryType>> = new Map();\n\n constructor(list: ProviderType[], private readonly parentProviders?: ProviderRegistry) {\n super('ProviderRegistry', parentProviders, list, false);\n\n this.providedBy = new Map();\n\n this.buildGraph();\n this.topoSort();\n\n this.ready = this.initialize();\n }\n\n getProviders(): ProviderEntry[] {\n return [...this.instances.values()] as const;\n }\n\n /* -------------------- Hierarchy helpers -------------------- */\n\n /** Walk up the registry chain to find a def for a token. */\n private lookupDefInHierarchy(token: Token): { registry: ProviderRegistry; rec: ProviderRecord } | undefined {\n if (this.defs.has(token as any)) return { registry: this, rec: this.defs.get(token as any)! };\n return this.providers?.lookupDefInHierarchy(token);\n }\n\n /** Resolve a DEFAULT-scoped dependency from the hierarchy, enforcing scope & instantiation. */\n private resolveDefaultFromHierarchy(token: Token): any {\n const found = this.lookupDefInHierarchy(token);\n if (!found) throw new Error(`Cannot resolve token ${tokenName(token)}: not registered in hierarchy.`);\n const { registry, rec } = found;\n const sc = registry.getProviderScope(rec);\n if (sc !== ProviderScope.GLOBAL) {\n const scName = ProviderScope[sc];\n throw new Error(\n `Dependency ${tokenName(token)} is scoped (${scName}) in ${registry.constructor.name}; cannot use as DEFAULT.`,\n );\n }\n const inst = registry.instances.get(token);\n if (inst === undefined) {\n throw new Error(`Dependency ${tokenName(token)} (DEFAULT) is not instantiated in ${registry.constructor.name}`);\n }\n return inst;\n }\n\n /* -------------------- Build phase -------------------- */\n\n protected override buildMap(list: ProviderType[]): RegistryBuildMapResult<ProviderRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, ProviderRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n for (const raw of list) {\n const rec = normalizeProvider(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n\n return { tokens, defs, graph };\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = this.discoveryDeps(rec);\n\n for (const d of deps) {\n const isLocal = this.tokens.has(d);\n const up = isLocal ? undefined : this.lookupDefInHierarchy(d);\n\n if (!isLocal && !up) {\n throw new Error(\n `Provider ${tokenName(token)} depends on ${tokenName(d)}, which is not registered (local or parent).`,\n );\n }\n\n const depRec = isLocal ? this.defs.get(d)! : up!.rec;\n const depScope = isLocal ? this.getProviderScope(depRec) : up!.registry.getProviderScope(depRec);\n\n if (this.getProviderScope(rec) === ProviderScope.GLOBAL && depScope !== ProviderScope.GLOBAL) {\n throw new Error(\n `Invalid dependency: DEFAULT-scoped provider ${tokenName(\n token,\n )} cannot depend on scoped provider ${tokenName(d)}.`,\n );\n }\n\n // Only wire local -> local edges in our local graph; parent deps are external to this DAG.\n if (isLocal) this.graph.get(token)!.add(d);\n }\n }\n }\n\n protected topoSort() {\n const WHITE = 0,\n GRAY = 1,\n BLACK = 2;\n const color = new Map<Token, number>();\n const order: Set<Token> = new Set();\n const path: Token[] = [];\n\n const dfs = (n: Token) => {\n color.set(n, GRAY);\n path.push(n);\n for (const dep of this.graph.get(n) ?? []) {\n const c = color.get(dep) ?? WHITE;\n if (c === GRAY) {\n const idx = path.findIndex((p) => p === dep);\n const cycle = [...path.slice(idx), dep].map((t) => tokenName(t)).join(' -> ');\n throw new Error(`Dependency cycle detected: ${cycle}`);\n }\n if (c === WHITE) dfs(dep);\n }\n color.set(n, BLACK);\n order.add(n);\n path.pop();\n };\n\n for (const n of this.graph.keys()) if ((color.get(n) ?? WHITE) === WHITE) dfs(n);\n this.order = order;\n }\n\n /** Incremental instantiation for DEFAULT providers.\n * - Skips already-built singletons unless force:true.\n * - Can limit to a subset via onlyTokens.\n */\n protected async initialize(opts?: { force?: boolean; onlyTokens?: Iterable<Token> }) {\n const force = !!opts?.force;\n const only = opts?.onlyTokens ? new Set(opts.onlyTokens) : null;\n\n for (const token of this.order) {\n const rec = this.defs.get(token)!;\n if (this.getProviderScope(rec) !== ProviderScope.GLOBAL) continue;\n\n if (only && !only.has(token)) continue;\n if (!force && this.instances.has(token)) continue;\n\n if (force && this.instances.has(token)) {\n this.instances.delete(token);\n }\n\n try {\n await this.initiateOne(token, rec);\n } catch (e: any) {\n const msg = e?.message ?? e;\n // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors\n console.error(`Failed instantiating:`, msg);\n throw new Error(`Failed constructing ${tokenName(token)}: ${msg}`);\n }\n }\n }\n\n /* -------------------- Views & session stores -------------------- */\n\n /** Return the live singleton map as a read-only view. No copying. */\n getAllSingletons(): ReadonlyMap<Token, unknown> {\n return this.instances; // exposed as ReadonlyMap in the type\n }\n discoveryDeps(rec: ProviderRecord): Token[] {\n return providerDiscoveryDeps(rec, this.tokens, (k, phase) => depsOfClass(k, phase));\n }\n\n invocationTokens(_token: Token, rec: ProviderRecord): Token[] {\n return providerInvocationTokens(rec, (k, phase) => depsOfClass(k, phase));\n }\n\n getProviderScope(rec: ProviderRecord): ProviderScope {\n return rec.metadata?.scope ?? ProviderScope.GLOBAL;\n }\n\n getScope(): ScopeEntry {\n return this.getActiveScope();\n }\n\n /* -------------------- Instantiation -------------------- */\n\n private async withTimeout<T>(p: Promise<T>, ms: number, label: string): Promise<T> {\n if (ms <= 0 || !Number.isFinite(ms)) return p;\n let timer: any;\n try {\n const tm = new Promise<never>(\n (_, rej) => (timer = setTimeout(() => rej(new Error(`Timeout after ${ms}ms: ${label}`)), ms)),\n );\n return await Promise.race([p, tm]);\n } finally {\n clearTimeout(timer);\n }\n }\n\n private async resolveFactoryArg(t: Token, store: Map<Token, any>, scopeKey?: string): Promise<any> {\n if (store.has(t)) return store.get(t);\n if (this.instances.has(t)) return this.instances.get(t);\n\n // Local def?\n const rec = this.defs.get(t as any);\n if (rec) {\n const sc = this.getProviderScope(rec);\n if (sc === ProviderScope.GLOBAL) {\n if (!this.instances.has(t)) {\n throw new Error(`Dependency ${tokenName(t)} (DEFAULT scope) is not instantiated`);\n }\n return this.instances.get(t);\n } else {\n await this.buildIntoStore(t, rec, store, scopeKey);\n return store.get(t);\n }\n }\n\n // Parent def?\n const up = this.lookupDefInHierarchy(t);\n if (up) {\n const sc = up.registry.getProviderScope(up.rec);\n if (sc === ProviderScope.GLOBAL) {\n const inst = up.registry.instances.get(t);\n if (inst === undefined) {\n throw new Error(`Dependency ${tokenName(t)} (DEFAULT scope) is not instantiated in parent`);\n }\n return inst;\n } else {\n await up.registry.buildIntoStore(t, up.rec, store, scopeKey);\n return store.get(t);\n }\n }\n\n // Constructable fallback (non-DI)\n if (isClass(t)) {\n if (hasAsyncWith(t)) {\n const out = (t as any).with();\n return isPromise(out) ? await this.withTimeout(out, this.asyncTimeoutMs, `${t.name}.with(...)`) : out;\n }\n const instance = new (t as Ctor<any>)();\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${t.name}.init()`);\n }\n return instance;\n }\n\n throw new Error(`Cannot resolve token ${tokenName(t)}: not registered in hierarchy and not constructable.`);\n }\n\n /** Build a single DEFAULT-scoped singleton (used by incremental instantiating). */\n private async initiateOne(token: Token, rec: ProviderRecord): Promise<void> {\n switch (rec.kind) {\n case ProviderKind.VALUE: {\n this.instances.set(token, (rec as any).useValue);\n return;\n }\n case ProviderKind.FACTORY: {\n const deps = this.invocationTokens(token, rec);\n const args: any[] = [];\n for (const d of deps) args.push(await this.resolveFactoryArg(d, this.instances));\n const out = (rec as any).useFactory(...args);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${tokenName(token)}.useFactory(...)`)\n : out;\n this.instances.set(token, val);\n return;\n }\n case ProviderKind.CLASS: {\n const depTokens = this.invocationTokens(token, rec);\n const deps = depTokens.map((t) => this.resolveDefaultFromHierarchy(t));\n const klass = (rec as any).useClass;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n this.instances.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n this.instances.set(token, instance);\n }\n return;\n }\n case ProviderKind.CLASS_TOKEN: {\n const depTokens = this.invocationTokens(token, rec);\n const deps = depTokens.map((t) => this.resolveDefaultFromHierarchy(t));\n const klass = (rec as any).provide;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n this.instances.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n this.instances.set(token, instance);\n }\n return;\n }\n }\n }\n\n // Build a registered provider into the given scoped store (recursive for scoped deps).\n private async buildIntoStore(\n token: Token,\n rec: ProviderRecord,\n store: Map<Token, any>,\n scopeKey?: string,\n injectedDeps?: any[],\n ): Promise<void> {\n if (store.has(token)) return;\n\n try {\n switch (rec.kind) {\n case ProviderKind.VALUE: {\n store.set(token, (rec as any).useValue);\n return;\n }\n case ProviderKind.FACTORY: {\n const deps = this.invocationTokens(token, rec);\n const args: any[] = [];\n for (const d of deps) args.push(await this.resolveFactoryArg(d, store, scopeKey));\n const out = (rec as any).useFactory(...args);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${tokenName(token)}.useFactory(...)`)\n : out;\n store.set(token, val);\n return;\n }\n case ProviderKind.CLASS: {\n const depsTokens = this.invocationTokens(token, rec);\n const deps: any[] = [];\n for (const d of depsTokens) deps.push(await this.resolveManagedForClass(d, store, scopeKey));\n const klass = (rec as any).useClass as Ctor<any>;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n store.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n store.set(token, instance);\n }\n return;\n }\n case ProviderKind.CLASS_TOKEN: {\n const depsTokens = this.invocationTokens(token, rec);\n const deps: any[] = injectedDeps ?? [];\n for (const d of depsTokens) deps.push(await this.resolveManagedForClass(d, store, scopeKey));\n const klass = (rec as any).provide as Ctor<any>;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n store.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n store.set(token, instance);\n }\n return;\n }\n }\n } catch (e: any) {\n const msg = e?.message ?? e;\n // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors\n console.error(`Failed constructing:`, msg);\n throw new Error(`Failed constructing (scoped) ${tokenName(token)}: ${msg}`);\n }\n }\n\n // Ensure managed dependency value for CLASS/CLASS_TOKEN providers:\n // prefer scoped store, then singleton; recursively build scoped deps.\n // If not local, climb the hierarchy and either read DEFAULT instance or build scoped into this store.\n private async resolveManagedForClass(d: Token, store: Map<Token, any>, scopeKey?: string): Promise<any> {\n if (store.has(d)) return store.get(d);\n if (this.instances.has(d)) return this.instances.get(d);\n\n // Local DI?\n const depRec = this.defs.get(d as any);\n if (depRec) {\n const sc = this.getProviderScope(depRec);\n if (sc === ProviderScope.GLOBAL) {\n const v = this.instances.get(d);\n if (v === undefined) throw new Error(`${tokenName(d)} (DEFAULT scope) is not instantiated`);\n return v;\n } else {\n await this.buildIntoStore(d, depRec, store, scopeKey);\n return store.get(d);\n }\n }\n\n // Parent DI?\n const up = this.lookupDefInHierarchy(d);\n if (up) {\n const sc = up.registry.getProviderScope(up.rec);\n if (sc === ProviderScope.GLOBAL) {\n const v = up.registry.instances.get(d);\n if (v === undefined) throw new Error(`${tokenName(d)} (DEFAULT scope) is not instantiated in parent`);\n return v;\n } else {\n await up.registry.buildIntoStore(d, up.rec, store, scopeKey);\n return store.get(d);\n }\n }\n\n throw new Error(`${tokenName(d)} is not instantiated`);\n }\n\n get<T>(token: Token<T>): T {\n if (this.instances.has(token)) return this.instances.get(token) as T;\n\n const rec = this.defs.get(token as any);\n if (rec && this.getProviderScope(rec) !== ProviderScope.GLOBAL) {\n const scName = ProviderScope[this.getProviderScope(rec)];\n throw new Error(`Provider ${tokenName(token)} is scoped (${scName}). Use getScoped(token, key).`);\n }\n\n // bubble to parent\n if (this.providers) return this.providers.get<T>(token);\n\n throw new Error(`Provider ${tokenName(token)} is not available in local or parent registries`);\n }\n\n // noinspection JSUnusedGlobalSymbols\n addRegistry<T extends RegistryKind>(type: T, value: RegistryType[T]) {\n let registry = this.registries.get(type);\n if (!registry) {\n this.registries.set(type, new Set());\n registry = this.registries.get(type);\n }\n registry!.add(value as any);\n }\n\n getRegistries<T extends RegistryKind>(type: T): RegistryType[T][] {\n return [...(this.registries.get(type) ?? [])] as any;\n }\n\n getHooksRegistry() {\n return this.getRegistries('HookRegistry')[0] as HookRegistry;\n }\n\n // noinspection JSUnusedGlobalSymbols\n getScopeRegistry() {\n return this.getRegistries('ScopeRegistry')[0]!;\n }\n\n /** bootstrap helper: resolve a dependency usable during app bootstrap (must be GLOBAL). */\n async resolveBootstrapDep(t: Token): Promise<any> {\n if (this.instances.has(t)) return this.instances.get(t);\n if (this.registries.has(t as RegistryKind)) return this.registries.get(t as RegistryKind);\n\n const found = this.lookupDefInHierarchy(t);\n if (found) {\n const { registry, rec } = found;\n const sc = registry.getProviderScope(rec);\n if (sc !== ProviderScope.GLOBAL)\n throw new Error(`Plugin dependency ${tokenName(t)} must be DEFAULT-scoped at bootstrap`);\n const v = registry.instances.get(t);\n if (v === undefined) throw new Error(`Plugin dependency ${tokenName(t)} (DEFAULT scope) is not instantiated`);\n return v;\n }\n throw new Error(`Cannot resolve plugin dependency ${tokenName(t)} (local or parent)`);\n }\n\n /** Lightweight, synchronous resolver for app-scoped DI.\n * - If `cls` is a registered DEFAULT provider token, returns the singleton (must be instantiated).\n * - If `cls` is SCOPED in DI, throws (use getScoped/buildViews instead).\n * - Otherwise, if `cls` is a constructable class not registered in DI, returns `new cls()`.\n * If it defines a synchronous init(), it will be invoked (async init() is NOT awaited).\n */\n resolve<T>(cls: any): T {\n // 1) If it's a registered token (local or parent), handle via DI rules\n const found = this.lookupDefInHierarchy(cls as any);\n if (found) {\n const { registry, rec } = found;\n const sc = registry.getProviderScope(rec);\n if (sc !== ProviderScope.GLOBAL) {\n const scName = ProviderScope[sc];\n throw new Error(\n `Provider ${tokenName(cls)} is scoped (${scName}). Use getScoped(token, key) or buildViews(...).`,\n );\n }\n if (!registry.instances.has(cls)) {\n throw new Error(\n `Provider ${tokenName(cls)} (DEFAULT scope) is not instantiated. Call providers.instantiate() first.`,\n );\n }\n return registry.instances.get(cls) as T;\n }\n\n // 2) Not a registered token — best-effort construct (for tools/hooks/wrappers)\n if (isClass(cls)) {\n const instance = new (cls as Ctor<any>)();\n\n // Call sync init() if present (do NOT await)\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n // If someone accidentally made init async here, we intentionally do NOT await to keep it sync.\n init.call(instance);\n }\n\n return instance as T;\n }\n\n // 3) Unsupported token type\n throw new Error(\n `Cannot resolve ${tokenName(cls)}: not a registered DEFAULT provider and not a constructable class.`,\n );\n }\n\n mergeFromRegistry(\n providedBy: ProviderRegistry,\n exported: {\n token: Token<ProviderInterface>;\n def: ProviderRecord;\n instance: ProviderEntry;\n }[],\n ) {\n for (const { token, def, instance } of exported) {\n if (def.metadata.scope === ProviderScope.GLOBAL) {\n this.instances.set(token, instance);\n }\n this.defs.set(token, def);\n this.providedBy.set(token, providedBy);\n }\n }\n\n /**\n * Used by plugins to get the exported provider definitions.\n */\n getProviderInfo(token: Token<ProviderInterface>) {\n const def = this.defs.get(token);\n const instance = this.instances.get(token);\n if (!def || !instance)\n throw new Error(\n `Cannot get provider info for ${tokenName(\n token,\n )}: not a registered DEFAULT provider and not a constructable class.`,\n );\n return {\n token,\n def,\n instance,\n };\n }\n\n injectProvider(injected: Omit<ProviderInjectedRecord, 'kind'>) {\n const rec: ProviderInjectedRecord = {\n ...injected,\n kind: ProviderKind.INJECTED,\n };\n this.tokens.add(rec.provide);\n this.defs.set(rec.provide, rec);\n this.graph.set(rec.provide, new Set());\n this.instances.set(rec.provide, rec.value);\n }\n\n async addDynamicProviders(dynamicProviders: ProviderType[]) {\n // Normalize ProviderType[] to ProviderRecord[] before instantiation\n const normalized = dynamicProviders.map((p) => normalizeProvider(p));\n return Promise.all(normalized.map((rec) => this.initiateOne(rec.provide, rec)));\n }\n\n private getWithParents<T>(token: Token<T>): T {\n if (this.instances.has(token)) {\n return this.get(token);\n }\n const parent = this.parentProviders;\n if (!parent) {\n return this.get(token);\n }\n return parent.getWithParents(token);\n }\n\n getActiveScope(): Scope {\n return this.getWithParents(Scope);\n }\n\n getActiveServer(): FrontMcpServer {\n return this.getWithParents(FrontMcpServer);\n }\n\n /**\n * Build provider instance views for different scopes\n * NOTE: This is currently a stub implementation returning empty maps.\n * Actual view building logic is planned as part of the session management refactoring.\n * See the ProviderRegistryInterface TODO for fixing the session type.\n */\n async buildViews(session: string): Promise<ProviderViews> {\n return {\n global: new Map<Token, any>(),\n session: new Map<Token, any>(),\n request: new Map<Token, any>(),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"provider.registry.js","sourceRoot":"","sources":["../../../src/provider/provider.registry.ts"],"names":[],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport {\n Ctor,\n ProviderInterface,\n ProviderType,\n ProviderScope,\n Token,\n ProviderRegistryInterface,\n ProviderRecord,\n ProviderKind,\n ProviderInjectedRecord,\n ScopeEntry,\n RegistryKind,\n RegistryType,\n ProviderEntry,\n FrontMcpServer,\n} from '../common';\nimport { normalizeProvider, providerDiscoveryDeps, providerInvocationTokens } from './provider.utils';\nimport { depsOfClass, isClass, isPromise, tokenName } from '../utils/token.utils';\nimport { hasAsyncWith } from '../utils/metadata.utils';\nimport { RegistryAbstract, RegistryBuildMapResult } from '../regsitry';\nimport { ProviderViews } from './provider.types';\nimport { Scope } from '../scope';\nimport HookRegistry from '../hooks/hook.registry';\nimport { SessionKey } from '../context/session-key.provider';\n\nexport default class ProviderRegistry\n extends RegistryAbstract<ProviderEntry, ProviderRecord, ProviderType[], ProviderRegistry | undefined>\n implements ProviderRegistryInterface\n{\n /** used to track which registry provided which token */\n private readonly providedBy: Map<Token, ProviderRegistry>;\n /** topo order (deps first) */\n private order: Set<Token> = new Set();\n\n // /** scoped instance stores by key */\n // private scoped = new Map<string, Map<Token, any>>();\n\n private registries: Map<RegistryKind, Set<RegistryType>> = new Map();\n\n /** Session-scoped provider instance cache by sessionKey */\n private sessionStores: Map<string, { providers: Map<Token, unknown>; lastAccess: number }> = new Map();\n\n /** Locks to prevent concurrent session builds (race condition prevention) */\n private sessionBuildLocks: Map<string, { promise: Promise<void>; resolve: () => void }> = new Map();\n\n /** Maximum number of sessions to cache (LRU eviction) */\n private static readonly MAX_SESSION_CACHE_SIZE = 10000;\n\n /** Session cache TTL in milliseconds (1 hour) */\n private static readonly SESSION_CACHE_TTL_MS = 3600000;\n\n /** Cleanup interval in milliseconds (1 minute) */\n private static readonly SESSION_CLEANUP_INTERVAL_MS = 60000;\n\n /** Handle for the session cleanup interval */\n private sessionCleanupInterval: ReturnType<typeof setInterval> | null = null;\n\n constructor(list: ProviderType[], private readonly parentProviders?: ProviderRegistry) {\n super('ProviderRegistry', parentProviders, list, false);\n\n this.providedBy = new Map();\n\n this.buildGraph();\n this.topoSort();\n\n this.ready = this.initialize();\n }\n\n getProviders(): ProviderEntry[] {\n return [...this.instances.values()] as const;\n }\n\n /* -------------------- Hierarchy helpers -------------------- */\n\n /** Walk up the registry chain to find a def for a token. */\n private lookupDefInHierarchy(token: Token): { registry: ProviderRegistry; rec: ProviderRecord } | undefined {\n if (this.defs.has(token as any)) return { registry: this, rec: this.defs.get(token as any)! };\n return this.providers?.lookupDefInHierarchy(token);\n }\n\n /** Resolve a DEFAULT-scoped dependency from the hierarchy, enforcing scope & instantiation. */\n private resolveDefaultFromHierarchy(token: Token): any {\n const found = this.lookupDefInHierarchy(token);\n if (!found) throw new Error(`Cannot resolve token ${tokenName(token)}: not registered in hierarchy.`);\n const { registry, rec } = found;\n const sc = registry.getProviderScope(rec);\n if (sc !== ProviderScope.GLOBAL) {\n const scName = ProviderScope[sc];\n throw new Error(\n `Dependency ${tokenName(token)} is scoped (${scName}) in ${registry.constructor.name}; cannot use as DEFAULT.`,\n );\n }\n const inst = registry.instances.get(token);\n if (inst === undefined) {\n throw new Error(`Dependency ${tokenName(token)} (DEFAULT) is not instantiated in ${registry.constructor.name}`);\n }\n return inst;\n }\n\n /* -------------------- Build phase -------------------- */\n\n protected override buildMap(list: ProviderType[]): RegistryBuildMapResult<ProviderRecord> {\n const tokens = new Set<Token>();\n const defs = new Map<Token, ProviderRecord>();\n const graph = new Map<Token, Set<Token>>();\n\n for (const raw of list) {\n const rec = normalizeProvider(raw);\n const provide = rec.provide;\n tokens.add(provide);\n defs.set(provide, rec);\n graph.set(provide, new Set());\n }\n\n return { tokens, defs, graph };\n }\n\n protected buildGraph() {\n for (const token of this.tokens) {\n const rec = this.defs.get(token)!;\n const deps = this.discoveryDeps(rec);\n\n for (const d of deps) {\n const isLocal = this.tokens.has(d);\n const up = isLocal ? undefined : this.lookupDefInHierarchy(d);\n\n if (!isLocal && !up) {\n throw new Error(\n `Provider ${tokenName(token)} depends on ${tokenName(d)}, which is not registered (local or parent).`,\n );\n }\n\n const depRec = isLocal ? this.defs.get(d)! : up!.rec;\n const depScope = isLocal ? this.getProviderScope(depRec) : up!.registry.getProviderScope(depRec);\n\n if (this.getProviderScope(rec) === ProviderScope.GLOBAL && depScope !== ProviderScope.GLOBAL) {\n throw new Error(\n `Invalid dependency: DEFAULT-scoped provider ${tokenName(\n token,\n )} cannot depend on scoped provider ${tokenName(d)}.`,\n );\n }\n\n // Only wire local -> local edges in our local graph; parent deps are external to this DAG.\n if (isLocal) this.graph.get(token)!.add(d);\n }\n }\n }\n\n protected topoSort() {\n const WHITE = 0,\n GRAY = 1,\n BLACK = 2;\n const color = new Map<Token, number>();\n const order: Set<Token> = new Set();\n const path: Token[] = [];\n\n const dfs = (n: Token) => {\n color.set(n, GRAY);\n path.push(n);\n for (const dep of this.graph.get(n) ?? []) {\n const c = color.get(dep) ?? WHITE;\n if (c === GRAY) {\n const idx = path.findIndex((p) => p === dep);\n const cycle = [...path.slice(idx), dep].map((t) => tokenName(t)).join(' -> ');\n throw new Error(`Dependency cycle detected: ${cycle}`);\n }\n if (c === WHITE) dfs(dep);\n }\n color.set(n, BLACK);\n order.add(n);\n path.pop();\n };\n\n for (const n of this.graph.keys()) if ((color.get(n) ?? WHITE) === WHITE) dfs(n);\n this.order = order;\n }\n\n /** Incremental instantiation for DEFAULT providers.\n * - Skips already-built singletons unless force:true.\n * - Can limit to a subset via onlyTokens.\n */\n protected async initialize(opts?: { force?: boolean; onlyTokens?: Iterable<Token> }) {\n const force = !!opts?.force;\n const only = opts?.onlyTokens ? new Set(opts.onlyTokens) : null;\n\n for (const token of this.order) {\n const rec = this.defs.get(token)!;\n if (this.getProviderScope(rec) !== ProviderScope.GLOBAL) continue;\n\n if (only && !only.has(token)) continue;\n if (!force && this.instances.has(token)) continue;\n\n if (force && this.instances.has(token)) {\n this.instances.delete(token);\n }\n\n try {\n await this.initiateOne(token, rec);\n } catch (e: any) {\n const msg = e?.message ?? e;\n // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors\n console.error(`Failed instantiating:`, msg);\n throw new Error(`Failed constructing ${tokenName(token)}: ${msg}`);\n }\n }\n\n // Start background session cleanup after initialization\n // This ensures expired sessions are periodically cleaned up (TTL enforcement)\n // Only start for scope-level registries (those with parentProviders) since\n // SESSION providers are stored in scope registries, not the global registry\n if (this.parentProviders) {\n this.startSessionCleanup();\n }\n }\n\n /* -------------------- Views & session stores -------------------- */\n\n /** Return the live singleton map as a read-only view. No copying. */\n getAllSingletons(): ReadonlyMap<Token, unknown> {\n return this.instances; // exposed as ReadonlyMap in the type\n }\n discoveryDeps(rec: ProviderRecord): Token[] {\n return providerDiscoveryDeps(rec, this.tokens, (k, phase) => depsOfClass(k, phase));\n }\n\n invocationTokens(_token: Token, rec: ProviderRecord): Token[] {\n return providerInvocationTokens(rec, (k, phase) => depsOfClass(k, phase));\n }\n\n /**\n * Normalize deprecated scopes to their modern equivalents.\n *\n * - SESSION → CONTEXT (deprecated)\n * - REQUEST → CONTEXT (deprecated)\n *\n * This enables backwards compatibility while unifying the scope model.\n */\n private normalizeScope(scope: ProviderScope): ProviderScope {\n switch (scope) {\n case ProviderScope.SESSION:\n case ProviderScope.REQUEST:\n return ProviderScope.CONTEXT;\n default:\n return scope;\n }\n }\n\n getProviderScope(rec: ProviderRecord): ProviderScope {\n const rawScope = rec.metadata?.scope ?? ProviderScope.GLOBAL;\n return this.normalizeScope(rawScope);\n }\n\n getScope(): ScopeEntry {\n return this.getActiveScope();\n }\n\n /* -------------------- Instantiation -------------------- */\n\n private async withTimeout<T>(p: Promise<T>, ms: number, label: string): Promise<T> {\n if (ms <= 0 || !Number.isFinite(ms)) return p;\n let timer: any;\n try {\n const tm = new Promise<never>(\n (_, rej) => (timer = setTimeout(() => rej(new Error(`Timeout after ${ms}ms: ${label}`)), ms)),\n );\n return await Promise.race([p, tm]);\n } finally {\n clearTimeout(timer);\n }\n }\n\n private async resolveFactoryArg(t: Token, store: Map<Token, any>, scopeKey?: string): Promise<any> {\n if (store.has(t)) return store.get(t);\n if (this.instances.has(t)) return this.instances.get(t);\n\n // Local def?\n const rec = this.defs.get(t as any);\n if (rec) {\n const sc = this.getProviderScope(rec);\n if (sc === ProviderScope.GLOBAL) {\n if (!this.instances.has(t)) {\n throw new Error(`Dependency ${tokenName(t)} (DEFAULT scope) is not instantiated`);\n }\n return this.instances.get(t);\n } else {\n await this.buildIntoStore(t, rec, store, scopeKey);\n return store.get(t);\n }\n }\n\n // Parent def?\n const up = this.lookupDefInHierarchy(t);\n if (up) {\n const sc = up.registry.getProviderScope(up.rec);\n if (sc === ProviderScope.GLOBAL) {\n const inst = up.registry.instances.get(t);\n if (inst === undefined) {\n throw new Error(`Dependency ${tokenName(t)} (DEFAULT scope) is not instantiated in parent`);\n }\n return inst;\n } else {\n await up.registry.buildIntoStore(t, up.rec, store, scopeKey);\n return store.get(t);\n }\n }\n\n // Constructable fallback (non-DI)\n if (isClass(t)) {\n if (hasAsyncWith(t)) {\n const out = (t as any).with();\n return isPromise(out) ? await this.withTimeout(out, this.asyncTimeoutMs, `${t.name}.with(...)`) : out;\n }\n const instance = new (t as Ctor<any>)();\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${t.name}.init()`);\n }\n return instance;\n }\n\n throw new Error(`Cannot resolve token ${tokenName(t)}: not registered in hierarchy and not constructable.`);\n }\n\n /** Build a single DEFAULT-scoped singleton (used by incremental instantiating). */\n private async initiateOne(token: Token, rec: ProviderRecord): Promise<void> {\n switch (rec.kind) {\n case ProviderKind.VALUE: {\n this.instances.set(token, (rec as any).useValue);\n return;\n }\n case ProviderKind.FACTORY: {\n const deps = this.invocationTokens(token, rec);\n const args: any[] = [];\n for (const d of deps) args.push(await this.resolveFactoryArg(d, this.instances));\n const out = (rec as any).useFactory(...args);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${tokenName(token)}.useFactory(...)`)\n : out;\n this.instances.set(token, val);\n return;\n }\n case ProviderKind.CLASS: {\n const depTokens = this.invocationTokens(token, rec);\n const deps = depTokens.map((t) => this.resolveDefaultFromHierarchy(t));\n const klass = (rec as any).useClass;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n this.instances.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n this.instances.set(token, instance);\n }\n return;\n }\n case ProviderKind.CLASS_TOKEN: {\n const depTokens = this.invocationTokens(token, rec);\n const deps = depTokens.map((t) => this.resolveDefaultFromHierarchy(t));\n const klass = (rec as any).provide;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n this.instances.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n this.instances.set(token, instance);\n }\n return;\n }\n }\n }\n\n // Build a registered provider into the given scoped store (recursive for scoped deps).\n private async buildIntoStore(\n token: Token,\n rec: ProviderRecord,\n store: Map<Token, any>,\n scopeKey?: string,\n injectedDeps?: any[],\n ): Promise<void> {\n if (store.has(token)) return;\n\n try {\n switch (rec.kind) {\n case ProviderKind.VALUE: {\n store.set(token, (rec as any).useValue);\n return;\n }\n case ProviderKind.FACTORY: {\n const deps = this.invocationTokens(token, rec);\n const args: any[] = [];\n for (const d of deps) args.push(await this.resolveFactoryArg(d, store, scopeKey));\n const out = (rec as any).useFactory(...args);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${tokenName(token)}.useFactory(...)`)\n : out;\n store.set(token, val);\n return;\n }\n case ProviderKind.CLASS: {\n const depsTokens = this.invocationTokens(token, rec);\n const deps: any[] = [];\n for (const d of depsTokens) deps.push(await this.resolveManagedForClass(d, store, scopeKey));\n const klass = (rec as any).useClass as Ctor<any>;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n store.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n store.set(token, instance);\n }\n return;\n }\n case ProviderKind.CLASS_TOKEN: {\n const depsTokens = this.invocationTokens(token, rec);\n const deps: any[] = injectedDeps ?? [];\n for (const d of depsTokens) deps.push(await this.resolveManagedForClass(d, store, scopeKey));\n const klass = (rec as any).provide as Ctor<any>;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n store.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n store.set(token, instance);\n }\n return;\n }\n }\n } catch (e: any) {\n const msg = e?.message ?? e;\n // Use safe logging to avoid Node.js 24 util.inspect bug with Zod errors\n console.error(`Failed constructing:`, msg);\n throw new Error(`Failed constructing (scoped) ${tokenName(token)}: ${msg}`);\n }\n }\n\n // Ensure managed dependency value for CLASS/CLASS_TOKEN providers:\n // prefer scoped store, then singleton; recursively build scoped deps.\n // If not local, climb the hierarchy and either read DEFAULT instance or build scoped into this store.\n private async resolveManagedForClass(d: Token, store: Map<Token, any>, scopeKey?: string): Promise<any> {\n if (store.has(d)) return store.get(d);\n if (this.instances.has(d)) return this.instances.get(d);\n\n // Local DI?\n const depRec = this.defs.get(d as any);\n if (depRec) {\n const sc = this.getProviderScope(depRec);\n if (sc === ProviderScope.GLOBAL) {\n const v = this.instances.get(d);\n if (v === undefined) throw new Error(`${tokenName(d)} (DEFAULT scope) is not instantiated`);\n return v;\n } else {\n await this.buildIntoStore(d, depRec, store, scopeKey);\n return store.get(d);\n }\n }\n\n // Parent DI?\n const up = this.lookupDefInHierarchy(d);\n if (up) {\n const sc = up.registry.getProviderScope(up.rec);\n if (sc === ProviderScope.GLOBAL) {\n const v = up.registry.instances.get(d);\n if (v === undefined) throw new Error(`${tokenName(d)} (DEFAULT scope) is not instantiated in parent`);\n return v;\n } else {\n await up.registry.buildIntoStore(d, up.rec, store, scopeKey);\n return store.get(d);\n }\n }\n\n throw new Error(`${tokenName(d)} is not instantiated`);\n }\n\n get<T>(token: Token<T>): T {\n if (this.instances.has(token)) return this.instances.get(token) as T;\n\n const rec = this.defs.get(token as any);\n if (rec && this.getProviderScope(rec) !== ProviderScope.GLOBAL) {\n const scName = ProviderScope[this.getProviderScope(rec)];\n throw new Error(`Provider ${tokenName(token)} is scoped (${scName}). Use getScoped(token, key).`);\n }\n\n // bubble to parent\n if (this.providers) return this.providers.get<T>(token);\n\n throw new Error(`Provider ${tokenName(token)} is not available in local or parent registries`);\n }\n\n // noinspection JSUnusedGlobalSymbols\n addRegistry<T extends RegistryKind>(type: T, value: RegistryType[T]) {\n let registry = this.registries.get(type);\n if (!registry) {\n this.registries.set(type, new Set());\n registry = this.registries.get(type);\n }\n registry!.add(value as any);\n }\n\n getRegistries<T extends RegistryKind>(type: T): RegistryType[T][] {\n return [...(this.registries.get(type) ?? [])] as any;\n }\n\n getHooksRegistry() {\n return this.getRegistries('HookRegistry')[0] as HookRegistry;\n }\n\n // noinspection JSUnusedGlobalSymbols\n getScopeRegistry() {\n return this.getRegistries('ScopeRegistry')[0]!;\n }\n\n /** bootstrap helper: resolve a dependency usable during app bootstrap (must be GLOBAL). */\n async resolveBootstrapDep(t: Token): Promise<any> {\n if (this.instances.has(t)) return this.instances.get(t);\n if (this.registries.has(t as RegistryKind)) return this.registries.get(t as RegistryKind);\n\n const found = this.lookupDefInHierarchy(t);\n if (found) {\n const { registry, rec } = found;\n const sc = registry.getProviderScope(rec);\n if (sc !== ProviderScope.GLOBAL)\n throw new Error(`Plugin dependency ${tokenName(t)} must be DEFAULT-scoped at bootstrap`);\n const v = registry.instances.get(t);\n if (v === undefined) throw new Error(`Plugin dependency ${tokenName(t)} (DEFAULT scope) is not instantiated`);\n return v;\n }\n throw new Error(`Cannot resolve plugin dependency ${tokenName(t)} (local or parent)`);\n }\n\n /** Lightweight, synchronous resolver for app-scoped DI.\n * - If `cls` is a registered DEFAULT provider token, returns the singleton (must be instantiated).\n * - If `cls` is SCOPED in DI, throws (use getScoped/buildViews instead).\n * - Otherwise, if `cls` is a constructable class not registered in DI, returns `new cls()`.\n * If it defines a synchronous init(), it will be invoked (async init() is NOT awaited).\n */\n resolve<T>(cls: any): T {\n // 1) If it's a registered token (local or parent), handle via DI rules\n const found = this.lookupDefInHierarchy(cls as any);\n if (found) {\n const { registry, rec } = found;\n const sc = registry.getProviderScope(rec);\n if (sc !== ProviderScope.GLOBAL) {\n const scName = ProviderScope[sc];\n throw new Error(\n `Provider ${tokenName(cls)} is scoped (${scName}). Use getScoped(token, key) or buildViews(...).`,\n );\n }\n if (!registry.instances.has(cls)) {\n throw new Error(\n `Provider ${tokenName(cls)} (DEFAULT scope) is not instantiated. Call providers.instantiate() first.`,\n );\n }\n return registry.instances.get(cls) as T;\n }\n\n // 2) Not a registered token — best-effort construct (for tools/hooks/wrappers)\n if (isClass(cls)) {\n const instance = new (cls as Ctor<any>)();\n\n // Call sync init() if present (do NOT await)\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n // If someone accidentally made init async here, we intentionally do NOT await to keep it sync.\n init.call(instance);\n }\n\n return instance as T;\n }\n\n // 3) Unsupported token type\n throw new Error(\n `Cannot resolve ${tokenName(cls)}: not a registered DEFAULT provider and not a constructable class.`,\n );\n }\n\n mergeFromRegistry(\n providedBy: ProviderRegistry,\n exported: {\n token: Token<ProviderInterface>;\n def: ProviderRecord;\n instance: ProviderEntry;\n }[],\n ) {\n for (const { token, def, instance } of exported) {\n if (def.metadata.scope === ProviderScope.GLOBAL) {\n this.instances.set(token, instance);\n }\n this.defs.set(token, def);\n this.providedBy.set(token, providedBy);\n }\n }\n\n /**\n * Used by plugins to get the exported provider definitions.\n */\n getProviderInfo(token: Token<ProviderInterface>) {\n const def = this.defs.get(token);\n const instance = this.instances.get(token);\n if (!def || !instance)\n throw new Error(\n `Cannot get provider info for ${tokenName(\n token,\n )}: not a registered DEFAULT provider and not a constructable class.`,\n );\n return {\n token,\n def,\n instance,\n };\n }\n\n injectProvider(injected: Omit<ProviderInjectedRecord, 'kind'>) {\n const rec: ProviderInjectedRecord = {\n ...injected,\n kind: ProviderKind.INJECTED,\n };\n this.tokens.add(rec.provide);\n this.defs.set(rec.provide, rec);\n this.graph.set(rec.provide, new Set());\n this.instances.set(rec.provide, rec.value);\n }\n\n async addDynamicProviders(dynamicProviders: ProviderType[]) {\n // Normalize ProviderType[] to ProviderRecord[] before instantiation\n const normalized = dynamicProviders.map((p) => normalizeProvider(p));\n return Promise.all(normalized.map((rec) => this.initiateOne(rec.provide, rec)));\n }\n\n private getWithParents<T>(token: Token<T>): T {\n if (this.instances.has(token)) {\n return this.get(token);\n }\n const parent = this.parentProviders;\n if (!parent) {\n return this.get(token);\n }\n return parent.getWithParents(token);\n }\n\n getActiveScope(): Scope {\n return this.getWithParents(Scope);\n }\n\n getActiveServer(): FrontMcpServer {\n return this.getWithParents(FrontMcpServer);\n }\n\n /* -------------------- Session Cache Management -------------------- */\n\n /**\n * Clean up a specific session's provider cache.\n * Call this when a session is terminated or expired.\n *\n * @param sessionKey - The session identifier to clean up\n */\n cleanupSession(sessionKey: string): void {\n this.sessionStores.delete(sessionKey);\n // Resolve any waiters before deleting the lock to prevent hung promises\n const lock = this.sessionBuildLocks.get(sessionKey);\n if (lock) {\n lock.resolve();\n this.sessionBuildLocks.delete(sessionKey);\n }\n }\n\n /**\n * Clean up expired sessions from the cache.\n * Sessions older than SESSION_CACHE_TTL_MS are removed.\n *\n * @returns Number of sessions cleaned up\n */\n cleanupExpiredSessions(): number {\n const now = Date.now();\n const cutoff = now - ProviderRegistry.SESSION_CACHE_TTL_MS;\n let cleaned = 0;\n\n for (const [key, entry] of this.sessionStores) {\n if (entry.lastAccess < cutoff) {\n this.sessionStores.delete(key);\n // Resolve any waiters before deleting the lock to prevent hung promises\n const lock = this.sessionBuildLocks.get(key);\n if (lock) {\n lock.resolve();\n this.sessionBuildLocks.delete(key);\n }\n cleaned++;\n }\n }\n\n return cleaned;\n }\n\n /**\n * Start the background session cleanup timer.\n * This periodically removes expired sessions from the cache.\n */\n startSessionCleanup(): void {\n // Only start if not already running\n if (this.sessionCleanupInterval) {\n return;\n }\n\n this.sessionCleanupInterval = setInterval(() => {\n const cleaned = this.cleanupExpiredSessions();\n if (cleaned > 0) {\n console.debug(`[ProviderRegistry] Cleaned up ${cleaned} expired sessions`);\n }\n }, ProviderRegistry.SESSION_CLEANUP_INTERVAL_MS);\n\n // Allow the process to exit even if the interval is running\n // This is important for graceful shutdown in serverless environments\n if (this.sessionCleanupInterval.unref) {\n this.sessionCleanupInterval.unref();\n }\n }\n\n /**\n * Stop the background session cleanup timer.\n * Call this when shutting down the server gracefully.\n */\n stopSessionCleanup(): void {\n if (this.sessionCleanupInterval) {\n clearInterval(this.sessionCleanupInterval);\n this.sessionCleanupInterval = null;\n }\n }\n\n /**\n * Dispose of the registry, cleaning up all resources.\n * Call this when the registry/scope is being destroyed to prevent:\n * - Memory leaks from retained interval handles\n * - Orphaned session cleanup timers\n *\n * @example\n * ```typescript\n * // In scope teardown\n * scope.providers.dispose();\n * ```\n */\n dispose(): void {\n this.stopSessionCleanup();\n // Clear all session stores to help garbage collection\n this.sessionStores.clear();\n // Resolve any pending locks to prevent hung promises\n for (const lock of this.sessionBuildLocks.values()) {\n lock.resolve();\n }\n this.sessionBuildLocks.clear();\n }\n\n /**\n * Get session cache statistics for monitoring.\n */\n getSessionCacheStats(): { size: number; maxSize: number; ttlMs: number } {\n return {\n size: this.sessionStores.size,\n maxSize: ProviderRegistry.MAX_SESSION_CACHE_SIZE,\n ttlMs: ProviderRegistry.SESSION_CACHE_TTL_MS,\n };\n }\n\n /* -------------------- Scoped Provider Views -------------------- */\n\n /**\n * Build provider instance views for different scopes.\n *\n * This method creates a complete view of providers across all scopes:\n * - GLOBAL: Returns existing singleton instances (read-only)\n * - CONTEXT: Builds per-context providers (unified session + request)\n *\n * Note: For backwards compatibility, SESSION and REQUEST scopes are normalized\n * to CONTEXT. The returned views include `session` and `request` aliases that\n * both point to the `context` store.\n *\n * @param sessionKey - Unique context/session identifier for CONTEXT-scoped providers\n * @param contextProviders - Optional pre-built CONTEXT-scoped providers (e.g., FrontMcpContext)\n * @returns ProviderViews with global and context provider maps (session/request as aliases)\n */\n async buildViews(sessionKey: string, contextProviders?: Map<Token, unknown>): Promise<ProviderViews> {\n // Early validation BEFORE any cache operations or lock acquisition\n // This prevents cache pollution with invalid session keys\n SessionKey.validate(sessionKey);\n\n // 1. Global providers - return existing singletons\n const global = this.getAllSingletons();\n\n // 2. Context providers - build per-context (unified session+request)\n // Note: We don't cache context providers because they're per-request.\n // The unified context model means all non-global providers are fresh per-request.\n const contextStore = new Map<Token, unknown>(contextProviders);\n\n // Inject SessionKey for backwards compatibility with providers that depend on it\n // @deprecated - Providers should migrate to using FRONTMCP_CONTEXT instead\n if (!contextStore.has(SessionKey)) {\n contextStore.set(SessionKey, new SessionKey(sessionKey));\n }\n\n // Build all CONTEXT-scoped providers (including normalized SESSION/REQUEST)\n for (const token of this.order) {\n const rec = this.defs.get(token);\n if (!rec) continue;\n // getProviderScope() already normalizes SESSION/REQUEST → CONTEXT\n if (this.getProviderScope(rec) !== ProviderScope.CONTEXT) continue;\n if (contextStore.has(token)) continue;\n\n await this.buildIntoStoreWithViews(token, rec, contextStore, sessionKey, contextStore, global);\n }\n\n // Return views with backwards-compatible aliases\n // All three (context, session, request) point to the same map\n return {\n global,\n context: contextStore,\n // Backwards compatibility aliases\n session: contextStore,\n request: contextStore,\n };\n }\n\n /**\n * Build a provider into a store, with access to context and global views for dependencies.\n */\n private async buildIntoStoreWithViews(\n token: Token,\n rec: ProviderRecord,\n store: Map<Token, unknown>,\n scopeKey: string,\n contextStore: Map<Token, unknown>,\n globalStore: ReadonlyMap<Token, unknown>,\n ): Promise<void> {\n if (store.has(token)) return;\n\n try {\n switch (rec.kind) {\n case ProviderKind.VALUE: {\n store.set(token, (rec as any).useValue);\n return;\n }\n case ProviderKind.FACTORY: {\n const deps = this.invocationTokens(token, rec);\n const args: any[] = [];\n for (const d of deps) {\n args.push(await this.resolveFromViews(d, contextStore, globalStore, scopeKey));\n }\n const out = (rec as any).useFactory(...args);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${tokenName(token)}.useFactory(...)`)\n : out;\n store.set(token, val);\n return;\n }\n case ProviderKind.CLASS:\n case ProviderKind.CLASS_TOKEN: {\n const depsTokens = this.invocationTokens(token, rec);\n const deps: any[] = [];\n for (const d of depsTokens) {\n deps.push(await this.resolveFromViews(d, contextStore, globalStore, scopeKey));\n }\n const klass = rec.kind === ProviderKind.CLASS ? (rec as any).useClass : (rec as any).provide;\n if (hasAsyncWith(klass)) {\n const out = (klass as any).with(...deps);\n const val = isPromise(out)\n ? await this.withTimeout(out, this.asyncTimeoutMs, `${klass.name}.with(...)`)\n : out;\n store.set(token, val);\n } else {\n const instance = new (klass as Ctor<any>)(...deps);\n const init = (instance as any)?.init;\n if (typeof init === 'function') {\n const ret = init.call(instance);\n if (isPromise(ret)) await this.withTimeout(ret, this.asyncTimeoutMs, `${klass.name}.init()`);\n }\n store.set(token, instance);\n }\n return;\n }\n }\n } catch (e: any) {\n const msg = e?.message ?? e;\n console.error(`Failed constructing (context-scoped):`, msg);\n throw new Error(`Failed constructing (context-scoped) ${tokenName(token)}: ${msg}`);\n }\n }\n\n /**\n * Resolve a dependency from the available views (context → global).\n */\n private async resolveFromViews(\n token: Token,\n contextStore: Map<Token, unknown>,\n globalStore: ReadonlyMap<Token, unknown>,\n scopeKey: string,\n ): Promise<unknown> {\n // Check stores in order: context -> global -> instances\n if (contextStore.has(token)) return contextStore.get(token);\n if (globalStore.has(token)) return globalStore.get(token);\n if (this.instances.has(token)) return this.instances.get(token);\n\n // Try to build if it's a registered provider\n const rec = this.defs.get(token as any);\n if (rec) {\n const scope = this.getProviderScope(rec);\n if (scope === ProviderScope.GLOBAL) {\n throw new Error(`GLOBAL dependency ${tokenName(token)} is not instantiated`);\n } else {\n // CONTEXT scope - build into context store\n await this.buildIntoStoreWithViews(token, rec, contextStore, scopeKey, contextStore, globalStore);\n return contextStore.get(token);\n }\n }\n\n // Check parent hierarchy\n const up = this.lookupDefInHierarchy(token);\n if (up) {\n const sc = up.registry.getProviderScope(up.rec);\n if (sc === ProviderScope.GLOBAL) {\n const v = up.registry.instances.get(token);\n if (v !== undefined) return v;\n throw new Error(`GLOBAL dependency ${tokenName(token)} is not instantiated in parent`);\n }\n }\n\n throw new Error(`Cannot resolve dependency ${tokenName(token)} from views`);\n }\n\n /**\n * Get a provider from the given views, checking context → global.\n *\n * @param token - The provider token to look up\n * @param views - The provider views to search\n * @returns The provider instance\n * @throws Error if provider not found in any view\n */\n getScoped<T>(token: Token<T>, views: ProviderViews): T {\n // Check context first (unified session+request store)\n if (views.context.has(token)) return views.context.get(token) as T;\n if (views.global.has(token)) return views.global.get(token) as T;\n\n // Check instances as fallback for global providers\n if (this.instances.has(token)) return this.instances.get(token) as T;\n\n throw new Error(`Provider ${tokenName(token)} not found in views. Ensure it was built via buildViews().`);\n }\n}\n"]}