@appaflytech/zeyrek-ai-mcp 0.0.4 → 0.0.6
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 +8 -3
- package/.env.production.example +2 -0
- package/README.md +229 -193
- package/dist/config.js +20 -2
- package/dist/knowledge/backendConstraints.js +897 -0
- package/dist/knowledge/componentCatalog.js +196 -42
- package/dist/knowledge/coverage.js +43 -0
- package/dist/knowledge/flowGuards.js +30 -0
- package/dist/knowledge/guideSections.js +49 -0
- package/dist/knowledge/hydrate.js +97 -0
- package/dist/knowledge/languageCodes.js +36 -0
- package/dist/knowledge/languages.js +105 -0
- package/dist/knowledge/layoutSummary.js +10 -0
- package/dist/knowledge/localization.js +51 -0
- package/dist/knowledge/normalize.js +449 -16
- package/dist/knowledge/outlines.js +136 -12
- package/dist/knowledge/propTypes.js +80 -0
- package/dist/knowledge/rules.js +618 -43
- package/dist/knowledge/schemaGuard.js +199 -0
- package/dist/knowledge/styleResolve.js +63 -4
- package/dist/observability/trace.js +27 -3
- package/dist/platform/errors.js +46 -4
- package/dist/platform/http.js +33 -4
- package/dist/platform/patch.js +27 -0
- package/dist/platform/refs.js +104 -0
- package/dist/platform/responses.js +9 -2
- package/dist/platform/screenshot.js +527 -16
- package/dist/platform/secrets.js +40 -0
- package/dist/platform/tokenVault.js +89 -0
- package/dist/platform/writeDiff.js +281 -0
- package/dist/resources/examples/layout-app-shell.json +1 -1
- package/dist/resources/examples/microservice-table-list.json +2 -4
- package/dist/resources/examples/page-dynamic-form.json +2 -2
- package/dist/resources/examples/page-flex-sections.json +99 -0
- package/dist/resources/examples/page-sign-in.json +3 -2
- package/dist/resources/guides/component.md +69 -8
- package/dist/resources/guides/entity.md +404 -16
- package/dist/resources/guides/expressions.md +44 -2
- package/dist/resources/guides/external-component.md +9 -0
- package/dist/resources/guides/getting-started.md +77 -7
- package/dist/resources/guides/layout.md +53 -10
- package/dist/resources/guides/microservice.md +226 -13
- package/dist/resources/guides/middleware.md +89 -1
- package/dist/resources/guides/page.md +383 -46
- package/dist/resources/guides/translation.md +126 -8
- package/dist/resources/guides/view.md +16 -1
- package/dist/resources/guides/workflow.md +198 -27
- package/dist/resources/knowledge.js +5 -0
- package/dist/resources/rules.js +27 -0
- package/dist/resources/schema-fingerprint.json +8 -0
- package/dist/resources/schemas/CreateBulkRowCommand.json +33 -0
- package/dist/resources/schemas/CreateDatasourceCommand.json +15 -6
- package/dist/resources/schemas/CreateDiscoveredEntitiesCommand.json +19 -8
- package/dist/resources/schemas/CreateEntityCommand.json +52 -12
- package/dist/resources/schemas/CreateMicroserviceCommand.json +26 -2
- package/dist/resources/schemas/CreateQueryCommand.json +56 -3
- package/dist/resources/schemas/CreateRowCommand.json +38 -0
- package/dist/resources/schemas/CreateViewCommand.json +13 -10
- package/dist/resources/schemas/CreateWorkflowCommand.json +95 -14
- package/dist/resources/schemas/GetRowsQuery.json +3 -0
- package/dist/resources/schemas/PreviewMicroserviceCommand.json +16 -0
- package/dist/resources/schemas/PreviewQueryCommand.json +5 -2
- package/dist/resources/schemas/PreviewWorkflowCommand.json +34 -9
- package/dist/resources/schemas/StepDto.json +23 -3
- package/dist/resources/schemas/UpdateBulkRowCommand.json +33 -0
- package/dist/resources/schemas/UpdateDatasourceCommand.json +15 -6
- package/dist/resources/schemas/UpdateEntityCommand.json +49 -10
- package/dist/resources/schemas/UpdateMicroserviceCommand.json +28 -3
- package/dist/resources/schemas/UpdateQueryCommand.json +13 -3
- package/dist/resources/schemas/UpdateRowCommand.json +40 -0
- package/dist/resources/schemas/UpdateViewCommand.json +15 -10
- package/dist/resources/schemas/UpdateWorkflowCommand.json +95 -14
- package/dist/server.js +4 -0
- package/dist/tools/access.js +3 -3
- package/dist/tools/applications.js +1 -1
- package/dist/tools/automations.js +63 -30
- package/dist/tools/common.js +39 -0
- package/dist/tools/components.js +16 -7
- package/dist/tools/datasources.js +83 -21
- package/dist/tools/deployments.js +34 -2
- package/dist/tools/dtos.js +25 -12
- package/dist/tools/entities.js +113 -28
- package/dist/tools/externalComponents.js +9 -3
- package/dist/tools/files.js +20 -6
- package/dist/tools/flows.js +110 -11
- package/dist/tools/folders.js +7 -2
- package/dist/tools/globalFunctions.js +63 -0
- package/dist/tools/layouts.js +103 -29
- package/dist/tools/microservices.js +229 -38
- package/dist/tools/organizations.js +5 -6
- package/dist/tools/pages.js +365 -100
- package/dist/tools/platformInfo.js +152 -11
- package/dist/tools/projects.js +183 -33
- package/dist/tools/queries.js +32 -10
- package/dist/tools/rows.js +159 -45
- package/dist/tools/screenWrite.js +59 -0
- package/dist/tools/screens.js +28 -0
- package/dist/tools/translations.js +24 -8
- package/dist/tools/views.js +20 -10
- package/dist/tools/workflows.js +33 -16
- package/package.json +6 -3
|
@@ -7,6 +7,12 @@ kestirmeden reddetmek (auth guard), (2) isteğin devamında kullanılacak **değ
|
|
|
7
7
|
istenen her uca/sayfaya bağlanır. Buradaki kurallar backend kodundan ve qm projesinin canlı
|
|
8
8
|
kayıtlarından doğrulandı.
|
|
9
9
|
|
|
10
|
+
> **Middleware `microservice_debug` ağacında görünmez.** `executionItems` yalnız ucun kendi
|
|
11
|
+
> adımlarını izler; middleware ucun ÖNÜNDE ayrı bir workflow olarak koşar. Gateway bu boşluğu
|
|
12
|
+
> yanıta `middlewares` alanı ekleyerek kapatır (uca bağlı middleware workflow'ları, adım
|
|
13
|
+
> özetiyle) — kapı 200 dönerken bile açık kalmış olabilir, adımları oradan oku (ölçüm: 09-04
|
|
14
|
+
> koşusu Y-04, Y-03).
|
|
15
|
+
|
|
10
16
|
**Önce "gerekli mi?" sorusu.** Middleware kurulum listesinin zorunlu maddesi değildir: oturum
|
|
11
17
|
kavramı olmayan bir üründe auth middleware'i, ayar tablosu olmayan bir üründe setter gereksizdir
|
|
12
18
|
(karar tablosu: `platform_guide('getting-started')`). Buna karşılık **kimlik kurduysan eksiksiz
|
|
@@ -249,11 +255,35 @@ qm kanıtı: `sy-users-get-my-profile` (`id eq user.id`), `qm-document-revision-
|
|
|
249
255
|
değil, middleware değişkenidir. (Sayfalardaki sabit `patient_id` benzeri geçici çözümlerin
|
|
250
256
|
kalıcı hâli de bu.)
|
|
251
257
|
|
|
258
|
+
## Tarif 3c — Agregasyon (query kaynaklı) ucun kapsaması: sorguyu WORKFLOW'dan çağır
|
|
259
|
+
|
|
260
|
+
Tarif 3 **table kaynaklı** uçlar içindir; expression filtresi orada vardır. Bir KPI/rapor ucu
|
|
261
|
+
ham SQL istediği için query kaynaklıdır ve o yolda expression yoktur: kayıtlı sorgunun
|
|
262
|
+
parametreleri **yalnız çağrıdan** (body → query-string → header) bağlanır, `user` oraya hiç
|
|
263
|
+
girmez. Kapsamı gövdeye koyarsan çağıran başkasının kapsamını yazabilir — 2026-09-07'de ölçüldü:
|
|
264
|
+
middleware `OWNER-A` kimliğini kurmuşken gövdeye `OWNER-B` yazan çağrı `OWNER-B`'nin verisini
|
|
265
|
+
döndürdü.
|
|
266
|
+
|
|
267
|
+
Kapsam bir katman yukarıda kurulur:
|
|
268
|
+
|
|
269
|
+
1. Sorguyu kapsam parametresiyle kaydet (`… WHERE company_id = @company_id`).
|
|
270
|
+
2. Bir `type: 'workflow'` akışı aç: start → **query adımı** → response. Adımın bağlaması
|
|
271
|
+
`rule.expression`'da: `{ company_id: user.company_id, from: input.from }` — kapsam
|
|
272
|
+
middleware'den, kalan filtreler gövdeden.
|
|
273
|
+
3. Ucu `source: 'workflow'` + `middlewareIds` dolu olarak kur.
|
|
274
|
+
|
|
275
|
+
Ölçüm: gövdeye kasten yanlış `company_id` yazıldığında yanıt değişmedi; `middlewareIds` boş
|
|
276
|
+
bırakıldığında akış `500 JavaScriptException: user is not defined` verdi. Reçetenin tamamı
|
|
277
|
+
`platform_guide('microservice')` §"Kimlik kapsaması × uç kaynağı", bağlamanın yazım tuzağı
|
|
278
|
+
`platform_guide('workflow')` §"Query adımı".
|
|
279
|
+
|
|
252
280
|
## Tuzaklar
|
|
253
281
|
|
|
254
282
|
- Expression'daki değişken adı, bağlı middleware'lerden birinin kurduğu adla **birebir**
|
|
255
283
|
eşleşmeli — eşleşmezse runtime'da `user is not defined` 500'ü. Gateway MS-011 uyarır:
|
|
256
|
-
`user.` okuyan expression varken `middlewareIds` boşsa warn alırsın.
|
|
284
|
+
`user.` okuyan expression varken `middlewareIds` boşsa warn alırsın. **Aynı 500'ü workflow
|
|
285
|
+
kaynaklı uçta gateway GÖREMEZ** (uçtan görünen tek şey `workflowId`'dir): `user.*` okuyan bir
|
|
286
|
+
akışı bağladığın uçta `middlewareIds`'i doldurmayı sen garanti edeceksin.
|
|
257
287
|
- `set-user` adı sabittir; ikinci kullanıcı değişkeni gerekiyorsa `variable` step'i kullan.
|
|
258
288
|
- Middleware'i `workflow_preview` ile test etmek sınırlıdır (HTTP bağlamı preview'da yoktur);
|
|
259
289
|
gerçek doğrulama, middleware'i bağladığın ucu `microservice_execute` ile çağırmaktır —
|
|
@@ -265,6 +295,17 @@ kalıcı hâli de bu.)
|
|
|
265
295
|
token'ını KOYMAZ, istek tamamen verdiğin kimlikle gider. Tarayıcı yolunu test etmek için
|
|
266
296
|
token'ı cookie header'ıyla da geçebilirsin (`headers: { Cookie: '<ad>=<token>' }`).
|
|
267
297
|
|
|
298
|
+
## Ön koşul: uygulamanın kullanıcısı olmalı
|
|
299
|
+
|
|
300
|
+
Middleware bağlamadan önce `users` tablosunda satır olduğundan emin ol — `row_list('users')` tek
|
|
301
|
+
çağrı. Yeni projede o tablo **boş** gelir ve Studio operatörü uygulamanın kullanıcısı değildir;
|
|
302
|
+
kapı bağlanınca her istek 401 döner ve bu ancak sayfa boş açılınca fark edilir (09-02 ve 09-04
|
|
303
|
+
koşularında ikisinde de yaşandı).
|
|
304
|
+
|
|
305
|
+
İlk kullanıcıyı açmanın desteklenen tek yolu bootstrap desenidir:
|
|
306
|
+
`platform_guide('getting-started')` §"İlk kullanıcıyı kim açar?". Kısa yol arama — bakım uçları
|
|
307
|
+
(`Sync*`) ürün yüzeyinin parçası değildir ve gateway onları araç olarak yayınlamaz.
|
|
308
|
+
|
|
268
309
|
## Korumalı bir ucu TEST ederken: token ÇEREZDEN okunur
|
|
269
310
|
|
|
270
311
|
`microservice_execute` ile middleware'li bir ucu denerken `Authorization: Bearer <token>` vermek
|
|
@@ -279,3 +320,50 @@ headers: { "Cookie": "ANKET_Token=<token>" } → 200
|
|
|
279
320
|
Token'ı önce giriş ucundan al (`microservice_execute` ile `giris`), sonra `Cookie` başlığıyla
|
|
280
321
|
korumalı ucu çağır. Çerez adı middleware'in `cookie.<ad>` ifadesindedir; `workflow_get` ile oku,
|
|
281
322
|
tahmin etme. **401 alman middleware'in çalıştığının kanıtıdır** — uç bozuk değildir.
|
|
323
|
+
|
|
324
|
+
## Korumalı SAYFAYI görsel doğrulama — jeton bağlama hiç girmeden
|
|
325
|
+
|
|
326
|
+
Giriş ucunun yanıtındaki jeton gateway tarafından maskelenir (`access_token: "***"`), yani jetonu
|
|
327
|
+
okuyup elle taşıyamazsın — ve taşımaya çalışmak uygulamanın yanıt sözleşmesini geçici olarak
|
|
328
|
+
bozmak demektir (ölçüm 2026-09-04, benchmark 4. koşu). Doğru yol dört adımdır:
|
|
329
|
+
|
|
330
|
+
1. `microservice_execute` ile giriş ucunu çağır. Yanıtta jeton `***`, ama `tokenRefs` alanında
|
|
331
|
+
maskelenen her JWT için kısa ömürlü bir referans döner: `{ "body.access_token": "tok_…" }`.
|
|
332
|
+
2. `page_screenshot` (ya da `page_runtime_get`) çağrısına `asUser: "tok_…"` ver. Gateway referansı
|
|
333
|
+
kendi içinde çözer; jeton ne yanıta ne günlüğe girer. Referans 15 dakika geçerlidir, süresi
|
|
334
|
+
dolarsa çağrı **hata verir** — sessizce kimliksiz isteğe düşmez.
|
|
335
|
+
3. Uygulamanın kendi oturum çerezi ayrı bir addaysa (`cookie.CORE_Token` gibi) onu
|
|
336
|
+
`cookies: { "CORE_Token": "…" }` ile ekle; `asUser` her zaman `NG_AccessToken` adıyla taşınır.
|
|
337
|
+
4. Kapının gerçekten kapalı olduğunu `page_runtime_get(anonymous: true)` ile kanıtla: beklenen
|
|
338
|
+
sonuç `middlewareBlocked: true` + 401'dir.
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
## Korumalı ucu teşhis etmek: `asUser`
|
|
342
|
+
|
|
343
|
+
Bir uca `middlewareIds` bağladığın anda `microservice_execute`, `microservice_preview` ve
|
|
344
|
+
`microservice_debug` gateway'in **servis jetonuyla** gider ve o jeton uygulamanın kendi
|
|
345
|
+
`users` tablosuna çözülmez — üçü de 401 döner. Ölçüldü 2026-09-05: agregasyonlar korumaya
|
|
346
|
+
alındıktan sonra kuru koşu ve adım adım teşhis araçlarının ikisi de kullanılamaz hâle geldi.
|
|
347
|
+
|
|
348
|
+
Üçü de artık `asUser` (ve gerekiyorsa `cookies`) alır ve jetonu **hem** `Authorization` başlığında
|
|
349
|
+
**hem** `NG_AccessToken` çerezinde taşır — middleware jetonu çerezden okuduğu için tek kanal
|
|
350
|
+
yetmiyordu:
|
|
351
|
+
|
|
352
|
+
```jsonc
|
|
353
|
+
// 1) uygulamanın kendi giriş ucunu anonim çağır, jeton referansını al
|
|
354
|
+
{ "tool": "microservice_execute", "application": "<app>", "microservice": "sign-in",
|
|
355
|
+
"anonymous": true, "body": { "email": "…", "password": "…" } }
|
|
356
|
+
// → tokenRefs: { "body.access_token": "tok_…" } (jeton hiç görünmez, 15 dk geçerli)
|
|
357
|
+
|
|
358
|
+
// 2) korumalı ucu O KİMLİKLE çalıştır
|
|
359
|
+
{ "tool": "microservice_debug", "application": "<app>", "microservice": "funnel",
|
|
360
|
+
"asUser": "tok_…", "body": { … } }
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Uygulaman jetonu kendi çerez adından okuyorsa (`CORE_Token` gibi) `cookies: { CORE_Token: "<jwt>" }`
|
|
364
|
+
ver. `anonymous: true` ile `asUser` birlikte verilemez — biri kimliksiz isteği, diğeri belirli bir
|
|
365
|
+
üyenin kimliğiyle atılan isteği ister.
|
|
366
|
+
|
|
367
|
+
`microservice_debug` yanıtındaki `middlewareNote` artık gerçeği söyler: middleware koştu ve
|
|
368
|
+
geçirdi mi, yoksa isteği kesti mi. Not eskiden ucun LİSTE kaydına bakıyordu ve liste DTO'su
|
|
369
|
+
`middlewareIds` taşımadığı için bağlı bir uçta bile "bağlı değil" diyordu.
|