@appaflytech/zeyrek-ai-mcp 0.0.50 → 0.0.52

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,662 @@
1
+ {
2
+ "_meta": {
3
+ "synthetic": true,
4
+ "note": "Mobil teklif ekranı (paywall, kök docs/adr/0027-uygulama-ici-satin-alma.md): plan seçimi, fiyat Products'tan, Devam et → purchase, Satın almaları geri yükle → restore-purchases, otomatik yenileme metni ve koşullar/gizlilik bağlantıları; hak açılınca aynı ekran 'Premium açıldı' köküne geçer (Entitlements.premium). Studio'nun 'Teklif ekranı oluştur' şablonunun (features/purchases/paywall-template.functions.ts) MCP karşılığıdır. Akışlar FLOW-045 / FLOW-020 / FLOW-022'den temiz geçer, ekran MOB-034 ve MOB-042'i karşılar (test/coverage.test.ts).",
5
+ "pairsWith": "mobile-app-shell-stack (kabuk); ürünler önce mobile_product_upsert ile kataloğa yazılır (premium_yillik, premium_aylik — aynı hak 'premium')",
6
+ "sourceRef": "platform_guide('mobile-steps') §Satın alma tarifi; platform_guide('mobile-publish') §Satın almalar; lokal ölçüm 2026-10-23 qm/test-harita-200 'teklif' sayfası (Studio şablonu: start kökü, {{ }} sarmalı kod bağları, pending/failed ayrımı)"
7
+ },
8
+ "_rules": {
9
+ "order": "Sıra: (1) mobile_product_upsert ile ürünler; (2) page_create + schemaPatchOps (kök önce safe-area); (3) ÖNCE restore-purchases akışı (restoreFlowCreateArgs), SONRA purchase akışı (purchaseFlowCreateArgs) — MOB-034 yalnız satın alma akışı yazılırken ekranın geri yükleme yolunu arar, ters sırada eskimiş bir uyarı kalır; (4) bindOps ile akış kimliklerini düğmelere bağla. Ürünün mağazaya gitmesi (mobile_product_send) ekranı beklemez ama cihazda gerçek satın alma onu ister.",
10
+ "start": "Her akış 'start' adımıyla açılır ve iş onun always dalındadır — start'sız akışı motor sessizce bitirir (Devam et hiçbir şey yapmaz; Studio şablonunun ilk ölçümünde görüldü).",
11
+ "codeBindings": "Kod bağı (isHidden, content) '{{ … }}' ile SARILIR: sarmalsız 'Entitlements.premium' düz metin sayılır ve dolu metin 'true' gibi davranır — iki kök birden gizlenir, ekran boş kalır (aynı ölçüm).",
12
+ "value": "purchase.value ürünün Zeyrek anahtarıdır ve METİN ŞABLONUDUR: düz 'premium_yillik' ya da seçimden '{{ plan_secim.value }}'. Statik anahtar katalogda değilse cihaz ve önizleme 'invalid' döner; gateway o yazımı FLOW-045 ile durdurur (ürünü önce mobile_product_upsert ile açın), mağaza ön kontrolü P-23 Studio'da yazılanı uyarır.",
13
+ "branches": "İki adım da KAPIDIR: error dalı → hata akışı → ikisi de yoksa akış adımda biter. Steps.<ad>.error.status: cancelled (vazgeçti — bir şey gösterme) · pending (Ask to Buy, bekleyen ödeme ya da sunucuya ulaşılamadı; hak açılınca Entitlements kendiliğinden güncellenir) · failed · unavailable (mağaza yok, ürün satışta değil, ikili satın almayı taşımıyor) · unsupported (web, production /view, eski kabuk) · invalid (anahtar manifestte yok). Koşulun kural kimlikleri GUID'dir ve dalın adıdır (FLOW-020); else kuralı vazgeçmeyi sessiz bırakır.",
14
+ "result": "Başarı: purchase Steps.<ad>.data = { productKey, entitlements }, restore-purchases { entitlements }. Ekran hakka bakar, ürüne değil: Entitlements.<hak> (boolean). Fiyat yazılmaz — Products.<anahtar>.price mağazanın yerel fiyat metnidir (₺949,99), period / trial ISO 8601 süre (P1Y, P7D) ya da null.",
15
+ "disclosure": "Abonelik satan ekranda süre, fiyat, otomatik yenileme ve iptal yolu metni ile kullanım koşulları + gizlilik bağlantısı zorunludur (App Store 3.1.2, Play politikası) — MOB-042 uyarır. Geri yükleme düğmesi satın alma ekranında durur (MOB-034). Gizlilik adresi mağaza ayarındadır: mobile_store_get settings.urls.privacyPolicy.",
16
+ "preview": "Studio önizlemesi, /dev ve Zeyrek Mobile oynatıcısı gerçek satın alma yapmaz: dört sonuçlu deneme penceresi açar (satın alındı · vazgeçildi · beklemede · başarısız; düğümler preview-purchase__success | __cancel | __pending | __error, gönder preview-purchase__send). Production /view'da adım 'unsupported'. Gerçek satın alma yalnız kabuk 0.9.0+ mağaza derlemesinde (TestFlight / Play iç test).",
17
+ "binding": "Akışı olaya bağlamak ayrı adımdır: page_schema_patch set_event { target: 'btn_devam' | 'btn_geri_yukle', event: 'click', eventValue: '<flow id>' }."
18
+ },
19
+ "pageCreateArgs": {
20
+ "name": "Teklif",
21
+ "slug": "teklif"
22
+ },
23
+ "schemaPatchOps": [
24
+ {
25
+ "op": "add_component",
26
+ "parent": "page_container",
27
+ "component": {
28
+ "elementId": "guvenli_alan",
29
+ "name": "guvenli_alan",
30
+ "type": "safe-area",
31
+ "kind": "component",
32
+ "props": {},
33
+ "appearance": {
34
+ "marginType": "none",
35
+ "widthType": "fill"
36
+ },
37
+ "blocks": [],
38
+ "events": [],
39
+ "validations": [],
40
+ "stateBindings": [],
41
+ "children": [
42
+ {
43
+ "elementId": "teklif",
44
+ "name": "teklif",
45
+ "type": "container",
46
+ "kind": "component",
47
+ "props": {
48
+ "direction": {
49
+ "type": "static",
50
+ "ref": null,
51
+ "data": "column"
52
+ },
53
+ "gap": {
54
+ "type": "static",
55
+ "ref": null,
56
+ "data": "medium"
57
+ },
58
+ "horizontalAlign": {
59
+ "type": "static",
60
+ "ref": null,
61
+ "data": "stretch"
62
+ },
63
+ "isHidden": {
64
+ "type": "code",
65
+ "ref": "{{ Entitlements.premium }}",
66
+ "data": null
67
+ }
68
+ },
69
+ "appearance": {
70
+ "marginType": "none",
71
+ "widthType": "fill"
72
+ },
73
+ "blocks": [],
74
+ "events": [],
75
+ "validations": [],
76
+ "stateBindings": [],
77
+ "children": [
78
+ {
79
+ "elementId": "txt_teklif_baslik",
80
+ "name": "txt_teklif_baslik",
81
+ "type": "text",
82
+ "kind": "component",
83
+ "props": {
84
+ "content": {
85
+ "type": "static",
86
+ "ref": null,
87
+ "data": "Premium'a geç"
88
+ },
89
+ "type": {
90
+ "type": "static",
91
+ "ref": null,
92
+ "data": "h2"
93
+ }
94
+ },
95
+ "appearance": {
96
+ "marginType": "none",
97
+ "widthType": "fill"
98
+ },
99
+ "blocks": [],
100
+ "events": [],
101
+ "validations": [],
102
+ "stateBindings": [],
103
+ "children": []
104
+ },
105
+ {
106
+ "elementId": "txt_faydalar",
107
+ "name": "txt_faydalar",
108
+ "type": "text",
109
+ "kind": "component",
110
+ "props": {
111
+ "content": {
112
+ "type": "static",
113
+ "ref": null,
114
+ "data": "Reklamsız kullanım, bütün raporlar ve bulut yedeği."
115
+ }
116
+ },
117
+ "appearance": {
118
+ "marginType": "none",
119
+ "widthType": "fill"
120
+ },
121
+ "blocks": [],
122
+ "events": [],
123
+ "validations": [],
124
+ "stateBindings": [],
125
+ "children": []
126
+ },
127
+ {
128
+ "elementId": "plan_secim",
129
+ "name": "plan_secim",
130
+ "type": "choice-chips",
131
+ "kind": "component",
132
+ "props": {
133
+ "value": {
134
+ "type": "static",
135
+ "ref": null,
136
+ "data": "premium_yillik"
137
+ },
138
+ "options": {
139
+ "type": "static",
140
+ "ref": null,
141
+ "data": [
142
+ {
143
+ "value": {
144
+ "type": "static",
145
+ "ref": null,
146
+ "data": "premium_yillik"
147
+ },
148
+ "label": {
149
+ "type": "static",
150
+ "ref": null,
151
+ "data": "Premium yıllık · 1 hafta ücretsiz"
152
+ },
153
+ "badge": {
154
+ "type": "static",
155
+ "ref": null,
156
+ "data": "%39"
157
+ },
158
+ "badgeKind": {
159
+ "type": "static",
160
+ "ref": null,
161
+ "data": "success"
162
+ }
163
+ },
164
+ {
165
+ "value": {
166
+ "type": "static",
167
+ "ref": null,
168
+ "data": "premium_aylik"
169
+ },
170
+ "label": {
171
+ "type": "static",
172
+ "ref": null,
173
+ "data": "Premium aylık"
174
+ }
175
+ }
176
+ ]
177
+ }
178
+ },
179
+ "appearance": {
180
+ "marginType": "none",
181
+ "widthType": "fill"
182
+ },
183
+ "blocks": [],
184
+ "events": [],
185
+ "validations": [],
186
+ "stateBindings": [],
187
+ "children": []
188
+ },
189
+ {
190
+ "elementId": "txt_fiyat",
191
+ "name": "txt_fiyat",
192
+ "type": "text",
193
+ "kind": "component",
194
+ "props": {
195
+ "content": {
196
+ "type": "code",
197
+ "ref": "{{ Products[plan_secim.value]?.price ?? '' }}",
198
+ "data": null
199
+ },
200
+ "type": {
201
+ "type": "static",
202
+ "ref": null,
203
+ "data": "h3"
204
+ }
205
+ },
206
+ "appearance": {
207
+ "marginType": "none",
208
+ "widthType": "fill"
209
+ },
210
+ "blocks": [],
211
+ "events": [],
212
+ "validations": [],
213
+ "stateBindings": [],
214
+ "children": []
215
+ },
216
+ {
217
+ "elementId": "btn_devam",
218
+ "name": "btn_devam",
219
+ "type": "button",
220
+ "kind": "component",
221
+ "props": {
222
+ "text": {
223
+ "type": "static",
224
+ "ref": null,
225
+ "data": "Devam et"
226
+ },
227
+ "kind": {
228
+ "type": "static",
229
+ "ref": null,
230
+ "data": "primary"
231
+ }
232
+ },
233
+ "appearance": {
234
+ "marginType": "none",
235
+ "widthType": "fill"
236
+ },
237
+ "blocks": [],
238
+ "events": [],
239
+ "validations": [],
240
+ "stateBindings": [],
241
+ "children": []
242
+ },
243
+ {
244
+ "elementId": "btn_geri_yukle",
245
+ "name": "btn_geri_yukle",
246
+ "type": "button",
247
+ "kind": "component",
248
+ "props": {
249
+ "text": {
250
+ "type": "static",
251
+ "ref": null,
252
+ "data": "Satın almaları geri yükle"
253
+ },
254
+ "variant": {
255
+ "type": "static",
256
+ "ref": null,
257
+ "data": "link"
258
+ }
259
+ },
260
+ "appearance": {
261
+ "marginType": "none",
262
+ "widthType": "fill"
263
+ },
264
+ "blocks": [],
265
+ "events": [],
266
+ "validations": [],
267
+ "stateBindings": [],
268
+ "children": []
269
+ },
270
+ {
271
+ "elementId": "txt_yenileme",
272
+ "name": "txt_yenileme",
273
+ "type": "text",
274
+ "kind": "component",
275
+ "props": {
276
+ "content": {
277
+ "type": "static",
278
+ "ref": null,
279
+ "data": "Abonelik, seçtiğin dönemin sonunda otomatik yenilenir. Yenilemeden en az 24 saat önce App Store ya da Google Play hesap ayarlarından iptal edebilirsin. Ödeme, satın almayı onayladığında mağaza hesabından alınır."
280
+ },
281
+ "type": {
282
+ "type": "static",
283
+ "ref": null,
284
+ "data": "small"
285
+ }
286
+ },
287
+ "appearance": {
288
+ "marginType": "none",
289
+ "widthType": "fill"
290
+ },
291
+ "blocks": [],
292
+ "events": [],
293
+ "validations": [],
294
+ "stateBindings": [],
295
+ "children": []
296
+ },
297
+ {
298
+ "elementId": "btn_kosullar",
299
+ "name": "btn_kosullar",
300
+ "type": "button",
301
+ "kind": "component",
302
+ "props": {
303
+ "text": {
304
+ "type": "static",
305
+ "ref": null,
306
+ "data": "Kullanım koşulları"
307
+ },
308
+ "variant": {
309
+ "type": "static",
310
+ "ref": null,
311
+ "data": "link"
312
+ },
313
+ "href": {
314
+ "type": "static",
315
+ "ref": null,
316
+ "data": "https://www.apple.com/legal/internet-services/itunes/dev/stdeula/"
317
+ }
318
+ },
319
+ "appearance": {
320
+ "marginType": "none",
321
+ "widthType": "fill"
322
+ },
323
+ "blocks": [],
324
+ "events": [],
325
+ "validations": [],
326
+ "stateBindings": [],
327
+ "children": []
328
+ },
329
+ {
330
+ "elementId": "btn_gizlilik",
331
+ "name": "btn_gizlilik",
332
+ "type": "button",
333
+ "kind": "component",
334
+ "props": {
335
+ "text": {
336
+ "type": "static",
337
+ "ref": null,
338
+ "data": "Gizlilik"
339
+ },
340
+ "variant": {
341
+ "type": "static",
342
+ "ref": null,
343
+ "data": "link"
344
+ },
345
+ "href": {
346
+ "type": "static",
347
+ "ref": null,
348
+ "data": "<mobile_store_get settings.urls.privacyPolicy>"
349
+ }
350
+ },
351
+ "appearance": {
352
+ "marginType": "none",
353
+ "widthType": "fill"
354
+ },
355
+ "blocks": [],
356
+ "events": [],
357
+ "validations": [],
358
+ "stateBindings": [],
359
+ "children": []
360
+ }
361
+ ]
362
+ },
363
+ {
364
+ "elementId": "premium_acik",
365
+ "name": "premium_acik",
366
+ "type": "container",
367
+ "kind": "component",
368
+ "props": {
369
+ "direction": {
370
+ "type": "static",
371
+ "ref": null,
372
+ "data": "column"
373
+ },
374
+ "gap": {
375
+ "type": "static",
376
+ "ref": null,
377
+ "data": "small"
378
+ },
379
+ "isHidden": {
380
+ "type": "code",
381
+ "ref": "{{ !Entitlements.premium }}",
382
+ "data": null
383
+ }
384
+ },
385
+ "appearance": {
386
+ "marginType": "none",
387
+ "widthType": "fill"
388
+ },
389
+ "blocks": [],
390
+ "events": [],
391
+ "validations": [],
392
+ "stateBindings": [],
393
+ "children": [
394
+ {
395
+ "elementId": "txt_acik_baslik",
396
+ "name": "txt_acik_baslik",
397
+ "type": "text",
398
+ "kind": "component",
399
+ "props": {
400
+ "content": {
401
+ "type": "static",
402
+ "ref": null,
403
+ "data": "Premium açıldı"
404
+ },
405
+ "type": {
406
+ "type": "static",
407
+ "ref": null,
408
+ "data": "h2"
409
+ }
410
+ },
411
+ "appearance": {
412
+ "marginType": "none",
413
+ "widthType": "fill"
414
+ },
415
+ "blocks": [],
416
+ "events": [],
417
+ "validations": [],
418
+ "stateBindings": [],
419
+ "children": []
420
+ },
421
+ {
422
+ "elementId": "txt_acik_metin",
423
+ "name": "txt_acik_metin",
424
+ "type": "text",
425
+ "kind": "component",
426
+ "props": {
427
+ "content": {
428
+ "type": "static",
429
+ "ref": null,
430
+ "data": "Bütün özellikler açık. Teşekkürler!"
431
+ }
432
+ },
433
+ "appearance": {
434
+ "marginType": "none",
435
+ "widthType": "fill"
436
+ },
437
+ "blocks": [],
438
+ "events": [],
439
+ "validations": [],
440
+ "stateBindings": [],
441
+ "children": []
442
+ }
443
+ ]
444
+ }
445
+ ]
446
+ }
447
+ }
448
+ ],
449
+ "restoreFlowCreateArgs": {
450
+ "host": "page",
451
+ "hostId": "<teklif sayfasının id'si>",
452
+ "name": "geri-yukle",
453
+ "slug": "geri-yukle",
454
+ "steps": [
455
+ {
456
+ "stepId": "start",
457
+ "name": "start",
458
+ "type": "start",
459
+ "kind": "normal",
460
+ "args": {},
461
+ "branches": [
462
+ {
463
+ "name": "always",
464
+ "nextStepId": "geri_yukle"
465
+ }
466
+ ]
467
+ },
468
+ {
469
+ "stepId": "geri_yukle",
470
+ "name": "geri_yukle",
471
+ "type": "restore-purchases",
472
+ "kind": "normal",
473
+ "args": {},
474
+ "branches": [
475
+ {
476
+ "name": "always",
477
+ "nextStepId": "geri_geldi"
478
+ },
479
+ {
480
+ "name": "error",
481
+ "nextStepId": "geri_olmadi"
482
+ }
483
+ ]
484
+ },
485
+ {
486
+ "stepId": "geri_geldi",
487
+ "name": "geri_geldi",
488
+ "type": "alert",
489
+ "kind": "normal",
490
+ "args": {
491
+ "message": "{{ Entitlements.premium ? 'Premium geri yüklendi' : 'Bu hesapta geri yüklenecek satın alma yok' }}",
492
+ "alertType": "info"
493
+ },
494
+ "branches": [
495
+ {
496
+ "name": "always",
497
+ "nextStepId": null
498
+ }
499
+ ]
500
+ },
501
+ {
502
+ "stepId": "geri_olmadi",
503
+ "name": "geri_olmadi",
504
+ "type": "alert",
505
+ "kind": "normal",
506
+ "args": {
507
+ "message": "Geri yükleme yapılamadı: {{ Steps.geri_yukle.error.message }}",
508
+ "alertType": "error"
509
+ },
510
+ "branches": [
511
+ {
512
+ "name": "always",
513
+ "nextStepId": null
514
+ }
515
+ ]
516
+ }
517
+ ],
518
+ "errorSteps": []
519
+ },
520
+ "purchaseFlowCreateArgs": {
521
+ "host": "page",
522
+ "hostId": "<teklif sayfasının id'si>",
523
+ "name": "satin-al",
524
+ "slug": "satin-al",
525
+ "steps": [
526
+ {
527
+ "stepId": "start",
528
+ "name": "start",
529
+ "type": "start",
530
+ "kind": "normal",
531
+ "args": {},
532
+ "branches": [
533
+ {
534
+ "name": "always",
535
+ "nextStepId": "satin_al"
536
+ }
537
+ ]
538
+ },
539
+ {
540
+ "stepId": "satin_al",
541
+ "name": "satin_al",
542
+ "type": "purchase",
543
+ "kind": "normal",
544
+ "args": {
545
+ "value": "{{ plan_secim.value }}"
546
+ },
547
+ "branches": [
548
+ {
549
+ "name": "always",
550
+ "nextStepId": "basari"
551
+ },
552
+ {
553
+ "name": "error",
554
+ "nextStepId": "durum"
555
+ }
556
+ ]
557
+ },
558
+ {
559
+ "stepId": "basari",
560
+ "name": "basari",
561
+ "type": "alert",
562
+ "kind": "normal",
563
+ "args": {
564
+ "message": "Premium açıldı, teşekkürler!",
565
+ "alertType": "success"
566
+ },
567
+ "branches": [
568
+ {
569
+ "name": "always",
570
+ "nextStepId": null
571
+ }
572
+ ]
573
+ },
574
+ {
575
+ "stepId": "durum",
576
+ "name": "durum",
577
+ "type": "condition",
578
+ "kind": "normal",
579
+ "args": {
580
+ "rules": [
581
+ {
582
+ "id": "01a16594-0000-7000-8000-0000000000c1",
583
+ "expression": "Steps.satin_al.error.status === 'pending'",
584
+ "type": "if"
585
+ },
586
+ {
587
+ "id": "01a16594-0000-7000-8000-0000000000c2",
588
+ "expression": "Steps.satin_al.error.status !== 'cancelled'",
589
+ "type": "else-if"
590
+ },
591
+ {
592
+ "id": "01a16594-0000-7000-8000-0000000000c3",
593
+ "expression": "",
594
+ "type": "else"
595
+ }
596
+ ]
597
+ },
598
+ "branches": [
599
+ {
600
+ "name": "01a16594-0000-7000-8000-0000000000c1",
601
+ "nextStepId": "bekliyor"
602
+ },
603
+ {
604
+ "name": "01a16594-0000-7000-8000-0000000000c2",
605
+ "nextStepId": "olmadi"
606
+ },
607
+ {
608
+ "name": "01a16594-0000-7000-8000-0000000000c3",
609
+ "nextStepId": null
610
+ }
611
+ ]
612
+ },
613
+ {
614
+ "stepId": "bekliyor",
615
+ "name": "bekliyor",
616
+ "type": "alert",
617
+ "kind": "normal",
618
+ "args": {
619
+ "message": "Ödeme onay bekliyor; onaylanınca Premium kendiliğinden açılır.",
620
+ "alertType": "warning"
621
+ },
622
+ "branches": [
623
+ {
624
+ "name": "always",
625
+ "nextStepId": null
626
+ }
627
+ ]
628
+ },
629
+ {
630
+ "stepId": "olmadi",
631
+ "name": "olmadi",
632
+ "type": "alert",
633
+ "kind": "normal",
634
+ "args": {
635
+ "message": "Satın alma tamamlanamadı: {{ Steps.satin_al.error.message }}",
636
+ "alertType": "error"
637
+ },
638
+ "branches": [
639
+ {
640
+ "name": "always",
641
+ "nextStepId": null
642
+ }
643
+ ]
644
+ }
645
+ ],
646
+ "errorSteps": []
647
+ },
648
+ "bindOps": [
649
+ {
650
+ "op": "set_event",
651
+ "target": "btn_devam",
652
+ "event": "click",
653
+ "eventValue": "<satin-al akış id>"
654
+ },
655
+ {
656
+ "op": "set_event",
657
+ "target": "btn_geri_yukle",
658
+ "event": "click",
659
+ "eventValue": "<geri-yukle akış id>"
660
+ }
661
+ ]
662
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "_meta": {
3
+ "synthetic": true,
4
+ "note": "Mağazadan taşıma: içe aktarma raporu okunduktan sonra Zeyrek'e yazılacak seçimler (temsilî Anatoli kimlikleri; plans/mobil-magazadan-tasima §Ürün eşleme kuralları)."
5
+ },
6
+ "tool": "mobile_store_import_mapping",
7
+ "arguments": {
8
+ "applicationId": "01a13ea2-c7ed-70ed-9046-6e4eea34f216",
9
+ "importId": "01a17000-0000-7000-8000-000000000001",
10
+ "mapping": {
11
+ "scheme": "anatoli",
12
+ "choice.listing.tr.title": "apple",
13
+ "choice.listing.en.description": "custom",
14
+ "custom.listing.en.description": "Discover Anatolia, offline.",
15
+ "skip.language.ar": "true",
16
+ "product.0.key": "premium_yillik",
17
+ "product.0.entitlement": "premium",
18
+ "product.1.key": "cevrimdisi_paket",
19
+ "product.1.entitlement": "offline",
20
+ "declaration.appPrivacy": "true",
21
+ "declaration.dataSafety": "true"
22
+ }
23
+ },
24
+ "next": "mobile_store_import_apply { applicationId, importId } → mobile_product_list → mobile_store_notification_forwarding { action: 'switch', confirm: true } (kullanıcı onayıyla) → mobile_purchase_import { dryRun: true }"
25
+ }