@appaflytech/wappa-mcp 0.0.11 → 0.0.13

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 (113) hide show
  1. package/dist/base-components.d.ts +3 -0
  2. package/dist/base-components.d.ts.map +1 -1
  3. package/dist/base-components.js +130 -1
  4. package/dist/base-components.js.map +1 -1
  5. package/dist/client.d.ts +9 -3
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +63 -7
  8. package/dist/client.js.map +1 -1
  9. package/dist/factory.d.ts.map +1 -1
  10. package/dist/factory.js +38 -0
  11. package/dist/factory.js.map +1 -1
  12. package/dist/tools/ai-chat-sessions.d.ts +143 -0
  13. package/dist/tools/ai-chat-sessions.d.ts.map +1 -0
  14. package/dist/tools/ai-chat-sessions.js +144 -0
  15. package/dist/tools/ai-chat-sessions.js.map +1 -0
  16. package/dist/tools/app-users.d.ts +440 -0
  17. package/dist/tools/app-users.d.ts.map +1 -0
  18. package/dist/tools/app-users.js +347 -0
  19. package/dist/tools/app-users.js.map +1 -0
  20. package/dist/tools/component-categories.d.ts +157 -0
  21. package/dist/tools/component-categories.d.ts.map +1 -0
  22. package/dist/tools/component-categories.js +162 -0
  23. package/dist/tools/component-categories.js.map +1 -0
  24. package/dist/tools/components.js +2 -2
  25. package/dist/tools/components.js.map +1 -1
  26. package/dist/tools/countries.d.ts +148 -0
  27. package/dist/tools/countries.d.ts.map +1 -0
  28. package/dist/tools/countries.js +142 -0
  29. package/dist/tools/countries.js.map +1 -0
  30. package/dist/tools/db-routines.d.ts +229 -0
  31. package/dist/tools/db-routines.d.ts.map +1 -0
  32. package/dist/tools/db-routines.js +233 -0
  33. package/dist/tools/db-routines.js.map +1 -0
  34. package/dist/tools/dynamic-entities.d.ts +228 -0
  35. package/dist/tools/dynamic-entities.d.ts.map +1 -1
  36. package/dist/tools/dynamic-entities.js +292 -14
  37. package/dist/tools/dynamic-entities.js.map +1 -1
  38. package/dist/tools/entities.d.ts +119 -0
  39. package/dist/tools/entities.d.ts.map +1 -1
  40. package/dist/tools/entities.js +266 -38
  41. package/dist/tools/entities.js.map +1 -1
  42. package/dist/tools/error-logs.d.ts +67 -0
  43. package/dist/tools/error-logs.d.ts.map +1 -0
  44. package/dist/tools/error-logs.js +74 -0
  45. package/dist/tools/error-logs.js.map +1 -0
  46. package/dist/tools/general.d.ts.map +1 -1
  47. package/dist/tools/general.js +218 -0
  48. package/dist/tools/general.js.map +1 -1
  49. package/dist/tools/layouts.d.ts +21 -0
  50. package/dist/tools/layouts.d.ts.map +1 -1
  51. package/dist/tools/layouts.js +19 -0
  52. package/dist/tools/layouts.js.map +1 -1
  53. package/dist/tools/operations.d.ts +184 -0
  54. package/dist/tools/operations.d.ts.map +1 -0
  55. package/dist/tools/operations.js +217 -0
  56. package/dist/tools/operations.js.map +1 -0
  57. package/dist/tools/page-entities.d.ts +522 -0
  58. package/dist/tools/page-entities.d.ts.map +1 -0
  59. package/dist/tools/page-entities.js +535 -0
  60. package/dist/tools/page-entities.js.map +1 -0
  61. package/dist/tools/pages.d.ts +226 -0
  62. package/dist/tools/pages.d.ts.map +1 -1
  63. package/dist/tools/pages.js +194 -0
  64. package/dist/tools/pages.js.map +1 -1
  65. package/dist/tools/plugins.d.ts +230 -0
  66. package/dist/tools/plugins.d.ts.map +1 -0
  67. package/dist/tools/plugins.js +218 -0
  68. package/dist/tools/plugins.js.map +1 -0
  69. package/dist/tools/queries.d.ts +266 -0
  70. package/dist/tools/queries.d.ts.map +1 -1
  71. package/dist/tools/queries.js +288 -0
  72. package/dist/tools/queries.js.map +1 -1
  73. package/dist/tools/query-categories.d.ts +192 -0
  74. package/dist/tools/query-categories.d.ts.map +1 -0
  75. package/dist/tools/query-categories.js +204 -0
  76. package/dist/tools/query-categories.js.map +1 -0
  77. package/dist/tools/regions.d.ts +148 -0
  78. package/dist/tools/regions.d.ts.map +1 -0
  79. package/dist/tools/regions.js +148 -0
  80. package/dist/tools/regions.js.map +1 -0
  81. package/dist/tools/roles.d.ts +284 -0
  82. package/dist/tools/roles.d.ts.map +1 -0
  83. package/dist/tools/roles.js +291 -0
  84. package/dist/tools/roles.js.map +1 -0
  85. package/dist/tools/settings.d.ts +160 -0
  86. package/dist/tools/settings.d.ts.map +1 -0
  87. package/dist/tools/settings.js +187 -0
  88. package/dist/tools/settings.js.map +1 -0
  89. package/dist/tools/showcases.d.ts +184 -0
  90. package/dist/tools/showcases.d.ts.map +1 -0
  91. package/dist/tools/showcases.js +179 -0
  92. package/dist/tools/showcases.js.map +1 -0
  93. package/dist/tools/storage.d.ts +297 -0
  94. package/dist/tools/storage.d.ts.map +1 -0
  95. package/dist/tools/storage.js +302 -0
  96. package/dist/tools/storage.js.map +1 -0
  97. package/dist/tools/system-tools.d.ts +124 -0
  98. package/dist/tools/system-tools.d.ts.map +1 -0
  99. package/dist/tools/system-tools.js +147 -0
  100. package/dist/tools/system-tools.js.map +1 -0
  101. package/dist/tools/system-variables.d.ts +167 -0
  102. package/dist/tools/system-variables.d.ts.map +1 -0
  103. package/dist/tools/system-variables.js +176 -0
  104. package/dist/tools/system-variables.js.map +1 -0
  105. package/dist/tools/users.d.ts +266 -0
  106. package/dist/tools/users.d.ts.map +1 -0
  107. package/dist/tools/users.js +235 -0
  108. package/dist/tools/users.js.map +1 -0
  109. package/dist/tools/workflows.d.ts +278 -0
  110. package/dist/tools/workflows.d.ts.map +1 -0
  111. package/dist/tools/workflows.js +267 -0
  112. package/dist/tools/workflows.js.map +1 -0
  113. package/package.json +2 -2
@@ -97,6 +97,10 @@ export declare function getDynamicEntityTools(client: WapClient): {
97
97
  type: string;
98
98
  description: string;
99
99
  };
100
+ language: {
101
+ type: string;
102
+ description: string;
103
+ };
100
104
  };
101
105
  required: string[];
102
106
  };
@@ -104,6 +108,7 @@ export declare function getDynamicEntityTools(client: WapClient): {
104
108
  entityId: string;
105
109
  status?: string;
106
110
  columns: unknown[];
111
+ language?: string;
107
112
  }) => Promise<{
108
113
  content: {
109
114
  type: "text";
@@ -133,6 +138,10 @@ export declare function getDynamicEntityTools(client: WapClient): {
133
138
  type: string;
134
139
  description: string;
135
140
  };
141
+ language: {
142
+ type: string;
143
+ description: string;
144
+ };
136
145
  };
137
146
  required: string[];
138
147
  };
@@ -141,6 +150,59 @@ export declare function getDynamicEntityTools(client: WapClient): {
141
150
  id: string;
142
151
  status?: string;
143
152
  columns: unknown[];
153
+ language?: string;
154
+ }) => Promise<{
155
+ content: {
156
+ type: "text";
157
+ text: string;
158
+ }[];
159
+ }>;
160
+ };
161
+ link_many_to_many_records: {
162
+ description: string;
163
+ inputSchema: {
164
+ type: "object";
165
+ properties: {
166
+ entityId: {
167
+ type: string;
168
+ description: string;
169
+ };
170
+ recordId: {
171
+ type: string;
172
+ description: string;
173
+ };
174
+ columnName: {
175
+ type: string;
176
+ description: string;
177
+ };
178
+ links: {
179
+ type: string;
180
+ description: string;
181
+ };
182
+ status: {
183
+ type: string;
184
+ description: string;
185
+ enum: string[];
186
+ };
187
+ extraColumns: {
188
+ type: string;
189
+ description: string;
190
+ };
191
+ language: {
192
+ type: string;
193
+ description: string;
194
+ };
195
+ };
196
+ required: string[];
197
+ };
198
+ handler: (args: {
199
+ entityId: string;
200
+ recordId?: string;
201
+ columnName: string;
202
+ links: unknown[];
203
+ status?: string;
204
+ extraColumns?: unknown[];
205
+ language?: string;
144
206
  }) => Promise<{
145
207
  content: {
146
208
  type: "text";
@@ -314,5 +376,171 @@ export declare function getDynamicEntityTools(client: WapClient): {
314
376
  }[];
315
377
  }>;
316
378
  };
379
+ bulk_create_dynamic_entity_localizations: {
380
+ description: string;
381
+ inputSchema: {
382
+ type: "object";
383
+ properties: {
384
+ entityId: {
385
+ type: string;
386
+ description: string;
387
+ };
388
+ sourceLanguageId: {
389
+ type: string;
390
+ description: string;
391
+ };
392
+ useTranslateApi: {
393
+ type: string;
394
+ description: string;
395
+ };
396
+ };
397
+ required: string[];
398
+ };
399
+ handler: (args: {
400
+ entityId: string;
401
+ sourceLanguageId: string;
402
+ useTranslateApi?: boolean;
403
+ }) => Promise<{
404
+ content: {
405
+ type: "text";
406
+ text: string;
407
+ }[];
408
+ }>;
409
+ };
410
+ get_dynamic_entity_as_query: {
411
+ description: string;
412
+ inputSchema: {
413
+ type: "object";
414
+ properties: {
415
+ entityId: {
416
+ type: string;
417
+ description: string;
418
+ };
419
+ status: {
420
+ type: string;
421
+ description: string;
422
+ enum: string[];
423
+ };
424
+ pageIndex: {
425
+ type: string;
426
+ description: string;
427
+ };
428
+ pageLength: {
429
+ type: string;
430
+ description: string;
431
+ };
432
+ order: {
433
+ type: string;
434
+ description: string;
435
+ };
436
+ isDescending: {
437
+ type: string;
438
+ description: string;
439
+ };
440
+ filters: {
441
+ type: string;
442
+ description: string;
443
+ };
444
+ };
445
+ required: string[];
446
+ };
447
+ handler: (args: {
448
+ entityId: string;
449
+ status?: string;
450
+ pageIndex?: number;
451
+ pageLength?: number;
452
+ order?: string;
453
+ isDescending?: boolean;
454
+ filters?: Record<string, unknown>;
455
+ }) => Promise<{
456
+ content: {
457
+ type: "text";
458
+ text: string;
459
+ }[];
460
+ }>;
461
+ };
462
+ list_dynamic_entity_drafts: {
463
+ description: string;
464
+ inputSchema: {
465
+ type: "object";
466
+ properties: {
467
+ entityId: {
468
+ type: string;
469
+ description: string;
470
+ };
471
+ id: {
472
+ type: string;
473
+ description: string;
474
+ };
475
+ pageIndex: {
476
+ type: string;
477
+ description: string;
478
+ };
479
+ pageLength: {
480
+ type: string;
481
+ description: string;
482
+ };
483
+ };
484
+ required: string[];
485
+ };
486
+ handler: (args: {
487
+ entityId: string;
488
+ id: string;
489
+ pageIndex?: number;
490
+ pageLength?: number;
491
+ }) => Promise<{
492
+ content: {
493
+ type: "text";
494
+ text: string;
495
+ }[];
496
+ }>;
497
+ };
498
+ delete_dynamic_entity_version: {
499
+ description: string;
500
+ inputSchema: {
501
+ type: "object";
502
+ properties: {
503
+ entityId: {
504
+ type: string;
505
+ description: string;
506
+ };
507
+ id: {
508
+ type: string;
509
+ description: string;
510
+ };
511
+ };
512
+ required: string[];
513
+ };
514
+ handler: (args: {
515
+ entityId: string;
516
+ id: string;
517
+ }) => Promise<{
518
+ content: {
519
+ type: "text";
520
+ text: string;
521
+ }[];
522
+ }>;
523
+ };
524
+ get_dynamic_entity_order_info: {
525
+ description: string;
526
+ inputSchema: {
527
+ type: "object";
528
+ properties: {
529
+ entityId: {
530
+ type: string;
531
+ description: string;
532
+ };
533
+ };
534
+ required: string[];
535
+ };
536
+ handler: (args: {
537
+ entityId: string;
538
+ }) => Promise<{
539
+ content: {
540
+ type: "text";
541
+ text: string;
542
+ }[];
543
+ }>;
544
+ };
317
545
  };
318
546
  //# sourceMappingURL=dynamic-entities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-entities.d.ts","sourceRoot":"","sources":["../../src/tools/dynamic-entities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AASzC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAgC3B;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,YAAY,CAAC,EAAE,OAAO,CAAC;SACxB;;;;;;;;;;;;;;;;;;;;;;;wBA+BqB;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAwChC;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,CAAC;SACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAmCqB;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,EAAE,EAAE,MAAM,CAAC;YACX,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,EAAE,OAAO,EAAE,CAAC;SACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4CqB;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,EAAE,EAAE,MAAM,CAAC;YACX,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;SACrB;;;;;;;;;;;;;;;;;;;;;;;wBA0GqB;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;wBAsBhC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA8BhC;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,EAAE,EAAE,MAAM,CAAC;YACX,gBAAgB,EAAE,MAAM,CAAC;YACzB,eAAe,CAAC,EAAE,OAAO,CAAC;SAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA8BqB;YACpB,QAAQ,EAAE,MAAM,CAAC;YACjB,EAAE,EAAE,MAAM,CAAC;YACX,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB;;;;;;;EAmBN"}
1
+ {"version":3,"file":"dynamic-entities.d.ts","sourceRoot":"","sources":["../../src/tools/dynamic-entities.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,60 @@
4
4
  * entityId = the Entity schema GUID (table definition)
5
5
  * id = the individual record GUID
6
6
  */
7
- /** Transforms [{ key, value }] or [{ name, value }] to the API format [{ name, data: { refs: [], value } }] */
8
- const mapColumnsForApi = (columns) => columns.map((col) => ({
9
- name: col.key ?? col.name,
10
- data: { refs: [], value: col.value ?? null },
11
- }));
7
+ /**
8
+ * Maps caller column inputs to the API's `{ name, data }` shape.
9
+ *
10
+ * Three input shapes, distinguished by EXPLICIT signal fields (so a plain
11
+ * scalar — even one whose value is an array, e.g. a multiple Image gallery —
12
+ * is never misclassified):
13
+ *
14
+ * 1. Scalar (default): { key|name, value }
15
+ * → data: { refs: [], value }
16
+ * 2. Single reference: { key|name, refId } (one-to-one / one-to-many)
17
+ * → data: { refs: [refId], value: refId } (refId = referenced RECORD id; null clears)
18
+ * 3. Many-to-many links: { key|name, links: [ ... ] } (one element = one junction/ara-tablo row)
19
+ * → data: [ { type, label, value, refs, columns }, ... ]
20
+ * each link is a record-id string, or { value|ref|id, label?, columns? } where
21
+ * `columns` are per-link extra junction column VALUES ([{ key|name, value }]).
22
+ */
23
+ const mapJunctionColumns = (cols) => Array.isArray(cols)
24
+ ? cols.map((c) => ({
25
+ name: c.key ?? c.name,
26
+ data: { refs: [], value: c.value ?? null },
27
+ }))
28
+ : [];
29
+ const mapLink = (link) => {
30
+ const isObj = link !== null && typeof link === "object";
31
+ const l = (isObj ? link : {});
32
+ const id = isObj ? (l.value ?? l.ref ?? l.id) : link;
33
+ return {
34
+ type: l.type ?? "category",
35
+ label: l.label ?? "",
36
+ value: id ?? null,
37
+ refs: id === undefined || id === null ? [] : [id],
38
+ columns: mapJunctionColumns(l.columns),
39
+ };
40
+ };
41
+ const mapColumnsForApi = (columns) => columns.map((col) => {
42
+ const name = col.key ?? col.name;
43
+ // Many-to-many: explicit `links` array → one junction row per element.
44
+ if (Array.isArray(col.links)) {
45
+ return { name, data: col.links.map(mapLink) };
46
+ }
47
+ // Single reference (one-to-one / one-to-many): explicit `refId`.
48
+ if ("refId" in col) {
49
+ const id = col.refId;
50
+ return {
51
+ name,
52
+ data: {
53
+ refs: id === null || id === undefined ? [] : [id],
54
+ value: id ?? null,
55
+ },
56
+ };
57
+ }
58
+ // Scalar (default — unchanged shape).
59
+ return { name, data: { refs: [], value: col.value ?? null } };
60
+ });
12
61
  export function getDynamicEntityTools(client) {
13
62
  return {
14
63
  // ─── List Records ─────────────────────────────────────
@@ -85,16 +134,23 @@ export function getDynamicEntityTools(client) {
85
134
  // ─── Create Record ────────────────────────────────────
86
135
  create_dynamic_entity_record: {
87
136
  description: `Yeni bir entity kaydı oluşturur.
88
- 'columns': Entity şemasındaki kolonlara göre doldurulacak alanlar.
89
- Her kolon: { key: "kolonAdı", value: "değer" } formatında.
137
+ 'columns': Entity şemasındaki kolonlara göre doldurulacak alanlar. Üç kolon biçimi:
138
+ 1) Normal alan: { "key": "kolonAdı", "value": "değer" }
139
+ 2) Tekil ilişki: { "key": "kolonAdı", "refId": "<hedefKayıtId>" } (birebir / bireçok reference kolonu; hedef ENTITY KAYIT ID'si)
140
+ 3) Çoka çok ilişki: { "key": "kolonAdı", "links": ["<hedefKayıtId1>", { "value": "<hedefKayıtId2>", "columns": [{ "key": "Weight", "value": 5 }] }] }
141
+ - links'teki her eleman ara (junction) tabloda bir satırdır
142
+ - link'in opsiyonel 'columns' alanı = o bağlantıya ait ara tablo EK kolon değerleri
90
143
  'status': "Published" (yayında) veya "Draft" (taslak).
91
144
 
92
145
  Örnek columns:
93
146
  [
94
147
  { "key": "Title", "value": "Merhaba Dünya" },
95
- { "key": "Description", "value": "İçerik..." },
148
+ { "key": "Author", "refId": "a1b2-...-author-record-id" },
149
+ { "key": "Tags", "links": ["tag-id-1", { "value": "tag-id-2", "columns": [{ "key": "Weight", "value": 5 }] }] },
96
150
  { "key": "Order", "value": 0 }
97
- ]`,
151
+ ]
152
+
153
+ ÇOK DİLLİ (localization): 'language' verilirse kayıt o hedef dil için yazılır (Accept-Language). Hem localized MAIN kolonlar hem de çoka çok ARA TABLOSUNDAKİ localized ek kolonlar bu dilde yazılır. Localized ara-tablo kolonunu yazmak için değeri link'in 'columns' dizisine normal şekilde koyman yeterli — backend, entity şemasındaki o sub-kolonun localization bayrağına göre değeri {junction}_Localization tablosuna yönlendirir. Tipik akış: önce varsayılan dilde oluştur, sonra her hedef dil için 'language' ile güncelle.`,
98
154
  inputSchema: {
99
155
  type: "object",
100
156
  properties: {
@@ -106,7 +162,11 @@ Her kolon: { key: "kolonAdı", value: "değer" } formatında.
106
162
  },
107
163
  columns: {
108
164
  type: "array",
109
- description: 'Kolon değerleri: [{ key: "kolonAdı", value: "değer" }]',
165
+ description: 'Kolon değerleri: normal { key, value }; tekil ilişki { key, refId }; çoka çok { key, links:[...] }',
166
+ },
167
+ language: {
168
+ type: "string",
169
+ description: 'Opsiyonel hedef dil (Accept-Language), örn: "en-us". Verilmezse istemcinin varsayılan dili. Localized kolonları ve ara-tablo localized ek kolonlarını bu dilde yazmak için kullanın.',
110
170
  },
111
171
  },
112
172
  required: ["entityId", "columns"],
@@ -115,7 +175,7 @@ Her kolon: { key: "kolonAdı", value: "değer" } formatında.
115
175
  const result = await client.createDynamicEntity(args.entityId, {
116
176
  status: args.status ?? "Published",
117
177
  columns: mapColumnsForApi(args.columns),
118
- });
178
+ }, args.language);
119
179
  return {
120
180
  content: [
121
181
  { type: "text", text: JSON.stringify(result, null, 2) },
@@ -125,7 +185,10 @@ Her kolon: { key: "kolonAdı", value: "değer" } formatında.
125
185
  },
126
186
  // ─── Update Record ────────────────────────────────────
127
187
  update_dynamic_entity_record: {
128
- description: "Mevcut bir entity kaydını günceller. Tüm alanları içeren columns dizisi gönderin.",
188
+ description: `Mevcut bir entity kaydını günceller. Tüm alanları içeren columns dizisi gönderin.
189
+ Kolon biçimleri create_dynamic_entity_record ile aynı: normal { key, value }; tekil ilişki { key, refId }; çoka çok { key, links:[...] }.
190
+ DİKKAT: Bir çoka çok kolonu için gönderilen 'links' o kolonun bağlantılarını TAM olarak değiştirir (listede olmayan eski bağlantılar kaldırılır).
191
+ ÇOK DİLLİ: 'language' verilirse güncelleme o hedef dil için yapılır; localized main kolonlar ve ara-tablo localized ek kolonları o dile yazılır (mevcut çoka çok bağlantısının {junction}_Localization satırı eklenir).`,
129
192
  inputSchema: {
130
193
  type: "object",
131
194
  properties: {
@@ -138,7 +201,11 @@ Her kolon: { key: "kolonAdı", value: "değer" } formatında.
138
201
  },
139
202
  columns: {
140
203
  type: "array",
141
- description: 'Güncellenmiş kolon değerleri: [{ key: "kolonAdı", value: "değer" }]',
204
+ description: 'Güncellenmiş kolon değerleri: normal { key, value }; tekil ilişki { key, refId }; çoka çok { key, links:[...] }',
205
+ },
206
+ language: {
207
+ type: "string",
208
+ description: 'Opsiyonel hedef dil (Accept-Language), örn: "en-us". Localized kolonları/ara-tablo localized ek kolonlarını bu dilde yazmak için kullanın.',
142
209
  },
143
210
  },
144
211
  required: ["entityId", "id", "columns"],
@@ -147,7 +214,71 @@ Her kolon: { key: "kolonAdı", value: "değer" } formatında.
147
214
  const result = await client.updateDynamicEntity(args.entityId, args.id, {
148
215
  status: args.status ?? "Published",
149
216
  columns: mapColumnsForApi(args.columns),
150
- });
217
+ }, args.language);
218
+ return {
219
+ content: [
220
+ { type: "text", text: JSON.stringify(result, null, 2) },
221
+ ],
222
+ };
223
+ },
224
+ },
225
+ // ─── Link Many-to-Many Records (junction / ara tablo) ──
226
+ link_many_to_many_records: {
227
+ description: `Bir kaydın ÇOKA ÇOK (many-to-many) ilişki kolonuna bağlı hedef kayıtları ayarlar — ara (junction) tabloya satır ekler/günceller.
228
+ 'columnName': Kaynak entity'deki reference (type:11, relationType:2) kolonunun adı.
229
+ 'links': Bağlanacak HEDEF kayıt ID'leri. Her eleman ara tabloda bir satırdır:
230
+ - sadece ID: "<hedefKayıtId>"
231
+ - ek kolonlu: { "value": "<hedefKayıtId>", "columns": [{ "key": "Weight", "value": 5 }] }
232
+ 'recordId' verilirse mevcut kayıt güncellenir ve o kolonun bağlantıları TAM olarak bu listeyle değiştirilir (listede olmayanlar kaldırılır → bağlantı silmek için kalan listeyi gönderin, hepsini silmek için links:[]).
233
+ 'recordId' verilmezse yeni bir kayıt oluşturulur; bu durumda zorunlu diğer alanları 'extraColumns' ile gönderin.
234
+ ÇOK DİLLİ ARA TABLO: Ara tablonun LOCALIZED ek kolonu varsa, değeri ilgili link'in 'columns' dizisine koyup 'language' (hedef dil) verin — backend o değeri {junction}_Localization tablosuna ilgili dilde yazar. Önce varsayılan dilde bağla, sonra her dil için 'language' ile tekrar çağır.
235
+ Not: Bu tool, create/update_dynamic_entity_record ile aynı kayıt endpoint'ini kullanan ergonomik bir kısayoldur; ayrı bir junction endpoint'i yoktur (admin-ui ile birebir).`,
236
+ inputSchema: {
237
+ type: "object",
238
+ properties: {
239
+ entityId: {
240
+ type: "string",
241
+ description: "Kaynak entity şema ID (GUID)",
242
+ },
243
+ recordId: {
244
+ type: "string",
245
+ description: "Güncellenecek kayıt ID. Verilmezse yeni kayıt oluşturulur.",
246
+ },
247
+ columnName: {
248
+ type: "string",
249
+ description: "Çoka çok reference kolonunun adı",
250
+ },
251
+ links: {
252
+ type: "array",
253
+ description: 'Hedef kayıt ID listesi: ["id1", { "value": "id2", "columns": [{ "key": "...", "value": ... }] }]. Localized ara-tablo ek kolonu için değeri link\'in columns dizisine koyun + language verin.',
254
+ },
255
+ status: {
256
+ type: "string",
257
+ description: "Kayıt durumu: Published | Draft",
258
+ enum: ["Published", "Draft"],
259
+ },
260
+ extraColumns: {
261
+ type: "array",
262
+ description: 'Yeni kayıt oluştururken ana kaydın diğer kolon değerleri: [{ "key": "...", "value": ... }]',
263
+ },
264
+ language: {
265
+ type: "string",
266
+ description: 'Opsiyonel hedef dil (Accept-Language), örn: "en-us". Ara tablonun localized ek kolonlarını bu dilde yazmak için kullanın.',
267
+ },
268
+ },
269
+ required: ["entityId", "columnName", "links"],
270
+ },
271
+ handler: async (args) => {
272
+ const body = {
273
+ status: args.status ?? "Published",
274
+ columns: mapColumnsForApi([
275
+ { name: args.columnName, links: args.links },
276
+ ...(args.extraColumns ?? []),
277
+ ]),
278
+ };
279
+ const result = args.recordId
280
+ ? await client.updateDynamicEntity(args.entityId, args.recordId, body, args.language)
281
+ : await client.createDynamicEntity(args.entityId, body, args.language);
151
282
  return {
152
283
  content: [
153
284
  { type: "text", text: JSON.stringify(result, null, 2) },
@@ -353,6 +484,153 @@ Her kolon: { key: "kolonAdı", value: "değer" } formatında.
353
484
  };
354
485
  },
355
486
  },
487
+ // ─── Bulk Localizations ───────────────────────────────
488
+ bulk_create_dynamic_entity_localizations: {
489
+ description: "Bir entity'deki tüm kayıtların belirli bir dile toplu çevirisini oluşturur. Opsiyonel olarak otomatik çeviri API kullanır. Sonuç: oluşturulan/atlanan/başarısız kayıt sayıları.",
490
+ inputSchema: {
491
+ type: "object",
492
+ properties: {
493
+ entityId: { type: "string", description: "Entity şema ID (GUID)" },
494
+ sourceLanguageId: {
495
+ type: "string",
496
+ description: 'Kaynak dil kodu (örn: "tr-tr", "en-us")',
497
+ },
498
+ useTranslateApi: {
499
+ type: "boolean",
500
+ description: "Otomatik çeviri API kullanılsın mı?",
501
+ },
502
+ },
503
+ required: ["entityId", "sourceLanguageId"],
504
+ },
505
+ handler: async (args) => {
506
+ const result = await client.request("POST", `/{site}/DynamicEntities/${args.entityId}/bulk-localizations`, {
507
+ sourceLanguageId: args.sourceLanguageId,
508
+ useTranslateApi: args.useTranslateApi,
509
+ });
510
+ return {
511
+ content: [
512
+ { type: "text", text: JSON.stringify(result, null, 2) },
513
+ ],
514
+ };
515
+ },
516
+ },
517
+ // ─── Get As Query ─────────────────────────────────────
518
+ get_dynamic_entity_as_query: {
519
+ description: `Bir entity'nin kayıtlarını query (sorgu) formatında getirir.
520
+ 'entityId': Entity şema ID'si.
521
+ Sonuç, query çıktısına uygun düz yapıda döner. Filtreleme için ek query parametreleri kolon adlarıyla gönderilebilir.`,
522
+ inputSchema: {
523
+ type: "object",
524
+ properties: {
525
+ entityId: { type: "string", description: "Entity şema ID (GUID)" },
526
+ status: {
527
+ type: "string",
528
+ description: "Durum filtresi: Published | Draft | Deleted",
529
+ enum: ["Published", "Draft", "Deleted"],
530
+ },
531
+ pageIndex: { type: "number", description: "Sayfa numarası (0-based)" },
532
+ pageLength: { type: "number", description: "Sayfa boyutu" },
533
+ order: { type: "string", description: "Sıralama alanı" },
534
+ isDescending: { type: "boolean", description: "Azalan sıralama mı?" },
535
+ filters: {
536
+ type: "object",
537
+ description: 'Opsiyonel ek filtreler. Kolon adı -> değer (örn: { "Title": "abc" }) query string olarak eklenir.',
538
+ },
539
+ },
540
+ required: ["entityId"],
541
+ },
542
+ handler: async (args) => {
543
+ const params = {};
544
+ if (args.status)
545
+ params.status = args.status;
546
+ if (args.pageIndex !== undefined)
547
+ params.pageIndex = String(args.pageIndex);
548
+ if (args.pageLength !== undefined)
549
+ params.pageLength = String(args.pageLength);
550
+ if (args.order)
551
+ params.order = args.order;
552
+ if (args.isDescending !== undefined)
553
+ params.isDescending = String(args.isDescending);
554
+ if (args.filters) {
555
+ for (const [k, v] of Object.entries(args.filters)) {
556
+ if (v !== undefined && v !== null)
557
+ params[k] = String(v);
558
+ }
559
+ }
560
+ const result = await client.request("GET", `/{site}/DynamicEntities/${args.entityId}/get-as-query`, undefined, params);
561
+ return {
562
+ content: [
563
+ { type: "text", text: JSON.stringify(result, null, 2) },
564
+ ],
565
+ };
566
+ },
567
+ },
568
+ // ─── List Drafts ──────────────────────────────────────
569
+ list_dynamic_entity_drafts: {
570
+ description: "Bir entity kaydının taslak (draft) versiyonlarını listeler. 'id' canlı kaydın ID'si.",
571
+ inputSchema: {
572
+ type: "object",
573
+ properties: {
574
+ entityId: { type: "string", description: "Entity şema ID (GUID)" },
575
+ id: { type: "string", description: "Kayıt ID (GUID)" },
576
+ pageIndex: { type: "number", description: "Sayfa numarası (0-based)" },
577
+ pageLength: { type: "number", description: "Sayfa boyutu" },
578
+ },
579
+ required: ["entityId", "id"],
580
+ },
581
+ handler: async (args) => {
582
+ const params = {};
583
+ if (args.pageIndex !== undefined)
584
+ params.pageIndex = String(args.pageIndex);
585
+ if (args.pageLength !== undefined)
586
+ params.pageLength = String(args.pageLength);
587
+ const result = await client.request("GET", `/{site}/DynamicEntities/${args.entityId}/${args.id}/drafts`, undefined, params);
588
+ return {
589
+ content: [
590
+ { type: "text", text: JSON.stringify(result, null, 2) },
591
+ ],
592
+ };
593
+ },
594
+ },
595
+ // ─── Delete Version ───────────────────────────────────
596
+ delete_dynamic_entity_version: {
597
+ description: "Bir entity kaydının belirli bir versiyonunu (history) siler. 'id' versiyon (history) ID'sidir.",
598
+ inputSchema: {
599
+ type: "object",
600
+ properties: {
601
+ entityId: { type: "string", description: "Entity şema ID (GUID)" },
602
+ id: { type: "string", description: "Silinecek versiyon (history) ID" },
603
+ },
604
+ required: ["entityId", "id"],
605
+ },
606
+ handler: async (args) => {
607
+ const result = await client.request("DELETE", `/{site}/DynamicEntities/${args.entityId}/versions/${args.id}`);
608
+ return {
609
+ content: [
610
+ { type: "text", text: JSON.stringify(result, null, 2) },
611
+ ],
612
+ };
613
+ },
614
+ },
615
+ // ─── Order Info ───────────────────────────────────────
616
+ get_dynamic_entity_order_info: {
617
+ description: "Bir entity'nin sıralama (order) bilgisini getirir; yeni kayıt için maksimum sıra değeri gibi bilgileri döner.",
618
+ inputSchema: {
619
+ type: "object",
620
+ properties: {
621
+ entityId: { type: "string", description: "Entity şema ID (GUID)" },
622
+ },
623
+ required: ["entityId"],
624
+ },
625
+ handler: async (args) => {
626
+ const result = await client.request("GET", `/{site}/DynamicEntities/${args.entityId}/order-info`);
627
+ return {
628
+ content: [
629
+ { type: "text", text: JSON.stringify(result, null, 2) },
630
+ ],
631
+ };
632
+ },
633
+ },
356
634
  };
357
635
  }
358
636
  //# sourceMappingURL=dynamic-entities.js.map