@creezio/mcp-facade 0.22.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 (174) hide show
  1. package/README.md +420 -0
  2. package/dist/.creezio-src-hash.json +4 -0
  3. package/dist/admin/adapters.d.ts +10 -0
  4. package/dist/admin/adapters.d.ts.map +1 -0
  5. package/dist/admin/adapters.js +21 -0
  6. package/dist/admin/adapters.js.map +1 -0
  7. package/dist/admin/http-routes.d.ts +11 -0
  8. package/dist/admin/http-routes.d.ts.map +1 -0
  9. package/dist/admin/http-routes.js +66 -0
  10. package/dist/admin/http-routes.js.map +1 -0
  11. package/dist/admin/index.d.ts +12 -0
  12. package/dist/admin/index.d.ts.map +1 -0
  13. package/dist/admin/index.js +8 -0
  14. package/dist/admin/index.js.map +1 -0
  15. package/dist/admin/mcp-admin.d.ts +165 -0
  16. package/dist/admin/mcp-admin.d.ts.map +1 -0
  17. package/dist/admin/mcp-admin.js +419 -0
  18. package/dist/admin/mcp-admin.js.map +1 -0
  19. package/dist/admin/tool-policy-guard.d.ts +106 -0
  20. package/dist/admin/tool-policy-guard.d.ts.map +1 -0
  21. package/dist/admin/tool-policy-guard.js +187 -0
  22. package/dist/admin/tool-policy-guard.js.map +1 -0
  23. package/dist/admin/types.d.ts +62 -0
  24. package/dist/admin/types.d.ts.map +1 -0
  25. package/dist/admin/types.js +6 -0
  26. package/dist/admin/types.js.map +1 -0
  27. package/dist/brand-facade.d.ts +41 -0
  28. package/dist/brand-facade.d.ts.map +1 -0
  29. package/dist/brand-facade.js +67 -0
  30. package/dist/brand-facade.js.map +1 -0
  31. package/dist/core-tools.d.ts +22 -0
  32. package/dist/core-tools.d.ts.map +1 -0
  33. package/dist/core-tools.js +93 -0
  34. package/dist/core-tools.js.map +1 -0
  35. package/dist/dyn-import.d.ts +13 -0
  36. package/dist/dyn-import.d.ts.map +1 -0
  37. package/dist/dyn-import.js +2 -0
  38. package/dist/dyn-import.js.map +1 -0
  39. package/dist/facade.d.ts +40 -0
  40. package/dist/facade.d.ts.map +1 -0
  41. package/dist/facade.js +334 -0
  42. package/dist/facade.js.map +1 -0
  43. package/dist/hono-bind.d.ts +48 -0
  44. package/dist/hono-bind.d.ts.map +1 -0
  45. package/dist/hono-bind.js +70 -0
  46. package/dist/hono-bind.js.map +1 -0
  47. package/dist/hono-proxy.d.ts +63 -0
  48. package/dist/hono-proxy.d.ts.map +1 -0
  49. package/dist/hono-proxy.js +185 -0
  50. package/dist/hono-proxy.js.map +1 -0
  51. package/dist/index.d.ts +32 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +23 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/jwt.d.ts +20 -0
  56. package/dist/jwt.d.ts.map +1 -0
  57. package/dist/jwt.js +84 -0
  58. package/dist/jwt.js.map +1 -0
  59. package/dist/module-ops-tools.d.ts +43 -0
  60. package/dist/module-ops-tools.d.ts.map +1 -0
  61. package/dist/module-ops-tools.js +301 -0
  62. package/dist/module-ops-tools.js.map +1 -0
  63. package/dist/namespace.d.ts +23 -0
  64. package/dist/namespace.d.ts.map +1 -0
  65. package/dist/namespace.js +51 -0
  66. package/dist/namespace.js.map +1 -0
  67. package/dist/oauth/cors-policy.d.ts +3 -0
  68. package/dist/oauth/cors-policy.d.ts.map +1 -0
  69. package/dist/oauth/cors-policy.js +25 -0
  70. package/dist/oauth/cors-policy.js.map +1 -0
  71. package/dist/oauth/hono-app.d.ts +18 -0
  72. package/dist/oauth/hono-app.d.ts.map +1 -0
  73. package/dist/oauth/hono-app.js +175 -0
  74. package/dist/oauth/hono-app.js.map +1 -0
  75. package/dist/oauth/index.d.ts +9 -0
  76. package/dist/oauth/index.d.ts.map +1 -0
  77. package/dist/oauth/index.js +6 -0
  78. package/dist/oauth/index.js.map +1 -0
  79. package/dist/oauth/rate-limit.d.ts +11 -0
  80. package/dist/oauth/rate-limit.d.ts.map +1 -0
  81. package/dist/oauth/rate-limit.js +32 -0
  82. package/dist/oauth/rate-limit.js.map +1 -0
  83. package/dist/oauth/routes.d.ts +8 -0
  84. package/dist/oauth/routes.d.ts.map +1 -0
  85. package/dist/oauth/routes.js +671 -0
  86. package/dist/oauth/routes.js.map +1 -0
  87. package/dist/oauth/store.d.ts +113 -0
  88. package/dist/oauth/store.d.ts.map +1 -0
  89. package/dist/oauth/store.js +390 -0
  90. package/dist/oauth/store.js.map +1 -0
  91. package/dist/oauth/types.d.ts +97 -0
  92. package/dist/oauth/types.d.ts.map +1 -0
  93. package/dist/oauth/types.js +5 -0
  94. package/dist/oauth/types.js.map +1 -0
  95. package/dist/open-external-tab-host-tools.d.ts +67 -0
  96. package/dist/open-external-tab-host-tools.d.ts.map +1 -0
  97. package/dist/open-external-tab-host-tools.js +92 -0
  98. package/dist/open-external-tab-host-tools.js.map +1 -0
  99. package/dist/policy.d.ts +59 -0
  100. package/dist/policy.d.ts.map +1 -0
  101. package/dist/policy.js +88 -0
  102. package/dist/policy.js.map +1 -0
  103. package/dist/runtime.d.ts +22 -0
  104. package/dist/runtime.d.ts.map +1 -0
  105. package/dist/runtime.js +20 -0
  106. package/dist/runtime.js.map +1 -0
  107. package/dist/types.d.ts +163 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +2 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist-cjs/admin/adapters.js +27 -0
  112. package/dist-cjs/admin/adapters.js.map +1 -0
  113. package/dist-cjs/admin/http-routes.js +69 -0
  114. package/dist-cjs/admin/http-routes.js.map +1 -0
  115. package/dist-cjs/admin/index.js +40 -0
  116. package/dist-cjs/admin/index.js.map +1 -0
  117. package/dist-cjs/admin/mcp-admin.js +441 -0
  118. package/dist-cjs/admin/mcp-admin.js.map +1 -0
  119. package/dist-cjs/admin/tool-policy-guard.js +193 -0
  120. package/dist-cjs/admin/tool-policy-guard.js.map +1 -0
  121. package/dist-cjs/admin/types.js +7 -0
  122. package/dist-cjs/admin/types.js.map +1 -0
  123. package/dist-cjs/brand-facade.js +70 -0
  124. package/dist-cjs/brand-facade.js.map +1 -0
  125. package/dist-cjs/core-tools.js +97 -0
  126. package/dist-cjs/core-tools.js.map +1 -0
  127. package/dist-cjs/dyn-import.js +5 -0
  128. package/dist-cjs/dyn-import.js.map +1 -0
  129. package/dist-cjs/facade.js +337 -0
  130. package/dist-cjs/facade.js.map +1 -0
  131. package/dist-cjs/hono-bind.js +74 -0
  132. package/dist-cjs/hono-bind.js.map +1 -0
  133. package/dist-cjs/hono-proxy.js +189 -0
  134. package/dist-cjs/hono-proxy.js.map +1 -0
  135. package/dist-cjs/index.js +120 -0
  136. package/dist-cjs/index.js.map +1 -0
  137. package/dist-cjs/jwt.js +91 -0
  138. package/dist-cjs/jwt.js.map +1 -0
  139. package/dist-cjs/module-ops-tools.js +308 -0
  140. package/dist-cjs/module-ops-tools.js.map +1 -0
  141. package/dist-cjs/namespace.js +56 -0
  142. package/dist-cjs/namespace.js.map +1 -0
  143. package/dist-cjs/oauth/cors-policy.js +29 -0
  144. package/dist-cjs/oauth/cors-policy.js.map +1 -0
  145. package/dist-cjs/oauth/hono-app.js +178 -0
  146. package/dist-cjs/oauth/hono-app.js.map +1 -0
  147. package/dist-cjs/oauth/index.js +48 -0
  148. package/dist-cjs/oauth/index.js.map +1 -0
  149. package/dist-cjs/oauth/rate-limit.js +37 -0
  150. package/dist-cjs/oauth/rate-limit.js.map +1 -0
  151. package/dist-cjs/oauth/routes.js +674 -0
  152. package/dist-cjs/oauth/routes.js.map +1 -0
  153. package/dist-cjs/oauth/store.js +418 -0
  154. package/dist-cjs/oauth/store.js.map +1 -0
  155. package/dist-cjs/oauth/types.js +6 -0
  156. package/dist-cjs/oauth/types.js.map +1 -0
  157. package/dist-cjs/open-external-tab-host-tools.js +96 -0
  158. package/dist-cjs/open-external-tab-host-tools.js.map +1 -0
  159. package/dist-cjs/package.json +3 -0
  160. package/dist-cjs/policy.js +93 -0
  161. package/dist-cjs/policy.js.map +1 -0
  162. package/dist-cjs/runtime.js +24 -0
  163. package/dist-cjs/runtime.js.map +1 -0
  164. package/dist-cjs/types.js +3 -0
  165. package/dist-cjs/types.js.map +1 -0
  166. package/package.json +92 -0
  167. package/ui/index.ts +5 -0
  168. package/ui/mcp-admin-client.tsx +270 -0
  169. package/ui/primitives/badge.tsx +37 -0
  170. package/ui/primitives/button.tsx +44 -0
  171. package/ui/primitives/card.tsx +44 -0
  172. package/ui/primitives/cn.ts +6 -0
  173. package/ui/primitives/input.tsx +19 -0
  174. package/ui/primitives/tabs.tsx +51 -0
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * @creezio/mcp-facade — MCP d'app unique (H1.2 / discovery H2.3 / proxy H4 / M9).
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.rateLimitHeaders = exports.pruneExpiredCodes = exports.peekAuthCode = exports.normalizeMcpScopes = exports.mcpResourceUrl = exports.mcpOauthReady = exports.mcpCorsAllowlist = exports.mcpBaseUrl = exports.isMcpPublicUrlRequiredError = exports.getMcpOAuthAdapters = exports.getClient = exports.createRefreshToken = exports.createMcpOAuthRoutes = exports.createMcpHonoApp = exports.createAuthCode = exports.consumeAuthCode = exports.configureMcpOAuth = exports.checkMcpRateLimit = exports.canonicalizeMcpUrl = exports.McpPublicUrlRequiredError = exports.MCP_SCOPES = exports.MCP_SCOPE_WRITE = exports.MCP_SCOPE_READ = exports.MCP_SCOPE_LEGACY = exports.MCP_SCOPE = exports.REFRESH_TOKEN_TTL_S = exports.ACCESS_TOKEN_TTL_S = exports.generateModuleToolsFromOperations = exports.generateModuleToolsFromMountedOps = exports.generateModuleToolsFromListedOps = exports.discoverModuleToolsFromKernel = exports.discoverModuleToolsFromBrandModules = exports.createBrandMcpFacade = exports.mcpFacadeResultToSdk = exports.bindFacadeToolsToHono = exports.wrapMcpFacadeWithHonoProxy = exports.__mcpHonoProxyTest = exports.resolveMcpFacadeRole = exports.MCP_PRODUCT_EXECUTOR = exports.createCoreMcpTools = exports.CREEZIO_CORE_MCP_TOOL_NAMES = exports.denyCrossLayerToolCall = exports.createDenyUnauthorizedPluginToolPolicy = exports.composeToolPolicies = exports.parseNamespacedToolName = exports.isLegacyAliasName = exports.assertNamespacedToolName = exports.verifyMcpBearer = exports.signMcpJwt = exports.createMcpFacade = void 0;
7
+ exports.registerGuardedMcpTool = exports.getStoredMcpToolPolicy = exports.createToolPolicyAuthorize = exports.checkToolPolicy = exports.createMcpAdminRoutes = exports.exportMcpDiagnostics = exports.pruneMcpAuditLogs = exports.listMcpAuditLogs = exports.auditMcpAdmin = exports.mcpMetrics = exports.mcpDiagnostics = exports.mcpAdminStatus = exports.touchMcpClient = exports.clientCanAuthenticate = exports.rotateMcpClientSecret = exports.revokeMcpClient = exports.setMcpClientEnabled = exports.listMcpClients = exports.updateMcpToolPolicy = exports.filterListedToolsByEnabledPolicy = exports.disabledMcpToolPolicyNames = exports.getMcpToolPolicy = exports.listMcpToolPolicies = exports.seedMcpToolPolicies = exports.ensureMcpAdminSchema = exports.resetMcpAdminAdaptersForTests = exports.isMcpAdminConfigured = exports.getMcpAdminAdapters = exports.configureMcpAdmin = exports.createOpenExternalTabHostMcpTools = exports.CREEZIO_OPEN_EXTERNAL_TAB_MCP_TOOL_NAME = exports.CREEZIO_PLATFORM_HOST_MCP_TOOL_NAMES = exports.verifyPkceS256 = exports.verifyClientSecret = exports.verifyAccessToken = exports.touchOAuthClientLastUsed = exports.signAccessToken = exports.rotateRefreshToken = exports.resourceAcceptable = exports.resolveMcpPublicUrl = exports.resolveMcpCorsOrigin = exports.resetMcpRateLimits = exports.resetMcpOAuthAdaptersForTests = exports.registerClient = void 0;
8
+ var facade_js_1 = require("./facade.js");
9
+ Object.defineProperty(exports, "createMcpFacade", { enumerable: true, get: function () { return facade_js_1.createMcpFacade; } });
10
+ var jwt_js_1 = require("./jwt.js");
11
+ Object.defineProperty(exports, "signMcpJwt", { enumerable: true, get: function () { return jwt_js_1.signMcpJwt; } });
12
+ Object.defineProperty(exports, "verifyMcpBearer", { enumerable: true, get: function () { return jwt_js_1.verifyMcpBearer; } });
13
+ var namespace_js_1 = require("./namespace.js");
14
+ Object.defineProperty(exports, "assertNamespacedToolName", { enumerable: true, get: function () { return namespace_js_1.assertNamespacedToolName; } });
15
+ Object.defineProperty(exports, "isLegacyAliasName", { enumerable: true, get: function () { return namespace_js_1.isLegacyAliasName; } });
16
+ Object.defineProperty(exports, "parseNamespacedToolName", { enumerable: true, get: function () { return namespace_js_1.parseNamespacedToolName; } });
17
+ var policy_js_1 = require("./policy.js");
18
+ Object.defineProperty(exports, "composeToolPolicies", { enumerable: true, get: function () { return policy_js_1.composeToolPolicies; } });
19
+ Object.defineProperty(exports, "createDenyUnauthorizedPluginToolPolicy", { enumerable: true, get: function () { return policy_js_1.createDenyUnauthorizedPluginToolPolicy; } });
20
+ Object.defineProperty(exports, "denyCrossLayerToolCall", { enumerable: true, get: function () { return policy_js_1.denyCrossLayerToolCall; } });
21
+ var core_tools_js_1 = require("./core-tools.js");
22
+ Object.defineProperty(exports, "CREEZIO_CORE_MCP_TOOL_NAMES", { enumerable: true, get: function () { return core_tools_js_1.CREEZIO_CORE_MCP_TOOL_NAMES; } });
23
+ Object.defineProperty(exports, "createCoreMcpTools", { enumerable: true, get: function () { return core_tools_js_1.createCoreMcpTools; } });
24
+ var runtime_js_1 = require("./runtime.js");
25
+ Object.defineProperty(exports, "MCP_PRODUCT_EXECUTOR", { enumerable: true, get: function () { return runtime_js_1.MCP_PRODUCT_EXECUTOR; } });
26
+ Object.defineProperty(exports, "resolveMcpFacadeRole", { enumerable: true, get: function () { return runtime_js_1.resolveMcpFacadeRole; } });
27
+ var hono_proxy_js_1 = require("./hono-proxy.js");
28
+ Object.defineProperty(exports, "__mcpHonoProxyTest", { enumerable: true, get: function () { return hono_proxy_js_1.__mcpHonoProxyTest; } });
29
+ Object.defineProperty(exports, "wrapMcpFacadeWithHonoProxy", { enumerable: true, get: function () { return hono_proxy_js_1.wrapMcpFacadeWithHonoProxy; } });
30
+ var hono_bind_js_1 = require("./hono-bind.js");
31
+ Object.defineProperty(exports, "bindFacadeToolsToHono", { enumerable: true, get: function () { return hono_bind_js_1.bindFacadeToolsToHono; } });
32
+ Object.defineProperty(exports, "mcpFacadeResultToSdk", { enumerable: true, get: function () { return hono_bind_js_1.mcpFacadeResultToSdk; } });
33
+ var brand_facade_js_1 = require("./brand-facade.js");
34
+ Object.defineProperty(exports, "createBrandMcpFacade", { enumerable: true, get: function () { return brand_facade_js_1.createBrandMcpFacade; } });
35
+ var module_ops_tools_js_1 = require("./module-ops-tools.js");
36
+ Object.defineProperty(exports, "discoverModuleToolsFromBrandModules", { enumerable: true, get: function () { return module_ops_tools_js_1.discoverModuleToolsFromBrandModules; } });
37
+ Object.defineProperty(exports, "discoverModuleToolsFromKernel", { enumerable: true, get: function () { return module_ops_tools_js_1.discoverModuleToolsFromKernel; } });
38
+ Object.defineProperty(exports, "generateModuleToolsFromListedOps", { enumerable: true, get: function () { return module_ops_tools_js_1.generateModuleToolsFromListedOps; } });
39
+ Object.defineProperty(exports, "generateModuleToolsFromMountedOps", { enumerable: true, get: function () { return module_ops_tools_js_1.generateModuleToolsFromMountedOps; } });
40
+ Object.defineProperty(exports, "generateModuleToolsFromOperations", { enumerable: true, get: function () { return module_ops_tools_js_1.generateModuleToolsFromOperations; } });
41
+ var index_js_1 = require("./oauth/index.js");
42
+ Object.defineProperty(exports, "ACCESS_TOKEN_TTL_S", { enumerable: true, get: function () { return index_js_1.ACCESS_TOKEN_TTL_S; } });
43
+ Object.defineProperty(exports, "REFRESH_TOKEN_TTL_S", { enumerable: true, get: function () { return index_js_1.REFRESH_TOKEN_TTL_S; } });
44
+ Object.defineProperty(exports, "MCP_SCOPE", { enumerable: true, get: function () { return index_js_1.MCP_SCOPE; } });
45
+ Object.defineProperty(exports, "MCP_SCOPE_LEGACY", { enumerable: true, get: function () { return index_js_1.MCP_SCOPE_LEGACY; } });
46
+ Object.defineProperty(exports, "MCP_SCOPE_READ", { enumerable: true, get: function () { return index_js_1.MCP_SCOPE_READ; } });
47
+ Object.defineProperty(exports, "MCP_SCOPE_WRITE", { enumerable: true, get: function () { return index_js_1.MCP_SCOPE_WRITE; } });
48
+ Object.defineProperty(exports, "MCP_SCOPES", { enumerable: true, get: function () { return index_js_1.MCP_SCOPES; } });
49
+ Object.defineProperty(exports, "McpPublicUrlRequiredError", { enumerable: true, get: function () { return index_js_1.McpPublicUrlRequiredError; } });
50
+ Object.defineProperty(exports, "canonicalizeMcpUrl", { enumerable: true, get: function () { return index_js_1.canonicalizeMcpUrl; } });
51
+ Object.defineProperty(exports, "checkMcpRateLimit", { enumerable: true, get: function () { return index_js_1.checkMcpRateLimit; } });
52
+ Object.defineProperty(exports, "configureMcpOAuth", { enumerable: true, get: function () { return index_js_1.configureMcpOAuth; } });
53
+ Object.defineProperty(exports, "consumeAuthCode", { enumerable: true, get: function () { return index_js_1.consumeAuthCode; } });
54
+ Object.defineProperty(exports, "createAuthCode", { enumerable: true, get: function () { return index_js_1.createAuthCode; } });
55
+ Object.defineProperty(exports, "createMcpHonoApp", { enumerable: true, get: function () { return index_js_1.createMcpHonoApp; } });
56
+ Object.defineProperty(exports, "createMcpOAuthRoutes", { enumerable: true, get: function () { return index_js_1.createMcpOAuthRoutes; } });
57
+ Object.defineProperty(exports, "createRefreshToken", { enumerable: true, get: function () { return index_js_1.createRefreshToken; } });
58
+ Object.defineProperty(exports, "getClient", { enumerable: true, get: function () { return index_js_1.getClient; } });
59
+ Object.defineProperty(exports, "getMcpOAuthAdapters", { enumerable: true, get: function () { return index_js_1.getMcpOAuthAdapters; } });
60
+ Object.defineProperty(exports, "isMcpPublicUrlRequiredError", { enumerable: true, get: function () { return index_js_1.isMcpPublicUrlRequiredError; } });
61
+ Object.defineProperty(exports, "mcpBaseUrl", { enumerable: true, get: function () { return index_js_1.mcpBaseUrl; } });
62
+ Object.defineProperty(exports, "mcpCorsAllowlist", { enumerable: true, get: function () { return index_js_1.mcpCorsAllowlist; } });
63
+ Object.defineProperty(exports, "mcpOauthReady", { enumerable: true, get: function () { return index_js_1.mcpOauthReady; } });
64
+ Object.defineProperty(exports, "mcpResourceUrl", { enumerable: true, get: function () { return index_js_1.mcpResourceUrl; } });
65
+ Object.defineProperty(exports, "normalizeMcpScopes", { enumerable: true, get: function () { return index_js_1.normalizeMcpScopes; } });
66
+ Object.defineProperty(exports, "peekAuthCode", { enumerable: true, get: function () { return index_js_1.peekAuthCode; } });
67
+ Object.defineProperty(exports, "pruneExpiredCodes", { enumerable: true, get: function () { return index_js_1.pruneExpiredCodes; } });
68
+ Object.defineProperty(exports, "rateLimitHeaders", { enumerable: true, get: function () { return index_js_1.rateLimitHeaders; } });
69
+ Object.defineProperty(exports, "registerClient", { enumerable: true, get: function () { return index_js_1.registerClient; } });
70
+ Object.defineProperty(exports, "resetMcpOAuthAdaptersForTests", { enumerable: true, get: function () { return index_js_1.resetMcpOAuthAdaptersForTests; } });
71
+ Object.defineProperty(exports, "resetMcpRateLimits", { enumerable: true, get: function () { return index_js_1.resetMcpRateLimits; } });
72
+ Object.defineProperty(exports, "resolveMcpCorsOrigin", { enumerable: true, get: function () { return index_js_1.resolveMcpCorsOrigin; } });
73
+ Object.defineProperty(exports, "resolveMcpPublicUrl", { enumerable: true, get: function () { return index_js_1.resolveMcpPublicUrl; } });
74
+ Object.defineProperty(exports, "resourceAcceptable", { enumerable: true, get: function () { return index_js_1.resourceAcceptable; } });
75
+ Object.defineProperty(exports, "rotateRefreshToken", { enumerable: true, get: function () { return index_js_1.rotateRefreshToken; } });
76
+ Object.defineProperty(exports, "signAccessToken", { enumerable: true, get: function () { return index_js_1.signAccessToken; } });
77
+ Object.defineProperty(exports, "touchOAuthClientLastUsed", { enumerable: true, get: function () { return index_js_1.touchOAuthClientLastUsed; } });
78
+ Object.defineProperty(exports, "verifyAccessToken", { enumerable: true, get: function () { return index_js_1.verifyAccessToken; } });
79
+ Object.defineProperty(exports, "verifyClientSecret", { enumerable: true, get: function () { return index_js_1.verifyClientSecret; } });
80
+ Object.defineProperty(exports, "verifyPkceS256", { enumerable: true, get: function () { return index_js_1.verifyPkceS256; } });
81
+ /** Host-only tools typiques (hors factory marque) — desktop / introspection. */
82
+ exports.CREEZIO_PLATFORM_HOST_MCP_TOOL_NAMES = [
83
+ "open_external_tab",
84
+ "list_tools_by_space",
85
+ ];
86
+ var open_external_tab_host_tools_js_1 = require("./open-external-tab-host-tools.js");
87
+ Object.defineProperty(exports, "CREEZIO_OPEN_EXTERNAL_TAB_MCP_TOOL_NAME", { enumerable: true, get: function () { return open_external_tab_host_tools_js_1.CREEZIO_OPEN_EXTERNAL_TAB_MCP_TOOL_NAME; } });
88
+ Object.defineProperty(exports, "createOpenExternalTabHostMcpTools", { enumerable: true, get: function () { return open_external_tab_host_tools_js_1.createOpenExternalTabHostMcpTools; } });
89
+ /* ── N6 : MCP admin (port TempoFlow) ── */
90
+ var index_js_2 = require("./admin/index.js");
91
+ Object.defineProperty(exports, "configureMcpAdmin", { enumerable: true, get: function () { return index_js_2.configureMcpAdmin; } });
92
+ Object.defineProperty(exports, "getMcpAdminAdapters", { enumerable: true, get: function () { return index_js_2.getMcpAdminAdapters; } });
93
+ Object.defineProperty(exports, "isMcpAdminConfigured", { enumerable: true, get: function () { return index_js_2.isMcpAdminConfigured; } });
94
+ Object.defineProperty(exports, "resetMcpAdminAdaptersForTests", { enumerable: true, get: function () { return index_js_2.resetMcpAdminAdaptersForTests; } });
95
+ Object.defineProperty(exports, "ensureMcpAdminSchema", { enumerable: true, get: function () { return index_js_2.ensureMcpAdminSchema; } });
96
+ Object.defineProperty(exports, "seedMcpToolPolicies", { enumerable: true, get: function () { return index_js_2.seedMcpToolPolicies; } });
97
+ Object.defineProperty(exports, "listMcpToolPolicies", { enumerable: true, get: function () { return index_js_2.listMcpToolPolicies; } });
98
+ Object.defineProperty(exports, "getMcpToolPolicy", { enumerable: true, get: function () { return index_js_2.getMcpToolPolicy; } });
99
+ Object.defineProperty(exports, "disabledMcpToolPolicyNames", { enumerable: true, get: function () { return index_js_2.disabledMcpToolPolicyNames; } });
100
+ Object.defineProperty(exports, "filterListedToolsByEnabledPolicy", { enumerable: true, get: function () { return index_js_2.filterListedToolsByEnabledPolicy; } });
101
+ Object.defineProperty(exports, "updateMcpToolPolicy", { enumerable: true, get: function () { return index_js_2.updateMcpToolPolicy; } });
102
+ Object.defineProperty(exports, "listMcpClients", { enumerable: true, get: function () { return index_js_2.listMcpClients; } });
103
+ Object.defineProperty(exports, "setMcpClientEnabled", { enumerable: true, get: function () { return index_js_2.setMcpClientEnabled; } });
104
+ Object.defineProperty(exports, "revokeMcpClient", { enumerable: true, get: function () { return index_js_2.revokeMcpClient; } });
105
+ Object.defineProperty(exports, "rotateMcpClientSecret", { enumerable: true, get: function () { return index_js_2.rotateMcpClientSecret; } });
106
+ Object.defineProperty(exports, "clientCanAuthenticate", { enumerable: true, get: function () { return index_js_2.clientCanAuthenticate; } });
107
+ Object.defineProperty(exports, "touchMcpClient", { enumerable: true, get: function () { return index_js_2.touchMcpClient; } });
108
+ Object.defineProperty(exports, "mcpAdminStatus", { enumerable: true, get: function () { return index_js_2.mcpAdminStatus; } });
109
+ Object.defineProperty(exports, "mcpDiagnostics", { enumerable: true, get: function () { return index_js_2.mcpDiagnostics; } });
110
+ Object.defineProperty(exports, "mcpMetrics", { enumerable: true, get: function () { return index_js_2.mcpMetrics; } });
111
+ Object.defineProperty(exports, "auditMcpAdmin", { enumerable: true, get: function () { return index_js_2.auditMcpAdmin; } });
112
+ Object.defineProperty(exports, "listMcpAuditLogs", { enumerable: true, get: function () { return index_js_2.listMcpAuditLogs; } });
113
+ Object.defineProperty(exports, "pruneMcpAuditLogs", { enumerable: true, get: function () { return index_js_2.pruneMcpAuditLogs; } });
114
+ Object.defineProperty(exports, "exportMcpDiagnostics", { enumerable: true, get: function () { return index_js_2.exportMcpDiagnostics; } });
115
+ Object.defineProperty(exports, "createMcpAdminRoutes", { enumerable: true, get: function () { return index_js_2.createMcpAdminRoutes; } });
116
+ Object.defineProperty(exports, "checkToolPolicy", { enumerable: true, get: function () { return index_js_2.checkToolPolicy; } });
117
+ Object.defineProperty(exports, "createToolPolicyAuthorize", { enumerable: true, get: function () { return index_js_2.createToolPolicyAuthorize; } });
118
+ Object.defineProperty(exports, "getStoredMcpToolPolicy", { enumerable: true, get: function () { return index_js_2.getStoredMcpToolPolicy; } });
119
+ Object.defineProperty(exports, "registerGuardedMcpTool", { enumerable: true, get: function () { return index_js_2.registerGuardedMcpTool; } });
120
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Vérification JWT HS256 minimale (sans dépendance jsonwebtoken).
4
+ * Alignée sur le secret local-config `mcpJwtSecret` / MCP_JWT_SECRET.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.verifyMcpBearer = verifyMcpBearer;
11
+ exports.signMcpJwt = signMcpJwt;
12
+ const node_crypto_1 = __importDefault(require("node:crypto"));
13
+ function b64urlToBuf(s) {
14
+ const pad = "=".repeat((4 - (s.length % 4)) % 4);
15
+ return Buffer.from(s.replace(/-/g, "+").replace(/_/g, "/") + pad, "base64");
16
+ }
17
+ function timingSafeEqualStr(a, b) {
18
+ const ba = Buffer.from(a);
19
+ const bb = Buffer.from(b);
20
+ if (ba.length !== bb.length)
21
+ return false;
22
+ return node_crypto_1.default.timingSafeEqual(ba, bb);
23
+ }
24
+ /**
25
+ * Accepte :
26
+ * - bearer === secret (token opaque sandbox) ;
27
+ * - JWT HS256 signé avec le secret (payload.sub optionnel).
28
+ */
29
+ function verifyMcpBearer(bearerToken, secret, opts) {
30
+ if (!secret) {
31
+ if (opts?.allowUnauthenticated)
32
+ return { ok: true, subject: "anonymous" };
33
+ return { ok: false, error: "mcp_jwt_secret_missing", status: 503 };
34
+ }
35
+ if (!bearerToken) {
36
+ if (opts?.allowUnauthenticated)
37
+ return { ok: true, subject: "anonymous" };
38
+ return { ok: false, error: "unauthorized", status: 401 };
39
+ }
40
+ const token = bearerToken.replace(/^Bearer\s+/i, "").trim();
41
+ if (!token) {
42
+ return { ok: false, error: "unauthorized", status: 401 };
43
+ }
44
+ if (timingSafeEqualStr(token, secret)) {
45
+ return { ok: true, subject: "opaque-token" };
46
+ }
47
+ const parts = token.split(".");
48
+ if (parts.length !== 3) {
49
+ return { ok: false, error: "invalid_token", status: 401 };
50
+ }
51
+ const [h, p, s] = parts;
52
+ const data = `${h}.${p}`;
53
+ const expected = node_crypto_1.default
54
+ .createHmac("sha256", secret)
55
+ .update(data)
56
+ .digest("base64url");
57
+ if (!timingSafeEqualStr(s, expected)) {
58
+ return { ok: false, error: "invalid_signature", status: 401 };
59
+ }
60
+ try {
61
+ const payload = JSON.parse(b64urlToBuf(p).toString("utf8"));
62
+ if (typeof payload.exp === "number" && payload.exp * 1000 < Date.now()) {
63
+ return { ok: false, error: "token_expired", status: 401 };
64
+ }
65
+ const orgId = typeof payload.orgId === "string"
66
+ ? payload.orgId
67
+ : typeof payload.org_id === "string"
68
+ ? payload.org_id
69
+ : undefined;
70
+ return {
71
+ ok: true,
72
+ subject: payload.sub || "jwt",
73
+ ...(orgId ? { orgId } : {}),
74
+ claims: payload,
75
+ };
76
+ }
77
+ catch {
78
+ return { ok: false, error: "invalid_payload", status: 401 };
79
+ }
80
+ }
81
+ /** Émet un JWT HS256 court (tests / sandbox). */
82
+ function signMcpJwt(secret, payload) {
83
+ const header = Buffer.from(JSON.stringify({ alg: "HS256", typ: "JWT" })).toString("base64url");
84
+ const body = Buffer.from(JSON.stringify(payload)).toString("base64url");
85
+ const sig = node_crypto_1.default
86
+ .createHmac("sha256", secret)
87
+ .update(`${header}.${body}`)
88
+ .digest("base64url");
89
+ return `${header}.${body}.${sig}`;
90
+ }
91
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../src/jwt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ /**
3
+ * Génération des tools MCP depuis les opérations de module (SoT).
4
+ * Handler = requête synthétique vers le même mount HTTP — zéro 2e implémentation.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.generateModuleToolsFromOperations = generateModuleToolsFromOperations;
8
+ exports.generateModuleToolsFromListedOps = generateModuleToolsFromListedOps;
9
+ exports.generateModuleToolsFromMountedOps = generateModuleToolsFromMountedOps;
10
+ exports.discoverModuleToolsFromKernel = discoverModuleToolsFromKernel;
11
+ exports.discoverModuleToolsFromBrandModules = discoverModuleToolsFromBrandModules;
12
+ const api_kernel_1 = require("@creezio/api-kernel");
13
+ const dyn_import_js_1 = require("./dyn-import.js");
14
+ const store_js_1 = require("./oauth/store.js");
15
+ /**
16
+ * Access token OAuth MCP (HS256 MCP_JWT_SECRET — ChatGPT & co) → session
17
+ * plateforme mintée pour le user du consentement (`uid`). Les gardes marque
18
+ * (`requireSession`) ne connaissent que les JWT session AUTH_SECRET : sans
19
+ * cette conversion, tout tool `module.*` répond 401 malgré un OAuth valide.
20
+ * Fail-closed : uid absent/inconnu ou stores indisponibles → null (le 401
21
+ * métier reste la réponse).
22
+ */
23
+ async function mintSessionFromMcpAccessToken(token) {
24
+ let userId = "";
25
+ try {
26
+ const payload = await (0, store_js_1.verifyAccessToken)(token);
27
+ userId = (payload?.user_id || "").trim();
28
+ }
29
+ catch {
30
+ return null; // adapters OAuth non configurés (façade standalone)
31
+ }
32
+ if (!userId)
33
+ return null;
34
+ try {
35
+ const [authMod, tasksMod] = await Promise.all([
36
+ (0, dyn_import_js_1.dynImport)("@creezio/auth"),
37
+ (0, dyn_import_js_1.dynImport)("@creezio/tasks"),
38
+ ]);
39
+ if (!authMod.createSessionToken)
40
+ return null;
41
+ const users = tasksMod.getTasksBrandConfig?.()?.users;
42
+ let user = null;
43
+ try {
44
+ const found = users?.list().find((u) => u.id === userId && u.active !== false) ??
45
+ null;
46
+ if (found) {
47
+ user = {
48
+ id: found.id,
49
+ username: found.username,
50
+ role: found.role === "owner" ? "owner" : found.role || "collaborator",
51
+ permissions: [...(found.permissions || [])],
52
+ };
53
+ }
54
+ }
55
+ catch {
56
+ /* store users indisponible → fallback owner ci-dessous */
57
+ }
58
+ if (!user) {
59
+ try {
60
+ const owner = users?.getOwner?.() ?? null;
61
+ if (owner && owner.id === userId) {
62
+ user = {
63
+ id: owner.id,
64
+ username: owner.username,
65
+ role: "owner",
66
+ permissions: [...(owner.permissions || [])],
67
+ };
68
+ }
69
+ }
70
+ catch {
71
+ /* fail-closed */
72
+ }
73
+ }
74
+ if (!user)
75
+ return null;
76
+ return await authMod.createSessionToken({ user });
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ }
82
+ /** Cookie + Authorization pour `requireSession` sur la req synthétique. */
83
+ async function headersFromActor(actor) {
84
+ const headers = {};
85
+ if (actor?.headers) {
86
+ for (const [key, value] of Object.entries(actor.headers)) {
87
+ if (value == null || value === "")
88
+ continue;
89
+ headers[key.toLowerCase()] = String(value);
90
+ }
91
+ }
92
+ const raw = (actor?.bearerToken || "").trim();
93
+ if (raw) {
94
+ const token = raw.replace(/^Bearer\s+/i, "").trim();
95
+ if (token && !headers.authorization) {
96
+ headers.authorization = `Bearer ${token}`;
97
+ }
98
+ }
99
+ // Bearer JWT : si c'est un access token OAuth MCP, le convertir en
100
+ // session plateforme mintée (sinon inchangé — JWT session déjà valide).
101
+ const authz = (headers.authorization || "")
102
+ .replace(/^Bearer\s+/i, "")
103
+ .trim();
104
+ if (authz && authz.split(".").length === 3) {
105
+ const minted = await mintSessionFromMcpAccessToken(authz);
106
+ if (minted)
107
+ headers.authorization = `Bearer ${minted}`;
108
+ }
109
+ return Object.keys(headers).length ? headers : undefined;
110
+ }
111
+ function interpolatePath(template, args) {
112
+ const used = new Set();
113
+ const path = template.replace(/:([A-Za-z_][A-Za-z0-9_]*)/g, (_, name) => {
114
+ used.add(name);
115
+ const value = args[name];
116
+ return encodeURIComponent(value == null ? "" : String(value));
117
+ });
118
+ return { path, used };
119
+ }
120
+ function asQuery(rest) {
121
+ const query = {};
122
+ for (const [key, value] of Object.entries(rest)) {
123
+ if (value == null)
124
+ continue;
125
+ if (Array.isArray(value)) {
126
+ query[key] = value.map((v) => String(v)).join(",");
127
+ continue;
128
+ }
129
+ if (typeof value === "object")
130
+ continue;
131
+ query[key] = String(value);
132
+ }
133
+ return query;
134
+ }
135
+ function defaultInputSchema(op) {
136
+ if (op.inputSchema && typeof op.inputSchema === "object") {
137
+ return op.inputSchema;
138
+ }
139
+ const params = [
140
+ ...normalizePath(op.path).matchAll(/:([A-Za-z_][A-Za-z0-9_]*)/g),
141
+ ].map((m) => m[1]);
142
+ const properties = {};
143
+ for (const name of params)
144
+ properties[name] = { type: "string" };
145
+ return {
146
+ type: "object",
147
+ properties,
148
+ required: params,
149
+ additionalProperties: true,
150
+ };
151
+ }
152
+ function normalizePath(path) {
153
+ const raw = String(path || "").trim();
154
+ if (!raw || raw === "/")
155
+ return "/";
156
+ return raw.startsWith("/") ? raw : `/${raw}`;
157
+ }
158
+ function restArgs(args, used) {
159
+ const rest = {};
160
+ for (const [key, value] of Object.entries(args)) {
161
+ if (used.has(key))
162
+ continue;
163
+ rest[key] = value;
164
+ }
165
+ return rest;
166
+ }
167
+ function responseToToolResult(res) {
168
+ if (res.status >= 400) {
169
+ const body = res.body;
170
+ return {
171
+ ok: false,
172
+ error: (body && typeof body === "object" && body.error) ||
173
+ `http_${res.status}`,
174
+ content: res.body,
175
+ };
176
+ }
177
+ return { ok: true, content: res.body };
178
+ }
179
+ /**
180
+ * Génère un tool MCP par op — `module.<id>.<op.id>`.
181
+ * Handler = requête synthétique (method/path/body) vers le même
182
+ * `ApiMount.handle` via `invokeMount` (typiquement `api.handle`) —
183
+ * zéro 2ᵉ implémentation métier.
184
+ */
185
+ function generateModuleToolsFromOperations(moduleId, ops, invokeMount, options = {}) {
186
+ const mountId = options.mountId || moduleId;
187
+ const space = options.space || "module";
188
+ const tools = [];
189
+ for (const op of ops) {
190
+ const template = (0, api_kernel_1.resolveOperationHttpPath)(space, mountId, op.path);
191
+ tools.push({
192
+ name: `module.${mountId}.${op.id}`,
193
+ description: op.description,
194
+ space: "module",
195
+ ownerId: moduleId,
196
+ inputSchema: defaultInputSchema(op),
197
+ ...(op.roles?.length ? { defaultRoles: op.roles } : {}),
198
+ mcpPublishDefault: op.mcpPublishDefault === true,
199
+ requiredScope: op.method === "GET" ? "crm:read" : op.permission || "crm:write",
200
+ handler: async (args, actor) => {
201
+ const { path, used } = interpolatePath(template, args);
202
+ const rest = restArgs(args, used);
203
+ const method = op.method;
204
+ const headers = await headersFromActor(actor);
205
+ const req = {
206
+ method,
207
+ path,
208
+ ...(headers ? { headers } : {}),
209
+ ...(method === "GET"
210
+ ? { query: asQuery(rest) }
211
+ : { body: rest }),
212
+ };
213
+ return responseToToolResult(await invokeMount(req));
214
+ },
215
+ });
216
+ }
217
+ return tools;
218
+ }
219
+ function toolsFromListedOps(api, listed, spaces) {
220
+ const byMount = new Map();
221
+ for (const { space, mountId, op } of listed) {
222
+ if (!spaces.has(space))
223
+ continue;
224
+ const cur = byMount.get(mountId);
225
+ if (cur) {
226
+ cur.ops.push(op);
227
+ continue;
228
+ }
229
+ byMount.set(mountId, { space, ops: [op] });
230
+ }
231
+ const invokeMount = (req) => api.handle(req);
232
+ const out = [];
233
+ for (const [mountId, { space, ops }] of byMount) {
234
+ out.push(...generateModuleToolsFromOperations(mountId, ops, invokeMount, {
235
+ mountId,
236
+ space,
237
+ }));
238
+ }
239
+ return out;
240
+ }
241
+ /**
242
+ * Tools `module.*` générés depuis `api.listOperations()` (space module).
243
+ * SoT runtime — `BrandModuleDef.mcpTools` n'existe plus.
244
+ */
245
+ function generateModuleToolsFromListedOps(api, listed) {
246
+ return toolsFromListedOps(api, listed ?? api.listOperations(), new Set(["module"]));
247
+ }
248
+ /** Tools générés depuis les mounts déjà enregistrés sur le kernel. */
249
+ function generateModuleToolsFromMountedOps(api, mounts) {
250
+ if (!mounts) {
251
+ return toolsFromListedOps(api, api.listOperations(), new Set(["module", "platform"]));
252
+ }
253
+ const out = [];
254
+ for (const mount of mounts) {
255
+ if (mount.space !== "module" && mount.space !== "platform")
256
+ continue;
257
+ if (!mount.operations?.length)
258
+ continue;
259
+ out.push(...generateModuleToolsFromOperations(mount.id, mount.operations, (req) => api.handle(req), { mountId: mount.id, space: mount.space }));
260
+ }
261
+ return out;
262
+ }
263
+ /**
264
+ * Discovery runtime : uniquement `listOperations()` (space module).
265
+ * `extraTools` = hook apps (health, JWT) — pas de `mcpTools` manuscrit.
266
+ */
267
+ function discoverModuleToolsFromKernel(api, extraTools = []) {
268
+ const generated = generateModuleToolsFromListedOps(api);
269
+ if (!extraTools.length)
270
+ return generated;
271
+ const seen = new Set(generated.map((t) => t.name));
272
+ return [...generated, ...extraTools.filter((t) => !seen.has(t.name))];
273
+ }
274
+ /**
275
+ * Discovery kit-side : SoT = `api.listOperations()` (space module).
276
+ * Fallback : ops des BrandModuleDef (EntitySpec CRUD + apiMounts) si le
277
+ * kernel n'a pas encore les mounts. Pas de champ `mcpTools`.
278
+ */
279
+ function discoverModuleToolsFromBrandModules(modules, api) {
280
+ const fromKernel = generateModuleToolsFromListedOps(api);
281
+ if (fromKernel.length)
282
+ return fromKernel;
283
+ const generated = [];
284
+ const invoke = (req) => api.handle(req);
285
+ for (const mod of modules) {
286
+ const seenOp = new Set();
287
+ for (const [mountId, spec] of Object.entries(mod.entitySpecs ?? {})) {
288
+ const ops = (0, api_kernel_1.entityOperationsFromSpec)(spec);
289
+ for (const op of ops)
290
+ seenOp.add(`${mountId}:${op.id}`);
291
+ generated.push(...generateModuleToolsFromOperations(mod.id, ops, invoke, {
292
+ mountId,
293
+ space: "module",
294
+ }));
295
+ }
296
+ for (const [mountId, mount] of Object.entries(mod.apiMounts ?? {})) {
297
+ const extras = (mount.operations ?? []).filter((op) => !seenOp.has(`${mountId}:${op.id}`));
298
+ if (!extras.length)
299
+ continue;
300
+ generated.push(...generateModuleToolsFromOperations(mod.id, extras, invoke, {
301
+ mountId,
302
+ space: "module",
303
+ }));
304
+ }
305
+ }
306
+ return generated;
307
+ }
308
+ //# sourceMappingURL=module-ops-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-ops-tools.js","sourceRoot":"","sources":["../src/module-ops-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * Namespacing H4 — core.* / creezio.* · module.<owner>.* · plugin.<owner>.*
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseNamespacedToolName = parseNamespacedToolName;
7
+ exports.assertNamespacedToolName = assertNamespacedToolName;
8
+ exports.isLegacyAliasName = isLegacyAliasName;
9
+ const OWNER_RE = /^[a-z][a-z0-9_-]{0,62}$/;
10
+ /**
11
+ * Parse un nom de tool namespacé. Retourne null si le format est invalide
12
+ * pour la couche attendue.
13
+ */
14
+ function parseNamespacedToolName(name) {
15
+ if (!name || typeof name !== "string")
16
+ return null;
17
+ if (name.startsWith("creezio.") || name.startsWith("core.")) {
18
+ return { space: "core", rest: name.replace(/^(creezio|core)\./, "") };
19
+ }
20
+ const mod = /^module\.([a-z][a-z0-9_-]{0,62})\.(.+)$/.exec(name);
21
+ if (mod) {
22
+ return { space: "module", ownerId: mod[1], rest: mod[2] };
23
+ }
24
+ const plug = /^plugin\.([a-z][a-z0-9_-]{0,62})\.(.+)$/.exec(name);
25
+ if (plug) {
26
+ return { space: "plugin", ownerId: plug[1], rest: plug[2] };
27
+ }
28
+ return null;
29
+ }
30
+ /**
31
+ * Vérifie qu'un tool déclaré respecte le préfixe de sa `space`.
32
+ * Les alias legacy (snake_case historique) ne passent pas ici — ils
33
+ * passent par `registerAlias`.
34
+ */
35
+ function assertNamespacedToolName(space, name, ownerId) {
36
+ const parsed = parseNamespacedToolName(name);
37
+ if (!parsed) {
38
+ throw new Error(`mcp_namespace_invalid: « ${name} » doit être core.*/creezio.* | module.<id>.* | plugin.<id>.*`);
39
+ }
40
+ if (parsed.space !== space) {
41
+ throw new Error(`mcp_namespace_mismatch: « ${name} » parse comme ${parsed.space}, déclaré ${space}`);
42
+ }
43
+ if (space === "module" || space === "plugin") {
44
+ if (!ownerId || !OWNER_RE.test(ownerId)) {
45
+ throw new Error(`mcp_owner_invalid: ownerId requis pour space=${space}`);
46
+ }
47
+ if (parsed.ownerId !== ownerId) {
48
+ throw new Error(`mcp_owner_mismatch: nom « ${name} » owner=${parsed.ownerId}, déclaré ${ownerId}`);
49
+ }
50
+ }
51
+ }
52
+ /** True si le nom ressemble à un alias legacy (hors namespace H4). */
53
+ function isLegacyAliasName(name) {
54
+ return parseNamespacedToolName(name) === null;
55
+ }
56
+ //# sourceMappingURL=namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../src/namespace.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAgBH,0DAcC;AAOD,4DA0BC;AAGD,8CAEC;AA1DD,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAE3C;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,IAAY;IAClD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,CAAC;IACxE,CAAC;IACD,MAAM,GAAG,GAAG,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,GAAG,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAgB,wBAAwB,CACtC,KAAmB,EACnB,IAAY,EACZ,OAAgB;IAEhB,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,+DAA+D,CAChG,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,kBAAkB,MAAM,CAAC,KAAK,aAAa,KAAK,EAAE,CACpF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gDAAgD,KAAK,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,6BAA6B,IAAI,YAAY,MAAM,CAAC,OAAO,aAAa,OAAO,EAAE,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAChD,CAAC"}