@frontmcp/sdk 0.3.1 → 0.4.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 (148) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +192 -164
  3. package/package.json +7 -4
  4. package/src/__test-utils__/fixtures/hook.fixtures.d.ts +46 -0
  5. package/src/__test-utils__/fixtures/hook.fixtures.js +114 -0
  6. package/src/__test-utils__/fixtures/hook.fixtures.js.map +1 -0
  7. package/src/__test-utils__/fixtures/index.d.ts +7 -0
  8. package/src/__test-utils__/fixtures/index.js +11 -0
  9. package/src/__test-utils__/fixtures/index.js.map +1 -0
  10. package/src/__test-utils__/fixtures/plugin.fixtures.d.ts +46 -0
  11. package/src/__test-utils__/fixtures/plugin.fixtures.js +127 -0
  12. package/src/__test-utils__/fixtures/plugin.fixtures.js.map +1 -0
  13. package/src/__test-utils__/fixtures/provider.fixtures.d.ts +69 -0
  14. package/src/__test-utils__/fixtures/provider.fixtures.js +131 -0
  15. package/src/__test-utils__/fixtures/provider.fixtures.js.map +1 -0
  16. package/src/__test-utils__/fixtures/scope.fixtures.d.ts +14 -0
  17. package/src/__test-utils__/fixtures/scope.fixtures.js +59 -0
  18. package/src/__test-utils__/fixtures/scope.fixtures.js.map +1 -0
  19. package/src/__test-utils__/fixtures/tool.fixtures.d.ts +36 -0
  20. package/src/__test-utils__/fixtures/tool.fixtures.js +91 -0
  21. package/src/__test-utils__/fixtures/tool.fixtures.js.map +1 -0
  22. package/src/__test-utils__/helpers/assertion.helpers.d.ts +45 -0
  23. package/src/__test-utils__/helpers/assertion.helpers.js +153 -0
  24. package/src/__test-utils__/helpers/assertion.helpers.js.map +1 -0
  25. package/src/__test-utils__/helpers/async.helpers.d.ts +48 -0
  26. package/src/__test-utils__/helpers/async.helpers.js +112 -0
  27. package/src/__test-utils__/helpers/async.helpers.js.map +1 -0
  28. package/src/__test-utils__/helpers/index.d.ts +6 -0
  29. package/src/__test-utils__/helpers/index.js +10 -0
  30. package/src/__test-utils__/helpers/index.js.map +1 -0
  31. package/src/__test-utils__/helpers/setup.helpers.d.ts +54 -0
  32. package/src/__test-utils__/helpers/setup.helpers.js +106 -0
  33. package/src/__test-utils__/helpers/setup.helpers.js.map +1 -0
  34. package/src/__test-utils__/index.d.ts +9 -0
  35. package/src/__test-utils__/index.js +14 -0
  36. package/src/__test-utils__/index.js.map +1 -0
  37. package/src/__test-utils__/mocks/flow-instance.mock.d.ts +50 -0
  38. package/src/__test-utils__/mocks/flow-instance.mock.js +72 -0
  39. package/src/__test-utils__/mocks/flow-instance.mock.js.map +1 -0
  40. package/src/__test-utils__/mocks/hook-registry.mock.d.ts +25 -0
  41. package/src/__test-utils__/mocks/hook-registry.mock.js +65 -0
  42. package/src/__test-utils__/mocks/hook-registry.mock.js.map +1 -0
  43. package/src/__test-utils__/mocks/index.d.ts +8 -0
  44. package/src/__test-utils__/mocks/index.js +12 -0
  45. package/src/__test-utils__/mocks/index.js.map +1 -0
  46. package/src/__test-utils__/mocks/plugin-registry.mock.d.ts +43 -0
  47. package/src/__test-utils__/mocks/plugin-registry.mock.js +70 -0
  48. package/src/__test-utils__/mocks/plugin-registry.mock.js.map +1 -0
  49. package/src/__test-utils__/mocks/provider-registry.mock.d.ts +39 -0
  50. package/src/__test-utils__/mocks/provider-registry.mock.js +72 -0
  51. package/src/__test-utils__/mocks/provider-registry.mock.js.map +1 -0
  52. package/src/__test-utils__/mocks/tool-registry.mock.d.ts +43 -0
  53. package/src/__test-utils__/mocks/tool-registry.mock.js +79 -0
  54. package/src/__test-utils__/mocks/tool-registry.mock.js.map +1 -0
  55. package/src/app/app.utils.js.map +1 -1
  56. package/src/app/instances/app.local.instance.js +8 -11
  57. package/src/app/instances/app.local.instance.js.map +1 -1
  58. package/src/auth/flows/oauth.authorize.flow.d.ts +8 -8
  59. package/src/auth/flows/oauth.register.flow.d.ts +4 -4
  60. package/src/auth/flows/oauth.token.flow.d.ts +4 -4
  61. package/src/auth/flows/well-known.jwks.flow.d.ts +12 -12
  62. package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +8 -8
  63. package/src/auth/flows/well-known.prm.flow.d.ts +4 -4
  64. package/src/common/decorators/tool.decorator.d.ts +97 -36
  65. package/src/common/decorators/tool.decorator.js +0 -1
  66. package/src/common/decorators/tool.decorator.js.map +1 -1
  67. package/src/common/entries/tool.entry.d.ts +54 -11
  68. package/src/common/entries/tool.entry.js +19 -0
  69. package/src/common/entries/tool.entry.js.map +1 -1
  70. package/src/common/interfaces/internal/registry.interface.d.ts +10 -2
  71. package/src/common/interfaces/internal/registry.interface.js.map +1 -1
  72. package/src/common/interfaces/plugin.interface.d.ts +1 -1
  73. package/src/common/interfaces/plugin.interface.js.map +1 -1
  74. package/src/common/interfaces/tool.interface.d.ts +12 -7
  75. package/src/common/interfaces/tool.interface.js +1 -1
  76. package/src/common/interfaces/tool.interface.js.map +1 -1
  77. package/src/common/metadata/front-mcp.metadata.d.ts +145 -145
  78. package/src/common/metadata/hook.metadata.d.ts +4 -2
  79. package/src/common/metadata/hook.metadata.js.map +1 -1
  80. package/src/common/metadata/prompt.metadata.d.ts +28 -28
  81. package/src/common/metadata/prompt.metadata.js.map +1 -1
  82. package/src/common/metadata/resource.metadata.d.ts +54 -54
  83. package/src/common/metadata/tool.metadata.d.ts +190 -7
  84. package/src/common/metadata/tool.metadata.js +41 -6
  85. package/src/common/metadata/tool.metadata.js.map +1 -1
  86. package/src/common/schemas/http-output.schema.d.ts +106 -106
  87. package/src/common/tokens/tool.tokens.js.map +1 -1
  88. package/src/common/types/options/logging.options.d.ts +1 -2
  89. package/src/common/types/options/logging.options.js +1 -9
  90. package/src/common/types/options/logging.options.js.map +1 -1
  91. package/src/common/types/options/server-info.options.d.ts +19 -19
  92. package/src/errors/error-handler.d.ts +65 -0
  93. package/src/errors/error-handler.js +107 -0
  94. package/src/errors/error-handler.js.map +1 -0
  95. package/src/errors/index.d.ts +2 -0
  96. package/src/errors/index.js +26 -0
  97. package/src/errors/index.js.map +1 -0
  98. package/src/errors/mcp.error.d.ts +156 -0
  99. package/src/errors/mcp.error.js +243 -0
  100. package/src/errors/mcp.error.js.map +1 -0
  101. package/src/flows/flow.instance.js +7 -6
  102. package/src/flows/flow.instance.js.map +1 -1
  103. package/src/flows/flow.registry.js +1 -1
  104. package/src/flows/flow.registry.js.map +1 -1
  105. package/src/front-mcp/front-mcp.providers.d.ts +20 -20
  106. package/src/hooks/hook.registry.d.ts +5 -3
  107. package/src/hooks/hook.registry.js +13 -1
  108. package/src/hooks/hook.registry.js.map +1 -1
  109. package/src/plugin/plugin.registry.d.ts +7 -2
  110. package/src/plugin/plugin.registry.js +23 -11
  111. package/src/plugin/plugin.registry.js.map +1 -1
  112. package/src/prompt/prompt.registry.js +1 -0
  113. package/src/prompt/prompt.registry.js.map +1 -1
  114. package/src/resource/resource.registry.js +1 -0
  115. package/src/resource/resource.registry.js.map +1 -1
  116. package/src/scope/scope.registry.js +1 -1
  117. package/src/scope/scope.registry.js.map +1 -1
  118. package/src/store/adapters/store.memory.adapter.js +3 -1
  119. package/src/store/adapters/store.memory.adapter.js.map +1 -1
  120. package/src/tool/flows/call-tool.flow.d.ts +1012 -676
  121. package/src/tool/flows/call-tool.flow.js +94 -61
  122. package/src/tool/flows/call-tool.flow.js.map +1 -1
  123. package/src/tool/flows/tools-list.flow.d.ts +347 -590
  124. package/src/tool/flows/tools-list.flow.js +76 -49
  125. package/src/tool/flows/tools-list.flow.js.map +1 -1
  126. package/src/tool/tool.instance.d.ts +27 -8
  127. package/src/tool/tool.instance.js +40 -5
  128. package/src/tool/tool.instance.js.map +1 -1
  129. package/src/tool/tool.registry.js +19 -21
  130. package/src/tool/tool.registry.js.map +1 -1
  131. package/src/tool/tool.utils.d.ts +3 -2
  132. package/src/tool/tool.utils.js +377 -14
  133. package/src/tool/tool.utils.js.map +1 -1
  134. package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
  135. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  136. package/src/transport/flows/handle.sse.flow.js +6 -13
  137. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  138. package/src/transport/flows/handle.streamable-http.flow.js +1 -0
  139. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  140. package/src/transport/mcp-handlers/call-tool-request.handler.d.ts +1 -1
  141. package/src/transport/mcp-handlers/call-tool-request.handler.js +10 -5
  142. package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
  143. package/src/transport/mcp-handlers/index.d.ts +151 -268
  144. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +124 -216
  145. package/src/transport/transport.local.js +1 -0
  146. package/src/transport/transport.local.js.map +1 -1
  147. package/src/utils/string.utils.js +1 -1
  148. package/src/utils/string.utils.js.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.helpers.js","sourceRoot":"","sources":["../../../../src/__test-utils__/helpers/setup.helpers.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B;;GAEG;;AAOH,sDAqBC;AAKD,kDAWC;AAKD,sCAeC;AAKD,4CAcC;AAKD,oDAOC;AAKD,8CAQC;AA1GD,4BAA0B;AAE1B;;GAEG;AACH,SAAgB,qBAAqB;IACnC,MAAM,UAAU,GAAsC,EAAE,CAAC;IAEzD,OAAO;QACL;;WAEG;QACH,SAAS,CAAC,EAA8B;YACtC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,OAAO;YACX,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtC,MAAM,EAAE,EAAE,CAAC;YACb,CAAC;YACD,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,MAA2F;IAE3F,OAAO,KAAK,EAAE,GAAG,IAAO,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7B,CAAC;gBAAS,CAAC;YACT,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACrD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;QACjC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,IAAI,GAA0D,EAAE,CAAC;IAEvE,OAAO;QACL,GAAG,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChF,IAAI,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClF,KAAK,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpF,IAAI,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAClF,KAAK,EAAE,CAAC,OAAe,EAAE,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpF,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;QACnB,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9B,MAAM,EAAE,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE,CACzC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB;IAClC,SAAS,CAAC,GAAG,EAAE;QACb,oCAAoC;QACpC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Helper utilities for test setup and teardown\n */\n\nimport 'reflect-metadata';\n\n/**\n * Creates a clean test environment with automatic cleanup\n */\nexport function createTestEnvironment() {\n const cleanupFns: Array<() => void | Promise<void>> = [];\n\n return {\n /**\n * Registers a cleanup function to be called after the test\n */\n onCleanup(fn: () => void | Promise<void>): void {\n cleanupFns.push(fn);\n },\n\n /**\n * Cleans up all registered resources\n */\n async cleanup(): Promise<void> {\n for (const fn of cleanupFns.reverse()) {\n await fn();\n }\n cleanupFns.length = 0;\n },\n };\n}\n\n/**\n * Wraps a test function with automatic environment setup and cleanup\n */\nexport function withTestEnvironment<T extends any[]>(\n testFn: (env: ReturnType<typeof createTestEnvironment>, ...args: T) => Promise<void> | void\n) {\n return async (...args: T) => {\n const env = createTestEnvironment();\n try {\n await testFn(env, ...args);\n } finally {\n await env.cleanup();\n }\n };\n}\n\n/**\n * Creates a mock timer for testing time-based operations\n */\nexport function useFakeTimers() {\n beforeEach(() => {\n jest.useFakeTimers();\n });\n\n afterEach(() => {\n jest.runOnlyPendingTimers();\n jest.useRealTimers();\n });\n\n return {\n advance: (ms: number) => jest.advanceTimersByTime(ms),\n runAll: () => jest.runAllTimers(),\n runPending: () => jest.runOnlyPendingTimers(),\n };\n}\n\n/**\n * Creates a test-specific logger that can be inspected\n */\nexport function createTestLogger() {\n const logs: Array<{ level: string; message: string; data?: any }> = [];\n\n return {\n log: (message: string, data?: any) => logs.push({ level: 'log', message, data }),\n warn: (message: string, data?: any) => logs.push({ level: 'warn', message, data }),\n error: (message: string, data?: any) => logs.push({ level: 'error', message, data }),\n info: (message: string, data?: any) => logs.push({ level: 'info', message, data }),\n debug: (message: string, data?: any) => logs.push({ level: 'debug', message, data }),\n getLogs: () => logs,\n clear: () => (logs.length = 0),\n hasLog: (level: string, message: string) =>\n logs.some((log) => log.level === level && log.message.includes(message)),\n };\n}\n\n/**\n * Ensures reflect-metadata is loaded for decorator tests\n */\nexport function setupReflectMetadata() {\n beforeAll(() => {\n // Ensure reflect-metadata is loaded\n if (typeof Reflect === 'undefined' || !Reflect.getMetadata) {\n throw new Error('reflect-metadata is not loaded');\n }\n });\n}\n\n/**\n * Clears all mocks between tests\n */\nexport function setupMockClearing() {\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n}\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Test utilities for FrontMCP SDK
3
+ *
4
+ * This module provides mock factories, test fixtures, and helper functions
5
+ * to make testing SDK components easier.
6
+ */
7
+ export * from './mocks';
8
+ export * from './fixtures';
9
+ export * from './helpers';
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Test utilities for FrontMCP SDK
5
+ *
6
+ * This module provides mock factories, test fixtures, and helper functions
7
+ * to make testing SDK components easier.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const tslib_1 = require("tslib");
11
+ tslib_1.__exportStar(require("./mocks"), exports);
12
+ tslib_1.__exportStar(require("./fixtures"), exports);
13
+ tslib_1.__exportStar(require("./helpers"), exports);
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/__test-utils__/index.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B;;;;;GAKG;;;AAEH,kDAAwB;AACxB,qDAA2B;AAC3B,oDAA0B","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Test utilities for FrontMCP SDK\n *\n * This module provides mock factories, test fixtures, and helper functions\n * to make testing SDK components easier.\n */\n\nexport * from './mocks';\nexport * from './fixtures';\nexport * from './helpers';\n"]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Mock factory for FlowInstance
3
+ */
4
+ /**
5
+ * Creates a mock FlowInstance for testing
6
+ */
7
+ export declare function createMockFlowInstance(overrides?: Partial<any>): {
8
+ stages: Map<string, any>;
9
+ name: string;
10
+ metadata: {
11
+ name: string;
12
+ stages: string[];
13
+ };
14
+ execute: jest.Mock<Promise<{
15
+ success: boolean;
16
+ result: string;
17
+ }>, [context: any], any>;
18
+ addStage: jest.Mock<void, [stageName: string, handler: any], any>;
19
+ getStage: jest.Mock<any, [stageName: string], any>;
20
+ hasStage: jest.Mock<boolean, [stageName: string], any>;
21
+ run: jest.Mock<Promise<any>, [context: any], any>;
22
+ };
23
+ /**
24
+ * Creates a mock flow context
25
+ */
26
+ export declare function createMockFlowContext(overrides?: Partial<any>): {
27
+ flowName: string;
28
+ stage: string;
29
+ data: {};
30
+ result: undefined;
31
+ error: undefined;
32
+ respond: jest.Mock<{
33
+ responded: boolean;
34
+ result: any;
35
+ }, [result: any], any>;
36
+ fail: jest.Mock<{
37
+ failed: boolean;
38
+ error: any;
39
+ }, [error: any], any>;
40
+ abort: jest.Mock<{
41
+ aborted: boolean;
42
+ }, [], any>;
43
+ next: jest.Mock<Promise<{
44
+ continued: boolean;
45
+ }>, [], any>;
46
+ };
47
+ /**
48
+ * Creates a mock stage handler
49
+ */
50
+ export declare function createMockStageHandler(implementation?: (ctx: any) => Promise<any>): jest.Mock<Promise<any>, [ctx: any], any>;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Mock factory for FlowInstance
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createMockFlowInstance = createMockFlowInstance;
8
+ exports.createMockFlowContext = createMockFlowContext;
9
+ exports.createMockStageHandler = createMockStageHandler;
10
+ /**
11
+ * Creates a mock FlowInstance for testing
12
+ */
13
+ function createMockFlowInstance(overrides = {}) {
14
+ const stages = new Map();
15
+ return {
16
+ stages,
17
+ name: 'TestFlow',
18
+ metadata: {
19
+ name: 'TestFlow',
20
+ stages: ['pre', 'execute', 'post', 'finalize'],
21
+ },
22
+ execute: jest.fn(async (context) => {
23
+ return { success: true, result: 'mock result' };
24
+ }),
25
+ addStage: jest.fn((stageName, handler) => {
26
+ stages.set(stageName, handler);
27
+ }),
28
+ getStage: jest.fn((stageName) => {
29
+ return stages.get(stageName);
30
+ }),
31
+ hasStage: jest.fn((stageName) => {
32
+ return stages.has(stageName);
33
+ }),
34
+ run: jest.fn(async (context) => {
35
+ // Mock run implementation
36
+ return context;
37
+ }),
38
+ ...overrides,
39
+ };
40
+ }
41
+ /**
42
+ * Creates a mock flow context
43
+ */
44
+ function createMockFlowContext(overrides = {}) {
45
+ return {
46
+ flowName: 'TestFlow',
47
+ stage: 'execute',
48
+ data: {},
49
+ result: undefined,
50
+ error: undefined,
51
+ respond: jest.fn((result) => {
52
+ return { responded: true, result };
53
+ }),
54
+ fail: jest.fn((error) => {
55
+ return { failed: true, error };
56
+ }),
57
+ abort: jest.fn(() => {
58
+ return { aborted: true };
59
+ }),
60
+ next: jest.fn(async () => {
61
+ return { continued: true };
62
+ }),
63
+ ...overrides,
64
+ };
65
+ }
66
+ /**
67
+ * Creates a mock stage handler
68
+ */
69
+ function createMockStageHandler(implementation) {
70
+ return jest.fn(implementation || (async (ctx) => ctx));
71
+ }
72
+ //# sourceMappingURL=flow-instance.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-instance.mock.js","sourceRoot":"","sources":["../../../../src/__test-utils__/mocks/flow-instance.mock.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B;;GAEG;;AAKH,wDAkCC;AAKD,sDA0BC;AAKD,wDAEC;AA3ED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,YAA0B,EAAE;IACjE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAe,CAAC;IAEtC,OAAO;QACL,MAAM;QACN,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC;SAC/C;QAED,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;YACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAClD,CAAC,CAAC;QAEF,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,SAAiB,EAAE,OAAY,EAAE,EAAE;YACpD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,SAAiB,EAAE,EAAE;YACtC,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,SAAiB,EAAE,EAAE;YACtC,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;YAClC,0BAA0B;YAC1B,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,YAA0B,EAAE;IAChE,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,SAAS;QAEhB,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAW,EAAE,EAAE;YAC/B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACrC,CAAC,CAAC;QAEF,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAU,EAAE,EAAE;YAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACjC,CAAC,CAAC;QAEF,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC,CAAC;QAEF,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;YACvB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC,CAAC;QAEF,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,cAA2C;IAChF,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,KAAK,EAAE,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Mock factory for FlowInstance\n */\n\n/**\n * Creates a mock FlowInstance for testing\n */\nexport function createMockFlowInstance(overrides: Partial<any> = {}) {\n const stages = new Map<string, any>();\n\n return {\n stages,\n name: 'TestFlow',\n metadata: {\n name: 'TestFlow',\n stages: ['pre', 'execute', 'post', 'finalize'],\n },\n\n execute: jest.fn(async (context: any) => {\n return { success: true, result: 'mock result' };\n }),\n\n addStage: jest.fn((stageName: string, handler: any) => {\n stages.set(stageName, handler);\n }),\n\n getStage: jest.fn((stageName: string) => {\n return stages.get(stageName);\n }),\n\n hasStage: jest.fn((stageName: string) => {\n return stages.has(stageName);\n }),\n\n run: jest.fn(async (context: any) => {\n // Mock run implementation\n return context;\n }),\n\n ...overrides,\n };\n}\n\n/**\n * Creates a mock flow context\n */\nexport function createMockFlowContext(overrides: Partial<any> = {}) {\n return {\n flowName: 'TestFlow',\n stage: 'execute',\n data: {},\n result: undefined,\n error: undefined,\n\n respond: jest.fn((result: any) => {\n return { responded: true, result };\n }),\n\n fail: jest.fn((error: any) => {\n return { failed: true, error };\n }),\n\n abort: jest.fn(() => {\n return { aborted: true };\n }),\n\n next: jest.fn(async () => {\n return { continued: true };\n }),\n\n ...overrides,\n };\n}\n\n/**\n * Creates a mock stage handler\n */\nexport function createMockStageHandler(implementation?: (ctx: any) => Promise<any>) {\n return jest.fn(implementation || (async (ctx: any) => ctx));\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Mock factory for HookRegistry
3
+ */
4
+ import { HookMetadata } from '../../common/metadata';
5
+ /**
6
+ * Creates a mock HookRegistry for testing
7
+ */
8
+ export declare function createMockHookRegistry(overrides?: Partial<any>): {
9
+ hooks: HookMetadata<keyof ExtendFlows, string, any>[];
10
+ register: jest.Mock<HookMetadata<keyof ExtendFlows, string, any>, [hookMetadata: HookMetadata<keyof ExtendFlows, string, any>], any>;
11
+ getHooks: jest.Mock<HookMetadata<keyof ExtendFlows, string, any>[], [], any>;
12
+ getHooksForFlow: jest.Mock<HookMetadata<keyof ExtendFlows, string, any>[], [flowName: string], any>;
13
+ getHooksForStage: jest.Mock<HookMetadata<keyof ExtendFlows, string, any>[], [flowName: string, stage: string], any>;
14
+ getHooksByPriority: jest.Mock<HookMetadata<keyof ExtendFlows, string, any>[], [flowName: string, stage: string], any>;
15
+ clear: jest.Mock<void, [], any>;
16
+ executeHooks: jest.Mock<Promise<any>, [flowName: string, stage: string, context: any], any>;
17
+ };
18
+ /**
19
+ * Creates a mock hook entry
20
+ */
21
+ export declare function createMockHookEntry(flowName: string, stage: string, priority?: number): HookMetadata;
22
+ /**
23
+ * Adds a hook to a mock registry
24
+ */
25
+ export declare function addHookToMock(registry: ReturnType<typeof createMockHookRegistry>, hookMetadata: HookMetadata): void;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Mock factory for HookRegistry
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createMockHookRegistry = createMockHookRegistry;
8
+ exports.createMockHookEntry = createMockHookEntry;
9
+ exports.addHookToMock = addHookToMock;
10
+ /**
11
+ * Creates a mock HookRegistry for testing
12
+ */
13
+ function createMockHookRegistry(overrides = {}) {
14
+ const hooks = [];
15
+ return {
16
+ hooks,
17
+ register: jest.fn((hookMetadata) => {
18
+ hooks.push(hookMetadata);
19
+ return hookMetadata;
20
+ }),
21
+ getHooks: jest.fn(() => hooks),
22
+ getHooksForFlow: jest.fn((flowName) => {
23
+ return hooks.filter((h) => h.flow === flowName);
24
+ }),
25
+ getHooksForStage: jest.fn((flowName, stage) => {
26
+ return hooks.filter((h) => h.flow === flowName && h.stage === stage);
27
+ }),
28
+ getHooksByPriority: jest.fn((flowName, stage) => {
29
+ return hooks
30
+ .filter((h) => h.flow === flowName && h.stage === stage)
31
+ .sort((a, b) => (a.priority || 0) - (b.priority || 0));
32
+ }),
33
+ clear: jest.fn(() => {
34
+ hooks.length = 0;
35
+ }),
36
+ executeHooks: jest.fn(async (flowName, stage, context) => {
37
+ const stageHooks = hooks.filter((h) => h.flow === flowName && h.stage === stage);
38
+ for (const hook of stageHooks) {
39
+ // Mock hook execution
40
+ }
41
+ return context;
42
+ }),
43
+ ...overrides,
44
+ };
45
+ }
46
+ /**
47
+ * Creates a mock hook entry
48
+ */
49
+ function createMockHookEntry(flowName, stage, priority = 0) {
50
+ return {
51
+ type: 'stage',
52
+ flow: flowName,
53
+ stage,
54
+ target: Symbol('MOCK_HOOK'),
55
+ method: 'onStage',
56
+ priority,
57
+ };
58
+ }
59
+ /**
60
+ * Adds a hook to a mock registry
61
+ */
62
+ function addHookToMock(registry, hookMetadata) {
63
+ registry.hooks.push(hookMetadata);
64
+ }
65
+ //# sourceMappingURL=hook-registry.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-registry.mock.js","sourceRoot":"","sources":["../../../../src/__test-utils__/mocks/hook-registry.mock.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B;;GAEG;;AAOH,wDAyCC;AAKD,kDAaC;AAKD,sCAKC;AAxED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,YAA0B,EAAE;IACjE,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,OAAO;QACL,KAAK;QAEL,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,YAA0B,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC;QAEF,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QAE9B,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,EAAE;YAC5C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAClD,CAAC,CAAC;QAEF,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,KAAa,EAAE,EAAE;YAC5D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACvE,CAAC,CAAC;QAEF,kBAAkB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,KAAa,EAAE,EAAE;YAC9D,OAAO,KAAK;iBACT,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;iBACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC;QAEF,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YAClB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,QAAgB,EAAE,KAAa,EAAE,OAAY,EAAE,EAAE;YAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;YACjF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,sBAAsB;YACxB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;QAEF,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CACjC,QAAgB,EAChB,KAAa,EACb,WAAmB,CAAC;IAEpB,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,QAAe;QACrB,KAAK;QACL,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC;QAC3B,MAAM,EAAE,SAAS;QACjB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAC3B,QAAmD,EACnD,YAA0B;IAE1B,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Mock factory for HookRegistry\n */\n\nimport { HookMetadata } from '../../common/metadata';\n\n/**\n * Creates a mock HookRegistry for testing\n */\nexport function createMockHookRegistry(overrides: Partial<any> = {}) {\n const hooks: HookMetadata[] = [];\n\n return {\n hooks,\n\n register: jest.fn((hookMetadata: HookMetadata) => {\n hooks.push(hookMetadata);\n return hookMetadata;\n }),\n\n getHooks: jest.fn(() => hooks),\n\n getHooksForFlow: jest.fn((flowName: string) => {\n return hooks.filter((h) => h.flow === flowName);\n }),\n\n getHooksForStage: jest.fn((flowName: string, stage: string) => {\n return hooks.filter((h) => h.flow === flowName && h.stage === stage);\n }),\n\n getHooksByPriority: jest.fn((flowName: string, stage: string) => {\n return hooks\n .filter((h) => h.flow === flowName && h.stage === stage)\n .sort((a, b) => (a.priority || 0) - (b.priority || 0));\n }),\n\n clear: jest.fn(() => {\n hooks.length = 0;\n }),\n\n executeHooks: jest.fn(async (flowName: string, stage: string, context: any) => {\n const stageHooks = hooks.filter((h) => h.flow === flowName && h.stage === stage);\n for (const hook of stageHooks) {\n // Mock hook execution\n }\n return context;\n }),\n\n ...overrides,\n };\n}\n\n/**\n * Creates a mock hook entry\n */\nexport function createMockHookEntry(\n flowName: string,\n stage: string,\n priority: number = 0\n): HookMetadata {\n return {\n type: 'stage',\n flow: flowName as any,\n stage,\n target: Symbol('MOCK_HOOK'),\n method: 'onStage',\n priority,\n };\n}\n\n/**\n * Adds a hook to a mock registry\n */\nexport function addHookToMock(\n registry: ReturnType<typeof createMockHookRegistry>,\n hookMetadata: HookMetadata\n) {\n registry.hooks.push(hookMetadata);\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Mock factories for SDK registries and components
3
+ */
4
+ export * from './provider-registry.mock';
5
+ export * from './flow-instance.mock';
6
+ export * from './hook-registry.mock';
7
+ export * from './tool-registry.mock';
8
+ export * from './plugin-registry.mock';
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ /**
3
+ * Mock factories for SDK registries and components
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const tslib_1 = require("tslib");
7
+ tslib_1.__exportStar(require("./provider-registry.mock"), exports);
8
+ tslib_1.__exportStar(require("./flow-instance.mock"), exports);
9
+ tslib_1.__exportStar(require("./hook-registry.mock"), exports);
10
+ tslib_1.__exportStar(require("./tool-registry.mock"), exports);
11
+ tslib_1.__exportStar(require("./plugin-registry.mock"), exports);
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/__test-utils__/mocks/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mEAAyC;AACzC,+DAAqC;AACrC,+DAAqC;AACrC,+DAAqC;AACrC,iEAAuC","sourcesContent":["/**\n * Mock factories for SDK registries and components\n */\n\nexport * from './provider-registry.mock';\nexport * from './flow-instance.mock';\nexport * from './hook-registry.mock';\nexport * from './tool-registry.mock';\nexport * from './plugin-registry.mock';\n"]}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Mock factory for PluginRegistry
3
+ */
4
+ import { PluginMetadata } from '../../common/metadata';
5
+ /**
6
+ * Creates a mock PluginRegistry for testing
7
+ */
8
+ export declare function createMockPluginRegistry(overrides?: Partial<any>): {
9
+ plugins: Map<string, any>;
10
+ register: jest.Mock<any, [pluginName: string, plugin: any], any>;
11
+ get: jest.Mock<any, [pluginName: string], any>;
12
+ has: jest.Mock<boolean, [pluginName: string], any>;
13
+ getAll: jest.Mock<any[], [], any>;
14
+ getNames: jest.Mock<string[], [], any>;
15
+ clear: jest.Mock<void, [], any>;
16
+ getProviderRegistry: jest.Mock<null, [], any>;
17
+ getToolRegistry: jest.Mock<null, [], any>;
18
+ getHookRegistry: jest.Mock<null, [], any>;
19
+ };
20
+ /**
21
+ * Creates a mock plugin entry
22
+ */
23
+ export declare function createMockPluginEntry(name: string, metadata?: Partial<PluginMetadata>): {
24
+ name: string;
25
+ metadata: {
26
+ id?: string;
27
+ name: string;
28
+ description: string;
29
+ providers?: import("@frontmcp/sdk").ProviderType[];
30
+ exports?: import("@frontmcp/sdk").ProviderType[];
31
+ plugins?: import("@frontmcp/sdk").PluginType[];
32
+ adapters?: import("@frontmcp/sdk").AdapterType[];
33
+ tools?: import("@frontmcp/sdk").ToolType[];
34
+ resources?: import("@frontmcp/sdk").ResourceType[];
35
+ prompts?: import("@frontmcp/sdk").PromptType[];
36
+ };
37
+ onInit: jest.Mock<Promise<void>, [], any>;
38
+ onDestroy: jest.Mock<Promise<void>, [], any>;
39
+ };
40
+ /**
41
+ * Adds a plugin to a mock registry
42
+ */
43
+ export declare function addPluginToMock(registry: ReturnType<typeof createMockPluginRegistry>, name: string, pluginEntry: any): void;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Mock factory for PluginRegistry
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createMockPluginRegistry = createMockPluginRegistry;
8
+ exports.createMockPluginEntry = createMockPluginEntry;
9
+ exports.addPluginToMock = addPluginToMock;
10
+ /**
11
+ * Creates a mock PluginRegistry for testing
12
+ */
13
+ function createMockPluginRegistry(overrides = {}) {
14
+ const plugins = new Map();
15
+ return {
16
+ plugins,
17
+ register: jest.fn((pluginName, plugin) => {
18
+ plugins.set(pluginName, plugin);
19
+ return plugin;
20
+ }),
21
+ get: jest.fn((pluginName) => {
22
+ return plugins.get(pluginName);
23
+ }),
24
+ has: jest.fn((pluginName) => {
25
+ return plugins.has(pluginName);
26
+ }),
27
+ getAll: jest.fn(() => {
28
+ return Array.from(plugins.values());
29
+ }),
30
+ getNames: jest.fn(() => {
31
+ return Array.from(plugins.keys());
32
+ }),
33
+ clear: jest.fn(() => {
34
+ plugins.clear();
35
+ }),
36
+ // Nested registries access
37
+ getProviderRegistry: jest.fn(() => null),
38
+ getToolRegistry: jest.fn(() => null),
39
+ getHookRegistry: jest.fn(() => null),
40
+ ...overrides,
41
+ };
42
+ }
43
+ /**
44
+ * Creates a mock plugin entry
45
+ */
46
+ function createMockPluginEntry(name, metadata) {
47
+ return {
48
+ name,
49
+ metadata: {
50
+ name,
51
+ description: `Mock plugin: ${name}`,
52
+ ...metadata,
53
+ },
54
+ onInit: jest.fn(async () => { }),
55
+ onDestroy: jest.fn(async () => { }),
56
+ };
57
+ }
58
+ /**
59
+ * Adds a plugin to a mock registry
60
+ */
61
+ function addPluginToMock(registry, name, pluginEntry) {
62
+ registry.plugins.set(name, pluginEntry);
63
+ registry.has.mockImplementation((n) => n === name || registry.plugins.has(n));
64
+ registry.get.mockImplementation((n) => {
65
+ if (n === name)
66
+ return pluginEntry;
67
+ return registry.plugins.get(n);
68
+ });
69
+ }
70
+ //# sourceMappingURL=plugin-registry.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-registry.mock.js","sourceRoot":"","sources":["../../../../src/__test-utils__/mocks/plugin-registry.mock.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B;;GAEG;;AAOH,4DAsCC;AAKD,sDAWC;AAKD,0CAOC;AArED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,YAA0B,EAAE;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IAEvC,OAAO;QACL,OAAO;QAEP,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,UAAkB,EAAE,MAAW,EAAE,EAAE;YACpD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,UAAkB,EAAE,EAAE;YAClC,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,UAAkB,EAAE,EAAE;YAClC,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACnB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YACrB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC;QAEF,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;YAClB,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC,CAAC;QAEF,2BAA2B;QAC3B,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACxC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACpC,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QAEpC,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,IAAY,EAAE,QAAkC;IACpF,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE;YACR,IAAI;YACJ,WAAW,EAAE,gBAAgB,IAAI,EAAE;YACnC,GAAG,QAAQ;SACZ;QACD,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;QAC/B,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,QAAqD,EAAE,IAAY,EAAE,WAAgB;IACnH,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAS,EAAE,EAAE;QAC5C,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,WAAW,CAAC;QACnC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Mock factory for PluginRegistry\n */\n\nimport { PluginMetadata } from '../../common/metadata';\n\n/**\n * Creates a mock PluginRegistry for testing\n */\nexport function createMockPluginRegistry(overrides: Partial<any> = {}) {\n const plugins = new Map<string, any>();\n\n return {\n plugins,\n\n register: jest.fn((pluginName: string, plugin: any) => {\n plugins.set(pluginName, plugin);\n return plugin;\n }),\n\n get: jest.fn((pluginName: string) => {\n return plugins.get(pluginName);\n }),\n\n has: jest.fn((pluginName: string) => {\n return plugins.has(pluginName);\n }),\n\n getAll: jest.fn(() => {\n return Array.from(plugins.values());\n }),\n\n getNames: jest.fn(() => {\n return Array.from(plugins.keys());\n }),\n\n clear: jest.fn(() => {\n plugins.clear();\n }),\n\n // Nested registries access\n getProviderRegistry: jest.fn(() => null),\n getToolRegistry: jest.fn(() => null),\n getHookRegistry: jest.fn(() => null),\n\n ...overrides,\n };\n}\n\n/**\n * Creates a mock plugin entry\n */\nexport function createMockPluginEntry(name: string, metadata?: Partial<PluginMetadata>) {\n return {\n name,\n metadata: {\n name,\n description: `Mock plugin: ${name}`,\n ...metadata,\n },\n onInit: jest.fn(async () => {}),\n onDestroy: jest.fn(async () => {}),\n };\n}\n\n/**\n * Adds a plugin to a mock registry\n */\nexport function addPluginToMock(registry: ReturnType<typeof createMockPluginRegistry>, name: string, pluginEntry: any) {\n registry.plugins.set(name, pluginEntry);\n registry.has.mockImplementation((n: string) => n === name || registry.plugins.has(n));\n registry.get.mockImplementation((n: string) => {\n if (n === name) return pluginEntry;\n return registry.plugins.get(n);\n });\n}\n"]}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Mock factory for ProviderRegistry
3
+ */
4
+ import { Token } from '../../common/interfaces';
5
+ import { ProviderScope } from '../../common/metadata';
6
+ /**
7
+ * Creates a mock ProviderRegistry for testing
8
+ */
9
+ export declare function createMockProviderRegistry(overrides?: Partial<any>): {
10
+ instances: Map<import("../../common/interfaces").Reference<any>, any>;
11
+ defs: Map<import("../../common/interfaces").Reference<any>, any>;
12
+ ready: Promise<void>;
13
+ getProviders: jest.Mock<never[], [], any>;
14
+ get: jest.Mock<any, [token: import("../../common/interfaces").Reference<any>], any>;
15
+ has: jest.Mock<boolean, [token: import("../../common/interfaces").Reference<any>], any>;
16
+ set: jest.Mock<void, [token: import("../../common/interfaces").Reference<any>, value: any], any>;
17
+ resolve: jest.Mock<Promise<any>, [token: import("../../common/interfaces").Reference<any>], any>;
18
+ createViews: jest.Mock<{
19
+ global: Map<import("../../common/interfaces").Reference<any>, any>;
20
+ session: Map<any, any>;
21
+ request: Map<any, any>;
22
+ }, [sessionId?: string | undefined], any>;
23
+ };
24
+ /**
25
+ * Creates a mock provider entry
26
+ */
27
+ export declare function createMockProviderEntry(token: Token, value: any, scope?: ProviderScope): {
28
+ token: import("../../common/interfaces").Reference<any>;
29
+ value: any;
30
+ scope: ProviderScope;
31
+ metadata: {
32
+ name: string;
33
+ scope: ProviderScope;
34
+ };
35
+ };
36
+ /**
37
+ * Adds a provider to a mock registry
38
+ */
39
+ export declare function addProviderToMock(registry: ReturnType<typeof createMockProviderRegistry>, token: Token, value: any): void;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Mock factory for ProviderRegistry
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createMockProviderRegistry = createMockProviderRegistry;
8
+ exports.createMockProviderEntry = createMockProviderEntry;
9
+ exports.addProviderToMock = addProviderToMock;
10
+ const metadata_1 = require("../../common/metadata");
11
+ /**
12
+ * Creates a mock ProviderRegistry for testing
13
+ */
14
+ function createMockProviderRegistry(overrides = {}) {
15
+ const instances = new Map();
16
+ const defs = new Map();
17
+ return {
18
+ instances,
19
+ defs,
20
+ ready: Promise.resolve(),
21
+ getProviders: jest.fn(() => []),
22
+ get: jest.fn((token) => {
23
+ if (instances.has(token)) {
24
+ return instances.get(token);
25
+ }
26
+ throw new Error(`Token not found: ${String(token)}`);
27
+ }),
28
+ has: jest.fn((token) => instances.has(token)),
29
+ set: jest.fn((token, value) => {
30
+ instances.set(token, value);
31
+ }),
32
+ resolve: jest.fn(async (token) => {
33
+ if (instances.has(token)) {
34
+ return instances.get(token);
35
+ }
36
+ throw new Error(`Cannot resolve token: ${String(token)}`);
37
+ }),
38
+ createViews: jest.fn((sessionId) => ({
39
+ global: new Map(instances),
40
+ session: new Map(),
41
+ request: new Map(),
42
+ })),
43
+ ...overrides,
44
+ };
45
+ }
46
+ /**
47
+ * Creates a mock provider entry
48
+ */
49
+ function createMockProviderEntry(token, value, scope = metadata_1.ProviderScope.GLOBAL) {
50
+ return {
51
+ token,
52
+ value,
53
+ scope,
54
+ metadata: {
55
+ name: String(token),
56
+ scope,
57
+ },
58
+ };
59
+ }
60
+ /**
61
+ * Adds a provider to a mock registry
62
+ */
63
+ function addProviderToMock(registry, token, value) {
64
+ registry.instances.set(token, value);
65
+ registry.has.mockImplementation((t) => t === token || registry.instances.has(t));
66
+ registry.get.mockImplementation((t) => {
67
+ if (t === token)
68
+ return value;
69
+ return registry.instances.get(t);
70
+ });
71
+ }
72
+ //# sourceMappingURL=provider-registry.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.mock.js","sourceRoot":"","sources":["../../../../src/__test-utils__/mocks/provider-registry.mock.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B;;GAEG;;AAQH,gEAuCC;AAKD,0DAUC;AAKD,8CAOC;AAvED,oDAAsD;AAEtD;;GAEG;AACH,SAAgB,0BAA0B,CAAC,YAA0B,EAAE;IACrE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAc,CAAC;IAEnC,OAAO;QACL,SAAS;QACT,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;QAExB,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QAE/B,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAY,EAAE,EAAE;YAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEpD,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAY,EAAE,KAAU,EAAE,EAAE;YACxC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAY,EAAE,EAAE;YACtC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC;QAEF,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,SAAkB,EAAE,EAAE,CAAC,CAAC;YAC5C,MAAM,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC;YAC1B,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,OAAO,EAAE,IAAI,GAAG,EAAE;SACnB,CAAC,CAAC;QAEH,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,KAAY,EAAE,KAAU,EAAE,QAAuB,wBAAa,CAAC,MAAM;IAC3G,OAAO;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;YACnB,KAAK;SACN;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,QAAuD,EAAE,KAAY,EAAE,KAAU;IACjH,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAQ,EAAE,EAAE;QAC3C,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAC9B,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Mock factory for ProviderRegistry\n */\n\nimport { Token } from '../../common/interfaces';\nimport { ProviderScope } from '../../common/metadata';\n\n/**\n * Creates a mock ProviderRegistry for testing\n */\nexport function createMockProviderRegistry(overrides: Partial<any> = {}) {\n const instances = new Map<Token, any>();\n const defs = new Map<Token, any>();\n\n return {\n instances,\n defs,\n ready: Promise.resolve(),\n\n getProviders: jest.fn(() => []),\n\n get: jest.fn((token: Token) => {\n if (instances.has(token)) {\n return instances.get(token);\n }\n throw new Error(`Token not found: ${String(token)}`);\n }),\n\n has: jest.fn((token: Token) => instances.has(token)),\n\n set: jest.fn((token: Token, value: any) => {\n instances.set(token, value);\n }),\n\n resolve: jest.fn(async (token: Token) => {\n if (instances.has(token)) {\n return instances.get(token);\n }\n throw new Error(`Cannot resolve token: ${String(token)}`);\n }),\n\n createViews: jest.fn((sessionId?: string) => ({\n global: new Map(instances),\n session: new Map(),\n request: new Map(),\n })),\n\n ...overrides,\n };\n}\n\n/**\n * Creates a mock provider entry\n */\nexport function createMockProviderEntry(token: Token, value: any, scope: ProviderScope = ProviderScope.GLOBAL) {\n return {\n token,\n value,\n scope,\n metadata: {\n name: String(token),\n scope,\n },\n };\n}\n\n/**\n * Adds a provider to a mock registry\n */\nexport function addProviderToMock(registry: ReturnType<typeof createMockProviderRegistry>, token: Token, value: any) {\n registry.instances.set(token, value);\n registry.has.mockImplementation((t: Token) => t === token || registry.instances.has(t));\n registry.get.mockImplementation((t: Token) => {\n if (t === token) return value;\n return registry.instances.get(t);\n });\n}\n"]}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Mock factory for ToolRegistry
3
+ */
4
+ import { ToolMetadata } from '../../common/metadata';
5
+ /**
6
+ * Creates a mock ToolRegistry for testing
7
+ */
8
+ export declare function createMockToolRegistry(overrides?: Partial<any>): {
9
+ tools: Map<string, any>;
10
+ register: jest.Mock<any, [name: string, toolInstance: any], any>;
11
+ get: jest.Mock<any, [name: string], any>;
12
+ has: jest.Mock<boolean, [name: string], any>;
13
+ getAll: jest.Mock<any[], [], any>;
14
+ getNames: jest.Mock<string[], [], any>;
15
+ list: jest.Mock<{
16
+ name: string;
17
+ metadata: any;
18
+ }[], [], any>;
19
+ clear: jest.Mock<void, [], any>;
20
+ call: jest.Mock<Promise<any>, [name: string, input: any], any>;
21
+ };
22
+ /**
23
+ * Creates a mock tool entry
24
+ */
25
+ export declare function createMockToolEntry(name: string, metadata?: Partial<ToolMetadata>, execute?: (input: any) => Promise<any>): {
26
+ name: string;
27
+ metadata: {
28
+ id?: string;
29
+ name: string;
30
+ description: string;
31
+ inputSchema: import("zod").ZodRawShape;
32
+ rawInputSchema?: import("json-schema").JSONSchema7;
33
+ outputSchema?: import("../../common/metadata").ToolOutputType;
34
+ tags?: string[];
35
+ annotations?: import("../../common/metadata").ToolAnnotations;
36
+ hideFromDiscovery?: boolean;
37
+ };
38
+ execute: jest.Mock<Promise<any>, [input: any], any>;
39
+ };
40
+ /**
41
+ * Adds a tool to a mock registry
42
+ */
43
+ export declare function addToolToMock(registry: ReturnType<typeof createMockToolRegistry>, name: string, toolEntry: any): void;