@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.
- package/LICENSE +201 -0
- package/README.md +192 -164
- package/package.json +7 -4
- package/src/__test-utils__/fixtures/hook.fixtures.d.ts +46 -0
- package/src/__test-utils__/fixtures/hook.fixtures.js +114 -0
- package/src/__test-utils__/fixtures/hook.fixtures.js.map +1 -0
- package/src/__test-utils__/fixtures/index.d.ts +7 -0
- package/src/__test-utils__/fixtures/index.js +11 -0
- package/src/__test-utils__/fixtures/index.js.map +1 -0
- package/src/__test-utils__/fixtures/plugin.fixtures.d.ts +46 -0
- package/src/__test-utils__/fixtures/plugin.fixtures.js +127 -0
- package/src/__test-utils__/fixtures/plugin.fixtures.js.map +1 -0
- package/src/__test-utils__/fixtures/provider.fixtures.d.ts +69 -0
- package/src/__test-utils__/fixtures/provider.fixtures.js +131 -0
- package/src/__test-utils__/fixtures/provider.fixtures.js.map +1 -0
- package/src/__test-utils__/fixtures/scope.fixtures.d.ts +14 -0
- package/src/__test-utils__/fixtures/scope.fixtures.js +59 -0
- package/src/__test-utils__/fixtures/scope.fixtures.js.map +1 -0
- package/src/__test-utils__/fixtures/tool.fixtures.d.ts +36 -0
- package/src/__test-utils__/fixtures/tool.fixtures.js +91 -0
- package/src/__test-utils__/fixtures/tool.fixtures.js.map +1 -0
- package/src/__test-utils__/helpers/assertion.helpers.d.ts +45 -0
- package/src/__test-utils__/helpers/assertion.helpers.js +153 -0
- package/src/__test-utils__/helpers/assertion.helpers.js.map +1 -0
- package/src/__test-utils__/helpers/async.helpers.d.ts +48 -0
- package/src/__test-utils__/helpers/async.helpers.js +112 -0
- package/src/__test-utils__/helpers/async.helpers.js.map +1 -0
- package/src/__test-utils__/helpers/index.d.ts +6 -0
- package/src/__test-utils__/helpers/index.js +10 -0
- package/src/__test-utils__/helpers/index.js.map +1 -0
- package/src/__test-utils__/helpers/setup.helpers.d.ts +54 -0
- package/src/__test-utils__/helpers/setup.helpers.js +106 -0
- package/src/__test-utils__/helpers/setup.helpers.js.map +1 -0
- package/src/__test-utils__/index.d.ts +9 -0
- package/src/__test-utils__/index.js +14 -0
- package/src/__test-utils__/index.js.map +1 -0
- package/src/__test-utils__/mocks/flow-instance.mock.d.ts +50 -0
- package/src/__test-utils__/mocks/flow-instance.mock.js +72 -0
- package/src/__test-utils__/mocks/flow-instance.mock.js.map +1 -0
- package/src/__test-utils__/mocks/hook-registry.mock.d.ts +25 -0
- package/src/__test-utils__/mocks/hook-registry.mock.js +65 -0
- package/src/__test-utils__/mocks/hook-registry.mock.js.map +1 -0
- package/src/__test-utils__/mocks/index.d.ts +8 -0
- package/src/__test-utils__/mocks/index.js +12 -0
- package/src/__test-utils__/mocks/index.js.map +1 -0
- package/src/__test-utils__/mocks/plugin-registry.mock.d.ts +43 -0
- package/src/__test-utils__/mocks/plugin-registry.mock.js +70 -0
- package/src/__test-utils__/mocks/plugin-registry.mock.js.map +1 -0
- package/src/__test-utils__/mocks/provider-registry.mock.d.ts +39 -0
- package/src/__test-utils__/mocks/provider-registry.mock.js +72 -0
- package/src/__test-utils__/mocks/provider-registry.mock.js.map +1 -0
- package/src/__test-utils__/mocks/tool-registry.mock.d.ts +43 -0
- package/src/__test-utils__/mocks/tool-registry.mock.js +79 -0
- package/src/__test-utils__/mocks/tool-registry.mock.js.map +1 -0
- package/src/app/app.utils.js.map +1 -1
- package/src/app/instances/app.local.instance.js +8 -11
- package/src/app/instances/app.local.instance.js.map +1 -1
- package/src/auth/auth.registry.d.ts +2 -2
- package/src/auth/auth.registry.js +3 -3
- package/src/auth/auth.registry.js.map +1 -1
- package/src/auth/flows/oauth.authorize.flow.d.ts +8 -8
- package/src/auth/flows/oauth.register.flow.d.ts +4 -4
- package/src/auth/flows/oauth.token.flow.d.ts +4 -4
- package/src/auth/flows/well-known.jwks.flow.d.ts +12 -12
- package/src/auth/flows/well-known.oauth-authorization-server.flow.d.ts +8 -8
- package/src/auth/flows/well-known.prm.flow.d.ts +4 -4
- package/src/auth/instances/instance.local-primary-auth.d.ts +3 -2
- package/src/auth/instances/instance.local-primary-auth.js +4 -2
- package/src/auth/instances/instance.local-primary-auth.js.map +1 -1
- package/src/auth/instances/instance.remote-primary-auth.d.ts +3 -2
- package/src/auth/instances/instance.remote-primary-auth.js +3 -1
- package/src/auth/instances/instance.remote-primary-auth.js.map +1 -1
- package/src/auth/jwks/jwks.service.js +0 -1
- package/src/auth/jwks/jwks.service.js.map +1 -1
- package/src/common/decorators/tool.decorator.d.ts +97 -36
- package/src/common/decorators/tool.decorator.js +0 -1
- package/src/common/decorators/tool.decorator.js.map +1 -1
- package/src/common/entries/scope.entry.d.ts +1 -0
- package/src/common/entries/scope.entry.js +6 -0
- package/src/common/entries/scope.entry.js.map +1 -1
- package/src/common/entries/tool.entry.d.ts +54 -11
- package/src/common/entries/tool.entry.js +19 -0
- package/src/common/entries/tool.entry.js.map +1 -1
- package/src/common/interfaces/internal/registry.interface.d.ts +10 -2
- package/src/common/interfaces/internal/registry.interface.js.map +1 -1
- package/src/common/interfaces/plugin.interface.d.ts +1 -1
- package/src/common/interfaces/plugin.interface.js.map +1 -1
- package/src/common/interfaces/tool.interface.d.ts +12 -7
- package/src/common/interfaces/tool.interface.js +1 -1
- package/src/common/interfaces/tool.interface.js.map +1 -1
- package/src/common/metadata/front-mcp.metadata.d.ts +145 -145
- package/src/common/metadata/hook.metadata.d.ts +4 -2
- package/src/common/metadata/hook.metadata.js.map +1 -1
- package/src/common/metadata/prompt.metadata.d.ts +28 -28
- package/src/common/metadata/prompt.metadata.js.map +1 -1
- package/src/common/metadata/resource.metadata.d.ts +54 -54
- package/src/common/metadata/tool.metadata.d.ts +190 -7
- package/src/common/metadata/tool.metadata.js +41 -6
- package/src/common/metadata/tool.metadata.js.map +1 -1
- package/src/common/records/scope.record.d.ts +2 -2
- package/src/common/records/scope.record.js.map +1 -1
- package/src/common/schemas/http-output.schema.d.ts +106 -106
- package/src/common/tokens/tool.tokens.js.map +1 -1
- package/src/common/types/options/logging.options.d.ts +1 -2
- package/src/common/types/options/logging.options.js +1 -9
- package/src/common/types/options/logging.options.js.map +1 -1
- package/src/common/types/options/server-info.options.d.ts +19 -19
- package/src/errors/error-handler.d.ts +65 -0
- package/src/errors/error-handler.js +107 -0
- package/src/errors/error-handler.js.map +1 -0
- package/src/errors/index.d.ts +2 -0
- package/src/errors/index.js +26 -0
- package/src/errors/index.js.map +1 -0
- package/src/errors/mcp.error.d.ts +156 -0
- package/src/errors/mcp.error.js +243 -0
- package/src/errors/mcp.error.js.map +1 -0
- package/src/flows/flow.instance.js +7 -6
- package/src/flows/flow.instance.js.map +1 -1
- package/src/flows/flow.registry.js +1 -1
- package/src/flows/flow.registry.js.map +1 -1
- package/src/front-mcp/front-mcp.providers.d.ts +20 -20
- package/src/hooks/hook.registry.d.ts +5 -3
- package/src/hooks/hook.registry.js +13 -1
- package/src/hooks/hook.registry.js.map +1 -1
- package/src/plugin/plugin.registry.d.ts +7 -2
- package/src/plugin/plugin.registry.js +23 -11
- package/src/plugin/plugin.registry.js.map +1 -1
- package/src/prompt/prompt.registry.js +1 -0
- package/src/prompt/prompt.registry.js.map +1 -1
- package/src/resource/resource.registry.js +1 -0
- package/src/resource/resource.registry.js.map +1 -1
- package/src/scope/scope.instance.js +8 -2
- package/src/scope/scope.instance.js.map +1 -1
- package/src/scope/scope.registry.js +3 -2
- package/src/scope/scope.registry.js.map +1 -1
- package/src/scope/scope.utils.js +6 -4
- package/src/scope/scope.utils.js.map +1 -1
- package/src/store/adapters/store.memory.adapter.js +3 -1
- package/src/store/adapters/store.memory.adapter.js.map +1 -1
- package/src/tool/flows/call-tool.flow.d.ts +1012 -676
- package/src/tool/flows/call-tool.flow.js +94 -61
- package/src/tool/flows/call-tool.flow.js.map +1 -1
- package/src/tool/flows/tools-list.flow.d.ts +347 -590
- package/src/tool/flows/tools-list.flow.js +76 -49
- package/src/tool/flows/tools-list.flow.js.map +1 -1
- package/src/tool/tool.instance.d.ts +27 -8
- package/src/tool/tool.instance.js +40 -5
- package/src/tool/tool.instance.js.map +1 -1
- package/src/tool/tool.registry.js +19 -21
- package/src/tool/tool.registry.js.map +1 -1
- package/src/tool/tool.utils.d.ts +3 -2
- package/src/tool/tool.utils.js +377 -14
- package/src/tool/tool.utils.js.map +1 -1
- package/src/transport/adapters/transport.sse.adapter.js +2 -1
- package/src/transport/adapters/transport.sse.adapter.js.map +1 -1
- package/src/transport/adapters/transport.streamable-http.adapter.js.map +1 -1
- package/src/transport/flows/handle.sse.flow.js +6 -13
- package/src/transport/flows/handle.sse.flow.js.map +1 -1
- package/src/transport/flows/handle.streamable-http.flow.js +1 -0
- package/src/transport/flows/handle.streamable-http.flow.js.map +1 -1
- package/src/transport/mcp-handlers/call-tool-request.handler.d.ts +1 -1
- package/src/transport/mcp-handlers/call-tool-request.handler.js +10 -5
- package/src/transport/mcp-handlers/call-tool-request.handler.js.map +1 -1
- package/src/transport/mcp-handlers/index.d.ts +151 -268
- package/src/transport/mcp-handlers/list-tools-request.handler.d.ts +124 -216
- package/src/transport/transport.local.js +1 -0
- package/src/transport/transport.local.js.map +1 -1
- package/src/utils/string.utils.js +1 -1
- 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,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
|
+
};
|