@enfyra/mcp-server 0.1.69 → 0.1.71

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 (248) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/config-local-adapters.d.ts +18 -0
  3. package/dist/lib/config-local-adapters.js +271 -0
  4. package/dist/lib/config-local-adapters.js.map +1 -0
  5. package/dist/lib/config-local-contracts.d.ts +28 -0
  6. package/dist/lib/config-local-contracts.js +200 -0
  7. package/dist/lib/config-local-contracts.js.map +1 -0
  8. package/dist/lib/config-local-prompts.d.ts +10 -0
  9. package/dist/lib/config-local-prompts.js +185 -0
  10. package/dist/lib/config-local-prompts.js.map +1 -0
  11. package/dist/lib/config-local-types.d.ts +23 -0
  12. package/dist/lib/config-local-types.js +2 -0
  13. package/dist/lib/config-local-types.js.map +1 -0
  14. package/dist/lib/config-local.js +3 -649
  15. package/dist/lib/config-local.js.map +1 -1
  16. package/dist/lib/discovery-tools.d.ts +4 -0
  17. package/dist/lib/discovery-tools.js +546 -0
  18. package/dist/lib/discovery-tools.js.map +1 -0
  19. package/dist/lib/dynamic-repository-builder.d.ts +1 -1
  20. package/dist/lib/dynamic-script-context-contract.d.ts +100 -0
  21. package/dist/lib/dynamic-script-context-contract.js +163 -0
  22. package/dist/lib/dynamic-script-context-contract.js.map +1 -0
  23. package/dist/lib/enfyra-mcp-server.d.ts +3 -0
  24. package/dist/lib/enfyra-mcp-server.js +79 -0
  25. package/dist/lib/enfyra-mcp-server.js.map +1 -0
  26. package/dist/lib/enfyra-tool-logic.d.ts +7 -0
  27. package/dist/lib/enfyra-tool-logic.js +8 -0
  28. package/dist/lib/enfyra-tool-logic.js.map +1 -0
  29. package/dist/lib/enfyra-tool-types.d.ts +27 -0
  30. package/dist/lib/enfyra-tool-types.js +2 -0
  31. package/dist/lib/enfyra-tool-types.js.map +1 -0
  32. package/dist/lib/extension-api-builders.d.ts +17 -0
  33. package/dist/lib/extension-api-builders.js +235 -0
  34. package/dist/lib/extension-api-builders.js.map +1 -0
  35. package/dist/lib/extension-component-builders.d.ts +87 -0
  36. package/dist/lib/extension-component-builders.js +623 -0
  37. package/dist/lib/extension-component-builders.js.map +1 -0
  38. package/dist/lib/extension-contract-review.d.ts +26 -0
  39. package/dist/lib/extension-contract-review.js +187 -0
  40. package/dist/lib/extension-contract-review.js.map +1 -0
  41. package/dist/lib/extension-theme-contract.d.ts +63 -0
  42. package/dist/lib/extension-theme-contract.js +417 -0
  43. package/dist/lib/extension-theme-contract.js.map +1 -0
  44. package/dist/lib/identity-tools.d.ts +4 -0
  45. package/dist/lib/identity-tools.js +46 -0
  46. package/dist/lib/identity-tools.js.map +1 -0
  47. package/dist/lib/log-tools.d.ts +4 -0
  48. package/dist/lib/log-tools.js +65 -0
  49. package/dist/lib/log-tools.js.map +1 -0
  50. package/dist/lib/mcp-example-connect.d.ts +9 -0
  51. package/dist/lib/mcp-example-connect.js +442 -0
  52. package/dist/lib/mcp-example-connect.js.map +1 -0
  53. package/dist/lib/mcp-example-extensions.d.ts +9 -0
  54. package/dist/lib/mcp-example-extensions.js +729 -0
  55. package/dist/lib/mcp-example-extensions.js.map +1 -0
  56. package/dist/lib/mcp-example-files.d.ts +9 -0
  57. package/dist/lib/mcp-example-files.js +51 -0
  58. package/dist/lib/mcp-example-files.js.map +1 -0
  59. package/dist/lib/mcp-example-flows.d.ts +9 -0
  60. package/dist/lib/mcp-example-flows.js +76 -0
  61. package/dist/lib/mcp-example-flows.js.map +1 -0
  62. package/dist/lib/mcp-example-graphql.d.ts +9 -0
  63. package/dist/lib/mcp-example-graphql.js +57 -0
  64. package/dist/lib/mcp-example-graphql.js.map +1 -0
  65. package/dist/lib/mcp-example-handlers-hooks.d.ts +9 -0
  66. package/dist/lib/mcp-example-handlers-hooks.js +328 -0
  67. package/dist/lib/mcp-example-handlers-hooks.js.map +1 -0
  68. package/dist/lib/mcp-example-oauth-setup.d.ts +9 -0
  69. package/dist/lib/mcp-example-oauth-setup.js +41 -0
  70. package/dist/lib/mcp-example-oauth-setup.js.map +1 -0
  71. package/dist/lib/mcp-example-permissions-rls.d.ts +9 -0
  72. package/dist/lib/mcp-example-permissions-rls.js +210 -0
  73. package/dist/lib/mcp-example-permissions-rls.js.map +1 -0
  74. package/dist/lib/mcp-example-queries-deep.d.ts +9 -0
  75. package/dist/lib/mcp-example-queries-deep.js +220 -0
  76. package/dist/lib/mcp-example-queries-deep.js.map +1 -0
  77. package/dist/lib/mcp-example-schema-relations.d.ts +9 -0
  78. package/dist/lib/mcp-example-schema-relations.js +148 -0
  79. package/dist/lib/mcp-example-schema-relations.js.map +1 -0
  80. package/dist/lib/mcp-example-websocket.d.ts +9 -0
  81. package/dist/lib/mcp-example-websocket.js +103 -0
  82. package/dist/lib/mcp-example-websocket.js.map +1 -0
  83. package/dist/lib/mcp-examples.d.ts +5 -5
  84. package/dist/lib/mcp-examples.js +22 -2394
  85. package/dist/lib/mcp-examples.js.map +1 -1
  86. package/dist/lib/method-tools.d.ts +4 -0
  87. package/dist/lib/method-tools.js +217 -0
  88. package/dist/lib/method-tools.js.map +1 -0
  89. package/dist/lib/package-tools.d.ts +4 -0
  90. package/dist/lib/package-tools.js +98 -0
  91. package/dist/lib/package-tools.js.map +1 -0
  92. package/dist/lib/platform-data-operations.d.ts +24 -0
  93. package/dist/lib/platform-data-operations.js +71 -0
  94. package/dist/lib/platform-data-operations.js.map +1 -0
  95. package/dist/lib/platform-endpoint-workflow.d.ts +42 -0
  96. package/dist/lib/platform-endpoint-workflow.js +382 -0
  97. package/dist/lib/platform-endpoint-workflow.js.map +1 -0
  98. package/dist/lib/platform-extension-source.d.ts +487 -0
  99. package/dist/lib/platform-extension-source.js +524 -0
  100. package/dist/lib/platform-extension-source.js.map +1 -0
  101. package/dist/lib/platform-extension-tools.d.ts +1 -0
  102. package/dist/lib/platform-extension-tools.js +416 -0
  103. package/dist/lib/platform-extension-tools.js.map +1 -0
  104. package/dist/lib/platform-extension-ui.d.ts +4 -0
  105. package/dist/lib/platform-extension-ui.js +5 -0
  106. package/dist/lib/platform-extension-ui.js.map +1 -0
  107. package/dist/lib/platform-extension-workflow.d.ts +54 -0
  108. package/dist/lib/platform-extension-workflow.js +194 -0
  109. package/dist/lib/platform-extension-workflow.js.map +1 -0
  110. package/dist/lib/platform-flow-operations.d.ts +554 -0
  111. package/dist/lib/platform-flow-operations.js +317 -0
  112. package/dist/lib/platform-flow-operations.js.map +1 -0
  113. package/dist/lib/platform-flow-tools.d.ts +1 -0
  114. package/dist/lib/platform-flow-tools.js +248 -0
  115. package/dist/lib/platform-flow-tools.js.map +1 -0
  116. package/dist/lib/platform-operation-logic.d.ts +10 -0
  117. package/dist/lib/platform-operation-logic.js +11 -0
  118. package/dist/lib/platform-operation-logic.js.map +1 -0
  119. package/dist/lib/platform-operation-tools.d.ts +1 -324
  120. package/dist/lib/platform-operation-tools.js +13 -4620
  121. package/dist/lib/platform-operation-tools.js.map +1 -1
  122. package/dist/lib/platform-operation-types.d.ts +46 -0
  123. package/dist/lib/platform-operation-types.js +2 -0
  124. package/dist/lib/platform-operation-types.js.map +1 -0
  125. package/dist/lib/platform-policy-tools.d.ts +1 -0
  126. package/dist/lib/platform-policy-tools.js +248 -0
  127. package/dist/lib/platform-policy-tools.js.map +1 -0
  128. package/dist/lib/platform-resource-operations.d.ts +124 -0
  129. package/dist/lib/platform-resource-operations.js +109 -0
  130. package/dist/lib/platform-resource-operations.js.map +1 -0
  131. package/dist/lib/platform-resource-tools.d.ts +1 -0
  132. package/dist/lib/platform-resource-tools.js +70 -0
  133. package/dist/lib/platform-resource-tools.js.map +1 -0
  134. package/dist/lib/platform-route-operations.d.ts +222 -0
  135. package/dist/lib/platform-route-operations.js +290 -0
  136. package/dist/lib/platform-route-operations.js.map +1 -0
  137. package/dist/lib/platform-route-tools.d.ts +1 -0
  138. package/dist/lib/platform-route-tools.js +307 -0
  139. package/dist/lib/platform-route-tools.js.map +1 -0
  140. package/dist/lib/platform-shared-operations.d.ts +7 -0
  141. package/dist/lib/platform-shared-operations.js +4 -0
  142. package/dist/lib/platform-shared-operations.js.map +1 -0
  143. package/dist/lib/platform-websocket-tools.d.ts +1 -0
  144. package/dist/lib/platform-websocket-tools.js +70 -0
  145. package/dist/lib/platform-websocket-tools.js.map +1 -0
  146. package/dist/lib/record-tools.d.ts +4 -0
  147. package/dist/lib/record-tools.js +418 -0
  148. package/dist/lib/record-tools.js.map +1 -0
  149. package/dist/lib/required-knowledge.d.ts +1 -1
  150. package/dist/lib/required-knowledge.js +3 -2
  151. package/dist/lib/required-knowledge.js.map +1 -1
  152. package/dist/lib/route-access-tools.d.ts +4 -0
  153. package/dist/lib/route-access-tools.js +172 -0
  154. package/dist/lib/route-access-tools.js.map +1 -0
  155. package/dist/lib/route-definition-tools.d.ts +4 -0
  156. package/dist/lib/route-definition-tools.js +285 -0
  157. package/dist/lib/route-definition-tools.js.map +1 -0
  158. package/dist/lib/route-inspection-tools.d.ts +4 -0
  159. package/dist/lib/route-inspection-tools.js +319 -0
  160. package/dist/lib/route-inspection-tools.js.map +1 -0
  161. package/dist/lib/route-tools.d.ts +1 -0
  162. package/dist/lib/route-tools.js +9 -0
  163. package/dist/lib/route-tools.js.map +1 -0
  164. package/dist/lib/runtime-zone-registry.d.ts +27 -0
  165. package/dist/lib/runtime-zone-registry.js +81 -0
  166. package/dist/lib/runtime-zone-registry.js.map +1 -0
  167. package/dist/lib/runtime-zone-search.d.ts +303 -0
  168. package/dist/lib/runtime-zone-search.js +596 -0
  169. package/dist/lib/runtime-zone-search.js.map +1 -0
  170. package/dist/lib/runtime-zone-tools.d.ts +2 -307
  171. package/dist/lib/runtime-zone-tools.js +2 -674
  172. package/dist/lib/runtime-zone-tools.js.map +1 -1
  173. package/dist/lib/schema-column-tools.d.ts +3 -0
  174. package/dist/lib/schema-column-tools.js +80 -0
  175. package/dist/lib/schema-column-tools.js.map +1 -0
  176. package/dist/lib/schema-mutation-coordinator.d.ts +28 -0
  177. package/dist/lib/schema-mutation-coordinator.js +154 -0
  178. package/dist/lib/schema-mutation-coordinator.js.map +1 -0
  179. package/dist/lib/schema-relation-contracts.d.ts +39 -0
  180. package/dist/lib/schema-relation-contracts.js +160 -0
  181. package/dist/lib/schema-relation-contracts.js.map +1 -0
  182. package/dist/lib/schema-relation-tools.d.ts +3 -0
  183. package/dist/lib/schema-relation-tools.js +61 -0
  184. package/dist/lib/schema-relation-tools.js.map +1 -0
  185. package/dist/lib/schema-table-contracts.d.ts +28 -0
  186. package/dist/lib/schema-table-contracts.js +263 -0
  187. package/dist/lib/schema-table-contracts.js.map +1 -0
  188. package/dist/lib/schema-table-tools.d.ts +3 -0
  189. package/dist/lib/schema-table-tools.js +297 -0
  190. package/dist/lib/schema-table-tools.js.map +1 -0
  191. package/dist/lib/schema-tool-operations.d.ts +150 -0
  192. package/dist/lib/schema-tool-operations.js +468 -0
  193. package/dist/lib/schema-tool-operations.js.map +1 -0
  194. package/dist/lib/schema-tool-types.d.ts +38 -0
  195. package/dist/lib/schema-tool-types.js +2 -0
  196. package/dist/lib/schema-tool-types.js.map +1 -0
  197. package/dist/lib/schema-verification.d.ts +14 -0
  198. package/dist/lib/schema-verification.js +105 -0
  199. package/dist/lib/schema-verification.js.map +1 -0
  200. package/dist/lib/script-tools.d.ts +4 -0
  201. package/dist/lib/script-tools.js +127 -0
  202. package/dist/lib/script-tools.js.map +1 -0
  203. package/dist/lib/system-tools.d.ts +4 -0
  204. package/dist/lib/system-tools.js +41 -0
  205. package/dist/lib/system-tools.js.map +1 -0
  206. package/dist/lib/table-tool-logic.d.ts +5 -0
  207. package/dist/lib/table-tool-logic.js +6 -0
  208. package/dist/lib/table-tool-logic.js.map +1 -0
  209. package/dist/lib/table-tools.d.ts +1 -84
  210. package/dist/lib/table-tools.js +7 -1522
  211. package/dist/lib/table-tools.js.map +1 -1
  212. package/dist/lib/tool-catalog.d.ts +2 -1
  213. package/dist/lib/tool-catalog.js +23 -2
  214. package/dist/lib/tool-catalog.js.map +1 -1
  215. package/dist/lib/tool-metadata-operations.d.ts +27 -0
  216. package/dist/lib/tool-metadata-operations.js +93 -0
  217. package/dist/lib/tool-metadata-operations.js.map +1 -0
  218. package/dist/lib/tool-permission-profile.d.ts +37 -0
  219. package/dist/lib/tool-permission-profile.js +106 -0
  220. package/dist/lib/tool-permission-profile.js.map +1 -0
  221. package/dist/lib/tool-record-operations.d.ts +102 -0
  222. package/dist/lib/tool-record-operations.js +260 -0
  223. package/dist/lib/tool-record-operations.js.map +1 -0
  224. package/dist/lib/tool-route-inspection.d.ts +47 -0
  225. package/dist/lib/tool-route-inspection.js +168 -0
  226. package/dist/lib/tool-route-inspection.js.map +1 -0
  227. package/dist/lib/tool-routing.d.ts +3 -417
  228. package/dist/lib/tool-routing.js +3 -1038
  229. package/dist/lib/tool-routing.js.map +1 -1
  230. package/dist/lib/tool-runtime-config.d.ts +33 -0
  231. package/dist/lib/tool-runtime-config.js +237 -0
  232. package/dist/lib/tool-runtime-config.js.map +1 -0
  233. package/dist/lib/tool-script-operations.d.ts +34 -0
  234. package/dist/lib/tool-script-operations.js +153 -0
  235. package/dist/lib/tool-script-operations.js.map +1 -0
  236. package/dist/lib/workflow-definitions.d.ts +366 -0
  237. package/dist/lib/workflow-definitions.js +703 -0
  238. package/dist/lib/workflow-definitions.js.map +1 -0
  239. package/dist/lib/workflow-planner.d.ts +45 -0
  240. package/dist/lib/workflow-planner.js +338 -0
  241. package/dist/lib/workflow-planner.js.map +1 -0
  242. package/dist/lib/workflow-types.d.ts +39 -0
  243. package/dist/lib/workflow-types.js +2 -0
  244. package/dist/lib/workflow-types.js.map +1 -0
  245. package/dist/mcp-server-entry.d.ts +0 -3
  246. package/dist/mcp-server-entry.js +2 -3249
  247. package/dist/mcp-server-entry.js.map +1 -1
  248. package/package.json +1 -1
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Enfyra MCP — stdio server (loaded by index.ts / dist/index.js).
3
+ */
4
+ import { fetchAPI } from './fetch.js';
5
+ import { fetchMetadataContext, fetchTableCatalog, fetchTableMetadata, fetchTableMetadataByRef, } from './metadata-client.js';
6
+ import { validateExtensionCode } from './platform-operation-tools.js';
7
+ import { parseRecordBatchData, parseRecordData, prepareRecordBatchMutation, prepareRecordMutation } from './mutation-guards.js';
8
+ import { assertDynamicCodeKnowledgeAckIf, assertExtensionKnowledgeAckIf, } from './required-knowledge.js';
9
+ import { DISCOVERY_FETCH_TIMEOUT_MS, ENFYRA_API_URL, SCRIPT_BACKED_TABLE_SET, } from './tool-runtime-config.js';
10
+ import { firstDataRecord, getId, summarizeTable, unwrapData, } from './tool-metadata-operations.js';
11
+ export function parseJsonArg(value, fallback = undefined) {
12
+ if (value === undefined || value === null || value === '')
13
+ return fallback;
14
+ if (typeof value !== 'string')
15
+ return value;
16
+ return JSON.parse(value);
17
+ }
18
+ export function stringifyJsonArg(value) {
19
+ if (value === undefined || value === null || value === '')
20
+ return undefined;
21
+ return typeof value === 'string' ? value : JSON.stringify(value);
22
+ }
23
+ export function applyDeepFieldSelections(fields, deep) {
24
+ const selectedFields = [...fields];
25
+ const parsedDeep = parseJsonArg(deep, null);
26
+ if (!parsedDeep || typeof parsedDeep !== 'object' || Array.isArray(parsedDeep)) {
27
+ return { fields: selectedFields, autoAdded: [] };
28
+ }
29
+ if (selectedFields.some((field) => String(field).startsWith('-'))) {
30
+ return { fields: selectedFields, autoAdded: [] };
31
+ }
32
+ const autoAdded = [];
33
+ for (const relationName of Object.keys(parsedDeep)) {
34
+ const alreadySelected = selectedFields.some((field) => {
35
+ const text = String(field);
36
+ return text === relationName || text.startsWith(`${relationName}.`);
37
+ });
38
+ if (alreadySelected)
39
+ continue;
40
+ selectedFields.push(relationName);
41
+ autoAdded.push(relationName);
42
+ }
43
+ return { fields: selectedFields, autoAdded };
44
+ }
45
+ export async function reloadRoutesResult() {
46
+ try {
47
+ const result = await fetchAPI(ENFYRA_API_URL, '/admin/reload/routes', { method: 'POST' });
48
+ return {
49
+ attempted: true,
50
+ succeeded: true,
51
+ result,
52
+ };
53
+ }
54
+ catch (error) {
55
+ return {
56
+ attempted: true,
57
+ succeeded: false,
58
+ error: error?.message || String(error),
59
+ };
60
+ }
61
+ }
62
+ export function normalizeRestPath(path) {
63
+ if (!path)
64
+ return '/';
65
+ if (/^https?:\/\//i.test(path)) {
66
+ throw new Error('Only Enfyra API paths are allowed, not full external URLs');
67
+ }
68
+ return path.startsWith('/') ? path : `/${path}`;
69
+ }
70
+ export function pickCodeSummary(record, fieldName) {
71
+ const code = record?.[fieldName];
72
+ return {
73
+ ...record,
74
+ [fieldName]: typeof code === 'string'
75
+ ? {
76
+ length: code.length,
77
+ preview: code.length > 700 ? `${code.slice(0, 700)}...` : code,
78
+ }
79
+ : code,
80
+ };
81
+ }
82
+ export function summarizeMutationResult(result, action, tableName) {
83
+ const record = firstDataRecord(result);
84
+ return {
85
+ action,
86
+ tableName,
87
+ id: getId(record),
88
+ statusCode: result?.statusCode,
89
+ success: result?.success,
90
+ detailHint: `Use find_one_record or query_table with explicit fields to inspect ${tableName}.`,
91
+ };
92
+ }
93
+ export async function getTableSummary(tableName) {
94
+ return summarizeTable(await fetchTableMetadata(ENFYRA_API_URL, tableName));
95
+ }
96
+ export async function getPrimaryFieldName(tableName, table = null) {
97
+ const resolvedTable = table ?? await getTableSummary(tableName);
98
+ if (resolvedTable?.primaryKey)
99
+ return resolvedTable.primaryKey;
100
+ const metadata = await fetchMetadataContext(ENFYRA_API_URL);
101
+ return metadata.dbType === 'mongodb' ? '_id' : 'id';
102
+ }
103
+ export async function fetchAll(path) {
104
+ return unwrapData(await fetchAPI(ENFYRA_API_URL, path));
105
+ }
106
+ export function targetInstance() {
107
+ return {
108
+ apiBase: ENFYRA_API_URL.replace(/\/$/, ''),
109
+ source: 'ENFYRA_API_URL environment variable used by this MCP server process',
110
+ };
111
+ }
112
+ export async function discoveryFetch(path, { fallbackData = [], timeoutMs = DISCOVERY_FETCH_TIMEOUT_MS } = {}) {
113
+ let timeoutId;
114
+ try {
115
+ const timeout = new Promise((_, reject) => {
116
+ timeoutId = setTimeout(() => {
117
+ reject(new Error(`Discovery request timeout after ${timeoutMs}ms for ${path}`));
118
+ }, timeoutMs);
119
+ });
120
+ return await Promise.race([
121
+ fetchAPI(ENFYRA_API_URL, path),
122
+ timeout,
123
+ ]);
124
+ }
125
+ catch (error) {
126
+ return {
127
+ statusCode: null,
128
+ success: false,
129
+ error: String(error?.message || error),
130
+ data: fallbackData,
131
+ };
132
+ }
133
+ finally {
134
+ if (timeoutId)
135
+ clearTimeout(timeoutId);
136
+ }
137
+ }
138
+ export function collectPartialErrors(results) {
139
+ return Object.entries(results)
140
+ .filter(([, result]) => result?.error)
141
+ .map(([name, result]) => ({ name, error: result.error }));
142
+ }
143
+ export async function getMetadataTables(tableRef) {
144
+ const metadata = await fetchMetadataContext(ENFYRA_API_URL);
145
+ if (tableRef !== undefined && tableRef !== null && tableRef !== '') {
146
+ return {
147
+ metadata,
148
+ tables: [await fetchTableMetadataByRef(ENFYRA_API_URL, tableRef)],
149
+ };
150
+ }
151
+ const catalog = await fetchTableCatalog(ENFYRA_API_URL);
152
+ return {
153
+ metadata,
154
+ tables: catalog,
155
+ };
156
+ }
157
+ function resolveTableOrThrow(tables, tableName) {
158
+ const table = tables.find((item) => item?.name === tableName || item?.alias === tableName);
159
+ if (!table)
160
+ throw new Error(`Unknown table "${tableName}"`);
161
+ return table;
162
+ }
163
+ function resolveFieldOrThrow(table, fieldName, kind = 'column') {
164
+ const list = kind === 'relation' ? table.relations || [] : table.columns || [];
165
+ const field = list.find((item) => item.name === fieldName || item.propertyName === fieldName);
166
+ if (!field)
167
+ throw new Error(`Unknown ${kind} "${fieldName}" on table "${table.name}"`);
168
+ return field;
169
+ }
170
+ export async function prepareGenericMutation(tableName, data) {
171
+ const { tables } = await getMetadataTables(tableName);
172
+ return prepareRecordMutation({
173
+ fetchAPI,
174
+ apiUrl: ENFYRA_API_URL,
175
+ tables,
176
+ tableName,
177
+ data,
178
+ });
179
+ }
180
+ export async function prepareGenericBatchMutation(tableName, records) {
181
+ const { tables } = await getMetadataTables(tableName);
182
+ return prepareRecordBatchMutation({
183
+ fetchAPI,
184
+ apiUrl: ENFYRA_API_URL,
185
+ tables,
186
+ tableName,
187
+ records,
188
+ });
189
+ }
190
+ export function assertKnowledgeForGenericMutation(tableName, data, { knowledgeAckKey, extensionKnowledgeAckKey }) {
191
+ const payload = parseRecordData(data);
192
+ assertDynamicCodeKnowledgeAckIf(SCRIPT_BACKED_TABLE_SET.has(tableName) && typeof payload.sourceCode === 'string', knowledgeAckKey);
193
+ assertExtensionKnowledgeAckIf(tableName === 'enfyra_extension' && typeof payload.code === 'string', extensionKnowledgeAckKey);
194
+ }
195
+ export function assertKnowledgeForGenericBatchMutation(tableName, records, { knowledgeAckKey, extensionKnowledgeAckKey }) {
196
+ const payloads = parseRecordBatchData(records);
197
+ for (const payload of payloads) {
198
+ assertDynamicCodeKnowledgeAckIf(SCRIPT_BACKED_TABLE_SET.has(tableName) && typeof payload.sourceCode === 'string', knowledgeAckKey);
199
+ assertExtensionKnowledgeAckIf(tableName === 'enfyra_extension' && typeof payload.code === 'string', extensionKnowledgeAckKey);
200
+ }
201
+ }
202
+ export function parseBulkItemsArg(name, value) {
203
+ const parsed = typeof value === 'string' ? JSON.parse(value) : value;
204
+ if (!Array.isArray(parsed)) {
205
+ throw new Error(`${name} must be a JSON array. Pass one object in the array for a single mutation.`);
206
+ }
207
+ if (parsed.length === 0) {
208
+ throw new Error(`${name} must include at least one item.`);
209
+ }
210
+ parsed.forEach((item, index) => {
211
+ if (!item || typeof item !== 'object' || Array.isArray(item)) {
212
+ throw new Error(`${name}[${index}] must be a JSON object.`);
213
+ }
214
+ });
215
+ return parsed;
216
+ }
217
+ export function assertMaxBulkItems(name, items, maxItems) {
218
+ if (items.length > maxItems) {
219
+ throw new Error(`${name} received ${items.length} items, above maxItems=${maxItems}. Split the batch deliberately.`);
220
+ }
221
+ }
222
+ export function assertNoDuplicateBulkIds(name, items) {
223
+ const seen = new Set();
224
+ const duplicates = new Set();
225
+ for (const item of items) {
226
+ const id = String(item.id ?? '');
227
+ if (!id)
228
+ continue;
229
+ if (seen.has(id))
230
+ duplicates.add(id);
231
+ seen.add(id);
232
+ }
233
+ if (duplicates.size > 0) {
234
+ throw new Error(`${name} contains duplicate id(s): ${[...duplicates].join(', ')}. Split or merge duplicate writes so the sequential batch has one clear final mutation per record.`);
235
+ }
236
+ }
237
+ export async function validateExtensionCodeForGenericMutation(tableName, payload, fallbackName) {
238
+ if (tableName !== 'enfyra_extension' || typeof payload?.code !== 'string')
239
+ return null;
240
+ return validateExtensionCode(ENFYRA_API_URL, payload.code, payload.name || fallbackName);
241
+ }
242
+ export function parseQueryParamsArg(queryParams) {
243
+ const parsed = parseJsonArg(queryParams, {});
244
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
245
+ throw new Error('queryParams must be a JSON object string.');
246
+ }
247
+ const params = new URLSearchParams();
248
+ for (const [key, value] of Object.entries(parsed)) {
249
+ if (value === undefined || value === null)
250
+ continue;
251
+ params.set(key, String(value));
252
+ }
253
+ return params.toString();
254
+ }
255
+ export function appendQuery(path, queryParams) {
256
+ if (!queryParams)
257
+ return path;
258
+ return `${path}${path.includes('?') ? '&' : '?'}${queryParams}`;
259
+ }
260
+ //# sourceMappingURL=tool-record-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-record-operations.js","sourceRoot":"","sources":["../../src/lib/tool-record-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Enfyra MCP — stdio server (loaded by index.ts / dist/index.js).
3
+ */
4
+ import { AnyRecord } from './tool-runtime-config.js';
5
+ export declare function invalidateMethodMap(): void;
6
+ export declare function getMethodMap(): Promise<any>;
7
+ export declare function resolveMethodIds(methodMap: any, names: any): any;
8
+ export declare function getMethodIdNameMap(): Promise<{
9
+ [k: string]: string;
10
+ }>;
11
+ export declare function collectRestDefinitionState(tableRef?: unknown): Promise<{
12
+ routes: any;
13
+ handlers: any;
14
+ preHooks: any;
15
+ postHooks: any;
16
+ routePermissions: any;
17
+ guards: any;
18
+ guardRules: any;
19
+ fieldPermissions: any;
20
+ columnRules: any;
21
+ methodIdNameMap: {
22
+ [k: string]: string;
23
+ };
24
+ metadata: import("./types.js").MetadataContext;
25
+ tables: AnyRecord[];
26
+ }>;
27
+ export declare function collectFeatureSearchState(): Promise<{
28
+ metadata: any;
29
+ tables: AnyRecord[];
30
+ routes: any;
31
+ handlers: any;
32
+ preHooks: any;
33
+ postHooks: any;
34
+ routePermissions: any;
35
+ guards: any;
36
+ guardRules: any;
37
+ fieldPermissions: any;
38
+ columnRules: any;
39
+ methodIdNameMap: {
40
+ [k: string]: any;
41
+ };
42
+ partialErrors: {
43
+ name: string;
44
+ error: any;
45
+ }[];
46
+ }>;
47
+ export declare function enrichRoute(route: any, state: any): any;
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Enfyra MCP — stdio server (loaded by index.ts / dist/index.js).
3
+ */
4
+ // Import modules
5
+ import { getValidToken } from './auth.js';
6
+ import { fetchAPI } from './fetch.js';
7
+ import { fetchMetadataTables, } from './metadata-client.js';
8
+ import { ENFYRA_API_URL, } from './tool-runtime-config.js';
9
+ import { getId, refId, sameId, unwrapData, } from './tool-metadata-operations.js';
10
+ import { collectPartialErrors, discoveryFetch, fetchAll, getMetadataTables, pickCodeSummary, } from './tool-record-operations.js';
11
+ // ROUTE & HANDLER TOOLS
12
+ // ============================================================================
13
+ let _methodMap = null;
14
+ export function invalidateMethodMap() {
15
+ _methodMap = null;
16
+ }
17
+ export async function getMethodMap() {
18
+ if (_methodMap)
19
+ return _methodMap;
20
+ const result = await fetchAPI(ENFYRA_API_URL, '/enfyra_method?limit=0');
21
+ _methodMap = {};
22
+ for (const m of result.data) {
23
+ _methodMap[m.name] = m.id || m._id;
24
+ }
25
+ return _methodMap;
26
+ }
27
+ export function resolveMethodIds(methodMap, names) {
28
+ return names.map(m => {
29
+ const id = methodMap[m.toUpperCase()];
30
+ if (!id)
31
+ throw new Error(`Unknown method "${m}". Valid: ${Object.keys(methodMap).join(', ')}`);
32
+ return { id };
33
+ });
34
+ }
35
+ export async function getMethodIdNameMap() {
36
+ const methodMap = await getMethodMap();
37
+ return Object.fromEntries(Object.entries(methodMap).map(([method, id]) => [String(id), method]));
38
+ }
39
+ function withMethodNames(records, methodIdNameMap, field = 'methods') {
40
+ return records.map((record) => ({
41
+ ...record,
42
+ [field]: Array.isArray(record?.[field])
43
+ ? record[field].map((item) => ({
44
+ ...item,
45
+ name: item.name || methodIdNameMap[String(getId(item))] || null,
46
+ }))
47
+ : record?.[field],
48
+ }));
49
+ }
50
+ export async function collectRestDefinitionState(tableRef) {
51
+ await getValidToken(ENFYRA_API_URL);
52
+ const [metadataContext, routes, handlers, preHooks, postHooks, routePermissions, guards, guardRules, fieldPermissions, columnRules, methodIdNameMap,] = await Promise.all([
53
+ getMetadataTables(tableRef),
54
+ fetchAll('/enfyra_route?limit=1000'),
55
+ fetchAll('/enfyra_route_handler?limit=1000'),
56
+ fetchAll('/enfyra_pre_hook?limit=1000'),
57
+ fetchAll('/enfyra_post_hook?limit=1000'),
58
+ fetchAll('/enfyra_route_permission?limit=1000'),
59
+ fetchAll('/enfyra_guard?limit=1000'),
60
+ fetchAll('/enfyra_guard_rule?limit=1000'),
61
+ fetchAll('/enfyra_field_permission?limit=1000'),
62
+ fetchAll('/enfyra_column_rule?limit=1000'),
63
+ getMethodIdNameMap(),
64
+ ]);
65
+ return {
66
+ ...metadataContext,
67
+ routes,
68
+ handlers,
69
+ preHooks,
70
+ postHooks,
71
+ routePermissions,
72
+ guards,
73
+ guardRules,
74
+ fieldPermissions,
75
+ columnRules,
76
+ methodIdNameMap,
77
+ };
78
+ }
79
+ export async function collectFeatureSearchState() {
80
+ const metadata = await discoveryFetch('/metadata');
81
+ const tableCatalogResult = await discoveryFetch('/enfyra_table?fields=id,name,alias,description,isSingleRecord&limit=0&sort=name');
82
+ const routesResult = await discoveryFetch('/enfyra_route?limit=500');
83
+ const handlersResult = await discoveryFetch('/enfyra_route_handler?limit=500');
84
+ const preHooksResult = await discoveryFetch('/enfyra_pre_hook?limit=500');
85
+ const postHooksResult = await discoveryFetch('/enfyra_post_hook?limit=500');
86
+ const routePermissionsResult = await discoveryFetch('/enfyra_route_permission?limit=500');
87
+ const guardsResult = await discoveryFetch('/enfyra_guard?limit=500');
88
+ const guardRulesResult = await discoveryFetch('/enfyra_guard_rule?limit=500');
89
+ const fieldPermissionsResult = await discoveryFetch('/enfyra_field_permission?limit=500');
90
+ const columnRulesResult = await discoveryFetch('/enfyra_column_rule?limit=500');
91
+ const methodsResult = await discoveryFetch('/enfyra_method?limit=100');
92
+ const methodIdNameMap = Object.fromEntries(unwrapData(methodsResult).map((method) => [String(getId(method)), method.name]));
93
+ const tableCatalog = unwrapData(tableCatalogResult);
94
+ return {
95
+ metadata,
96
+ tables: await fetchMetadataTables(ENFYRA_API_URL, tableCatalog),
97
+ routes: unwrapData(routesResult),
98
+ handlers: unwrapData(handlersResult),
99
+ preHooks: unwrapData(preHooksResult),
100
+ postHooks: unwrapData(postHooksResult),
101
+ routePermissions: unwrapData(routePermissionsResult),
102
+ guards: unwrapData(guardsResult),
103
+ guardRules: unwrapData(guardRulesResult),
104
+ fieldPermissions: unwrapData(fieldPermissionsResult),
105
+ columnRules: unwrapData(columnRulesResult),
106
+ methodIdNameMap,
107
+ partialErrors: collectPartialErrors({
108
+ metadata,
109
+ tableCatalogResult,
110
+ routesResult,
111
+ handlersResult,
112
+ preHooksResult,
113
+ postHooksResult,
114
+ routePermissionsResult,
115
+ guardsResult,
116
+ guardRulesResult,
117
+ fieldPermissionsResult,
118
+ columnRulesResult,
119
+ methodsResult,
120
+ }),
121
+ };
122
+ }
123
+ export function enrichRoute(route, state) {
124
+ const routeId = getId(route);
125
+ const routeHandlers = state.handlers
126
+ .filter((item) => sameId(refId(item.route), routeId))
127
+ .map((item) => pickCodeSummary({
128
+ ...item,
129
+ method: item.method ? {
130
+ ...item.method,
131
+ name: state.methodIdNameMap[String(getId(item.method))] || item.method.name || null,
132
+ } : item.method,
133
+ }, 'sourceCode'));
134
+ const routePreHooks = withMethodNames(state.preHooks.filter((item) => item.isGlobal || sameId(refId(item.route), routeId)), state.methodIdNameMap).map((item) => pickCodeSummary(item, 'code'));
135
+ const routePostHooks = withMethodNames(state.postHooks.filter((item) => item.isGlobal || sameId(refId(item.route), routeId)), state.methodIdNameMap).map((item) => pickCodeSummary(item, 'code'));
136
+ const routePermissions = withMethodNames(state.routePermissions.filter((item) => sameId(refId(item.route), routeId)), state.methodIdNameMap);
137
+ const routeGuards = withMethodNames(state.guards.filter((item) => item.isGlobal || sameId(refId(item.route), routeId)), state.methodIdNameMap).map((guard) => ({
138
+ ...guard,
139
+ rules: state.guardRules.filter((rule) => sameId(refId(rule.guard), getId(guard))),
140
+ }));
141
+ return {
142
+ ...route,
143
+ availableMethods: Array.isArray(route.availableMethods)
144
+ ? route.availableMethods.map((method) => ({
145
+ ...method,
146
+ name: method.name || state.methodIdNameMap[String(getId(method))] || null,
147
+ }))
148
+ : route.availableMethods,
149
+ publicMethods: Array.isArray(route.publicMethods)
150
+ ? route.publicMethods.map((method) => ({
151
+ ...method,
152
+ name: method.name || state.methodIdNameMap[String(getId(method))] || null,
153
+ }))
154
+ : route.publicMethods,
155
+ skipRoleGuardMethods: Array.isArray(route.skipRoleGuardMethods)
156
+ ? route.skipRoleGuardMethods.map((method) => ({
157
+ ...method,
158
+ name: method.name || state.methodIdNameMap[String(getId(method))] || null,
159
+ }))
160
+ : route.skipRoleGuardMethods,
161
+ handlers: routeHandlers,
162
+ preHooks: routePreHooks,
163
+ postHooks: routePostHooks,
164
+ routePermissions,
165
+ guards: routeGuards,
166
+ };
167
+ }
168
+ //# sourceMappingURL=tool-route-inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-route-inspection.js","sourceRoot":"","sources":["../../src/lib/tool-route-inspection.ts"],"names":[],"mappings":"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"}