@frontmcp/sdk 0.3.0 → 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 (169) 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/auth.registry.d.ts +2 -2
  59. package/src/auth/auth.registry.js +3 -3
  60. package/src/auth/auth.registry.js.map +1 -1
  61. package/src/auth/flows/oauth.authorize.flow.d.ts +8 -8
  62. package/src/auth/flows/oauth.register.flow.d.ts +4 -4
  63. package/src/auth/flows/oauth.token.flow.d.ts +4 -4
  64. package/src/auth/flows/well-known.jwks.flow.d.ts +12 -12
  65. package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +8 -8
  66. package/src/auth/flows/well-known.prm.flow.d.ts +4 -4
  67. package/src/auth/instances/instance.local-primary-auth.d.ts +3 -2
  68. package/src/auth/instances/instance.local-primary-auth.js +4 -2
  69. package/src/auth/instances/instance.local-primary-auth.js.map +1 -1
  70. package/src/auth/instances/instance.remote-primary-auth.d.ts +3 -2
  71. package/src/auth/instances/instance.remote-primary-auth.js +3 -1
  72. package/src/auth/instances/instance.remote-primary-auth.js.map +1 -1
  73. package/src/auth/jwks/jwks.service.js +0 -1
  74. package/src/auth/jwks/jwks.service.js.map +1 -1
  75. package/src/common/decorators/tool.decorator.d.ts +97 -36
  76. package/src/common/decorators/tool.decorator.js +0 -1
  77. package/src/common/decorators/tool.decorator.js.map +1 -1
  78. package/src/common/entries/scope.entry.d.ts +1 -0
  79. package/src/common/entries/scope.entry.js +6 -0
  80. package/src/common/entries/scope.entry.js.map +1 -1
  81. package/src/common/entries/tool.entry.d.ts +54 -11
  82. package/src/common/entries/tool.entry.js +19 -0
  83. package/src/common/entries/tool.entry.js.map +1 -1
  84. package/src/common/interfaces/internal/registry.interface.d.ts +10 -2
  85. package/src/common/interfaces/internal/registry.interface.js.map +1 -1
  86. package/src/common/interfaces/plugin.interface.d.ts +1 -1
  87. package/src/common/interfaces/plugin.interface.js.map +1 -1
  88. package/src/common/interfaces/tool.interface.d.ts +12 -7
  89. package/src/common/interfaces/tool.interface.js +1 -1
  90. package/src/common/interfaces/tool.interface.js.map +1 -1
  91. package/src/common/metadata/front-mcp.metadata.d.ts +145 -145
  92. package/src/common/metadata/hook.metadata.d.ts +4 -2
  93. package/src/common/metadata/hook.metadata.js.map +1 -1
  94. package/src/common/metadata/prompt.metadata.d.ts +28 -28
  95. package/src/common/metadata/prompt.metadata.js.map +1 -1
  96. package/src/common/metadata/resource.metadata.d.ts +54 -54
  97. package/src/common/metadata/tool.metadata.d.ts +190 -7
  98. package/src/common/metadata/tool.metadata.js +41 -6
  99. package/src/common/metadata/tool.metadata.js.map +1 -1
  100. package/src/common/records/scope.record.d.ts +2 -2
  101. package/src/common/records/scope.record.js.map +1 -1
  102. package/src/common/schemas/http-output.schema.d.ts +106 -106
  103. package/src/common/tokens/tool.tokens.js.map +1 -1
  104. package/src/common/types/options/logging.options.d.ts +1 -2
  105. package/src/common/types/options/logging.options.js +1 -9
  106. package/src/common/types/options/logging.options.js.map +1 -1
  107. package/src/common/types/options/server-info.options.d.ts +19 -19
  108. package/src/errors/error-handler.d.ts +65 -0
  109. package/src/errors/error-handler.js +107 -0
  110. package/src/errors/error-handler.js.map +1 -0
  111. package/src/errors/index.d.ts +2 -0
  112. package/src/errors/index.js +26 -0
  113. package/src/errors/index.js.map +1 -0
  114. package/src/errors/mcp.error.d.ts +156 -0
  115. package/src/errors/mcp.error.js +243 -0
  116. package/src/errors/mcp.error.js.map +1 -0
  117. package/src/flows/flow.instance.js +7 -6
  118. package/src/flows/flow.instance.js.map +1 -1
  119. package/src/flows/flow.registry.js +1 -1
  120. package/src/flows/flow.registry.js.map +1 -1
  121. package/src/front-mcp/front-mcp.providers.d.ts +20 -20
  122. package/src/hooks/hook.registry.d.ts +5 -3
  123. package/src/hooks/hook.registry.js +13 -1
  124. package/src/hooks/hook.registry.js.map +1 -1
  125. package/src/plugin/plugin.registry.d.ts +7 -2
  126. package/src/plugin/plugin.registry.js +23 -11
  127. package/src/plugin/plugin.registry.js.map +1 -1
  128. package/src/prompt/prompt.registry.js +1 -0
  129. package/src/prompt/prompt.registry.js.map +1 -1
  130. package/src/resource/resource.registry.js +1 -0
  131. package/src/resource/resource.registry.js.map +1 -1
  132. package/src/scope/scope.instance.js +8 -2
  133. package/src/scope/scope.instance.js.map +1 -1
  134. package/src/scope/scope.registry.js +3 -2
  135. package/src/scope/scope.registry.js.map +1 -1
  136. package/src/scope/scope.utils.js +6 -4
  137. package/src/scope/scope.utils.js.map +1 -1
  138. package/src/store/adapters/store.memory.adapter.js +3 -1
  139. package/src/store/adapters/store.memory.adapter.js.map +1 -1
  140. package/src/tool/flows/call-tool.flow.d.ts +1012 -676
  141. package/src/tool/flows/call-tool.flow.js +94 -61
  142. package/src/tool/flows/call-tool.flow.js.map +1 -1
  143. package/src/tool/flows/tools-list.flow.d.ts +347 -590
  144. package/src/tool/flows/tools-list.flow.js +76 -49
  145. package/src/tool/flows/tools-list.flow.js.map +1 -1
  146. package/src/tool/tool.instance.d.ts +27 -8
  147. package/src/tool/tool.instance.js +40 -5
  148. package/src/tool/tool.instance.js.map +1 -1
  149. package/src/tool/tool.registry.js +19 -21
  150. package/src/tool/tool.registry.js.map +1 -1
  151. package/src/tool/tool.utils.d.ts +3 -2
  152. package/src/tool/tool.utils.js +377 -14
  153. package/src/tool/tool.utils.js.map +1 -1
  154. package/src/transport/adapters/transport.sse.adapter.js +2 -1
  155. package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
  156. package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
  157. package/src/transport/flows/handle.sse.flow.js +6 -13
  158. package/src/transport/flows/handle.sse.flow.js.map +1 -1
  159. package/src/transport/flows/handle.streamable-http.flow.js +1 -0
  160. package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
  161. package/src/transport/mcp-handlers/call-tool-request.handler.d.ts +1 -1
  162. package/src/transport/mcp-handlers/call-tool-request.handler.js +10 -5
  163. package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
  164. package/src/transport/mcp-handlers/index.d.ts +151 -268
  165. package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +124 -216
  166. package/src/transport/transport.local.js +1 -0
  167. package/src/transport/transport.local.js.map +1 -1
  168. package/src/utils/string.utils.js +1 -1
  169. package/src/utils/string.utils.js.map +1 -1
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Test fixtures for hooks
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MockHookClass = exports.TEST_HOOK_TARGET = void 0;
8
+ exports.createHookMetadata = createHookMetadata;
9
+ exports.createWillHookMetadata = createWillHookMetadata;
10
+ exports.createDidHookMetadata = createDidHookMetadata;
11
+ exports.createAroundHookMetadata = createAroundHookMetadata;
12
+ exports.createMockHookInstance = createMockHookInstance;
13
+ exports.createPriorityHooks = createPriorityHooks;
14
+ /**
15
+ * Test token for hook target
16
+ */
17
+ exports.TEST_HOOK_TARGET = Symbol('TEST_HOOK_TARGET');
18
+ /**
19
+ * Creates a simple hook metadata object
20
+ */
21
+ function createHookMetadata(overrides = {}) {
22
+ return {
23
+ type: 'stage',
24
+ flow: 'CallToolFlow',
25
+ stage: 'execute',
26
+ target: exports.TEST_HOOK_TARGET,
27
+ method: 'onExecute',
28
+ priority: 0,
29
+ ...overrides,
30
+ };
31
+ }
32
+ /**
33
+ * Creates a "will" stage hook metadata
34
+ */
35
+ function createWillHookMetadata(flow = 'CallToolFlow', stage = 'execute') {
36
+ return {
37
+ type: 'will',
38
+ flow: flow,
39
+ stage,
40
+ target: exports.TEST_HOOK_TARGET,
41
+ method: 'willExecute',
42
+ priority: 0,
43
+ };
44
+ }
45
+ /**
46
+ * Creates a "did" stage hook metadata
47
+ */
48
+ function createDidHookMetadata(flow = 'CallToolFlow', stage = 'execute') {
49
+ return {
50
+ type: 'did',
51
+ flow: flow,
52
+ stage,
53
+ target: exports.TEST_HOOK_TARGET,
54
+ method: 'didExecute',
55
+ priority: 0,
56
+ };
57
+ }
58
+ /**
59
+ * Creates an "around" stage hook metadata
60
+ */
61
+ function createAroundHookMetadata(flow = 'CallToolFlow', stage = 'execute') {
62
+ return {
63
+ type: 'around',
64
+ flow: flow,
65
+ stage,
66
+ target: exports.TEST_HOOK_TARGET,
67
+ method: 'aroundExecute',
68
+ priority: 0,
69
+ };
70
+ }
71
+ /**
72
+ * Mock hook class for testing
73
+ */
74
+ class MockHookClass {
75
+ onExecute = jest.fn(async (ctx) => {
76
+ // Mock hook implementation
77
+ });
78
+ willExecute = jest.fn(async (ctx) => {
79
+ // Mock will hook implementation
80
+ });
81
+ didExecute = jest.fn(async (ctx) => {
82
+ // Mock did hook implementation
83
+ });
84
+ aroundExecute = jest.fn(async (ctx, next) => {
85
+ // Mock around hook implementation
86
+ return await next();
87
+ });
88
+ }
89
+ exports.MockHookClass = MockHookClass;
90
+ /**
91
+ * Creates a mock hook instance for testing
92
+ */
93
+ function createMockHookInstance(metadata) {
94
+ const mockClass = new MockHookClass();
95
+ return {
96
+ metadata: createHookMetadata(metadata),
97
+ instance: mockClass,
98
+ execute: mockClass.onExecute,
99
+ };
100
+ }
101
+ /**
102
+ * Creates multiple hooks with different priorities
103
+ */
104
+ function createPriorityHooks(priorities) {
105
+ return priorities.map((priority, index) => ({
106
+ type: 'stage',
107
+ flow: 'CallToolFlow',
108
+ stage: 'execute',
109
+ target: Symbol(`HOOK_${index}`),
110
+ method: 'onExecute',
111
+ priority,
112
+ }));
113
+ }
114
+ //# sourceMappingURL=hook.fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.fixtures.js","sourceRoot":"","sources":["../../../../src/__test-utils__/fixtures/hook.fixtures.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B;;GAEG;;;AAaH,gDAYC;AAKD,wDAYC;AAKD,sDAYC;AAKD,4DAYC;AA2BD,wDAOC;AAKD,kDASC;AAvHD;;GAEG;AACU,QAAA,gBAAgB,GAAU,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAElE;;GAEG;AACH,SAAgB,kBAAkB,CAChC,YAAmC,EAAE;IAErC,OAAO;QACL,IAAI,EAAE,OAAwB;QAC9B,IAAI,EAAE,cAAqB;QAC3B,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,wBAAgB;QACxB,MAAM,EAAE,WAAW;QACnB,QAAQ,EAAE,CAAC;QACX,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CACpC,OAAe,cAAc,EAC7B,QAAgB,SAAS;IAEzB,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,IAAW;QACjB,KAAK;QACL,MAAM,EAAE,wBAAgB;QACxB,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CACnC,OAAe,cAAc,EAC7B,QAAgB,SAAS;IAEzB,OAAO;QACL,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,IAAW;QACjB,KAAK;QACL,MAAM,EAAE,wBAAgB;QACxB,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CACtC,OAAe,cAAc,EAC7B,QAAgB,SAAS;IAEzB,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,IAAW;QACjB,KAAK;QACL,MAAM,EAAE,wBAAgB;QACxB,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAa,aAAa;IACxB,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAQ,EAAE,EAAE;QACrC,2BAA2B;IAC7B,CAAC,CAAC,CAAC;IAEH,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAQ,EAAE,EAAE;QACvC,gCAAgC;IAClC,CAAC,CAAC,CAAC;IAEH,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAQ,EAAE,EAAE;QACtC,+BAA+B;IACjC,CAAC,CAAC,CAAC;IAEH,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAQ,EAAE,IAAwB,EAAE,EAAE;QACnE,kCAAkC;QAClC,OAAO,MAAM,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;CACJ;AAjBD,sCAiBC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,QAAgC;IACrE,MAAM,SAAS,GAAG,IAAI,aAAa,EAAE,CAAC;IACtC,OAAO;QACL,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC;QACtC,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,SAAS,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,UAAoB;IACtD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,OAAwB;QAC9B,IAAI,EAAE,cAAqB;QAC3B,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC;QAC/B,MAAM,EAAE,WAAW;QACnB,QAAQ;KACT,CAAC,CAAC,CAAC;AACN,CAAC","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Test fixtures for hooks\n */\n\nimport { HookMetadata, HookStageType } from '../../common/metadata';\nimport { Token } from '../../common/interfaces';\n\n/**\n * Test token for hook target\n */\nexport const TEST_HOOK_TARGET: Token = Symbol('TEST_HOOK_TARGET');\n\n/**\n * Creates a simple hook metadata object\n */\nexport function createHookMetadata(\n overrides: Partial<HookMetadata> = {}\n): HookMetadata {\n return {\n type: 'stage' as HookStageType,\n flow: 'CallToolFlow' as any,\n stage: 'execute',\n target: TEST_HOOK_TARGET,\n method: 'onExecute',\n priority: 0,\n ...overrides,\n };\n}\n\n/**\n * Creates a \"will\" stage hook metadata\n */\nexport function createWillHookMetadata(\n flow: string = 'CallToolFlow',\n stage: string = 'execute'\n): HookMetadata {\n return {\n type: 'will',\n flow: flow as any,\n stage,\n target: TEST_HOOK_TARGET,\n method: 'willExecute',\n priority: 0,\n };\n}\n\n/**\n * Creates a \"did\" stage hook metadata\n */\nexport function createDidHookMetadata(\n flow: string = 'CallToolFlow',\n stage: string = 'execute'\n): HookMetadata {\n return {\n type: 'did',\n flow: flow as any,\n stage,\n target: TEST_HOOK_TARGET,\n method: 'didExecute',\n priority: 0,\n };\n}\n\n/**\n * Creates an \"around\" stage hook metadata\n */\nexport function createAroundHookMetadata(\n flow: string = 'CallToolFlow',\n stage: string = 'execute'\n): HookMetadata {\n return {\n type: 'around',\n flow: flow as any,\n stage,\n target: TEST_HOOK_TARGET,\n method: 'aroundExecute',\n priority: 0,\n };\n}\n\n/**\n * Mock hook class for testing\n */\nexport class MockHookClass {\n onExecute = jest.fn(async (ctx: any) => {\n // Mock hook implementation\n });\n\n willExecute = jest.fn(async (ctx: any) => {\n // Mock will hook implementation\n });\n\n didExecute = jest.fn(async (ctx: any) => {\n // Mock did hook implementation\n });\n\n aroundExecute = jest.fn(async (ctx: any, next: () => Promise<any>) => {\n // Mock around hook implementation\n return await next();\n });\n}\n\n/**\n * Creates a mock hook instance for testing\n */\nexport function createMockHookInstance(metadata?: Partial<HookMetadata>) {\n const mockClass = new MockHookClass();\n return {\n metadata: createHookMetadata(metadata),\n instance: mockClass,\n execute: mockClass.onExecute,\n };\n}\n\n/**\n * Creates multiple hooks with different priorities\n */\nexport function createPriorityHooks(priorities: number[]): HookMetadata[] {\n return priorities.map((priority, index) => ({\n type: 'stage' as HookStageType,\n flow: 'CallToolFlow' as any,\n stage: 'execute',\n target: Symbol(`HOOK_${index}`),\n method: 'onExecute',\n priority,\n }));\n}\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Test fixtures for common SDK entities
3
+ */
4
+ export * from './plugin.fixtures';
5
+ export * from './tool.fixtures';
6
+ export * from './hook.fixtures';
7
+ export * from './provider.fixtures';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Test fixtures for common SDK entities
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const tslib_1 = require("tslib");
7
+ tslib_1.__exportStar(require("./plugin.fixtures"), exports);
8
+ tslib_1.__exportStar(require("./tool.fixtures"), exports);
9
+ tslib_1.__exportStar(require("./hook.fixtures"), exports);
10
+ tslib_1.__exportStar(require("./provider.fixtures"), exports);
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/__test-utils__/fixtures/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,4DAAkC;AAClC,0DAAgC;AAChC,0DAAgC;AAChC,8DAAoC","sourcesContent":["/**\n * Test fixtures for common SDK entities\n */\n\nexport * from './plugin.fixtures';\nexport * from './tool.fixtures';\nexport * from './hook.fixtures';\nexport * from './provider.fixtures';\n"]}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Test fixtures for plugins
3
+ */
4
+ import { PluginMetadata } from '../../common/metadata';
5
+ import { PluginInterface } from '../../common/interfaces';
6
+ /**
7
+ * Creates a simple plugin metadata object
8
+ */
9
+ export declare function createPluginMetadata(overrides?: Partial<PluginMetadata>): PluginMetadata;
10
+ /**
11
+ * Creates a plugin with providers
12
+ */
13
+ export declare function createPluginWithProviders(): PluginMetadata;
14
+ /**
15
+ * Creates a plugin with tools
16
+ */
17
+ export declare function createPluginWithTools(): PluginMetadata;
18
+ /**
19
+ * Creates a plugin with nested plugins
20
+ */
21
+ export declare function createPluginWithNestedPlugins(): PluginMetadata;
22
+ /**
23
+ * Mock plugin class for testing
24
+ */
25
+ export declare class MockPluginClass implements PluginInterface {
26
+ static readonly metadata: PluginMetadata;
27
+ constructor();
28
+ onInit?(): Promise<void>;
29
+ onDestroy?(): Promise<void>;
30
+ }
31
+ /**
32
+ * Creates a mock plugin instance
33
+ */
34
+ export declare function createMockPluginInstance(metadata?: Partial<PluginMetadata>): {
35
+ metadata: PluginMetadata;
36
+ onInit: jest.Mock<Promise<void>, [], any>;
37
+ onDestroy: jest.Mock<Promise<void>, [], any>;
38
+ };
39
+ /**
40
+ * Creates multiple plugins for dependency testing
41
+ */
42
+ export declare function createPluginDependencyChain(): {
43
+ pluginA: PluginMetadata;
44
+ pluginB: PluginMetadata;
45
+ pluginC: PluginMetadata;
46
+ };
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Test fixtures for plugins
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MockPluginClass = void 0;
8
+ exports.createPluginMetadata = createPluginMetadata;
9
+ exports.createPluginWithProviders = createPluginWithProviders;
10
+ exports.createPluginWithTools = createPluginWithTools;
11
+ exports.createPluginWithNestedPlugins = createPluginWithNestedPlugins;
12
+ exports.createMockPluginInstance = createMockPluginInstance;
13
+ exports.createPluginDependencyChain = createPluginDependencyChain;
14
+ const provider_fixtures_1 = require("./provider.fixtures");
15
+ /**
16
+ * Creates a simple plugin metadata object
17
+ */
18
+ function createPluginMetadata(overrides = {}) {
19
+ return {
20
+ name: 'TestPlugin',
21
+ description: 'A test plugin',
22
+ ...overrides,
23
+ };
24
+ }
25
+ /**
26
+ * Creates a plugin with providers
27
+ */
28
+ function createPluginWithProviders() {
29
+ return {
30
+ name: 'PluginWithProviders',
31
+ description: 'A plugin with providers',
32
+ providers: [
33
+ {
34
+ provide: Symbol('SERVICE_A'),
35
+ useValue: { name: 'Service A' },
36
+ ...(0, provider_fixtures_1.createProviderMetadata)({ name: 'ServiceA' }),
37
+ },
38
+ ],
39
+ };
40
+ }
41
+ /**
42
+ * Creates a plugin with tools
43
+ */
44
+ function createPluginWithTools() {
45
+ return {
46
+ name: 'PluginWithTools',
47
+ description: 'A plugin with tools',
48
+ tools: [],
49
+ };
50
+ }
51
+ /**
52
+ * Creates a plugin with nested plugins
53
+ */
54
+ function createPluginWithNestedPlugins() {
55
+ return {
56
+ name: 'ParentPlugin',
57
+ description: 'A plugin with nested plugins',
58
+ plugins: [],
59
+ };
60
+ }
61
+ /**
62
+ * Mock plugin class for testing
63
+ */
64
+ class MockPluginClass {
65
+ static metadata = {
66
+ name: 'MockPlugin',
67
+ description: 'A mock plugin',
68
+ };
69
+ constructor() { }
70
+ async onInit() {
71
+ // Mock initialization
72
+ }
73
+ async onDestroy() {
74
+ // Mock cleanup
75
+ }
76
+ }
77
+ exports.MockPluginClass = MockPluginClass;
78
+ /**
79
+ * Creates a mock plugin instance
80
+ */
81
+ function createMockPluginInstance(metadata) {
82
+ return {
83
+ metadata: createPluginMetadata(metadata),
84
+ onInit: jest.fn(async () => { }),
85
+ onDestroy: jest.fn(async () => { }),
86
+ };
87
+ }
88
+ /**
89
+ * Creates multiple plugins for dependency testing
90
+ */
91
+ function createPluginDependencyChain() {
92
+ const pluginA = {
93
+ name: 'PluginA',
94
+ description: 'First plugin in chain',
95
+ providers: [
96
+ {
97
+ provide: Symbol('SERVICE_A'),
98
+ useValue: { name: 'Service A' },
99
+ ...(0, provider_fixtures_1.createProviderMetadata)({ name: 'ServiceA' }),
100
+ },
101
+ ],
102
+ };
103
+ const pluginB = {
104
+ name: 'PluginB',
105
+ description: 'Second plugin in chain (depends on A)',
106
+ providers: [
107
+ {
108
+ provide: Symbol('SERVICE_B'),
109
+ useValue: { name: 'Service B' },
110
+ ...(0, provider_fixtures_1.createProviderMetadata)({ name: 'ServiceB' }),
111
+ },
112
+ ],
113
+ };
114
+ const pluginC = {
115
+ name: 'PluginC',
116
+ description: 'Third plugin in chain (depends on B)',
117
+ providers: [
118
+ {
119
+ provide: Symbol('SERVICE_C'),
120
+ useValue: { name: 'Service C' },
121
+ ...(0, provider_fixtures_1.createProviderMetadata)({ name: 'ServiceC' }),
122
+ },
123
+ ],
124
+ };
125
+ return { pluginA, pluginB, pluginC };
126
+ }
127
+ //# sourceMappingURL=plugin.fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.fixtures.js","sourceRoot":"","sources":["../../../../src/__test-utils__/fixtures/plugin.fixtures.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Test fixtures for plugins\n */\n\nimport { PluginMetadata } from '../../common/metadata';\nimport { PluginInterface } from '../../common/interfaces';\nimport { createProviderMetadata } from './provider.fixtures';\nimport { createToolMetadata } from './tool.fixtures';\n\n/**\n * Creates a simple plugin metadata object\n */\nexport function createPluginMetadata(\n overrides: Partial<PluginMetadata> = {}\n): PluginMetadata {\n return {\n name: 'TestPlugin',\n description: 'A test plugin',\n ...overrides,\n };\n}\n\n/**\n * Creates a plugin with providers\n */\nexport function createPluginWithProviders(): PluginMetadata {\n return {\n name: 'PluginWithProviders',\n description: 'A plugin with providers',\n providers: [\n {\n provide: Symbol('SERVICE_A'),\n useValue: { name: 'Service A' },\n ...createProviderMetadata({ name: 'ServiceA' }),\n },\n ],\n };\n}\n\n/**\n * Creates a plugin with tools\n */\nexport function createPluginWithTools(): PluginMetadata {\n return {\n name: 'PluginWithTools',\n description: 'A plugin with tools',\n tools: [],\n };\n}\n\n/**\n * Creates a plugin with nested plugins\n */\nexport function createPluginWithNestedPlugins(): PluginMetadata {\n return {\n name: 'ParentPlugin',\n description: 'A plugin with nested plugins',\n plugins: [],\n };\n}\n\n/**\n * Mock plugin class for testing\n */\nexport class MockPluginClass implements PluginInterface {\n static readonly metadata: PluginMetadata = {\n name: 'MockPlugin',\n description: 'A mock plugin',\n };\n\n constructor() {}\n\n async onInit?(): Promise<void> {\n // Mock initialization\n }\n\n async onDestroy?(): Promise<void> {\n // Mock cleanup\n }\n}\n\n/**\n * Creates a mock plugin instance\n */\nexport function createMockPluginInstance(metadata?: Partial<PluginMetadata>) {\n return {\n metadata: createPluginMetadata(metadata),\n onInit: jest.fn(async () => {}),\n onDestroy: jest.fn(async () => {}),\n };\n}\n\n/**\n * Creates multiple plugins for dependency testing\n */\nexport function createPluginDependencyChain() {\n const pluginA: PluginMetadata = {\n name: 'PluginA',\n description: 'First plugin in chain',\n providers: [\n {\n provide: Symbol('SERVICE_A'),\n useValue: { name: 'Service A' },\n ...createProviderMetadata({ name: 'ServiceA' }),\n },\n ],\n };\n\n const pluginB: PluginMetadata = {\n name: 'PluginB',\n description: 'Second plugin in chain (depends on A)',\n providers: [\n {\n provide: Symbol('SERVICE_B'),\n useValue: { name: 'Service B' },\n ...createProviderMetadata({ name: 'ServiceB' }),\n },\n ],\n };\n\n const pluginC: PluginMetadata = {\n name: 'PluginC',\n description: 'Third plugin in chain (depends on B)',\n providers: [\n {\n provide: Symbol('SERVICE_C'),\n useValue: { name: 'Service C' },\n ...createProviderMetadata({ name: 'ServiceC' }),\n },\n ],\n };\n\n return { pluginA, pluginB, pluginC };\n}\n"]}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Test fixtures for providers
3
+ */
4
+ import 'reflect-metadata';
5
+ import { ProviderMetadata, ProviderScope } from '../../common/metadata';
6
+ import { ProviderInterface } from '../../common/interfaces';
7
+ /**
8
+ * Simple test service class
9
+ */
10
+ export declare class TestService implements ProviderInterface {
11
+ readonly name = "TestService";
12
+ constructor();
13
+ greet(): string;
14
+ }
15
+ /**
16
+ * Service that depends on another service
17
+ */
18
+ export declare class DependentService implements ProviderInterface {
19
+ readonly testService: TestService;
20
+ constructor(testService: TestService);
21
+ callGreet(): string;
22
+ }
23
+ /**
24
+ * Service with async initialization
25
+ */
26
+ export declare class AsyncService implements ProviderInterface {
27
+ private initialized;
28
+ with(callback: (service: this) => Promise<void>): Promise<void>;
29
+ init(): Promise<void>;
30
+ isReady(): boolean;
31
+ }
32
+ /**
33
+ * Token for testing symbol-based injection
34
+ */
35
+ export declare const TEST_TOKEN: unique symbol;
36
+ export declare const ASYNC_TOKEN: unique symbol;
37
+ export declare const FACTORY_TOKEN: unique symbol;
38
+ /**
39
+ * Creates a provider metadata object with defaults
40
+ */
41
+ export declare function createProviderMetadata(overrides?: Partial<ProviderMetadata>): ProviderMetadata;
42
+ /**
43
+ * Creates a simple value provider
44
+ */
45
+ export declare function createValueProvider<T>(provide: symbol, value: T, metadata?: Partial<ProviderMetadata>): {
46
+ id?: string;
47
+ name: string;
48
+ description?: string;
49
+ scope?: ProviderScope;
50
+ provide: symbol;
51
+ useValue: T;
52
+ };
53
+ /**
54
+ * Creates a simple factory provider
55
+ */
56
+ export declare function createFactoryProvider<T>(provide: symbol, factory: () => T, metadata?: Partial<ProviderMetadata>): {
57
+ id?: string;
58
+ name: string;
59
+ description?: string;
60
+ scope?: ProviderScope;
61
+ provide: symbol;
62
+ inject: () => readonly [];
63
+ useFactory: () => T;
64
+ };
65
+ /**
66
+ * Creates a class provider with metadata using Reflect.defineMetadata
67
+ * (same approach as the real FrontMcpProvider decorator)
68
+ */
69
+ export declare function createClassProvider<T extends new (...args: any[]) => any>(cls: T, metadata?: Partial<ProviderMetadata>): T & ProviderMetadata;
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Test fixtures for providers
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.FACTORY_TOKEN = exports.ASYNC_TOKEN = exports.TEST_TOKEN = exports.AsyncService = exports.DependentService = exports.TestService = void 0;
8
+ exports.createProviderMetadata = createProviderMetadata;
9
+ exports.createValueProvider = createValueProvider;
10
+ exports.createFactoryProvider = createFactoryProvider;
11
+ exports.createClassProvider = createClassProvider;
12
+ const tslib_1 = require("tslib");
13
+ require("reflect-metadata");
14
+ const metadata_1 = require("../../common/metadata");
15
+ const provider_tokens_1 = require("../../common/tokens/provider.tokens");
16
+ /**
17
+ * Simple decorator to enable metadata emission
18
+ */
19
+ function Injectable() {
20
+ return function (target) {
21
+ // Empty decorator to enable metadata emission
22
+ };
23
+ }
24
+ /**
25
+ * Simple test service class
26
+ */
27
+ let TestService = class TestService {
28
+ name = 'TestService';
29
+ constructor() { }
30
+ greet() {
31
+ return `Hello from ${this.name}`;
32
+ }
33
+ };
34
+ exports.TestService = TestService;
35
+ exports.TestService = TestService = tslib_1.__decorate([
36
+ Injectable(),
37
+ tslib_1.__metadata("design:paramtypes", [])
38
+ ], TestService);
39
+ /**
40
+ * Service that depends on another service
41
+ */
42
+ let DependentService = class DependentService {
43
+ testService;
44
+ constructor(testService) {
45
+ this.testService = testService;
46
+ }
47
+ callGreet() {
48
+ return this.testService.greet();
49
+ }
50
+ };
51
+ exports.DependentService = DependentService;
52
+ exports.DependentService = DependentService = tslib_1.__decorate([
53
+ Injectable(),
54
+ tslib_1.__metadata("design:paramtypes", [TestService])
55
+ ], DependentService);
56
+ /**
57
+ * Service with async initialization
58
+ */
59
+ let AsyncService = class AsyncService {
60
+ initialized = false;
61
+ async with(callback) {
62
+ if (!this.initialized) {
63
+ await this.init();
64
+ }
65
+ await callback(this);
66
+ }
67
+ async init() {
68
+ // Simulate async initialization
69
+ await new Promise((resolve) => setTimeout(resolve, 10));
70
+ this.initialized = true;
71
+ }
72
+ isReady() {
73
+ return this.initialized;
74
+ }
75
+ };
76
+ exports.AsyncService = AsyncService;
77
+ exports.AsyncService = AsyncService = tslib_1.__decorate([
78
+ Injectable()
79
+ ], AsyncService);
80
+ /**
81
+ * Token for testing symbol-based injection
82
+ */
83
+ exports.TEST_TOKEN = Symbol('TEST_TOKEN');
84
+ exports.ASYNC_TOKEN = Symbol('ASYNC_TOKEN');
85
+ exports.FACTORY_TOKEN = Symbol('FACTORY_TOKEN');
86
+ /**
87
+ * Creates a provider metadata object with defaults
88
+ */
89
+ function createProviderMetadata(overrides = {}) {
90
+ return {
91
+ name: 'TestProvider',
92
+ scope: metadata_1.ProviderScope.GLOBAL,
93
+ ...overrides,
94
+ };
95
+ }
96
+ /**
97
+ * Creates a simple value provider
98
+ */
99
+ function createValueProvider(provide, value, metadata) {
100
+ return {
101
+ provide,
102
+ useValue: value,
103
+ ...createProviderMetadata(metadata),
104
+ };
105
+ }
106
+ /**
107
+ * Creates a simple factory provider
108
+ */
109
+ function createFactoryProvider(provide, factory, metadata) {
110
+ return {
111
+ provide,
112
+ inject: () => [],
113
+ useFactory: factory,
114
+ ...createProviderMetadata(metadata),
115
+ };
116
+ }
117
+ /**
118
+ * Creates a class provider with metadata using Reflect.defineMetadata
119
+ * (same approach as the real FrontMcpProvider decorator)
120
+ */
121
+ function createClassProvider(cls, metadata) {
122
+ const metadataObj = createProviderMetadata(metadata);
123
+ // Use Reflect.defineMetadata like the actual decorator does
124
+ Reflect.defineMetadata(provider_tokens_1.FrontMcpProviderTokens.type, true, cls);
125
+ for (const property in metadataObj) {
126
+ const token = provider_tokens_1.FrontMcpProviderTokens[property] ?? property;
127
+ Reflect.defineMetadata(token, metadataObj[property], cls);
128
+ }
129
+ return cls;
130
+ }
131
+ //# sourceMappingURL=provider.fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.fixtures.js","sourceRoot":"","sources":["../../../../src/__test-utils__/fixtures/provider.fixtures.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Test fixtures for providers\n */\n\nimport 'reflect-metadata';\nimport { ProviderMetadata, ProviderScope } from '../../common/metadata';\nimport { ProviderInterface } from '../../common/interfaces';\nimport { FrontMcpProviderTokens } from '../../common/tokens/provider.tokens';\n\n/**\n * Simple decorator to enable metadata emission\n */\nfunction Injectable() {\n return function (target: any) {\n // Empty decorator to enable metadata emission\n };\n}\n\n/**\n * Simple test service class\n */\n@Injectable()\nexport class TestService implements ProviderInterface {\n public readonly name = 'TestService';\n\n constructor() {}\n\n greet(): string {\n return `Hello from ${this.name}`;\n }\n}\n\n/**\n * Service that depends on another service\n */\n@Injectable()\nexport class DependentService implements ProviderInterface {\n constructor(public readonly testService: TestService) {}\n\n callGreet(): string {\n return this.testService.greet();\n }\n}\n\n/**\n * Service with async initialization\n */\n@Injectable()\nexport class AsyncService implements ProviderInterface {\n private initialized = false;\n\n async with(callback: (service: this) => Promise<void>): Promise<void> {\n if (!this.initialized) {\n await this.init();\n }\n await callback(this);\n }\n\n async init(): Promise<void> {\n // Simulate async initialization\n await new Promise((resolve) => setTimeout(resolve, 10));\n this.initialized = true;\n }\n\n isReady(): boolean {\n return this.initialized;\n }\n}\n\n/**\n * Token for testing symbol-based injection\n */\nexport const TEST_TOKEN = Symbol('TEST_TOKEN');\nexport const ASYNC_TOKEN = Symbol('ASYNC_TOKEN');\nexport const FACTORY_TOKEN = Symbol('FACTORY_TOKEN');\n\n/**\n * Creates a provider metadata object with defaults\n */\nexport function createProviderMetadata(overrides: Partial<ProviderMetadata> = {}): ProviderMetadata {\n return {\n name: 'TestProvider',\n scope: ProviderScope.GLOBAL,\n ...overrides,\n };\n}\n\n/**\n * Creates a simple value provider\n */\nexport function createValueProvider<T>(provide: symbol, value: T, metadata?: Partial<ProviderMetadata>) {\n return {\n provide,\n useValue: value,\n ...createProviderMetadata(metadata),\n };\n}\n\n/**\n * Creates a simple factory provider\n */\nexport function createFactoryProvider<T>(provide: symbol, factory: () => T, metadata?: Partial<ProviderMetadata>) {\n return {\n provide,\n inject: () => [] as const,\n useFactory: factory,\n ...createProviderMetadata(metadata),\n };\n}\n\n/**\n * Creates a class provider with metadata using Reflect.defineMetadata\n * (same approach as the real FrontMcpProvider decorator)\n */\nexport function createClassProvider<T extends new (...args: any[]) => any>(\n cls: T,\n metadata?: Partial<ProviderMetadata>,\n) {\n const metadataObj = createProviderMetadata(metadata);\n\n // Use Reflect.defineMetadata like the actual decorator does\n Reflect.defineMetadata(FrontMcpProviderTokens.type, true, cls);\n\n for (const property in metadataObj) {\n const token = FrontMcpProviderTokens[property as keyof ProviderMetadata] ?? property;\n Reflect.defineMetadata(token, metadataObj[property as keyof ProviderMetadata], cls);\n }\n\n return cls as T & ProviderMetadata;\n}\n"]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Test fixtures for Scope and related setup
3
+ */
4
+ import 'reflect-metadata';
5
+ import { Scope } from '../../scope';
6
+ import ProviderRegistry from '../../provider/provider.registry';
7
+ /**
8
+ * Creates a mock Scope for testing
9
+ */
10
+ export declare function createMockScope(): Scope;
11
+ /**
12
+ * Creates a ProviderRegistry with a mock Scope for plugin testing
13
+ */
14
+ export declare function createProviderRegistryWithScope(providers?: any[]): Promise<ProviderRegistry>;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /// <reference types="jest" />
3
+ /**
4
+ * Test fixtures for Scope and related setup
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.createMockScope = createMockScope;
8
+ exports.createProviderRegistryWithScope = createProviderRegistryWithScope;
9
+ const tslib_1 = require("tslib");
10
+ require("reflect-metadata");
11
+ const scope_1 = require("../../scope");
12
+ const provider_registry_1 = tslib_1.__importDefault(require("../../provider/provider.registry"));
13
+ const sdk_1 = require("@frontmcp/sdk");
14
+ /**
15
+ * Creates a mock Scope for testing
16
+ */
17
+ function createMockScope() {
18
+ const mockLogger = {
19
+ log: jest.fn(),
20
+ warn: jest.fn(),
21
+ error: jest.fn(),
22
+ info: jest.fn(),
23
+ debug: jest.fn(),
24
+ child: jest.fn().mockReturnThis(),
25
+ };
26
+ const mockHookRegistry = {
27
+ registerHooks: jest.fn().mockResolvedValue(undefined),
28
+ getHooks: jest.fn().mockReturnValue([]),
29
+ };
30
+ const mockScope = {
31
+ id: 'test-scope',
32
+ logger: mockLogger,
33
+ hooks: mockHookRegistry,
34
+ registryFlows: jest.fn().mockResolvedValue(undefined),
35
+ metadata: {
36
+ id: 'test-scope',
37
+ http: { port: 3001 },
38
+ },
39
+ };
40
+ return mockScope;
41
+ }
42
+ /**
43
+ * Creates a ProviderRegistry with a mock Scope for plugin testing
44
+ */
45
+ async function createProviderRegistryWithScope(providers = []) {
46
+ const mockScope = createMockScope();
47
+ const providerRegistry = new provider_registry_1.default([
48
+ {
49
+ provide: scope_1.Scope,
50
+ useValue: mockScope,
51
+ name: 'MockScope',
52
+ scope: sdk_1.ProviderScope.GLOBAL,
53
+ },
54
+ ...providers,
55
+ ]);
56
+ await providerRegistry.ready;
57
+ return providerRegistry;
58
+ }
59
+ //# sourceMappingURL=scope.fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.fixtures.js","sourceRoot":"","sources":["../../../../src/__test-utils__/fixtures/scope.fixtures.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B;;GAEG;;AAUH,0CA2BC;AAKD,0EAgBC;;AAxDD,4BAA0B;AAC1B,uCAAoC;AACpC,iGAAgE;AAChE,uCAA8C;AAE9C;;GAEG;AACH,SAAgB,eAAe;IAC7B,MAAM,UAAU,GAAG;QACjB,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;QACd,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;QAChB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;QAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,cAAc,EAAE;KAClC,CAAC;IAEF,MAAM,gBAAgB,GAAG;QACvB,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QACrD,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;KACxC,CAAC;IAEF,MAAM,SAAS,GAAG;QAChB,EAAE,EAAE,YAAY;QAChB,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QACrD,QAAQ,EAAE;YACR,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SACrB;KACF,CAAC;IAEF,OAAO,SAA6B,CAAC;AACvC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,+BAA+B,CAAC,YAAmB,EAAE;IACzE,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,gBAAgB,GAAG,IAAI,2BAAgB,CAAC;QAC5C;YACE,OAAO,EAAE,aAAK;YACd,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,mBAAa,CAAC,MAAM;SAC5B;QACD,GAAG,SAAS;KACb,CAAC,CAAC;IAEH,MAAM,gBAAgB,CAAC,KAAK,CAAC;IAE7B,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["/// <reference types=\"jest\" />\n/**\n * Test fixtures for Scope and related setup\n */\n\nimport 'reflect-metadata';\nimport { Scope } from '../../scope';\nimport ProviderRegistry from '../../provider/provider.registry';\nimport { ProviderScope } from '@frontmcp/sdk';\n\n/**\n * Creates a mock Scope for testing\n */\nexport function createMockScope() {\n const mockLogger = {\n log: jest.fn(),\n warn: jest.fn(),\n error: jest.fn(),\n info: jest.fn(),\n debug: jest.fn(),\n child: jest.fn().mockReturnThis(),\n };\n\n const mockHookRegistry = {\n registerHooks: jest.fn().mockResolvedValue(undefined),\n getHooks: jest.fn().mockReturnValue([]),\n };\n\n const mockScope = {\n id: 'test-scope',\n logger: mockLogger,\n hooks: mockHookRegistry,\n registryFlows: jest.fn().mockResolvedValue(undefined),\n metadata: {\n id: 'test-scope',\n http: { port: 3001 },\n },\n };\n\n return mockScope as unknown as Scope;\n}\n\n/**\n * Creates a ProviderRegistry with a mock Scope for plugin testing\n */\nexport async function createProviderRegistryWithScope(providers: any[] = []) {\n const mockScope = createMockScope();\n\n const providerRegistry = new ProviderRegistry([\n {\n provide: Scope,\n useValue: mockScope,\n name: 'MockScope',\n scope: ProviderScope.GLOBAL,\n },\n ...providers,\n ]);\n\n await providerRegistry.ready;\n\n return providerRegistry;\n}\n"]}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Test fixtures for tools
3
+ */
4
+ import { z } from 'zod';
5
+ import { ToolMetadata } from '../../common/metadata';
6
+ /**
7
+ * Simple test tool metadata
8
+ */
9
+ export declare function createToolMetadata(overrides?: Partial<ToolMetadata>): ToolMetadata;
10
+ /**
11
+ * Creates a simple echo tool metadata
12
+ */
13
+ export declare function createEchoToolMetadata(): ToolMetadata;
14
+ /**
15
+ * Creates a calculator tool metadata
16
+ */
17
+ export declare function createCalculatorToolMetadata(): ToolMetadata;
18
+ /**
19
+ * Creates a tool with structured output
20
+ */
21
+ export declare function createStructuredOutputToolMetadata(): ToolMetadata;
22
+ /**
23
+ * Mock tool class for testing
24
+ */
25
+ export declare class MockToolClass {
26
+ execute(input: {
27
+ text: string;
28
+ }): Promise<string>;
29
+ }
30
+ /**
31
+ * Mock tool instance for testing
32
+ */
33
+ export declare function createMockToolInstance(metadata?: Partial<ToolMetadata>): {
34
+ metadata: ToolMetadata<z.ZodRawShape, import("../../common/metadata").ToolOutputType>;
35
+ execute: jest.Mock<Promise<string>, [input: any], any>;
36
+ };