@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.
- package/README.md +1 -1
- package/dist/lib/config-local-adapters.d.ts +18 -0
- package/dist/lib/config-local-adapters.js +271 -0
- package/dist/lib/config-local-adapters.js.map +1 -0
- package/dist/lib/config-local-contracts.d.ts +28 -0
- package/dist/lib/config-local-contracts.js +200 -0
- package/dist/lib/config-local-contracts.js.map +1 -0
- package/dist/lib/config-local-prompts.d.ts +10 -0
- package/dist/lib/config-local-prompts.js +185 -0
- package/dist/lib/config-local-prompts.js.map +1 -0
- package/dist/lib/config-local-types.d.ts +23 -0
- package/dist/lib/config-local-types.js +2 -0
- package/dist/lib/config-local-types.js.map +1 -0
- package/dist/lib/config-local.js +3 -649
- package/dist/lib/config-local.js.map +1 -1
- package/dist/lib/discovery-tools.d.ts +4 -0
- package/dist/lib/discovery-tools.js +546 -0
- package/dist/lib/discovery-tools.js.map +1 -0
- package/dist/lib/dynamic-repository-builder.d.ts +1 -1
- package/dist/lib/dynamic-script-context-contract.d.ts +100 -0
- package/dist/lib/dynamic-script-context-contract.js +163 -0
- package/dist/lib/dynamic-script-context-contract.js.map +1 -0
- package/dist/lib/enfyra-mcp-server.d.ts +3 -0
- package/dist/lib/enfyra-mcp-server.js +79 -0
- package/dist/lib/enfyra-mcp-server.js.map +1 -0
- package/dist/lib/enfyra-tool-logic.d.ts +7 -0
- package/dist/lib/enfyra-tool-logic.js +8 -0
- package/dist/lib/enfyra-tool-logic.js.map +1 -0
- package/dist/lib/enfyra-tool-types.d.ts +27 -0
- package/dist/lib/enfyra-tool-types.js +2 -0
- package/dist/lib/enfyra-tool-types.js.map +1 -0
- package/dist/lib/extension-api-builders.d.ts +17 -0
- package/dist/lib/extension-api-builders.js +235 -0
- package/dist/lib/extension-api-builders.js.map +1 -0
- package/dist/lib/extension-component-builders.d.ts +87 -0
- package/dist/lib/extension-component-builders.js +623 -0
- package/dist/lib/extension-component-builders.js.map +1 -0
- package/dist/lib/extension-contract-review.d.ts +26 -0
- package/dist/lib/extension-contract-review.js +187 -0
- package/dist/lib/extension-contract-review.js.map +1 -0
- package/dist/lib/extension-theme-contract.d.ts +63 -0
- package/dist/lib/extension-theme-contract.js +417 -0
- package/dist/lib/extension-theme-contract.js.map +1 -0
- package/dist/lib/identity-tools.d.ts +4 -0
- package/dist/lib/identity-tools.js +46 -0
- package/dist/lib/identity-tools.js.map +1 -0
- package/dist/lib/log-tools.d.ts +4 -0
- package/dist/lib/log-tools.js +65 -0
- package/dist/lib/log-tools.js.map +1 -0
- package/dist/lib/mcp-example-connect.d.ts +9 -0
- package/dist/lib/mcp-example-connect.js +442 -0
- package/dist/lib/mcp-example-connect.js.map +1 -0
- package/dist/lib/mcp-example-extensions.d.ts +9 -0
- package/dist/lib/mcp-example-extensions.js +729 -0
- package/dist/lib/mcp-example-extensions.js.map +1 -0
- package/dist/lib/mcp-example-files.d.ts +9 -0
- package/dist/lib/mcp-example-files.js +51 -0
- package/dist/lib/mcp-example-files.js.map +1 -0
- package/dist/lib/mcp-example-flows.d.ts +9 -0
- package/dist/lib/mcp-example-flows.js +76 -0
- package/dist/lib/mcp-example-flows.js.map +1 -0
- package/dist/lib/mcp-example-graphql.d.ts +9 -0
- package/dist/lib/mcp-example-graphql.js +57 -0
- package/dist/lib/mcp-example-graphql.js.map +1 -0
- package/dist/lib/mcp-example-handlers-hooks.d.ts +9 -0
- package/dist/lib/mcp-example-handlers-hooks.js +328 -0
- package/dist/lib/mcp-example-handlers-hooks.js.map +1 -0
- package/dist/lib/mcp-example-oauth-setup.d.ts +9 -0
- package/dist/lib/mcp-example-oauth-setup.js +41 -0
- package/dist/lib/mcp-example-oauth-setup.js.map +1 -0
- package/dist/lib/mcp-example-permissions-rls.d.ts +9 -0
- package/dist/lib/mcp-example-permissions-rls.js +210 -0
- package/dist/lib/mcp-example-permissions-rls.js.map +1 -0
- package/dist/lib/mcp-example-queries-deep.d.ts +9 -0
- package/dist/lib/mcp-example-queries-deep.js +220 -0
- package/dist/lib/mcp-example-queries-deep.js.map +1 -0
- package/dist/lib/mcp-example-schema-relations.d.ts +9 -0
- package/dist/lib/mcp-example-schema-relations.js +148 -0
- package/dist/lib/mcp-example-schema-relations.js.map +1 -0
- package/dist/lib/mcp-example-websocket.d.ts +9 -0
- package/dist/lib/mcp-example-websocket.js +103 -0
- package/dist/lib/mcp-example-websocket.js.map +1 -0
- package/dist/lib/mcp-examples.d.ts +5 -5
- package/dist/lib/mcp-examples.js +22 -2394
- package/dist/lib/mcp-examples.js.map +1 -1
- package/dist/lib/method-tools.d.ts +4 -0
- package/dist/lib/method-tools.js +217 -0
- package/dist/lib/method-tools.js.map +1 -0
- package/dist/lib/package-tools.d.ts +4 -0
- package/dist/lib/package-tools.js +98 -0
- package/dist/lib/package-tools.js.map +1 -0
- package/dist/lib/platform-data-operations.d.ts +24 -0
- package/dist/lib/platform-data-operations.js +71 -0
- package/dist/lib/platform-data-operations.js.map +1 -0
- package/dist/lib/platform-endpoint-workflow.d.ts +42 -0
- package/dist/lib/platform-endpoint-workflow.js +382 -0
- package/dist/lib/platform-endpoint-workflow.js.map +1 -0
- package/dist/lib/platform-extension-source.d.ts +487 -0
- package/dist/lib/platform-extension-source.js +524 -0
- package/dist/lib/platform-extension-source.js.map +1 -0
- package/dist/lib/platform-extension-tools.d.ts +1 -0
- package/dist/lib/platform-extension-tools.js +416 -0
- package/dist/lib/platform-extension-tools.js.map +1 -0
- package/dist/lib/platform-extension-ui.d.ts +4 -0
- package/dist/lib/platform-extension-ui.js +5 -0
- package/dist/lib/platform-extension-ui.js.map +1 -0
- package/dist/lib/platform-extension-workflow.d.ts +54 -0
- package/dist/lib/platform-extension-workflow.js +194 -0
- package/dist/lib/platform-extension-workflow.js.map +1 -0
- package/dist/lib/platform-flow-operations.d.ts +554 -0
- package/dist/lib/platform-flow-operations.js +317 -0
- package/dist/lib/platform-flow-operations.js.map +1 -0
- package/dist/lib/platform-flow-tools.d.ts +1 -0
- package/dist/lib/platform-flow-tools.js +248 -0
- package/dist/lib/platform-flow-tools.js.map +1 -0
- package/dist/lib/platform-operation-logic.d.ts +10 -0
- package/dist/lib/platform-operation-logic.js +11 -0
- package/dist/lib/platform-operation-logic.js.map +1 -0
- package/dist/lib/platform-operation-tools.d.ts +1 -324
- package/dist/lib/platform-operation-tools.js +13 -4620
- package/dist/lib/platform-operation-tools.js.map +1 -1
- package/dist/lib/platform-operation-types.d.ts +46 -0
- package/dist/lib/platform-operation-types.js +2 -0
- package/dist/lib/platform-operation-types.js.map +1 -0
- package/dist/lib/platform-policy-tools.d.ts +1 -0
- package/dist/lib/platform-policy-tools.js +248 -0
- package/dist/lib/platform-policy-tools.js.map +1 -0
- package/dist/lib/platform-resource-operations.d.ts +124 -0
- package/dist/lib/platform-resource-operations.js +109 -0
- package/dist/lib/platform-resource-operations.js.map +1 -0
- package/dist/lib/platform-resource-tools.d.ts +1 -0
- package/dist/lib/platform-resource-tools.js +70 -0
- package/dist/lib/platform-resource-tools.js.map +1 -0
- package/dist/lib/platform-route-operations.d.ts +222 -0
- package/dist/lib/platform-route-operations.js +290 -0
- package/dist/lib/platform-route-operations.js.map +1 -0
- package/dist/lib/platform-route-tools.d.ts +1 -0
- package/dist/lib/platform-route-tools.js +307 -0
- package/dist/lib/platform-route-tools.js.map +1 -0
- package/dist/lib/platform-shared-operations.d.ts +7 -0
- package/dist/lib/platform-shared-operations.js +4 -0
- package/dist/lib/platform-shared-operations.js.map +1 -0
- package/dist/lib/platform-websocket-tools.d.ts +1 -0
- package/dist/lib/platform-websocket-tools.js +70 -0
- package/dist/lib/platform-websocket-tools.js.map +1 -0
- package/dist/lib/record-tools.d.ts +4 -0
- package/dist/lib/record-tools.js +418 -0
- package/dist/lib/record-tools.js.map +1 -0
- package/dist/lib/required-knowledge.d.ts +1 -1
- package/dist/lib/required-knowledge.js +3 -2
- package/dist/lib/required-knowledge.js.map +1 -1
- package/dist/lib/route-access-tools.d.ts +4 -0
- package/dist/lib/route-access-tools.js +172 -0
- package/dist/lib/route-access-tools.js.map +1 -0
- package/dist/lib/route-definition-tools.d.ts +4 -0
- package/dist/lib/route-definition-tools.js +285 -0
- package/dist/lib/route-definition-tools.js.map +1 -0
- package/dist/lib/route-inspection-tools.d.ts +4 -0
- package/dist/lib/route-inspection-tools.js +319 -0
- package/dist/lib/route-inspection-tools.js.map +1 -0
- package/dist/lib/route-tools.d.ts +1 -0
- package/dist/lib/route-tools.js +9 -0
- package/dist/lib/route-tools.js.map +1 -0
- package/dist/lib/runtime-zone-registry.d.ts +27 -0
- package/dist/lib/runtime-zone-registry.js +81 -0
- package/dist/lib/runtime-zone-registry.js.map +1 -0
- package/dist/lib/runtime-zone-search.d.ts +303 -0
- package/dist/lib/runtime-zone-search.js +596 -0
- package/dist/lib/runtime-zone-search.js.map +1 -0
- package/dist/lib/runtime-zone-tools.d.ts +2 -307
- package/dist/lib/runtime-zone-tools.js +2 -674
- package/dist/lib/runtime-zone-tools.js.map +1 -1
- package/dist/lib/schema-column-tools.d.ts +3 -0
- package/dist/lib/schema-column-tools.js +80 -0
- package/dist/lib/schema-column-tools.js.map +1 -0
- package/dist/lib/schema-mutation-coordinator.d.ts +28 -0
- package/dist/lib/schema-mutation-coordinator.js +154 -0
- package/dist/lib/schema-mutation-coordinator.js.map +1 -0
- package/dist/lib/schema-relation-contracts.d.ts +39 -0
- package/dist/lib/schema-relation-contracts.js +160 -0
- package/dist/lib/schema-relation-contracts.js.map +1 -0
- package/dist/lib/schema-relation-tools.d.ts +3 -0
- package/dist/lib/schema-relation-tools.js +61 -0
- package/dist/lib/schema-relation-tools.js.map +1 -0
- package/dist/lib/schema-table-contracts.d.ts +28 -0
- package/dist/lib/schema-table-contracts.js +263 -0
- package/dist/lib/schema-table-contracts.js.map +1 -0
- package/dist/lib/schema-table-tools.d.ts +3 -0
- package/dist/lib/schema-table-tools.js +297 -0
- package/dist/lib/schema-table-tools.js.map +1 -0
- package/dist/lib/schema-tool-operations.d.ts +150 -0
- package/dist/lib/schema-tool-operations.js +468 -0
- package/dist/lib/schema-tool-operations.js.map +1 -0
- package/dist/lib/schema-tool-types.d.ts +38 -0
- package/dist/lib/schema-tool-types.js +2 -0
- package/dist/lib/schema-tool-types.js.map +1 -0
- package/dist/lib/schema-verification.d.ts +14 -0
- package/dist/lib/schema-verification.js +105 -0
- package/dist/lib/schema-verification.js.map +1 -0
- package/dist/lib/script-tools.d.ts +4 -0
- package/dist/lib/script-tools.js +127 -0
- package/dist/lib/script-tools.js.map +1 -0
- package/dist/lib/system-tools.d.ts +4 -0
- package/dist/lib/system-tools.js +41 -0
- package/dist/lib/system-tools.js.map +1 -0
- package/dist/lib/table-tool-logic.d.ts +5 -0
- package/dist/lib/table-tool-logic.js +6 -0
- package/dist/lib/table-tool-logic.js.map +1 -0
- package/dist/lib/table-tools.d.ts +1 -84
- package/dist/lib/table-tools.js +7 -1522
- package/dist/lib/table-tools.js.map +1 -1
- package/dist/lib/tool-catalog.d.ts +2 -1
- package/dist/lib/tool-catalog.js +23 -2
- package/dist/lib/tool-catalog.js.map +1 -1
- package/dist/lib/tool-metadata-operations.d.ts +27 -0
- package/dist/lib/tool-metadata-operations.js +93 -0
- package/dist/lib/tool-metadata-operations.js.map +1 -0
- package/dist/lib/tool-permission-profile.d.ts +37 -0
- package/dist/lib/tool-permission-profile.js +106 -0
- package/dist/lib/tool-permission-profile.js.map +1 -0
- package/dist/lib/tool-record-operations.d.ts +102 -0
- package/dist/lib/tool-record-operations.js +260 -0
- package/dist/lib/tool-record-operations.js.map +1 -0
- package/dist/lib/tool-route-inspection.d.ts +47 -0
- package/dist/lib/tool-route-inspection.js +168 -0
- package/dist/lib/tool-route-inspection.js.map +1 -0
- package/dist/lib/tool-routing.d.ts +3 -417
- package/dist/lib/tool-routing.js +3 -1038
- package/dist/lib/tool-routing.js.map +1 -1
- package/dist/lib/tool-runtime-config.d.ts +33 -0
- package/dist/lib/tool-runtime-config.js +237 -0
- package/dist/lib/tool-runtime-config.js.map +1 -0
- package/dist/lib/tool-script-operations.d.ts +34 -0
- package/dist/lib/tool-script-operations.js +153 -0
- package/dist/lib/tool-script-operations.js.map +1 -0
- package/dist/lib/workflow-definitions.d.ts +366 -0
- package/dist/lib/workflow-definitions.js +703 -0
- package/dist/lib/workflow-definitions.js.map +1 -0
- package/dist/lib/workflow-planner.d.ts +45 -0
- package/dist/lib/workflow-planner.js +338 -0
- package/dist/lib/workflow-planner.js.map +1 -0
- package/dist/lib/workflow-types.d.ts +39 -0
- package/dist/lib/workflow-types.js +2 -0
- package/dist/lib/workflow-types.js.map +1 -0
- package/dist/mcp-server-entry.d.ts +0 -3
- package/dist/mcp-server-entry.js +2 -3249
- package/dist/mcp-server-entry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { fetchAPI } from './fetch.js';
|
|
3
|
+
import { fetchTableMetadataByRef } from './metadata-client.js';
|
|
4
|
+
import { assertGlobalRulesAck, globalRulesAckParam, } from './required-knowledge.js';
|
|
5
|
+
import { assertOneScope, createOrPatch, fetchRecords, findRecord, getId, getMethodContext, jsonText, parseJsonArrayArg, parseJsonObjectArg, reloadBestEffort, resolveColumn, resolveMethodRefs, resolveRelation, resolveRole, resolveRoute, uniqueMethodNames, } from './platform-operation-logic.js';
|
|
6
|
+
export function registerPlatformPolicyTools(server, ENFYRA_API_URL) {
|
|
7
|
+
server.tool('ensure_column_rule', 'Business operation: create or update a column validation rule. It resolves table/column ids and avoids duplicate rules for the same column+ruleType.', {
|
|
8
|
+
tableName: z.string().describe('Table name, alias, or id.'),
|
|
9
|
+
columnName: z.string().describe('Column name or id.'),
|
|
10
|
+
ruleType: z.enum(['min', 'max', 'minLength', 'maxLength', 'pattern', 'format', 'minItems', 'maxItems', 'custom']).describe('Validation rule type.'),
|
|
11
|
+
value: z.string().optional().describe('Rule config JSON object, usually {"v": ...}.'),
|
|
12
|
+
message: z.string().optional().describe('Custom validation error message.'),
|
|
13
|
+
description: z.string().optional().describe('Admin note.'),
|
|
14
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable the rule.'),
|
|
15
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
16
|
+
}, async ({ tableName, columnName, ruleType, value, message, description, isEnabled, globalRulesAckKey }) => {
|
|
17
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
18
|
+
const table = await fetchTableMetadataByRef(ENFYRA_API_URL, tableName);
|
|
19
|
+
const column = resolveColumn(table, columnName);
|
|
20
|
+
const existing = await findRecord(ENFYRA_API_URL, 'enfyra_column_rule', {
|
|
21
|
+
column: { id: { _eq: getId(column) } },
|
|
22
|
+
ruleType: { _eq: ruleType },
|
|
23
|
+
}, 'id,_id,column.id,ruleType');
|
|
24
|
+
const operation = await createOrPatch(ENFYRA_API_URL, 'enfyra_column_rule', existing, {
|
|
25
|
+
column: { id: getId(column) },
|
|
26
|
+
ruleType,
|
|
27
|
+
value: parseJsonObjectArg('value', value, null),
|
|
28
|
+
message,
|
|
29
|
+
description,
|
|
30
|
+
isEnabled,
|
|
31
|
+
});
|
|
32
|
+
return jsonText({
|
|
33
|
+
action: 'column_rule_ensured',
|
|
34
|
+
table: { id: getId(table), name: table.name },
|
|
35
|
+
column: { id: getId(column), name: column.name },
|
|
36
|
+
ruleType,
|
|
37
|
+
operation,
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
server.tool('ensure_field_permission', 'Business operation: create or update one field permission. It resolves table field ids, enforces exactly one column/relation target, and enforces a role/user scope.', {
|
|
41
|
+
tableName: z.string().describe('Table name, alias, or id.'),
|
|
42
|
+
columnName: z.string().optional().describe('Column name/id to protect. Use exactly one of columnName or relationName.'),
|
|
43
|
+
relationName: z.string().optional().describe('Relation propertyName/id to protect. Use exactly one of columnName or relationName.'),
|
|
44
|
+
action: z.enum(['read', 'create', 'update']).optional().default('read').describe('Field action.'),
|
|
45
|
+
effect: z.enum(['allow', 'deny']).optional().default('allow').describe('Permission effect.'),
|
|
46
|
+
roleId: z.union([z.string(), z.number()]).optional().describe('Role id scope.'),
|
|
47
|
+
roleName: z.string().optional().describe('Role name scope.'),
|
|
48
|
+
allowedUserIds: z.array(z.union([z.string(), z.number()])).optional().describe('Direct user id scope.'),
|
|
49
|
+
condition: z.string().optional().describe('Condition JSON object using field permission DSL.'),
|
|
50
|
+
description: z.string().optional().describe('Admin note.'),
|
|
51
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable the permission.'),
|
|
52
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
53
|
+
}, async ({ tableName, columnName, relationName, action, effect, roleId, roleName, allowedUserIds, condition, description, isEnabled, globalRulesAckKey }) => {
|
|
54
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
55
|
+
if (!!columnName === !!relationName)
|
|
56
|
+
throw new Error('Provide exactly one of columnName or relationName.');
|
|
57
|
+
assertOneScope({ roleId, roleName, allowedUserIds });
|
|
58
|
+
const [table, role] = await Promise.all([
|
|
59
|
+
fetchTableMetadataByRef(ENFYRA_API_URL, tableName),
|
|
60
|
+
resolveRole(ENFYRA_API_URL, { roleId, roleName }),
|
|
61
|
+
]);
|
|
62
|
+
const field = columnName ? resolveColumn(table, columnName) : resolveRelation(table, relationName);
|
|
63
|
+
const filter = {
|
|
64
|
+
action: { _eq: action },
|
|
65
|
+
effect: { _eq: effect },
|
|
66
|
+
...(columnName ? { column: { id: { _eq: getId(field) } } } : { relation: { id: { _eq: getId(field) } } }),
|
|
67
|
+
...(role ? { role: { id: { _eq: role.id } } } : {}),
|
|
68
|
+
};
|
|
69
|
+
const existing = role
|
|
70
|
+
? await findRecord(ENFYRA_API_URL, 'enfyra_field_permission', filter, 'id,_id,column.id,relation.id,role.id,action,effect')
|
|
71
|
+
: null;
|
|
72
|
+
const body = {
|
|
73
|
+
action,
|
|
74
|
+
effect,
|
|
75
|
+
isEnabled,
|
|
76
|
+
description,
|
|
77
|
+
condition: parseJsonObjectArg('condition', condition, null),
|
|
78
|
+
...(columnName ? { column: { id: getId(field) } } : { relation: { id: getId(field) } }),
|
|
79
|
+
...(role ? { role: { id: role.id } } : {}),
|
|
80
|
+
...(allowedUserIds?.length ? { allowedUsers: allowedUserIds.map((id) => ({ id })) } : {}),
|
|
81
|
+
};
|
|
82
|
+
const operation = await createOrPatch(ENFYRA_API_URL, 'enfyra_field_permission', existing, body);
|
|
83
|
+
const reload = await reloadBestEffort(ENFYRA_API_URL, '/admin/reload/metadata');
|
|
84
|
+
return jsonText({
|
|
85
|
+
action: 'field_permission_ensured',
|
|
86
|
+
table: { id: getId(table), name: table.name },
|
|
87
|
+
field: { id: getId(field), name: columnName ? field.name : field.propertyName, kind: columnName ? 'column' : 'relation' },
|
|
88
|
+
scope: { role, allowedUserIds: allowedUserIds || [] },
|
|
89
|
+
operation,
|
|
90
|
+
reload,
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
server.tool('ensure_route_rate_limit', 'Business operation: create or update a route rate-limit guard through the Enfyra guard engine. Prefer this over pre-hooks or raw guard JSON for request throttling.', {
|
|
94
|
+
name: z.string().optional().describe('Optional guard name. Defaults to a stable name based on path, methods, and scope.'),
|
|
95
|
+
routeId: z.union([z.string(), z.number()]).optional().describe('Optional route id.'),
|
|
96
|
+
path: z.string().optional().describe('Route path to protect, e.g. /newsletter_signup.'),
|
|
97
|
+
methods: z.array(z.string()).default(['POST']).describe('HTTP method names to protect.'),
|
|
98
|
+
scope: z.enum(['ip', 'user', 'route']).default('ip').describe('Rate-limit key scope. Use ip for public/pre-auth routes, user for authenticated users, route for a shared route-wide limit.'),
|
|
99
|
+
maxRequests: z.number().int().positive().describe('Allowed request count per window.'),
|
|
100
|
+
perSeconds: z.number().int().positive().describe('Window length in seconds.'),
|
|
101
|
+
position: z.enum(['pre_auth', 'post_auth']).optional().describe('Optional override. Defaults to pre_auth for ip/route and post_auth for user.'),
|
|
102
|
+
priority: z.number().optional().default(0).describe('Lower runs earlier.'),
|
|
103
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable the guard. Defaults true.'),
|
|
104
|
+
description: z.string().optional().describe('Admin note.'),
|
|
105
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
106
|
+
}, async ({ name, routeId, path, methods, scope, maxRequests, perSeconds, position, priority, isEnabled, description, globalRulesAckKey }) => {
|
|
107
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
108
|
+
if (path && routeId)
|
|
109
|
+
throw new Error('Provide path or routeId, not both.');
|
|
110
|
+
const resolvedPosition = position || (scope === 'user' ? 'post_auth' : 'pre_auth');
|
|
111
|
+
if (scope === 'user' && resolvedPosition === 'pre_auth') {
|
|
112
|
+
throw new Error('User-scoped rate limits require post_auth because user identity is unavailable before auth.');
|
|
113
|
+
}
|
|
114
|
+
const { route } = await resolveRoute(ENFYRA_API_URL, { path, routeId });
|
|
115
|
+
const { methodMap } = await getMethodContext(ENFYRA_API_URL);
|
|
116
|
+
const methodNames = uniqueMethodNames(methods?.length ? methods : ['POST']);
|
|
117
|
+
const ruleType = scope === 'user' ? 'rate_limit_by_user' : scope === 'route' ? 'rate_limit_by_route' : 'rate_limit_by_ip';
|
|
118
|
+
const guardName = name || `Rate limit ${scope} ${route.path} ${methodNames.join('_')}`;
|
|
119
|
+
const existing = await findRecord(ENFYRA_API_URL, 'enfyra_guard', { name: { _eq: guardName } }, 'id,_id,name');
|
|
120
|
+
const guardBody = {
|
|
121
|
+
name: guardName,
|
|
122
|
+
position: resolvedPosition,
|
|
123
|
+
combinator: 'and',
|
|
124
|
+
priority,
|
|
125
|
+
isGlobal: false,
|
|
126
|
+
isEnabled,
|
|
127
|
+
description: description || `Rate-limit ${methodNames.join(', ')} ${route.path} by ${scope}.`,
|
|
128
|
+
route: { id: getId(route) },
|
|
129
|
+
methods: resolveMethodRefs(methodMap, methodNames),
|
|
130
|
+
};
|
|
131
|
+
const guardOperation = await createOrPatch(ENFYRA_API_URL, 'enfyra_guard', existing, guardBody);
|
|
132
|
+
const guardId = guardOperation.id || getId(existing);
|
|
133
|
+
const existingRules = await fetchRecords(ENFYRA_API_URL, 'enfyra_guard_rule', { guard: { id: { _eq: guardId } } }, 'id,_id,isEnabled');
|
|
134
|
+
const disabledRules = [];
|
|
135
|
+
for (const rule of existingRules) {
|
|
136
|
+
disabledRules.push(await fetchAPI(ENFYRA_API_URL, `/enfyra_guard_rule/${encodeURIComponent(String(getId(rule)))}`, {
|
|
137
|
+
method: 'PATCH',
|
|
138
|
+
body: JSON.stringify({ isEnabled: false }),
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
const rule = await fetchAPI(ENFYRA_API_URL, '/enfyra_guard_rule', {
|
|
142
|
+
method: 'POST',
|
|
143
|
+
body: JSON.stringify({
|
|
144
|
+
type: ruleType,
|
|
145
|
+
config: { maxRequests, perSeconds },
|
|
146
|
+
priority: 0,
|
|
147
|
+
isEnabled: true,
|
|
148
|
+
description: `${maxRequests} request${maxRequests === 1 ? '' : 's'} per ${perSeconds} seconds by ${scope}.`,
|
|
149
|
+
guard: { id: guardId },
|
|
150
|
+
}),
|
|
151
|
+
});
|
|
152
|
+
const reload = await reloadBestEffort(ENFYRA_API_URL, '/admin/reload/guards');
|
|
153
|
+
return jsonText({
|
|
154
|
+
action: 'route_rate_limit_ensured',
|
|
155
|
+
route: { id: getId(route), path: route.path },
|
|
156
|
+
methods: methodNames,
|
|
157
|
+
guard: { id: guardId, name: guardName, position: resolvedPosition, isEnabled },
|
|
158
|
+
rule: { type: ruleType, config: { maxRequests, perSeconds }, result: rule },
|
|
159
|
+
disabledRuleCount: disabledRules.length,
|
|
160
|
+
reload,
|
|
161
|
+
next: 'Call inspect_route({ path }) to confirm the guard is attached, then test behavior through the actual REST route if doing so will not consume a production rate-limit bucket.',
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
server.tool('ensure_guard', 'Advanced business operation: create or update a custom request guard tree and optional guard rules. For simple request throttling use ensure_route_rate_limit instead.', {
|
|
165
|
+
name: z.string().describe('Guard name. Existing guard with this name is updated unless guardId is provided.'),
|
|
166
|
+
guardId: z.union([z.string(), z.number()]).optional().describe('Optional existing guard id.'),
|
|
167
|
+
position: z.enum(['pre_auth', 'post_auth']).optional().default('pre_auth').describe('Guard position.'),
|
|
168
|
+
routeId: z.union([z.string(), z.number()]).optional().describe('Optional route id.'),
|
|
169
|
+
path: z.string().optional().describe('Optional route path.'),
|
|
170
|
+
methods: z.array(z.string()).optional().describe('HTTP method names.'),
|
|
171
|
+
combinator: z.enum(['and', 'or']).optional().default('and').describe('Rule combinator.'),
|
|
172
|
+
priority: z.number().optional().default(0).describe('Lower runs earlier.'),
|
|
173
|
+
isGlobal: z.boolean().optional().default(false).describe('Apply globally.'),
|
|
174
|
+
isEnabled: z.boolean().optional().default(false).describe('Enable guard. Defaults false to avoid lockout.'),
|
|
175
|
+
description: z.string().optional().describe('Admin note.'),
|
|
176
|
+
rules: z.string().optional().describe('Rules JSON array: [{type, config, priority, isEnabled, description, userIds}].'),
|
|
177
|
+
rulesMode: z.enum(['append', 'replace', 'none']).optional().default('append').describe('append creates rules, replace disables existing rules first, none leaves rules unchanged.'),
|
|
178
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
179
|
+
}, async ({ name, guardId, position, routeId, path, methods, combinator, priority, isGlobal, isEnabled, description, rules, rulesMode, globalRulesAckKey }) => {
|
|
180
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
181
|
+
if (path && routeId)
|
|
182
|
+
throw new Error('Provide path or routeId, not both.');
|
|
183
|
+
const ruleInputs = parseJsonArrayArg('rules', rules, []);
|
|
184
|
+
if (position === 'pre_auth') {
|
|
185
|
+
const invalid = ruleInputs.filter((rule) => rule.type === 'rate_limit_by_user' || (Array.isArray(rule.userIds) && rule.userIds.length));
|
|
186
|
+
if (invalid.length)
|
|
187
|
+
throw new Error('pre_auth guards cannot use user-based rules or userIds. Use post_auth.');
|
|
188
|
+
}
|
|
189
|
+
let route = null;
|
|
190
|
+
if (!isGlobal && (routeId || path)) {
|
|
191
|
+
route = (await resolveRoute(ENFYRA_API_URL, { path, routeId })).route;
|
|
192
|
+
}
|
|
193
|
+
const { methodMap } = await getMethodContext(ENFYRA_API_URL);
|
|
194
|
+
const existing = guardId
|
|
195
|
+
? await findRecord(ENFYRA_API_URL, 'enfyra_guard', { id: { _eq: guardId } }, 'id,_id,name')
|
|
196
|
+
: await findRecord(ENFYRA_API_URL, 'enfyra_guard', { name: { _eq: name } }, 'id,_id,name');
|
|
197
|
+
const guardBody = {
|
|
198
|
+
name,
|
|
199
|
+
position,
|
|
200
|
+
combinator,
|
|
201
|
+
priority,
|
|
202
|
+
isGlobal,
|
|
203
|
+
isEnabled,
|
|
204
|
+
description,
|
|
205
|
+
...(route ? { route: { id: getId(route) } } : {}),
|
|
206
|
+
...(methods?.length ? { methods: resolveMethodRefs(methodMap, methods) } : {}),
|
|
207
|
+
};
|
|
208
|
+
const guardOperation = await createOrPatch(ENFYRA_API_URL, 'enfyra_guard', existing, guardBody);
|
|
209
|
+
const resolvedGuardId = guardOperation.id || getId(existing);
|
|
210
|
+
const existingRules = rulesMode === 'replace'
|
|
211
|
+
? await fetchRecords(ENFYRA_API_URL, 'enfyra_guard_rule', { guard: { id: { _eq: resolvedGuardId } } }, 'id,_id,isEnabled')
|
|
212
|
+
: [];
|
|
213
|
+
const disabledRules = [];
|
|
214
|
+
for (const rule of existingRules) {
|
|
215
|
+
disabledRules.push(await fetchAPI(ENFYRA_API_URL, `/enfyra_guard_rule/${encodeURIComponent(String(getId(rule)))}`, {
|
|
216
|
+
method: 'PATCH',
|
|
217
|
+
body: JSON.stringify({ isEnabled: false }),
|
|
218
|
+
}));
|
|
219
|
+
}
|
|
220
|
+
const createdRules = [];
|
|
221
|
+
if (rulesMode !== 'none') {
|
|
222
|
+
for (const rule of ruleInputs) {
|
|
223
|
+
createdRules.push(await fetchAPI(ENFYRA_API_URL, '/enfyra_guard_rule', {
|
|
224
|
+
method: 'POST',
|
|
225
|
+
body: JSON.stringify({
|
|
226
|
+
type: rule.type,
|
|
227
|
+
config: rule.config,
|
|
228
|
+
priority: rule.priority ?? 0,
|
|
229
|
+
isEnabled: rule.isEnabled ?? true,
|
|
230
|
+
description: rule.description,
|
|
231
|
+
guard: { id: resolvedGuardId },
|
|
232
|
+
...(Array.isArray(rule.userIds) && rule.userIds.length ? { users: rule.userIds.map((id) => ({ id })) } : {}),
|
|
233
|
+
}),
|
|
234
|
+
}));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const reload = await reloadBestEffort(ENFYRA_API_URL, '/admin/reload/guards');
|
|
238
|
+
return jsonText({
|
|
239
|
+
action: 'guard_ensured',
|
|
240
|
+
guard: { id: resolvedGuardId, name, route: route ? route.path : null, isGlobal },
|
|
241
|
+
guardOperation,
|
|
242
|
+
disabledRuleCount: disabledRules.length,
|
|
243
|
+
createdRuleCount: createdRules.length,
|
|
244
|
+
reload,
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=platform-policy-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-policy-tools.js","sourceRoot":"","sources":["../../src/lib/platform-policy-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
export declare function ensureMenu(apiUrl: any, { label, path, icon, type, order, permission, description, isEnabled, globalRulesAckKey, }: {
|
|
2
|
+
label: any;
|
|
3
|
+
path: any;
|
|
4
|
+
icon: any;
|
|
5
|
+
type?: string;
|
|
6
|
+
order?: number;
|
|
7
|
+
permission: any;
|
|
8
|
+
description: any;
|
|
9
|
+
isEnabled?: boolean;
|
|
10
|
+
globalRulesAckKey: any;
|
|
11
|
+
}): Promise<{
|
|
12
|
+
id: any;
|
|
13
|
+
path: any;
|
|
14
|
+
label: any;
|
|
15
|
+
action: string;
|
|
16
|
+
operation: {
|
|
17
|
+
action: string;
|
|
18
|
+
result: any;
|
|
19
|
+
id: any;
|
|
20
|
+
};
|
|
21
|
+
}>;
|
|
22
|
+
export declare function reorderMenus(apiUrl: any, { updates, globalRulesAckKey }: {
|
|
23
|
+
updates: any;
|
|
24
|
+
globalRulesAckKey: any;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
action: string;
|
|
27
|
+
updates: any;
|
|
28
|
+
result: any;
|
|
29
|
+
reload: {
|
|
30
|
+
attempted: boolean;
|
|
31
|
+
succeeded: boolean;
|
|
32
|
+
reason: string;
|
|
33
|
+
};
|
|
34
|
+
}>;
|
|
35
|
+
export declare function ensureExtension(apiUrl: any, { name, type, code, menuId, description, isEnabled, version, globalRulesAckKey, extensionKnowledgeAckKey, }: {
|
|
36
|
+
name: any;
|
|
37
|
+
type: any;
|
|
38
|
+
code: any;
|
|
39
|
+
menuId: any;
|
|
40
|
+
description: any;
|
|
41
|
+
isEnabled?: boolean;
|
|
42
|
+
version?: string;
|
|
43
|
+
globalRulesAckKey: any;
|
|
44
|
+
extensionKnowledgeAckKey: any;
|
|
45
|
+
}): Promise<{
|
|
46
|
+
id: any;
|
|
47
|
+
name: any;
|
|
48
|
+
type: any;
|
|
49
|
+
action: string;
|
|
50
|
+
operation: {
|
|
51
|
+
action: string;
|
|
52
|
+
id: any;
|
|
53
|
+
};
|
|
54
|
+
validation: {
|
|
55
|
+
valid: boolean;
|
|
56
|
+
localChecks: {
|
|
57
|
+
vueSfcAst: string;
|
|
58
|
+
componentCasing: string;
|
|
59
|
+
fieldWidth: string;
|
|
60
|
+
themeContract: string;
|
|
61
|
+
runtimeContract: string;
|
|
62
|
+
};
|
|
63
|
+
extensionId: any;
|
|
64
|
+
compiledLength: any;
|
|
65
|
+
};
|
|
66
|
+
verification: {
|
|
67
|
+
action: string;
|
|
68
|
+
valid: boolean;
|
|
69
|
+
extension: {
|
|
70
|
+
id: any;
|
|
71
|
+
name: any;
|
|
72
|
+
type: any;
|
|
73
|
+
isEnabled: any;
|
|
74
|
+
version: any;
|
|
75
|
+
sha256: string;
|
|
76
|
+
length: number;
|
|
77
|
+
};
|
|
78
|
+
checks: {
|
|
79
|
+
savedRecord: {
|
|
80
|
+
status: string;
|
|
81
|
+
};
|
|
82
|
+
expectedHash: {
|
|
83
|
+
status: string;
|
|
84
|
+
expectedSha256: any;
|
|
85
|
+
currentSha256: string;
|
|
86
|
+
};
|
|
87
|
+
serverCompile: {
|
|
88
|
+
status: string;
|
|
89
|
+
compiledLength: any;
|
|
90
|
+
};
|
|
91
|
+
uiContract: {
|
|
92
|
+
status: string;
|
|
93
|
+
issueCount: any;
|
|
94
|
+
pattern: any;
|
|
95
|
+
};
|
|
96
|
+
themeContract: {
|
|
97
|
+
status: string;
|
|
98
|
+
issueCount: any;
|
|
99
|
+
};
|
|
100
|
+
runtimeContract: {
|
|
101
|
+
status: string;
|
|
102
|
+
issueCount: any;
|
|
103
|
+
};
|
|
104
|
+
menuWiring: {
|
|
105
|
+
status: string;
|
|
106
|
+
applicable: boolean;
|
|
107
|
+
menu: {
|
|
108
|
+
id: any;
|
|
109
|
+
label: any;
|
|
110
|
+
path: any;
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
browserRender: {
|
|
114
|
+
status: string;
|
|
115
|
+
reason: string;
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
contractReview: any;
|
|
119
|
+
coverage: {
|
|
120
|
+
verified: string[];
|
|
121
|
+
browserRequiredForFullRuntimeProof: boolean;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
}>;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { fetchAPI } from './fetch.js';
|
|
2
|
+
import { assertExtensionKnowledgeAck, assertGlobalRulesAck, } from './required-knowledge.js';
|
|
3
|
+
import { getId, normalizeRestPath, } from './platform-route-operations.js';
|
|
4
|
+
import { createOrPatch, findRecord, } from './platform-data-operations.js';
|
|
5
|
+
import { normalizeMenuPermissionArg, sha256Text, validateExtensionCode, verifyExtensionRuntime, } from './platform-extension-source.js';
|
|
6
|
+
export async function ensureMenu(apiUrl, { label, path, icon, type = 'Menu', order = 0, permission, description, isEnabled = true, globalRulesAckKey, }) {
|
|
7
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
8
|
+
const normalizedPath = path ? normalizeRestPath(path) : undefined;
|
|
9
|
+
const existing = normalizedPath
|
|
10
|
+
? await findRecord(apiUrl, 'enfyra_menu', { path: { _eq: normalizedPath } }, 'id,_id,path,label')
|
|
11
|
+
: await findRecord(apiUrl, 'enfyra_menu', { label: { _eq: label } }, 'id,_id,path,label');
|
|
12
|
+
const body = {
|
|
13
|
+
label,
|
|
14
|
+
...(normalizedPath ? { path: normalizedPath } : {}),
|
|
15
|
+
icon,
|
|
16
|
+
type,
|
|
17
|
+
order,
|
|
18
|
+
description,
|
|
19
|
+
isEnabled,
|
|
20
|
+
};
|
|
21
|
+
if (permission !== undefined) {
|
|
22
|
+
body.permission = normalizeMenuPermissionArg(permission);
|
|
23
|
+
}
|
|
24
|
+
else if (!existing) {
|
|
25
|
+
body.permission = null;
|
|
26
|
+
}
|
|
27
|
+
const operation = await createOrPatch(apiUrl, 'enfyra_menu', existing, body);
|
|
28
|
+
return {
|
|
29
|
+
id: operation.id || getId(existing),
|
|
30
|
+
path: normalizedPath || existing?.path || null,
|
|
31
|
+
label,
|
|
32
|
+
action: operation.action,
|
|
33
|
+
operation,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export async function reorderMenus(apiUrl, { updates, globalRulesAckKey }) {
|
|
37
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
const normalizedUpdates = updates.map((item, index) => {
|
|
40
|
+
const id = item?.id;
|
|
41
|
+
if (id === null || id === undefined || String(id).trim() === '') {
|
|
42
|
+
throw new Error(`updates[${index}].id is required.`);
|
|
43
|
+
}
|
|
44
|
+
const key = String(id);
|
|
45
|
+
if (seen.has(key))
|
|
46
|
+
throw new Error(`Duplicate menu id in reorder payload: ${key}`);
|
|
47
|
+
seen.add(key);
|
|
48
|
+
const order = Number(item.order);
|
|
49
|
+
if (!Number.isInteger(order) || order < 0) {
|
|
50
|
+
throw new Error(`updates[${index}].order must be a non-negative integer.`);
|
|
51
|
+
}
|
|
52
|
+
const parent = item.parent === undefined || item.parent === null || String(item.parent).trim() === ''
|
|
53
|
+
? null
|
|
54
|
+
: item.parent;
|
|
55
|
+
return { id, order, parent };
|
|
56
|
+
});
|
|
57
|
+
const result = await fetchAPI(apiUrl, '/admin/menu/reorder', {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
body: JSON.stringify({ updates: normalizedUpdates }),
|
|
60
|
+
});
|
|
61
|
+
return {
|
|
62
|
+
action: 'menus_reordered',
|
|
63
|
+
updates: normalizedUpdates,
|
|
64
|
+
result,
|
|
65
|
+
reload: {
|
|
66
|
+
attempted: false,
|
|
67
|
+
succeeded: true,
|
|
68
|
+
reason: '/admin/menu/reorder persists order/parent updates and emits enfyra_menu cache invalidation.',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export async function ensureExtension(apiUrl, { name, type, code, menuId, description, isEnabled = true, version = '1.0.0', globalRulesAckKey, extensionKnowledgeAckKey, }) {
|
|
73
|
+
assertGlobalRulesAck(globalRulesAckKey);
|
|
74
|
+
assertExtensionKnowledgeAck(extensionKnowledgeAckKey);
|
|
75
|
+
if (type === 'page' && !menuId) {
|
|
76
|
+
throw new Error('menuId is required for page extensions. Use ensure_menu first, then ensure_page_extension.');
|
|
77
|
+
}
|
|
78
|
+
if (type !== 'page' && menuId) {
|
|
79
|
+
throw new Error('menuId is only valid for page extensions.');
|
|
80
|
+
}
|
|
81
|
+
const validation = await validateExtensionCode(apiUrl, code, name);
|
|
82
|
+
const existing = await findRecord(apiUrl, 'enfyra_extension', { name: { _eq: name } }, 'id,_id,name,menu.id,type');
|
|
83
|
+
const operation = await createOrPatch(apiUrl, 'enfyra_extension', existing, {
|
|
84
|
+
name,
|
|
85
|
+
type,
|
|
86
|
+
code,
|
|
87
|
+
...(menuId ? { menu: { id: menuId } } : {}),
|
|
88
|
+
description,
|
|
89
|
+
isEnabled,
|
|
90
|
+
version,
|
|
91
|
+
});
|
|
92
|
+
const extensionId = operation.id || getId(existing);
|
|
93
|
+
const verification = await verifyExtensionRuntime(apiUrl, {
|
|
94
|
+
id: extensionId,
|
|
95
|
+
name: extensionId ? undefined : name,
|
|
96
|
+
uiPattern: undefined,
|
|
97
|
+
expectedSha256: sha256Text(code),
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
id: extensionId,
|
|
101
|
+
name,
|
|
102
|
+
type,
|
|
103
|
+
action: operation.action,
|
|
104
|
+
operation: { action: operation.action, id: extensionId },
|
|
105
|
+
validation,
|
|
106
|
+
verification,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=platform-resource-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-resource-operations.js","sourceRoot":"","sources":["../../src/lib/platform-resource-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function registerPlatformResourceTools(server: any, ENFYRA_API_URL: any): void;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { normalizeEscapedVueSource, } from './tool-input-normalization.js';
|
|
3
|
+
import { extensionKnowledgeAckParam, globalRulesAckParam, } from './required-knowledge.js';
|
|
4
|
+
import { ensureExtension, ensureMenu, jsonText, reorderMenus, } from './platform-operation-logic.js';
|
|
5
|
+
export function registerPlatformResourceTools(server, ENFYRA_API_URL) {
|
|
6
|
+
server.tool('ensure_menu', 'Business operation: create or update one admin menu item. Use this instead of raw enfyra_menu CRUD.', {
|
|
7
|
+
label: z.string().describe('Menu label.'),
|
|
8
|
+
path: z.string().optional().describe('Admin app route path for leaf menu items, e.g. /reports.'),
|
|
9
|
+
icon: z.string().optional().describe('Menu icon name.'),
|
|
10
|
+
type: z.enum(['Menu', 'Dropdown Menu']).optional().default('Menu').describe('Menu type.'),
|
|
11
|
+
order: z.number().optional().default(0).describe('Display order.'),
|
|
12
|
+
permission: z.string().optional().describe('Menu permission JSON object. Omit to preserve existing permissions on update; new menus default to null. Empty objects are normalized to null.'),
|
|
13
|
+
description: z.string().optional().describe('Admin note.'),
|
|
14
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable menu.'),
|
|
15
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
16
|
+
}, async (input) => jsonText({
|
|
17
|
+
action: 'menu_ensured',
|
|
18
|
+
menu: await ensureMenu(ENFYRA_API_URL, input),
|
|
19
|
+
}));
|
|
20
|
+
server.tool('reorder_menus', [
|
|
21
|
+
'Business operation: reorder Enfyra admin menus and optionally move menus under a new parent.',
|
|
22
|
+
'Uses the server /admin/menu/reorder route introduced in Enfyra 2.2.6 instead of PATCHing each enfyra_menu record.',
|
|
23
|
+
'The server validates duplicate ids, non-negative integer order, dropdown-only parents, /data child restrictions, system menu parent locks, cycle prevention, persistence, and menu cache invalidation.',
|
|
24
|
+
].join(' '), {
|
|
25
|
+
updates: z.array(z.object({
|
|
26
|
+
id: z.union([z.string(), z.number()]).describe('Menu id to reorder.'),
|
|
27
|
+
order: z.number().int().nonnegative().describe('Sibling order index. Must be a non-negative integer.'),
|
|
28
|
+
parent: z.union([z.string(), z.number(), z.null()]).optional().describe('New parent menu id, or null for a root menu. Parent must be a Dropdown Menu.'),
|
|
29
|
+
})).min(1).describe('Menu order/parent updates, usually the changed siblings from drag-and-drop.'),
|
|
30
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
31
|
+
}, async (input) => jsonText(await reorderMenus(ENFYRA_API_URL, input)));
|
|
32
|
+
server.tool('ensure_page_extension', 'Business operation: create or update one page extension attached to an existing menu. Validates before save, then re-reads and verifies the exact saved source and menu wiring. Call get_extension_theme_contract first for UI work.', {
|
|
33
|
+
name: z.string().describe('Extension unique name.'),
|
|
34
|
+
code: z.preprocess(normalizeEscapedVueSource, z.string()).describe('Vue SFC extension code. Raw source is preferred; a fully JSON-escaped one-line SFC is normalized for weak clients.'),
|
|
35
|
+
menuId: z.union([z.string(), z.number()]).describe('Existing menu id for this page extension.'),
|
|
36
|
+
description: z.string().optional().describe('Extension description.'),
|
|
37
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable extension.'),
|
|
38
|
+
version: z.string().optional().default('1.0.0').describe('Extension version.'),
|
|
39
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
40
|
+
extensionKnowledgeAckKey: extensionKnowledgeAckParam(z),
|
|
41
|
+
}, async (input) => jsonText({
|
|
42
|
+
action: 'page_extension_ensured',
|
|
43
|
+
extension: await ensureExtension(ENFYRA_API_URL, { ...input, type: 'page' }),
|
|
44
|
+
}));
|
|
45
|
+
server.tool('ensure_global_extension', 'Business operation: create or update one global shell extension. Validates before save, rejects menu coupling, then re-reads and verifies the exact saved source. Call get_extension_theme_contract first for UI work.', {
|
|
46
|
+
name: z.string().describe('Extension unique name.'),
|
|
47
|
+
code: z.preprocess(normalizeEscapedVueSource, z.string()).describe('Vue SFC extension code. Raw source is preferred; a fully JSON-escaped one-line SFC is normalized for weak clients.'),
|
|
48
|
+
description: z.string().optional().describe('Extension description.'),
|
|
49
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable extension.'),
|
|
50
|
+
version: z.string().optional().default('1.0.0').describe('Extension version.'),
|
|
51
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
52
|
+
extensionKnowledgeAckKey: extensionKnowledgeAckParam(z),
|
|
53
|
+
}, async (input) => jsonText({
|
|
54
|
+
action: 'global_extension_ensured',
|
|
55
|
+
extension: await ensureExtension(ENFYRA_API_URL, { ...input, type: 'global' }),
|
|
56
|
+
}));
|
|
57
|
+
server.tool('ensure_widget_extension', 'Business operation: create or update one widget extension. Validates before save, rejects menu coupling, then re-reads and verifies the exact saved source. Call get_extension_theme_contract first for UI work.', {
|
|
58
|
+
name: z.string().describe('Extension unique name.'),
|
|
59
|
+
code: z.preprocess(normalizeEscapedVueSource, z.string()).describe('Vue SFC extension code. Raw source is preferred; a fully JSON-escaped one-line SFC is normalized for weak clients.'),
|
|
60
|
+
description: z.string().optional().describe('Extension description.'),
|
|
61
|
+
isEnabled: z.boolean().optional().default(true).describe('Enable extension.'),
|
|
62
|
+
version: z.string().optional().default('1.0.0').describe('Extension version.'),
|
|
63
|
+
globalRulesAckKey: globalRulesAckParam(z),
|
|
64
|
+
extensionKnowledgeAckKey: extensionKnowledgeAckParam(z),
|
|
65
|
+
}, async (input) => jsonText({
|
|
66
|
+
action: 'widget_extension_ensured',
|
|
67
|
+
extension: await ensureExtension(ENFYRA_API_URL, { ...input, type: 'widget' }),
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=platform-resource-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-resource-tools.js","sourceRoot":"","sources":["../../src/lib/platform-resource-tools.ts"],"names":[],"mappings":"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"}
|