@appaflytech/zeyrek-ai-mcp 0.0.24 → 0.0.26
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/.env.example +0 -15
- package/dist/config.js +0 -11
- package/dist/index.js +0 -2
- package/dist/knowledge/componentCatalog.js +25 -13
- package/dist/knowledge/componentEvents.js +6 -13
- package/dist/knowledge/normalize.js +17 -68
- package/dist/knowledge/rules.js +49 -137
- package/dist/knowledge/styleResolve.js +4 -50
- package/dist/knowledge/themeResolve.js +3 -3
- package/dist/observability/trace.js +1 -1
- package/dist/platform/diagnostics.js +4 -10
- package/dist/platform/domSummary.js +1 -1
- package/dist/platform/http.js +7 -23
- package/dist/platform/responses.js +2 -6
- package/dist/platform/{capture/capture.js → screenshot.js} +514 -52
- package/dist/platform/secrets.js +0 -9
- package/dist/platform/strictArguments.js +12 -68
- package/dist/platform/tokenVault.js +4 -187
- package/dist/resources/examples/workflow-http-step.json +2 -2
- package/dist/resources/guides/component.md +1 -6
- package/dist/resources/guides/expressions.md +2 -2
- package/dist/resources/guides/functions.md +1 -1
- package/dist/resources/guides/layout.md +7 -11
- package/dist/resources/guides/microfunction.md +28 -0
- package/dist/resources/guides/microservice.md +4 -10
- package/dist/resources/guides/middleware.md +1 -5
- package/dist/resources/guides/page.md +55 -215
- package/dist/resources/guides/theme.md +1 -4
- package/dist/resources/guides/translation.md +1 -1
- package/dist/resources/guides/workflow.md +9 -12
- package/dist/resources/schema-fingerprint.json +2 -2
- package/dist/resources/schemas/CreateWorkflowCommand.json +3 -0
- package/dist/resources/schemas/PreviewWorkflowCommand.json +3 -0
- package/dist/resources/schemas/StepDto.json +12 -9
- package/dist/resources/schemas/UpdateWorkflowCommand.json +3 -0
- package/dist/server.js +1 -3
- package/dist/tools/applications.js +3 -60
- package/dist/tools/components.js +10 -50
- package/dist/tools/datasources.js +1 -1
- package/dist/tools/designSchemaPatch.js +6 -16
- package/dist/tools/externalComponents.js +4 -25
- package/dist/tools/flows.js +6 -79
- package/dist/tools/layouts.js +12 -44
- package/dist/tools/microservices.js +10 -26
- package/dist/tools/pages.js +67 -303
- package/dist/tools/platformInfo.js +2 -6
- package/dist/tools/rows.js +1 -7
- package/dist/tools/schemaOps.js +1 -1
- package/dist/tools/screenWrite.js +5 -6
- package/dist/tools/screens.js +3 -90
- package/dist/tools/workflows.js +1 -1
- package/package.json +1 -1
- package/dist/knowledge/mobileComponentCatalog.js +0 -801
- package/dist/knowledge/mobileComponentEvents.js +0 -225
- package/dist/knowledge/platform/lint.js +0 -312
- package/dist/knowledge/platform/mobile.js +0 -78
- package/dist/knowledge/platform/mobileRules.js +0 -182
- package/dist/knowledge/platform/mobileTabs.js +0 -108
- package/dist/knowledge/platform/profile.js +0 -20
- package/dist/knowledge/platform/resolve.js +0 -122
- package/dist/knowledge/platform/web.js +0 -38
- package/dist/knowledge/styleResolveNative.js +0 -510
- package/dist/platform/argumentAliases.js +0 -128
- package/dist/platform/bodyFile.js +0 -103
- package/dist/platform/capture/actions.js +0 -333
- package/dist/platform/capture/browser.js +0 -1
- package/dist/platform/capture/console-log.js +0 -80
- package/dist/platform/capture/index.js +0 -11
- package/dist/platform/capture/readiness.js +0 -103
- package/dist/platform/capture/summary.js +0 -77
- package/dist/platform/capture/target.js +0 -5
- package/dist/platform/capture/targets/studio-mobile.js +0 -15
- package/dist/platform/capture/targets/studio-web.js +0 -5
- package/dist/platform/schemaReadMemory.js +0 -60
- package/dist/resources/examples/mobile-app-shell-drawer.json +0 -209
- package/dist/resources/examples/mobile-app-shell-stack.json +0 -123
- package/dist/resources/examples/mobile-app-shell-tab.json +0 -174
- package/dist/resources/examples/mobile-list-detail-form.json +0 -656
- package/dist/resources/guides/mobile.md +0 -419
- package/dist/tools/mobile.js +0 -203
- package/dist/tools/profileWrite.js +0 -45
package/dist/tools/layouts.js
CHANGED
|
@@ -9,8 +9,6 @@ import { applyPropTypesToSchema, isSetPropTypeOp, setPropTypeErrors } from '../k
|
|
|
9
9
|
import { writeDiff, withWriteDiff } from '../platform/writeDiff.js';
|
|
10
10
|
import { PlatformApiError } from '../platform/errors.js';
|
|
11
11
|
import { handle } from '../platform/responses.js';
|
|
12
|
-
import { applicationTypeField, resolveProfile } from '../knowledge/platform/resolve.js';
|
|
13
|
-
import { screenProfileWarnings } from './profileWrite.js';
|
|
14
12
|
import { z } from 'zod';
|
|
15
13
|
const patchOperationsParam = z.array(z.record(z.unknown())).min(1)
|
|
16
14
|
.describe("JSON Patch listesi (RFC 6902): { op, path, value }. Yol seçici alabilir — '/views/0/children[elementId=baslik]/props/content/data'.");
|
|
@@ -48,13 +46,7 @@ export function registerLayoutTools(server, platform) {
|
|
|
48
46
|
description: "Layout'u komponent ağacı (views), widget'ları, akışları ve olaylarıyla getirir.",
|
|
49
47
|
inputSchema: { project: projectParam, environment: environmentParam, applicationId: guid, id: guid },
|
|
50
48
|
annotations: readOnly
|
|
51
|
-
}, handle(config,
|
|
52
|
-
const response = await platform.tenant('GET', project, `/layouts/${applicationId}/${id}`, { environment });
|
|
53
|
-
const typeField = applicationTypeField(await resolveProfile(platform, applicationId));
|
|
54
|
-
return response && typeof response === 'object' && !Array.isArray(response) && Object.keys(typeField).length > 0
|
|
55
|
-
? { ...response, ...typeField }
|
|
56
|
-
: response;
|
|
57
|
-
}));
|
|
49
|
+
}, handle(config, ({ project, environment, applicationId, id }) => platform.tenant('GET', project, `/layouts/${applicationId}/${id}`, { environment })));
|
|
58
50
|
server.registerTool('layout_schema_get', {
|
|
59
51
|
title: "Layout komponent ağacını oku",
|
|
60
52
|
description: "Layout'un komponent ağacını (views) okur — page_schema_get'in layout karşılığı. Ağaçta hedefli değişiklik için layout_schema_patch (sayfa ile aynı micro-op sözlüğü, PATCH /layouts/{app}/{id}/schema). Ad/parametre/olay alanlarında ya da düz JSON Patch yolu gerektiğinde layout_patch — o araç buradaki updatedAt'i expectedUpdatedAt olarak kabul eder. Tam ağacı kendiniz yazacaksanız layout_update.",
|
|
@@ -69,21 +61,20 @@ export function registerLayoutTools(server, platform) {
|
|
|
69
61
|
annotations: readOnly
|
|
70
62
|
}, handle(config, async ({ project, environment, applicationId, id, mode, componentId }) => {
|
|
71
63
|
const layout = await fetchHost(platform, 'layout', project, environment, applicationId, id);
|
|
72
|
-
const typeField = applicationTypeField(await resolveProfile(platform, applicationId));
|
|
73
64
|
const audit = layout.audit;
|
|
74
65
|
const updatedAt = audit?.updatedAt ?? audit?.createdAt;
|
|
75
66
|
const views = (layout.views ?? []);
|
|
76
67
|
if (mode === 'full')
|
|
77
|
-
return { updatedAt,
|
|
68
|
+
return { updatedAt, views };
|
|
78
69
|
if (mode === 'subtree') {
|
|
79
70
|
if (!componentId)
|
|
80
71
|
throw new PlatformApiError("mode='subtree' için componentId zorunludur.");
|
|
81
72
|
const subtree = findNode(views, componentId);
|
|
82
73
|
if (!subtree)
|
|
83
74
|
throw new PlatformApiError(`Layout'ta '${componentId}' id'li bir komponent yok; layout_schema_get'i summary kipinde çağırıp hedefi doğrulayın.`);
|
|
84
|
-
return { updatedAt,
|
|
75
|
+
return { updatedAt, views: subtree };
|
|
85
76
|
}
|
|
86
|
-
return { updatedAt,
|
|
77
|
+
return { updatedAt, views: views.map(node => summarize(node)) };
|
|
87
78
|
}));
|
|
88
79
|
server.registerTool('layout_create', {
|
|
89
80
|
title: 'Layout oluştur',
|
|
@@ -99,28 +90,19 @@ export function registerLayoutTools(server, platform) {
|
|
|
99
90
|
},
|
|
100
91
|
annotations: writes
|
|
101
92
|
}, handle(config, async ({ project, environment, applicationId, name, views, events, parameters }) => {
|
|
102
|
-
|
|
103
|
-
assertScreenWriteGuards('layout', { schema: views, events }, resolved.profile.platform);
|
|
93
|
+
assertScreenWriteGuards('layout', { schema: views, events });
|
|
104
94
|
const fixed = normalizeComponentDefaults(views);
|
|
105
95
|
const catalogNotes = await screenCatalogNotes(platform, project, environment, applicationId, views);
|
|
106
|
-
const gaps = [
|
|
107
|
-
...(resolved.profile.layout.blocksMeaningful ? verticalGapWarnings(views ?? [], 'LAY-003 (uyarı)') : []),
|
|
108
|
-
...flexSizeWarnings(views ?? [], 'LAY-007 (uyarı)', 'LAY-008 (uyarı)'),
|
|
109
|
-
...spacingLayerWarnings(views ?? [], 'LAY-010 (uyarı)', 'LAY-011 (uyarı)'),
|
|
110
|
-
...await screenProfileWarnings(platform, resolved, project, environment, applicationId, { kind: 'layout', nodes: views ?? [] })
|
|
111
|
-
];
|
|
96
|
+
const gaps = [...verticalGapWarnings(views ?? [], 'LAY-003 (uyarı)'), ...flexSizeWarnings(views ?? [], 'LAY-007 (uyarı)', 'LAY-008 (uyarı)'), ...spacingLayerWarnings(views ?? [], 'LAY-010 (uyarı)', 'LAY-011 (uyarı)')];
|
|
112
97
|
const response = await platform.tenant('POST', project, `/layouts/${applicationId}`, {
|
|
113
98
|
environment,
|
|
114
99
|
body: { name, views: views ?? [], events: events ?? [], parameters: parameters ?? null }
|
|
115
100
|
});
|
|
116
101
|
const drops = writeDiff({ name, views: views ?? [], events: events ?? [] }, response);
|
|
117
102
|
const normalized = withWriteDiff(withNormalization(response, [...componentDefaultsNote(fixed), ...catalogNotes, ...slotWarning(views)]), drops);
|
|
118
|
-
|
|
119
|
-
if (!normalized || typeof normalized !== 'object')
|
|
103
|
+
if (gaps.length === 0 || !normalized || typeof normalized !== 'object')
|
|
120
104
|
return normalized;
|
|
121
|
-
|
|
122
|
-
return Object.keys(typeField).length === 0 ? normalized : { ...normalized, ...typeField };
|
|
123
|
-
return { ...normalized, ...typeField, layoutWarnings: gaps };
|
|
105
|
+
return { ...normalized, layoutWarnings: gaps };
|
|
124
106
|
}));
|
|
125
107
|
server.registerTool('layout_update', {
|
|
126
108
|
title: 'Layout güncelle',
|
|
@@ -138,21 +120,13 @@ export function registerLayoutTools(server, platform) {
|
|
|
138
120
|
annotations: updates
|
|
139
121
|
}, handle(config, async ({ project, environment, applicationId, id, ...changes }) => {
|
|
140
122
|
const overrides = Object.fromEntries(Object.entries(changes).filter(([, value]) => value !== undefined));
|
|
141
|
-
|
|
142
|
-
assertScreenWriteGuards('layout', { schema: overrides.views, events: overrides.events }, resolved?.profile.platform);
|
|
123
|
+
assertScreenWriteGuards('layout', { schema: overrides.views, events: overrides.events });
|
|
143
124
|
const current = await fetchHost(platform, 'layout', project, environment, applicationId, id);
|
|
144
125
|
const fixed = normalizeComponentDefaults(overrides.views);
|
|
145
126
|
const catalogNotes = await screenCatalogNotes(platform, project, environment, applicationId, overrides.views);
|
|
146
127
|
const body = layoutUpdateBody({ ...current, applicationId }, overrides);
|
|
147
128
|
await platform.tenant('PUT', project, `/layouts/${applicationId}/${id}`, { environment, body });
|
|
148
|
-
const gaps = overrides.views === undefined
|
|
149
|
-
? []
|
|
150
|
-
: [
|
|
151
|
-
...(resolved.profile.layout.blocksMeaningful ? verticalGapWarnings(body.views, 'LAY-003 (uyarı)') : []),
|
|
152
|
-
...flexSizeWarnings(body.views, 'LAY-007 (uyarı)', 'LAY-008 (uyarı)'),
|
|
153
|
-
...spacingLayerWarnings(body.views, 'LAY-010 (uyarı)', 'LAY-011 (uyarı)'),
|
|
154
|
-
...await screenProfileWarnings(platform, resolved, project, environment, applicationId, { kind: 'layout', nodes: body.views })
|
|
155
|
-
];
|
|
129
|
+
const gaps = overrides.views === undefined ? [] : [...verticalGapWarnings(body.views, 'LAY-003 (uyarı)'), ...flexSizeWarnings(body.views, 'LAY-007 (uyarı)', 'LAY-008 (uyarı)'), ...spacingLayerWarnings(body.views, 'LAY-010 (uyarı)', 'LAY-011 (uyarı)')];
|
|
156
130
|
const summary = { id, changed: Object.keys(overrides), preserved: { viewNodes: body.views.length } };
|
|
157
131
|
if (gaps.length > 0)
|
|
158
132
|
summary.layoutWarnings = gaps;
|
|
@@ -206,8 +180,7 @@ export function registerLayoutTools(server, platform) {
|
|
|
206
180
|
const overrides = Object.fromEntries(['name', 'views', 'events', 'parameters']
|
|
207
181
|
.filter(key => patched[key] !== undefined)
|
|
208
182
|
.map(key => [key, patched[key]]));
|
|
209
|
-
|
|
210
|
-
assertScreenWriteGuards('layout', { schema: overrides.views, events: overrides.events }, profile.profile.platform);
|
|
183
|
+
assertScreenWriteGuards('layout', { schema: overrides.views, events: overrides.events });
|
|
211
184
|
const fixed = normalizeComponentDefaults(overrides.views);
|
|
212
185
|
const catalogNotes = await screenCatalogNotes(platform, project, environment, applicationId, overrides.views);
|
|
213
186
|
const body = layoutUpdateBody({ ...current, applicationId }, overrides);
|
|
@@ -220,12 +193,7 @@ export function registerLayoutTools(server, platform) {
|
|
|
220
193
|
body: { baseVersion: baseVersionOf(document, 'layout_get'), ops: netOps }
|
|
221
194
|
});
|
|
222
195
|
const written = patchResult(saved, finalDocument);
|
|
223
|
-
const gaps = [
|
|
224
|
-
...(profile.profile.layout.blocksMeaningful ? verticalGapWarnings(body.views, 'LAY-003 (uyarı)') : []),
|
|
225
|
-
...flexSizeWarnings(body.views, 'LAY-007 (uyarı)', 'LAY-008 (uyarı)'),
|
|
226
|
-
...spacingLayerWarnings(body.views, 'LAY-010 (uyarı)', 'LAY-011 (uyarı)'),
|
|
227
|
-
...await screenProfileWarnings(platform, profile, project, environment, applicationId, { kind: 'layout', nodes: body.views })
|
|
228
|
-
];
|
|
196
|
+
const gaps = [...verticalGapWarnings(body.views, 'LAY-003 (uyarı)'), ...flexSizeWarnings(body.views, 'LAY-007 (uyarı)', 'LAY-008 (uyarı)'), ...spacingLayerWarnings(body.views, 'LAY-010 (uyarı)', 'LAY-011 (uyarı)')];
|
|
229
197
|
const summary = {
|
|
230
198
|
id,
|
|
231
199
|
applied: patchOps.length,
|
|
@@ -6,14 +6,13 @@ import { normalizeMicroserviceDefinition, normalizeMicroservicePatchOps, withNor
|
|
|
6
6
|
import { evaluatePolicy, enforcePolicy, attachFindings } from '../knowledge/policy.js';
|
|
7
7
|
import { microserviceOutline, workflowOutline, resolvePart, resolvePatchOperations } from '../knowledge/outlines.js';
|
|
8
8
|
import { patchResult, baseVersionOf } from '../platform/patch.js';
|
|
9
|
-
import {
|
|
9
|
+
import { policyRules } from '../knowledge/rules.js';
|
|
10
10
|
import { writeDiff, withWriteDiff } from '../platform/writeDiff.js';
|
|
11
|
-
import { identityHeaders
|
|
11
|
+
import { identityHeaders } from '../platform/tokenVault.js';
|
|
12
12
|
import { PlatformApiError } from '../platform/errors.js';
|
|
13
13
|
import { existingMatch, ifExistsParam, listAll, platformRename, withOutcome, withRename } from '../platform/ifExists.js';
|
|
14
14
|
import { outlineWrite, recordWriteViewParam } from '../platform/writeView.js';
|
|
15
15
|
import { handle } from '../platform/responses.js';
|
|
16
|
-
import { headersForMode } from '../platform/http.js';
|
|
17
16
|
import fastJsonPatch from 'fast-json-patch';
|
|
18
17
|
import { z } from 'zod';
|
|
19
18
|
import { constraintSummary } from '../knowledge/backendConstraints.js';
|
|
@@ -69,7 +68,7 @@ async function queryScopeFindings(platform, project, environment, definition) {
|
|
|
69
68
|
}
|
|
70
69
|
const patchOperationsParam = z.array(z.record(z.unknown())).min(1)
|
|
71
70
|
.describe("RFC 6902 JSON Patch işlemleri; path'leri view:'outline'/'part' ile keşfedin. Dizi öğelerinde indeks yerine seçici kullanılabilir: '/sourceParameters/joins[alias=customers]/path' — seçici gövde platforma gitmeden indekse çevrilir, çözülemezse istek hiç gönderilmez.");
|
|
72
|
-
const asUserParam = z.string().min(1).optional().describe("Uygulama üyesinin kimliği: istek gateway'in servis jetonu yerine bu kimlikle gider. Jeton HEM Authorization başlığında HEM NG_AccessToken çerezinde taşınır, böylece jetonu ÇEREZDEN okuyan middleware de geçer — uca middleware bağlandığı anda bu alan olmadan çağrı 401 döner (09-05 koşusu S-21).
|
|
71
|
+
const asUserParam = z.string().min(1).optional().describe("Uygulama üyesinin kimliği: istek gateway'in servis jetonu yerine bu kimlikle gider. Jeton HEM Authorization başlığında HEM NG_AccessToken çerezinde taşınır, böylece jetonu ÇEREZDEN okuyan middleware de geçer — uca middleware bağlandığı anda bu alan olmadan çağrı 401 döner (09-05 koşusu S-21). İKİ ŞEKİL kabul edilir: (1) ham JWT, (2) `tok_…` referansı (giriş ucunu çağırdığınızda yanıtın tokenRefs alanında döner, 15 dk geçerli). anonymous ile birlikte verilemez.");
|
|
73
72
|
const cookiesParam = z.record(z.string()).optional().describe("İsteğe eklenecek çerezler (ad → değer): uygulamanın KENDİ oturum çerezi buraya verilir (ör. { CORE_Token: '<jwt>' }). asUser verildiğinde gateway NG_AccessToken çerezini zaten kendisi kurar; bu alan yalnız uygulama başka bir çerez adı okuyorsa gerekir. anonymous ile birlikte verilemez.");
|
|
74
73
|
const executeInput = {
|
|
75
74
|
project: projectParam,
|
|
@@ -190,13 +189,6 @@ function unboundQueryParameters(value, into = []) {
|
|
|
190
189
|
unboundQueryParameters(entry, into);
|
|
191
190
|
return into;
|
|
192
191
|
}
|
|
193
|
-
/** Çağrının dinamik filtresi (`filters`, sorguda ya da gövdede) bilinen işleçlerle mi — değilse istek gitmez (g-03). */
|
|
194
|
-
function assertFilterOperators(tool, bound) {
|
|
195
|
-
const bodyFilters = bound.body && !Array.isArray(bound.body) ? bound.body.filters : undefined;
|
|
196
|
-
const error = filterOperatorError(tool, bound.query?.filters) ?? filterOperatorError(tool, bodyFilters);
|
|
197
|
-
if (error)
|
|
198
|
-
throw new PlatformApiError(error, 400);
|
|
199
|
-
}
|
|
200
192
|
function executePath(prefix, application, microservice, routeParams) {
|
|
201
193
|
const routeSuffix = routeParams && routeParams.length > 0
|
|
202
194
|
? `/${routeParams.map(encodeURIComponent).join('/')}`
|
|
@@ -414,20 +406,14 @@ export function registerMicroserviceTools(server, platform) {
|
|
|
414
406
|
}, handle(config, ({ project, environment, id }) => platform.tenant('POST', project, `/microservices/${id}/clone`, { environment })));
|
|
415
407
|
server.registerTool('microservice_execute', {
|
|
416
408
|
title: 'Microservice çalıştır',
|
|
417
|
-
description: "Kayıtlı microservice'i gerçek runtime yolundan çalıştırır (POST /{project}/m/{application}/{microservice SLUG'ı}). Dönen httpStatus microservice'in kendi sonucudur (hata da geçerli çıktıdır); beklenmedik sonuçta microservice_debug ile adım adım inceleyin. Anonim erişim testi için anonymous: true. Yanıt 'headers'
|
|
418
|
-
inputSchema:
|
|
419
|
-
...executeInput,
|
|
420
|
-
includeHeaders: z.enum(['none', 'essential', 'all']).optional().describe("Yanıttaki 'headers' alanı. essential (varsayılan): content-type, content-length, content-disposition, location, total-count, x-request-id, traceparent. all: platformun döndüğü bütün başlıklar (gizliler hariç) — ucun kendi yazdığı başlığı doğrulamak için. none: başlık yok")
|
|
421
|
-
},
|
|
409
|
+
description: "Kayıtlı microservice'i gerçek runtime yolundan çalıştırır (POST /{project}/m/{application}/{microservice SLUG'ı}). Dönen httpStatus microservice'in kendi sonucudur (hata da geçerli çıktıdır); beklenmedik sonuçta microservice_debug ile adım adım inceleyin. Anonim erişim testi için anonymous: true. Yanıt 'headers' alanında platformun döndüğü header'ları taşır (küçük harf; ör. headers['total-count'] — sayfalı tablo akışlarının okuduğu sözleşme; set-cookie/authorization elenir).",
|
|
410
|
+
inputSchema: executeInput,
|
|
422
411
|
annotations: writes
|
|
423
|
-
}, handle(config, async ({ project, environment, application, microservice, method, routeParams, query, body, parameters, headers, anonymous, asUser, cookies, language
|
|
412
|
+
}, handle(config, async ({ project, environment, application, microservice, method, routeParams, query, body, parameters, headers, anonymous, asUser, cookies, language }) => {
|
|
424
413
|
const notes = [];
|
|
425
|
-
const
|
|
426
|
-
const requestHeaders = { ...runIdentity(anonymous, member, cookies, headers), ...languageHeader(language, notes) };
|
|
414
|
+
const requestHeaders = { ...runIdentity(anonymous, asUser, cookies, headers), ...languageHeader(language, notes) };
|
|
427
415
|
const bound = bindCallParameters(method, parameters, query, body, notes);
|
|
428
|
-
|
|
429
|
-
const raw = await platform.tenantRaw(method, project, executePath('m', application, microservice, routeParams), { environment, query: bound.query, body: bound.body, headers: requestHeaders, anonymous, mirrorAuthorizationCookie: true });
|
|
430
|
-
return withNormalization({ ...raw, headers: headersForMode(raw.headers, includeHeaders ?? 'essential') }, notes);
|
|
416
|
+
return withNormalization(await platform.tenantRaw(method, project, executePath('m', application, microservice, routeParams), { environment, query: bound.query, body: bound.body, headers: requestHeaders, anonymous, mirrorAuthorizationCookie: true }), notes);
|
|
431
417
|
}));
|
|
432
418
|
server.registerTool('microservice_debug', {
|
|
433
419
|
title: 'Microservice debug',
|
|
@@ -436,10 +422,8 @@ export function registerMicroserviceTools(server, platform) {
|
|
|
436
422
|
annotations: writes
|
|
437
423
|
}, handle(config, async ({ project, environment, application, microservice, method, routeParams, query, body, parameters, headers, anonymous, asUser, cookies, language }) => {
|
|
438
424
|
const notes = [];
|
|
439
|
-
const
|
|
440
|
-
const requestHeaders = { ...runIdentity(anonymous, member, cookies, headers), ...languageHeader(language, notes) };
|
|
425
|
+
const requestHeaders = { ...runIdentity(anonymous, asUser, cookies, headers), ...languageHeader(language, notes) };
|
|
441
426
|
const bound = bindCallParameters(method, parameters, query, body, notes);
|
|
442
|
-
assertFilterOperators('microservice_debug', bound);
|
|
443
427
|
const payload = await platform.tenantRaw(method, project, executePath('debug', application, microservice, routeParams), { environment, query: bound.query, body: bound.body, headers: requestHeaders, anonymous, mirrorAuthorizationCookie: true });
|
|
444
428
|
const unbound = unboundQueryParameters(payload.body);
|
|
445
429
|
return withNormalization({
|
|
@@ -490,7 +474,7 @@ export function registerMicroserviceTools(server, platform) {
|
|
|
490
474
|
const findings = enforcePolicy(evaluatePolicy(config, policyRules, 'microservice', definition, { operation: 'preview' }, policyOverride));
|
|
491
475
|
// Önizleme de ucun middleware'lerini koşturur: kimlik verilmezse korumalı uç 401 döner ve kuru
|
|
492
476
|
// koşu aracı tam gerektiği anda kullanılamaz hâle gelir (09-05 koşusu S-21).
|
|
493
|
-
const payload = await platform.tenantRaw('POST', project, `/microservices/${resolvedApplicationId}/preview`, { environment, body: definition, headers: { ...identityHeaders(
|
|
477
|
+
const payload = await platform.tenantRaw('POST', project, `/microservices/${resolvedApplicationId}/preview`, { environment, body: definition, headers: { ...identityHeaders(asUser, cookies, undefined), ...languageHeader(language, normalized) }, mirrorAuthorizationCookie: true });
|
|
494
478
|
return attachFindings(withResolved(withNormalization(payload, normalized), [...resolver.resolved, ...hydrated]), findings);
|
|
495
479
|
}));
|
|
496
480
|
server.registerTool('microservice_job_history', {
|