/// نتیجه‌ی یک خریدِ فروشگاهی، مستقل از اینکه کدام SDK آن را تولید کرده. /// /// بک‌اند برای تأییدِ آفلاینِ RSA به [purchaseData] (JSONِ خام) و [signature] /// نیاز دارد؛ [token] هم برای تأییدِ سمت‌سرور/سازگاری فرستاده می‌شود. class PurchaseResult { final bool success; final String token; final String purchaseData; final String signature; /// پاک‌سازیِ لازم پس از تأییدِ بک‌اند (مثلاً مایکت باید خرید را consume کند). final Future Function()? onConfirmed; const PurchaseResult.success({ required this.token, required this.purchaseData, required this.signature, this.onConfirmed, }) : success = true; const PurchaseResult.failure() : success = false, token = '', purchaseData = '', signature = '', onConfirmed = null; } /// انتزاعِ SDKِ پرداختِ درون‌برنامه‌ایِ مخصوصِ هر فروشگاه. هر flavor یک پیاده‌سازی /// ثبت می‌کند؛ بقیه‌ی اپ از SDK بی‌خبر می‌ماند. abstract class PaymentGateway { /// شناسه‌ی فروشگاه که به بک‌اند فرستاده می‌شود (`myket` | `bazaar`). String get store; /// جریانِ خریدِ [productSku] (همان UUIDِ محصول در پنلِ فروشگاه) را باز می‌کند. /// [payload] در فروشگاه ذخیره و در پنلِ توسعه‌دهنده نمایش داده می‌شود؛ اینجا /// شماره‌ی موبایلِ کاربر را می‌فرستیم تا خرید قابلِ ردیابی باشد. Future purchase(String productSku, {String payload = ''}); /// اتصالِ اولیه (در صورتِ نیاز). پیش از اولین خرید صدا زده می‌شود. Future connect() async {} }