@appaflytech/zeyrek-ai-mcp 0.0.45 → 0.0.46

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.
@@ -0,0 +1,1520 @@
1
+ {
2
+ "_meta": {
3
+ "synthetic": true,
4
+ "note": "Ağsızken fark göstermeyen mobil uygulama (giriş, liste, ekleme, çıkış): okuma son yanıttan, yazma cihaz kuyruğundan, ekran ve uyarılar çevrimiçiyle aynı. Mini Not'ta (lokal, 2026-10-22) iPhone'da uçak kipiyle kanıtlanan desenin kimliksiz hâli. Akışlar mobil profilden ve kendi lint kurallarından bulgusuz geçer (test/mobile-rules.test.ts).",
5
+ "pairsWith": "mobile-offline-list (önbellek işaretini GÖSTEREN liste), mobile-offline-queue (kuyruğu GÖSTEREN yazma), middleware-authenticate (kimlik kapısı), page-sign-in (web girişi)",
6
+ "sourceRef": "platform_guide('page') §Kural 1g-4 'Ağsızken fark göstermeyen uygulama'; FLOW-043; FLOW-044; MOB-033; kök docs/adr/0022, 0023, 0024 (taslak), 0025 (taslak), 0026"
7
+ },
8
+ "_rules": {
9
+ "setting": "application_update properties.mobile.offline = { data: true, banner: false }: veri önbelleği açık, kabuğun 'Çevrimdışı · son güncelleme' bandı kapalı (kök ADR 0026). Gövde REPLACE — application_get'teki properties'in tamamı aynen gönderilir.",
10
+ "reads": "Okuyan uç GET (tablo get, isRaw: false); uç filtreleri ve adım parametreleri source: 'query-string' (GET'te gövde gitmez). Önbellek yalnız GET okumayı saklar: POST ile okuyan adım ağsızken kayıttan dönemez, hata yoluna düşer — gateway bunu FLOW-044 ile uyarır (yöntem servis tanımındandır, adıma yazılan saklanmaz). Kayıttan dönen yanıt başarı yolundan sürer; uyarı göstermeyin.",
11
+ "writes": "Yazan uç offlineWritable: true; akışın microservice adımında queued dalı always ile AYNI adıma bağlı: ağsız ekleme de çevrimiçi ekleme gibi biter, ayrı uyarı yok. Bağlantı gelince kayıt aynı Idempotency-Key ile bir kez gönderilir. error dalı yalnız çevrimiçi reddi uyarır; kuyruktaki kayıt sonradan reddedilirse (4xx, 7 günde expired) bu akışa dönmez — Device.offline.rejected ile gösterin, Page.offline.resolve(id, 'retry' | 'discard') ile karar verdirin (bu örnek göstermez: bilinçli ödünleşim).",
12
+ "list": "Liste = sunucunun yanıtı (ağsızken son okunan) + Page.offline.list()'teki status === 'pending' kayıtlar (service = yazma ucunun slug'ı, parameters'tan alan). Reddedilen kayıt (status 'rejected') listeye katılmaz. Ağ yokluğu hata metni göstermez: tx_liste_hata yalnız Steps.<okuma>.error && !error.network iken görünür.",
13
+ "lock": "Yazan düğme istek süresince isLoading + isDisabled. Kilitsiz düğmede hızlı ikinci dokunuş YENİ bir istek ve yeni bir Idempotency-Key'dir — sunucu ikisini de uygular (ölçüldü: 1,6 sn'de üç dokunuş, üç kayıt). Kilit her dalın sonunda (always, queued, error) açılır.",
14
+ "landing": "Açılış sayfası korumasız giriş ekranıdır; kalıcı state.app.oturumVar (storage: device) true ise mount akışı listeye replace ile geçer. Giriş işareti yazar, çıkış siler. Geçici çare: korumalı açılış sayfası ağsız ilk açılışta çizilemiyor (kök ADR 0024 taslak) ve kabuk bilgisi yokken middleware reddi girişe yönlenmiyor (zeyrek-frontend ARC-342). Mağaza derlemesinde açılış manifestin landingPageSlug'ıdır.",
15
+ "refresh": "Liste scroll-view refreshable + refresh olayı aynı yükleme akışına bağlı: bağlantı dönünce açık ekranın mount akışı kendiliğinden koşmaz (kök ADR 0025 taslak). Kuyruk gönderilince kayıt artık bekleyen değildir ve önbellekteki eski listede de yoktur — kullanıcı aşağı çekene kadar listeden düşer; ADR 0025 kapanınca kalkar.",
16
+ "preview": "Studio önizlemesi, /dev ve page_screenshot önbellek ve kuyruk KULLANMAZ: page_screenshot ağı kesemez, ağsız davranış yalnız cihazda (uçak kipi) görülür. Ekran açıkken değişen akış ekran yeniden açılınca etkindir.",
17
+ "notWhere": "Kuyruktaki kayda bağlı ikinci işlem (dönen kimlikle yönlendirme) çevrimdışıyken koşamaz; o akışlara queued dalı vermeyin. Giriş ve hiç açılmamış ekran ağ ister — fark yalnız orada görünür."
18
+ },
19
+ "applicationUpdateArgs": {
20
+ "properties": {
21
+ "...": "<application_get'teki properties'in öteki anahtarları — gövde REPLACE, hepsi aynen gönderilir>",
22
+ "mobile": {
23
+ "...": "<mevcut properties.mobile anahtarları (tabs, transition) aynen>",
24
+ "offline": {
25
+ "data": true,
26
+ "banner": false
27
+ }
28
+ }
29
+ }
30
+ },
31
+ "variableCreateArgs": {
32
+ "variables": [
33
+ {
34
+ "key": "oturumVar",
35
+ "value": false,
36
+ "storage": "device"
37
+ }
38
+ ]
39
+ },
40
+ "microservices": [
41
+ {
42
+ "role": "okuma",
43
+ "definition": {
44
+ "name": "not-listesi",
45
+ "slug": "not-listesi",
46
+ "url": "not-listesi",
47
+ "description": "Oturumdaki kullanıcının notları; GET olduğu için cihazda veri önbelleğine girer.",
48
+ "type": "rest-api",
49
+ "httpMethod": "get",
50
+ "source": "table",
51
+ "returnType": "flat",
52
+ "isReturnSchemaArray": true,
53
+ "entityId": "<not entity id>",
54
+ "middlewareIds": [
55
+ "<auth middleware id>"
56
+ ],
57
+ "sourceParameters": {
58
+ "operation": "get",
59
+ "entityId": "<not entity id>",
60
+ "alias": "not",
61
+ "isSingle": false,
62
+ "joins": [],
63
+ "filters": [
64
+ {
65
+ "alias": "not",
66
+ "fieldSlug": "kullanici",
67
+ "operator": "eq",
68
+ "source": "expression",
69
+ "value": "user.id",
70
+ "filterType": "single",
71
+ "isRequired": true
72
+ }
73
+ ],
74
+ "selectFields": [
75
+ {
76
+ "alias": "not",
77
+ "fieldSlug": "id"
78
+ },
79
+ {
80
+ "alias": "not",
81
+ "fieldSlug": "metin"
82
+ },
83
+ {
84
+ "alias": "not",
85
+ "fieldSlug": "olusturma"
86
+ }
87
+ ],
88
+ "sort": {
89
+ "name": "sortField",
90
+ "type": "sortType",
91
+ "source": "query-string"
92
+ },
93
+ "limit": {
94
+ "name": "limit",
95
+ "offset": "offset",
96
+ "source": "query-string"
97
+ }
98
+ }
99
+ }
100
+ },
101
+ {
102
+ "role": "yazma",
103
+ "definition": {
104
+ "name": "not-ekle",
105
+ "slug": "not-ekle",
106
+ "url": "not-ekle",
107
+ "description": "Oturumdaki kullanıcıya not ekler; ağsızken cihaz kuyruğundan gelebilir, aynı Idempotency-Key bir kez uygulanır.",
108
+ "type": "rest-api",
109
+ "httpMethod": "post",
110
+ "source": "table",
111
+ "returnType": "flat",
112
+ "entityId": "<not entity id>",
113
+ "offlineWritable": true,
114
+ "middlewareIds": [
115
+ "<auth middleware id>"
116
+ ],
117
+ "sourceParameters": {
118
+ "operation": "create",
119
+ "entityId": "<not entity id>",
120
+ "alias": "not",
121
+ "isSingle": true,
122
+ "joins": [],
123
+ "filters": [],
124
+ "selectFields": [],
125
+ "fields": [
126
+ {
127
+ "fieldSlug": "metin",
128
+ "source": "body",
129
+ "value": "metin"
130
+ },
131
+ {
132
+ "fieldSlug": "kullanici",
133
+ "source": "expression",
134
+ "value": "user.id"
135
+ },
136
+ {
137
+ "fieldSlug": "olusturma",
138
+ "source": "expression",
139
+ "value": "new Date().toISOString()"
140
+ }
141
+ ],
142
+ "returnFields": [
143
+ {
144
+ "alias": "not",
145
+ "fieldSlug": "id"
146
+ }
147
+ ],
148
+ "sort": {
149
+ "name": "sortField",
150
+ "type": "sortType",
151
+ "source": "query-string"
152
+ },
153
+ "limit": {
154
+ "name": "limit",
155
+ "offset": "offset",
156
+ "source": "query-string"
157
+ }
158
+ }
159
+ }
160
+ }
161
+ ],
162
+ "pages": [
163
+ {
164
+ "pageCreateArgs": {
165
+ "name": "Giriş",
166
+ "slug": "giris",
167
+ "middlewareIds": []
168
+ },
169
+ "schemaPatchOps": [
170
+ {
171
+ "op": "add_component",
172
+ "parent": "page_container",
173
+ "component": {
174
+ "elementId": "sa_giris",
175
+ "name": "sa_giris",
176
+ "type": "safe-area",
177
+ "kind": "component",
178
+ "props": {
179
+ "edges": {
180
+ "type": "static",
181
+ "data": "bottom"
182
+ },
183
+ "direction": {
184
+ "type": "static",
185
+ "data": "column"
186
+ },
187
+ "horizontalAlign": {
188
+ "type": "static",
189
+ "data": "stretch"
190
+ },
191
+ "gap": {
192
+ "type": "static",
193
+ "data": "medium"
194
+ }
195
+ },
196
+ "appearance": {
197
+ "heightType": "auto",
198
+ "widthType": "fill",
199
+ "marginType": "none"
200
+ },
201
+ "blocks": [],
202
+ "events": [],
203
+ "validations": [],
204
+ "stateBindings": [],
205
+ "children": [
206
+ {
207
+ "elementId": "in_email",
208
+ "name": "in_email",
209
+ "type": "textinput",
210
+ "kind": "component",
211
+ "props": {
212
+ "label": {
213
+ "type": "static",
214
+ "data": "E-posta"
215
+ },
216
+ "keyboardType": {
217
+ "type": "static",
218
+ "data": "email"
219
+ },
220
+ "autoComplete": {
221
+ "type": "static",
222
+ "data": "email"
223
+ }
224
+ },
225
+ "appearance": {
226
+ "heightType": "auto",
227
+ "widthType": "fill",
228
+ "marginType": "none"
229
+ },
230
+ "blocks": [],
231
+ "events": [],
232
+ "validations": [],
233
+ "stateBindings": [],
234
+ "children": []
235
+ },
236
+ {
237
+ "elementId": "pw_parola",
238
+ "name": "pw_parola",
239
+ "type": "password",
240
+ "kind": "component",
241
+ "props": {
242
+ "label": {
243
+ "type": "static",
244
+ "data": "Parola"
245
+ },
246
+ "revealable": {
247
+ "type": "static",
248
+ "data": true
249
+ },
250
+ "autofill": {
251
+ "type": "static",
252
+ "data": "current-password"
253
+ }
254
+ },
255
+ "appearance": {
256
+ "heightType": "auto",
257
+ "widthType": "fill",
258
+ "marginType": "none"
259
+ },
260
+ "blocks": [],
261
+ "events": [],
262
+ "validations": [],
263
+ "stateBindings": [],
264
+ "children": []
265
+ },
266
+ {
267
+ "elementId": "btn_giris",
268
+ "name": "btn_giris",
269
+ "type": "button",
270
+ "kind": "component",
271
+ "props": {
272
+ "text": {
273
+ "type": "static",
274
+ "data": "Giriş yap"
275
+ }
276
+ },
277
+ "appearance": {
278
+ "heightType": "auto",
279
+ "widthType": "fill",
280
+ "marginType": "none"
281
+ },
282
+ "blocks": [],
283
+ "events": [],
284
+ "validations": [],
285
+ "stateBindings": [],
286
+ "children": []
287
+ },
288
+ {
289
+ "elementId": "tx_hata",
290
+ "name": "tx_hata",
291
+ "type": "text",
292
+ "kind": "component",
293
+ "props": {
294
+ "content": {
295
+ "type": "static",
296
+ "data": ""
297
+ },
298
+ "type": {
299
+ "type": "static",
300
+ "data": "small"
301
+ }
302
+ },
303
+ "appearance": {
304
+ "heightType": "auto",
305
+ "widthType": "fill",
306
+ "marginType": "none"
307
+ },
308
+ "blocks": [],
309
+ "events": [],
310
+ "validations": [],
311
+ "stateBindings": [],
312
+ "children": []
313
+ }
314
+ ]
315
+ }
316
+ }
317
+ ],
318
+ "flows": [
319
+ {
320
+ "name": "oturum-kontrol",
321
+ "slug": "oturum-kontrol",
322
+ "steps": [
323
+ {
324
+ "stepId": "start",
325
+ "name": "start",
326
+ "type": "start",
327
+ "kind": "normal",
328
+ "args": {},
329
+ "branches": [
330
+ {
331
+ "id": "<GUID>",
332
+ "name": "always",
333
+ "nextStepId": "var_mi"
334
+ }
335
+ ]
336
+ },
337
+ {
338
+ "stepId": "var_mi",
339
+ "name": "var_mi",
340
+ "type": "condition",
341
+ "kind": "normal",
342
+ "args": {
343
+ "rules": [
344
+ {
345
+ "id": "0b5e0000-0001-4000-8000-0000000000a1",
346
+ "expression": "state.app.oturumVar === true",
347
+ "type": "if"
348
+ },
349
+ {
350
+ "id": "0b5e0000-0001-4000-8000-0000000000a2",
351
+ "expression": "",
352
+ "type": "else"
353
+ }
354
+ ]
355
+ },
356
+ "branches": [
357
+ {
358
+ "id": "<GUID>",
359
+ "name": "0b5e0000-0001-4000-8000-0000000000a1",
360
+ "nextStepId": "listeye"
361
+ },
362
+ {
363
+ "id": "<GUID>",
364
+ "name": "0b5e0000-0001-4000-8000-0000000000a2",
365
+ "nextStepId": null
366
+ }
367
+ ]
368
+ },
369
+ {
370
+ "stepId": "listeye",
371
+ "name": "listeye",
372
+ "type": "redirect",
373
+ "kind": "normal",
374
+ "args": {
375
+ "pageId": "<liste sayfası id>",
376
+ "path": "notlar",
377
+ "presentation": "replace"
378
+ },
379
+ "branches": [
380
+ {
381
+ "id": "<GUID>",
382
+ "name": "always",
383
+ "nextStepId": null
384
+ }
385
+ ]
386
+ }
387
+ ]
388
+ },
389
+ {
390
+ "name": "giris-yap",
391
+ "slug": "giris-yap",
392
+ "steps": [
393
+ {
394
+ "stepId": "start",
395
+ "name": "start",
396
+ "type": "start",
397
+ "kind": "normal",
398
+ "args": {},
399
+ "branches": [
400
+ {
401
+ "id": "<GUID>",
402
+ "name": "always",
403
+ "nextStepId": "kilitle"
404
+ }
405
+ ]
406
+ },
407
+ {
408
+ "stepId": "kilitle",
409
+ "name": "kilitle",
410
+ "type": "setter",
411
+ "kind": "normal",
412
+ "args": {
413
+ "iteratees": [
414
+ {
415
+ "id": "<GUID>",
416
+ "type": "change",
417
+ "source": "component",
418
+ "element": "btn_giris",
419
+ "property": "isLoading",
420
+ "mapping": {
421
+ "source": "",
422
+ "mappings": {}
423
+ },
424
+ "value": {
425
+ "type": "static",
426
+ "ref": true
427
+ }
428
+ },
429
+ {
430
+ "id": "<GUID>",
431
+ "type": "change",
432
+ "source": "component",
433
+ "element": "btn_giris",
434
+ "property": "isDisabled",
435
+ "mapping": {
436
+ "source": "",
437
+ "mappings": {}
438
+ },
439
+ "value": {
440
+ "type": "static",
441
+ "ref": true
442
+ }
443
+ },
444
+ {
445
+ "id": "<GUID>",
446
+ "type": "change",
447
+ "source": "component",
448
+ "element": "tx_hata",
449
+ "property": "content",
450
+ "mapping": {
451
+ "source": "",
452
+ "mappings": {}
453
+ },
454
+ "value": {
455
+ "type": "static",
456
+ "ref": ""
457
+ }
458
+ }
459
+ ]
460
+ },
461
+ "branches": [
462
+ {
463
+ "id": "<GUID>",
464
+ "name": "always",
465
+ "nextStepId": "cagir"
466
+ }
467
+ ]
468
+ },
469
+ {
470
+ "stepId": "cagir",
471
+ "name": "cagir",
472
+ "type": "microservice",
473
+ "kind": "normal",
474
+ "args": {
475
+ "microserviceId": "<giriş ucu id>",
476
+ "isRaw": false,
477
+ "parameters": [
478
+ {
479
+ "id": "<GUID>",
480
+ "name": "email",
481
+ "type": "text",
482
+ "source": "body",
483
+ "value": {
484
+ "type": "code",
485
+ "ref": "String(in_email.value || '').trim()"
486
+ }
487
+ },
488
+ {
489
+ "id": "<GUID>",
490
+ "name": "parola",
491
+ "type": "text",
492
+ "source": "body",
493
+ "value": {
494
+ "type": "code",
495
+ "ref": "pw_parola.value || ''"
496
+ }
497
+ }
498
+ ]
499
+ },
500
+ "branches": [
501
+ {
502
+ "id": "<GUID>",
503
+ "name": "always",
504
+ "nextStepId": "kontrol"
505
+ },
506
+ {
507
+ "id": "<GUID>",
508
+ "name": "error",
509
+ "nextStepId": "hata"
510
+ }
511
+ ]
512
+ },
513
+ {
514
+ "stepId": "kontrol",
515
+ "name": "kontrol",
516
+ "type": "condition",
517
+ "kind": "normal",
518
+ "args": {
519
+ "rules": [
520
+ {
521
+ "id": "0b5e0000-0002-4000-8000-0000000000a1",
522
+ "expression": "!!(Steps.cagir.data && Steps.cagir.data.access_token)",
523
+ "type": "if"
524
+ },
525
+ {
526
+ "id": "0b5e0000-0002-4000-8000-0000000000a2",
527
+ "expression": "",
528
+ "type": "else"
529
+ }
530
+ ]
531
+ },
532
+ "branches": [
533
+ {
534
+ "id": "<GUID>",
535
+ "name": "0b5e0000-0002-4000-8000-0000000000a1",
536
+ "nextStepId": "jeton"
537
+ },
538
+ {
539
+ "id": "<GUID>",
540
+ "name": "0b5e0000-0002-4000-8000-0000000000a2",
541
+ "nextStepId": "hata"
542
+ }
543
+ ]
544
+ },
545
+ {
546
+ "stepId": "jeton",
547
+ "name": "jeton",
548
+ "type": "setcookie",
549
+ "kind": "normal",
550
+ "args": {
551
+ "name": "APP_Token",
552
+ "value": "Steps.cagir.data.access_token",
553
+ "expiresInHours": 720
554
+ },
555
+ "branches": [
556
+ {
557
+ "id": "<GUID>",
558
+ "name": "always",
559
+ "nextStepId": "isaretle"
560
+ }
561
+ ]
562
+ },
563
+ {
564
+ "stepId": "isaretle",
565
+ "name": "isaretle",
566
+ "type": "code",
567
+ "kind": "normal",
568
+ "args": {
569
+ "value": "state.app.oturumVar = true;"
570
+ },
571
+ "branches": [
572
+ {
573
+ "id": "<GUID>",
574
+ "name": "always",
575
+ "nextStepId": "ac"
576
+ }
577
+ ]
578
+ },
579
+ {
580
+ "stepId": "ac",
581
+ "name": "ac",
582
+ "type": "setter",
583
+ "kind": "normal",
584
+ "args": {
585
+ "iteratees": [
586
+ {
587
+ "id": "<GUID>",
588
+ "type": "change",
589
+ "source": "component",
590
+ "element": "btn_giris",
591
+ "property": "isLoading",
592
+ "mapping": {
593
+ "source": "",
594
+ "mappings": {}
595
+ },
596
+ "value": {
597
+ "type": "static",
598
+ "ref": false
599
+ }
600
+ },
601
+ {
602
+ "id": "<GUID>",
603
+ "type": "change",
604
+ "source": "component",
605
+ "element": "btn_giris",
606
+ "property": "isDisabled",
607
+ "mapping": {
608
+ "source": "",
609
+ "mappings": {}
610
+ },
611
+ "value": {
612
+ "type": "static",
613
+ "ref": false
614
+ }
615
+ }
616
+ ]
617
+ },
618
+ "branches": [
619
+ {
620
+ "id": "<GUID>",
621
+ "name": "always",
622
+ "nextStepId": "listeye"
623
+ }
624
+ ]
625
+ },
626
+ {
627
+ "stepId": "listeye",
628
+ "name": "listeye",
629
+ "type": "redirect",
630
+ "kind": "normal",
631
+ "args": {
632
+ "pageId": "<liste sayfası id>",
633
+ "path": "notlar",
634
+ "presentation": "replace"
635
+ },
636
+ "branches": [
637
+ {
638
+ "id": "<GUID>",
639
+ "name": "always",
640
+ "nextStepId": null
641
+ }
642
+ ]
643
+ },
644
+ {
645
+ "stepId": "hata",
646
+ "name": "hata",
647
+ "type": "setter",
648
+ "kind": "normal",
649
+ "args": {
650
+ "iteratees": [
651
+ {
652
+ "id": "<GUID>",
653
+ "type": "change",
654
+ "source": "component",
655
+ "element": "btn_giris",
656
+ "property": "isLoading",
657
+ "mapping": {
658
+ "source": "",
659
+ "mappings": {}
660
+ },
661
+ "value": {
662
+ "type": "static",
663
+ "ref": false
664
+ }
665
+ },
666
+ {
667
+ "id": "<GUID>",
668
+ "type": "change",
669
+ "source": "component",
670
+ "element": "btn_giris",
671
+ "property": "isDisabled",
672
+ "mapping": {
673
+ "source": "",
674
+ "mappings": {}
675
+ },
676
+ "value": {
677
+ "type": "static",
678
+ "ref": false
679
+ }
680
+ },
681
+ {
682
+ "id": "<GUID>",
683
+ "type": "change",
684
+ "source": "component",
685
+ "element": "tx_hata",
686
+ "property": "content",
687
+ "mapping": {
688
+ "source": "",
689
+ "mappings": {}
690
+ },
691
+ "value": {
692
+ "type": "static",
693
+ "ref": "E-posta ya da parola hatalı (giriş için internet gerekir)."
694
+ }
695
+ }
696
+ ]
697
+ },
698
+ "branches": [
699
+ {
700
+ "id": "<GUID>",
701
+ "name": "always",
702
+ "nextStepId": null
703
+ }
704
+ ]
705
+ }
706
+ ]
707
+ }
708
+ ],
709
+ "bindOps": [
710
+ {
711
+ "op": "set_event",
712
+ "target": "page_container",
713
+ "event": "mount",
714
+ "eventValue": "<oturum-kontrol akış id>"
715
+ },
716
+ {
717
+ "op": "set_event",
718
+ "target": "btn_giris",
719
+ "event": "click",
720
+ "eventValue": "<giris-yap akış id>"
721
+ }
722
+ ]
723
+ },
724
+ {
725
+ "pageCreateArgs": {
726
+ "name": "Notlar",
727
+ "slug": "notlar",
728
+ "middlewareIds": [
729
+ "<auth middleware id>"
730
+ ]
731
+ },
732
+ "schemaPatchOps": [
733
+ {
734
+ "op": "add_component",
735
+ "parent": "page_container",
736
+ "component": {
737
+ "elementId": "kap_ust",
738
+ "name": "kap_ust",
739
+ "type": "container",
740
+ "kind": "component",
741
+ "props": {
742
+ "direction": {
743
+ "type": "static",
744
+ "data": "column"
745
+ },
746
+ "horizontalAlign": {
747
+ "type": "static",
748
+ "data": "stretch"
749
+ },
750
+ "gap": {
751
+ "type": "static",
752
+ "data": "small"
753
+ }
754
+ },
755
+ "appearance": {
756
+ "heightType": "auto",
757
+ "widthType": "fill",
758
+ "marginType": "none"
759
+ },
760
+ "blocks": [],
761
+ "events": [],
762
+ "validations": [],
763
+ "stateBindings": [],
764
+ "children": [
765
+ {
766
+ "elementId": "in_not",
767
+ "name": "in_not",
768
+ "type": "textinput",
769
+ "kind": "component",
770
+ "props": {
771
+ "label": {
772
+ "type": "static",
773
+ "data": "Yeni not"
774
+ }
775
+ },
776
+ "appearance": {
777
+ "heightType": "auto",
778
+ "widthType": "fill",
779
+ "marginType": "none"
780
+ },
781
+ "blocks": [],
782
+ "events": [],
783
+ "validations": [],
784
+ "stateBindings": [],
785
+ "children": []
786
+ },
787
+ {
788
+ "elementId": "btn_ekle",
789
+ "name": "btn_ekle",
790
+ "type": "button",
791
+ "kind": "component",
792
+ "props": {
793
+ "text": {
794
+ "type": "static",
795
+ "data": "Ekle"
796
+ }
797
+ },
798
+ "appearance": {
799
+ "heightType": "auto",
800
+ "widthType": "fill",
801
+ "marginType": "none"
802
+ },
803
+ "blocks": [],
804
+ "events": [],
805
+ "validations": [],
806
+ "stateBindings": [],
807
+ "children": []
808
+ },
809
+ {
810
+ "elementId": "tx_liste_hata",
811
+ "name": "tx_liste_hata",
812
+ "type": "text",
813
+ "kind": "component",
814
+ "props": {
815
+ "content": {
816
+ "type": "static",
817
+ "data": ""
818
+ },
819
+ "type": {
820
+ "type": "static",
821
+ "data": "small"
822
+ },
823
+ "isHidden": {
824
+ "type": "static",
825
+ "data": true
826
+ }
827
+ },
828
+ "appearance": {
829
+ "heightType": "auto",
830
+ "widthType": "fill",
831
+ "marginType": "none"
832
+ },
833
+ "blocks": [],
834
+ "events": [],
835
+ "validations": [],
836
+ "stateBindings": [],
837
+ "children": []
838
+ }
839
+ ]
840
+ }
841
+ },
842
+ {
843
+ "op": "add_component",
844
+ "parent": "page_container",
845
+ "component": {
846
+ "elementId": "scr_notlar",
847
+ "name": "scr_notlar",
848
+ "type": "scroll-view",
849
+ "kind": "component",
850
+ "props": {
851
+ "refreshable": {
852
+ "type": "static",
853
+ "data": true
854
+ }
855
+ },
856
+ "appearance": {
857
+ "marginType": "none",
858
+ "widthType": "fill",
859
+ "heightType": "fill"
860
+ },
861
+ "blocks": [],
862
+ "events": [],
863
+ "validations": [],
864
+ "stateBindings": [],
865
+ "children": [
866
+ {
867
+ "elementId": "lst_not",
868
+ "name": "lst_not",
869
+ "type": "repeater",
870
+ "kind": "component",
871
+ "props": {
872
+ "rows": {
873
+ "type": "static",
874
+ "data": []
875
+ }
876
+ },
877
+ "appearance": {
878
+ "heightType": "auto",
879
+ "widthType": "fill",
880
+ "marginType": "none"
881
+ },
882
+ "blocks": [],
883
+ "events": [],
884
+ "validations": [],
885
+ "stateBindings": [],
886
+ "children": [
887
+ {
888
+ "elementId": "lst_not_satir",
889
+ "name": "lst_not_satir",
890
+ "type": "view",
891
+ "kind": "component",
892
+ "props": {},
893
+ "blocks": [],
894
+ "children": [
895
+ {
896
+ "elementId": "row_not",
897
+ "name": "row_not",
898
+ "type": "card",
899
+ "kind": "component",
900
+ "props": {
901
+ "title": {
902
+ "type": "code",
903
+ "ref": "{{ item.metin }}"
904
+ }
905
+ },
906
+ "appearance": {
907
+ "heightType": "auto",
908
+ "widthType": "fill",
909
+ "marginType": "none"
910
+ },
911
+ "blocks": [],
912
+ "events": [],
913
+ "validations": [],
914
+ "stateBindings": [],
915
+ "children": []
916
+ }
917
+ ]
918
+ },
919
+ {
920
+ "elementId": "lst_not_bos_gorunum",
921
+ "name": "lst_not_bos_gorunum",
922
+ "type": "view",
923
+ "kind": "component",
924
+ "props": {},
925
+ "blocks": [],
926
+ "children": [
927
+ {
928
+ "elementId": "lst_not_bos",
929
+ "name": "lst_not_bos",
930
+ "type": "emptystate",
931
+ "kind": "component",
932
+ "props": {
933
+ "title": {
934
+ "type": "static",
935
+ "data": "Henüz not yok"
936
+ }
937
+ },
938
+ "blocks": [],
939
+ "children": []
940
+ }
941
+ ]
942
+ }
943
+ ]
944
+ }
945
+ ]
946
+ }
947
+ },
948
+ {
949
+ "op": "add_component",
950
+ "parent": "page_container",
951
+ "component": {
952
+ "elementId": "btn_cikis",
953
+ "name": "btn_cikis",
954
+ "type": "button",
955
+ "kind": "component",
956
+ "props": {
957
+ "text": {
958
+ "type": "static",
959
+ "data": "Çıkış yap"
960
+ },
961
+ "variant": {
962
+ "type": "static",
963
+ "data": "ghost"
964
+ }
965
+ },
966
+ "appearance": {
967
+ "heightType": "auto",
968
+ "widthType": "fill",
969
+ "marginType": "none"
970
+ },
971
+ "blocks": [],
972
+ "events": [],
973
+ "validations": [],
974
+ "stateBindings": [],
975
+ "children": []
976
+ }
977
+ }
978
+ ],
979
+ "flows": [
980
+ {
981
+ "name": "notlar-yukle",
982
+ "slug": "notlar-yukle",
983
+ "steps": [
984
+ {
985
+ "stepId": "start",
986
+ "name": "start",
987
+ "type": "start",
988
+ "kind": "normal",
989
+ "args": {},
990
+ "branches": [
991
+ {
992
+ "id": "<GUID>",
993
+ "name": "always",
994
+ "nextStepId": "yukle"
995
+ }
996
+ ]
997
+ },
998
+ {
999
+ "stepId": "yukle",
1000
+ "name": "yukle",
1001
+ "type": "microservice",
1002
+ "kind": "normal",
1003
+ "args": {
1004
+ "microserviceId": "<okuma ucu id>",
1005
+ "isRaw": false,
1006
+ "parameters": [
1007
+ {
1008
+ "id": "<GUID>",
1009
+ "name": "sortField",
1010
+ "type": "text",
1011
+ "source": "query-string",
1012
+ "value": {
1013
+ "type": "code",
1014
+ "ref": "'olusturma'"
1015
+ }
1016
+ },
1017
+ {
1018
+ "id": "<GUID>",
1019
+ "name": "sortType",
1020
+ "type": "text",
1021
+ "source": "query-string",
1022
+ "value": {
1023
+ "type": "code",
1024
+ "ref": "'desc'"
1025
+ }
1026
+ }
1027
+ ]
1028
+ },
1029
+ "branches": [
1030
+ {
1031
+ "id": "<GUID>",
1032
+ "name": "always",
1033
+ "nextStepId": "birlestir"
1034
+ },
1035
+ {
1036
+ "id": "<GUID>",
1037
+ "name": "error",
1038
+ "nextStepId": "birlestir"
1039
+ }
1040
+ ]
1041
+ },
1042
+ {
1043
+ "stepId": "birlestir",
1044
+ "name": "birlestir",
1045
+ "type": "code",
1046
+ "kind": "normal",
1047
+ "args": {
1048
+ "value": "// Sunucunun listesi (ağsızken son okunan) + cihaz kuyruğunda bekleyen kayıtlar: kullanıcı ağsız eklediğini hemen görür.\nvar sunucu = (Steps.yukle && Steps.yukle.data) || [];\nvar bekleyen = [];\ntry { bekleyen = (await Page.offline.list()) || []; } catch (e) { bekleyen = []; }\nvar yerel = bekleyen.filter(function (c) { return c.status === 'pending' && c.service === '<yazma ucu slug>'; }).map(function (c) {\n var p = (c.parameters || []).filter(function (x) { return x.name === 'metin'; })[0];\n return { id: c.clientRequestId, metin: p ? String(p.value) : '', olusturma: String(c.createdAt || '').replace(/Z$/, '').slice(0, 19) };\n});\nyerel.reverse();\nstate.page.notlar = yerel.concat(sunucu);"
1049
+ },
1050
+ "branches": [
1051
+ {
1052
+ "id": "<GUID>",
1053
+ "name": "always",
1054
+ "nextStepId": "yaz"
1055
+ }
1056
+ ]
1057
+ },
1058
+ {
1059
+ "stepId": "yaz",
1060
+ "name": "yaz",
1061
+ "type": "setter",
1062
+ "kind": "normal",
1063
+ "args": {
1064
+ "iteratees": [
1065
+ {
1066
+ "id": "<GUID>",
1067
+ "type": "change",
1068
+ "source": "component",
1069
+ "element": "lst_not",
1070
+ "property": "rows",
1071
+ "mapping": {
1072
+ "source": "",
1073
+ "mappings": {}
1074
+ },
1075
+ "value": {
1076
+ "type": "code",
1077
+ "ref": "state.page.notlar || []"
1078
+ }
1079
+ },
1080
+ {
1081
+ "id": "<GUID>",
1082
+ "type": "change",
1083
+ "source": "component",
1084
+ "element": "tx_liste_hata",
1085
+ "property": "content",
1086
+ "mapping": {
1087
+ "source": "",
1088
+ "mappings": {}
1089
+ },
1090
+ "value": {
1091
+ "type": "code",
1092
+ "ref": "'Liste yüklenemedi (' + ((Steps.yukle.error && Steps.yukle.error.status) || '?') + ').'"
1093
+ }
1094
+ },
1095
+ {
1096
+ "id": "<GUID>",
1097
+ "type": "change",
1098
+ "source": "component",
1099
+ "element": "tx_liste_hata",
1100
+ "property": "isHidden",
1101
+ "mapping": {
1102
+ "source": "",
1103
+ "mappings": {}
1104
+ },
1105
+ "value": {
1106
+ "type": "code",
1107
+ "ref": "!(Steps.yukle.error && !Steps.yukle.error.network)"
1108
+ }
1109
+ }
1110
+ ]
1111
+ },
1112
+ "branches": [
1113
+ {
1114
+ "id": "<GUID>",
1115
+ "name": "always",
1116
+ "nextStepId": null
1117
+ }
1118
+ ]
1119
+ }
1120
+ ]
1121
+ },
1122
+ {
1123
+ "name": "not-ekle",
1124
+ "slug": "not-ekle",
1125
+ "steps": [
1126
+ {
1127
+ "stepId": "start",
1128
+ "name": "start",
1129
+ "type": "start",
1130
+ "kind": "normal",
1131
+ "args": {},
1132
+ "branches": [
1133
+ {
1134
+ "id": "<GUID>",
1135
+ "name": "always",
1136
+ "nextStepId": "dolu_mu"
1137
+ }
1138
+ ]
1139
+ },
1140
+ {
1141
+ "stepId": "dolu_mu",
1142
+ "name": "dolu_mu",
1143
+ "type": "condition",
1144
+ "kind": "normal",
1145
+ "args": {
1146
+ "rules": [
1147
+ {
1148
+ "id": "0b5e0000-0003-4000-8000-0000000000a1",
1149
+ "expression": "!String(in_not.value || '').trim()",
1150
+ "type": "if"
1151
+ },
1152
+ {
1153
+ "id": "0b5e0000-0003-4000-8000-0000000000a2",
1154
+ "expression": "",
1155
+ "type": "else"
1156
+ }
1157
+ ]
1158
+ },
1159
+ "branches": [
1160
+ {
1161
+ "id": "<GUID>",
1162
+ "name": "0b5e0000-0003-4000-8000-0000000000a1",
1163
+ "nextStepId": "bos"
1164
+ },
1165
+ {
1166
+ "id": "<GUID>",
1167
+ "name": "0b5e0000-0003-4000-8000-0000000000a2",
1168
+ "nextStepId": "kilitle"
1169
+ }
1170
+ ]
1171
+ },
1172
+ {
1173
+ "stepId": "bos",
1174
+ "name": "bos",
1175
+ "type": "alert",
1176
+ "kind": "normal",
1177
+ "args": {
1178
+ "message": "Önce bir not yaz",
1179
+ "alertType": "warning"
1180
+ },
1181
+ "branches": [
1182
+ {
1183
+ "id": "<GUID>",
1184
+ "name": "always",
1185
+ "nextStepId": null
1186
+ }
1187
+ ]
1188
+ },
1189
+ {
1190
+ "stepId": "kilitle",
1191
+ "name": "kilitle",
1192
+ "type": "setter",
1193
+ "kind": "normal",
1194
+ "args": {
1195
+ "iteratees": [
1196
+ {
1197
+ "id": "<GUID>",
1198
+ "type": "change",
1199
+ "source": "component",
1200
+ "element": "btn_ekle",
1201
+ "property": "isLoading",
1202
+ "mapping": {
1203
+ "source": "",
1204
+ "mappings": {}
1205
+ },
1206
+ "value": {
1207
+ "type": "static",
1208
+ "ref": true
1209
+ }
1210
+ },
1211
+ {
1212
+ "id": "<GUID>",
1213
+ "type": "change",
1214
+ "source": "component",
1215
+ "element": "btn_ekle",
1216
+ "property": "isDisabled",
1217
+ "mapping": {
1218
+ "source": "",
1219
+ "mappings": {}
1220
+ },
1221
+ "value": {
1222
+ "type": "static",
1223
+ "ref": true
1224
+ }
1225
+ }
1226
+ ]
1227
+ },
1228
+ "branches": [
1229
+ {
1230
+ "id": "<GUID>",
1231
+ "name": "always",
1232
+ "nextStepId": "ekle"
1233
+ }
1234
+ ]
1235
+ },
1236
+ {
1237
+ "stepId": "ekle",
1238
+ "name": "ekle",
1239
+ "type": "microservice",
1240
+ "kind": "normal",
1241
+ "args": {
1242
+ "microserviceId": "<yazma ucu id>",
1243
+ "isRaw": false,
1244
+ "parameters": [
1245
+ {
1246
+ "id": "<GUID>",
1247
+ "name": "metin",
1248
+ "type": "text",
1249
+ "source": "body",
1250
+ "value": {
1251
+ "type": "code",
1252
+ "ref": "String(in_not.value || '').trim()"
1253
+ }
1254
+ }
1255
+ ]
1256
+ },
1257
+ "branches": [
1258
+ {
1259
+ "id": "<GUID>",
1260
+ "name": "always",
1261
+ "nextStepId": "temizle"
1262
+ },
1263
+ {
1264
+ "id": "<GUID>",
1265
+ "name": "queued",
1266
+ "nextStepId": "temizle"
1267
+ },
1268
+ {
1269
+ "id": "<GUID>",
1270
+ "name": "error",
1271
+ "nextStepId": "hata"
1272
+ }
1273
+ ]
1274
+ },
1275
+ {
1276
+ "stepId": "temizle",
1277
+ "name": "temizle",
1278
+ "type": "setter",
1279
+ "kind": "normal",
1280
+ "args": {
1281
+ "iteratees": [
1282
+ {
1283
+ "id": "<GUID>",
1284
+ "type": "change",
1285
+ "source": "component",
1286
+ "element": "in_not",
1287
+ "property": "value",
1288
+ "mapping": {
1289
+ "source": "",
1290
+ "mappings": {}
1291
+ },
1292
+ "value": {
1293
+ "type": "static",
1294
+ "ref": ""
1295
+ }
1296
+ },
1297
+ {
1298
+ "id": "<GUID>",
1299
+ "type": "change",
1300
+ "source": "component",
1301
+ "element": "btn_ekle",
1302
+ "property": "isLoading",
1303
+ "mapping": {
1304
+ "source": "",
1305
+ "mappings": {}
1306
+ },
1307
+ "value": {
1308
+ "type": "static",
1309
+ "ref": false
1310
+ }
1311
+ },
1312
+ {
1313
+ "id": "<GUID>",
1314
+ "type": "change",
1315
+ "source": "component",
1316
+ "element": "btn_ekle",
1317
+ "property": "isDisabled",
1318
+ "mapping": {
1319
+ "source": "",
1320
+ "mappings": {}
1321
+ },
1322
+ "value": {
1323
+ "type": "static",
1324
+ "ref": false
1325
+ }
1326
+ }
1327
+ ]
1328
+ },
1329
+ "branches": [
1330
+ {
1331
+ "id": "<GUID>",
1332
+ "name": "always",
1333
+ "nextStepId": "yenile"
1334
+ }
1335
+ ]
1336
+ },
1337
+ {
1338
+ "stepId": "yenile",
1339
+ "name": "yenile",
1340
+ "type": "flow-trigger",
1341
+ "kind": "normal",
1342
+ "args": {
1343
+ "flowId": "<notlar-yukle akış id>"
1344
+ },
1345
+ "branches": [
1346
+ {
1347
+ "id": "<GUID>",
1348
+ "name": "always",
1349
+ "nextStepId": null
1350
+ }
1351
+ ]
1352
+ },
1353
+ {
1354
+ "stepId": "hata",
1355
+ "name": "hata",
1356
+ "type": "setter",
1357
+ "kind": "normal",
1358
+ "args": {
1359
+ "iteratees": [
1360
+ {
1361
+ "id": "<GUID>",
1362
+ "type": "change",
1363
+ "source": "component",
1364
+ "element": "btn_ekle",
1365
+ "property": "isLoading",
1366
+ "mapping": {
1367
+ "source": "",
1368
+ "mappings": {}
1369
+ },
1370
+ "value": {
1371
+ "type": "static",
1372
+ "ref": false
1373
+ }
1374
+ },
1375
+ {
1376
+ "id": "<GUID>",
1377
+ "type": "change",
1378
+ "source": "component",
1379
+ "element": "btn_ekle",
1380
+ "property": "isDisabled",
1381
+ "mapping": {
1382
+ "source": "",
1383
+ "mappings": {}
1384
+ },
1385
+ "value": {
1386
+ "type": "static",
1387
+ "ref": false
1388
+ }
1389
+ }
1390
+ ]
1391
+ },
1392
+ "branches": [
1393
+ {
1394
+ "id": "<GUID>",
1395
+ "name": "always",
1396
+ "nextStepId": "hata_uyari"
1397
+ }
1398
+ ]
1399
+ },
1400
+ {
1401
+ "stepId": "hata_uyari",
1402
+ "name": "hata_uyari",
1403
+ "type": "alert",
1404
+ "kind": "normal",
1405
+ "args": {
1406
+ "message": "{{ 'Not eklenemedi (' + ((Steps.ekle.error && Steps.ekle.error.status) || '?') + ')' }}",
1407
+ "alertType": "error"
1408
+ },
1409
+ "branches": [
1410
+ {
1411
+ "id": "<GUID>",
1412
+ "name": "always",
1413
+ "nextStepId": null
1414
+ }
1415
+ ]
1416
+ }
1417
+ ]
1418
+ },
1419
+ {
1420
+ "name": "cikis",
1421
+ "slug": "cikis",
1422
+ "steps": [
1423
+ {
1424
+ "stepId": "start",
1425
+ "name": "start",
1426
+ "type": "start",
1427
+ "kind": "normal",
1428
+ "args": {},
1429
+ "branches": [
1430
+ {
1431
+ "id": "<GUID>",
1432
+ "name": "always",
1433
+ "nextStepId": "isaret_sil"
1434
+ }
1435
+ ]
1436
+ },
1437
+ {
1438
+ "stepId": "isaret_sil",
1439
+ "name": "isaret_sil",
1440
+ "type": "code",
1441
+ "kind": "normal",
1442
+ "args": {
1443
+ "value": "state.app.oturumVar = false;"
1444
+ },
1445
+ "branches": [
1446
+ {
1447
+ "id": "<GUID>",
1448
+ "name": "always",
1449
+ "nextStepId": "jeton_sil"
1450
+ }
1451
+ ]
1452
+ },
1453
+ {
1454
+ "stepId": "jeton_sil",
1455
+ "name": "jeton_sil",
1456
+ "type": "setcookie",
1457
+ "kind": "normal",
1458
+ "args": {
1459
+ "name": "APP_Token",
1460
+ "value": "''",
1461
+ "expiresInHours": 0
1462
+ },
1463
+ "branches": [
1464
+ {
1465
+ "id": "<GUID>",
1466
+ "name": "always",
1467
+ "nextStepId": "girise"
1468
+ }
1469
+ ]
1470
+ },
1471
+ {
1472
+ "stepId": "girise",
1473
+ "name": "girise",
1474
+ "type": "redirect",
1475
+ "kind": "normal",
1476
+ "args": {
1477
+ "pageId": "<giriş sayfası id>",
1478
+ "path": "giris",
1479
+ "presentation": "replace"
1480
+ },
1481
+ "branches": [
1482
+ {
1483
+ "id": "<GUID>",
1484
+ "name": "always",
1485
+ "nextStepId": null
1486
+ }
1487
+ ]
1488
+ }
1489
+ ]
1490
+ }
1491
+ ],
1492
+ "bindOps": [
1493
+ {
1494
+ "op": "set_event",
1495
+ "target": "page_container",
1496
+ "event": "mount",
1497
+ "eventValue": "<notlar-yukle akış id>"
1498
+ },
1499
+ {
1500
+ "op": "set_event",
1501
+ "target": "scr_notlar",
1502
+ "event": "refresh",
1503
+ "eventValue": "<notlar-yukle akış id>"
1504
+ },
1505
+ {
1506
+ "op": "set_event",
1507
+ "target": "btn_ekle",
1508
+ "event": "click",
1509
+ "eventValue": "<not-ekle akış id>"
1510
+ },
1511
+ {
1512
+ "op": "set_event",
1513
+ "target": "btn_cikis",
1514
+ "event": "click",
1515
+ "eventValue": "<cikis akış id>"
1516
+ }
1517
+ ]
1518
+ }
1519
+ ]
1520
+ }