From f47e6b3f607d34c2e6aef7ab7fab59d26d8c7f23 Mon Sep 17 00:00:00 2001 From: Hyo Date: Sun, 28 Sep 2025 01:37:50 +0900 Subject: [PATCH 1/2] feat: add ProdcutDetailType and deprecate ProductIOS --- src/generated/Types.kt | 65 +++- src/generated/Types.swift | 35 ++ src/generated/types.dart | 691 +++++++++++++++++++++++++++++--------- src/generated/types.ts | 12 + src/type-android.graphql | 2 + src/type-ios.graphql | 5 +- src/type.graphql | 12 + 7 files changed, 659 insertions(+), 163 deletions(-) diff --git a/src/generated/Types.kt b/src/generated/Types.kt index 77dc6af..e7cb583 100644 --- a/src/generated/Types.kt +++ b/src/generated/Types.kt @@ -222,6 +222,33 @@ public enum class PaymentModeIOS(val rawValue: String) { fun toJson(): String = rawValue } +public enum class ProductDetailType(val rawValue: String) { + Consumable("consumable"), + NonConsumable("non-consumable"), + AutoRenewableSubscription("auto-renewable-subscription"), + NonRenewingSubscription("non-renewing-subscription") + + companion object { + fun fromJson(value: String): ProductDetailType = when (value) { + "consumable" -> ProductDetailType.Consumable + "CONSUMABLE" -> ProductDetailType.Consumable + "Consumable" -> ProductDetailType.Consumable + "non-consumable" -> ProductDetailType.NonConsumable + "NON_CONSUMABLE" -> ProductDetailType.NonConsumable + "NonConsumable" -> ProductDetailType.NonConsumable + "auto-renewable-subscription" -> ProductDetailType.AutoRenewableSubscription + "AUTO_RENEWABLE_SUBSCRIPTION" -> ProductDetailType.AutoRenewableSubscription + "AutoRenewableSubscription" -> ProductDetailType.AutoRenewableSubscription + "non-renewing-subscription" -> ProductDetailType.NonRenewingSubscription + "NON_RENEWING_SUBSCRIPTION" -> ProductDetailType.NonRenewingSubscription + "NonRenewingSubscription" -> ProductDetailType.NonRenewingSubscription + else -> throw IllegalArgumentException("Unknown ProductDetailType value: $value") + } + } + + fun toJson(): String = rawValue +} + public enum class ProductQueryType(val rawValue: String) { InApp("in-app"), Subs("subs"), @@ -389,6 +416,7 @@ public interface ProductCommon { val price: Double? val title: String val type: ProductType + val typeDetails: ProductDetailType } public interface PurchaseCommon { @@ -685,7 +713,8 @@ public data class ProductAndroid( val price: Double? = null, val subscriptionOfferDetailsAndroid: List? = null, val title: String, - val type: ProductType + val type: ProductType, + val typeDetails: ProductDetailType ) : ProductCommon, Product { companion object { @@ -704,6 +733,7 @@ public data class ProductAndroid( subscriptionOfferDetailsAndroid = (json["subscriptionOfferDetailsAndroid"] as List<*>?)?.map { ProductSubscriptionAndroidOfferDetails.fromJson((it as Map)) }, title = json["title"] as String, type = ProductType.fromJson(json["type"] as String), + typeDetails = ProductDetailType.fromJson(json["typeDetails"] as String), ) } } @@ -723,6 +753,7 @@ public data class ProductAndroid( "subscriptionOfferDetailsAndroid" to subscriptionOfferDetailsAndroid?.map { it.toJson() }, "title" to title, "type" to type.toJson(), + "typeDetails" to typeDetails.toJson(), ) } @@ -765,6 +796,7 @@ public data class ProductIOS( val subscriptionInfoIOS: SubscriptionInfoIOS? = null, val title: String, val type: ProductType, + val typeDetails: ProductDetailType, val typeIOS: ProductTypeIOS ) : ProductCommon, Product { @@ -785,6 +817,7 @@ public data class ProductIOS( subscriptionInfoIOS = (json["subscriptionInfoIOS"] as Map?)?.let { SubscriptionInfoIOS.fromJson(it) }, title = json["title"] as String, type = ProductType.fromJson(json["type"] as String), + typeDetails = ProductDetailType.fromJson(json["typeDetails"] as String), typeIOS = ProductTypeIOS.fromJson(json["typeIOS"] as String), ) } @@ -806,6 +839,7 @@ public data class ProductIOS( "subscriptionInfoIOS" to subscriptionInfoIOS?.toJson(), "title" to title, "type" to type.toJson(), + "typeDetails" to typeDetails.toJson(), "typeIOS" to typeIOS.toJson(), ) } @@ -823,7 +857,8 @@ public data class ProductSubscriptionAndroid( val price: Double? = null, val subscriptionOfferDetailsAndroid: List, val title: String, - val type: ProductType + val type: ProductType, + val typeDetails: ProductDetailType ) : ProductCommon, ProductSubscription { companion object { @@ -842,6 +877,7 @@ public data class ProductSubscriptionAndroid( subscriptionOfferDetailsAndroid = (json["subscriptionOfferDetailsAndroid"] as List<*>).map { ProductSubscriptionAndroidOfferDetails.fromJson((it as Map)) }, title = json["title"] as String, type = ProductType.fromJson(json["type"] as String), + typeDetails = ProductDetailType.fromJson(json["typeDetails"] as String), ) } } @@ -861,6 +897,7 @@ public data class ProductSubscriptionAndroid( "subscriptionOfferDetailsAndroid" to subscriptionOfferDetailsAndroid.map { it.toJson() }, "title" to title, "type" to type.toJson(), + "typeDetails" to typeDetails.toJson(), ) } @@ -917,6 +954,7 @@ public data class ProductSubscriptionIOS( val subscriptionPeriodUnitIOS: SubscriptionPeriodIOS? = null, val title: String, val type: ProductType, + val typeDetails: ProductDetailType, val typeIOS: ProductTypeIOS ) : ProductCommon, ProductSubscription { @@ -945,6 +983,7 @@ public data class ProductSubscriptionIOS( subscriptionPeriodUnitIOS = (json["subscriptionPeriodUnitIOS"] as String?)?.let { SubscriptionPeriodIOS.fromJson(it) }, title = json["title"] as String, type = ProductType.fromJson(json["type"] as String), + typeDetails = ProductDetailType.fromJson(json["typeDetails"] as String), typeIOS = ProductTypeIOS.fromJson(json["typeIOS"] as String), ) } @@ -974,6 +1013,7 @@ public data class ProductSubscriptionIOS( "subscriptionPeriodUnitIOS" to subscriptionPeriodUnitIOS?.toJson(), "title" to title, "type" to type.toJson(), + "typeDetails" to typeDetails.toJson(), "typeIOS" to typeIOS.toJson(), ) } @@ -1362,6 +1402,27 @@ public data class RequestPurchaseResultPurchase(val value: Purchase?) : RequestP public data class RequestPurchaseResultPurchases(val value: List?) : RequestPurchaseResult +public data class StorefrontResultAndroid( + val countryCode: String, + val identifier: String +) { + + companion object { + fun fromJson(json: Map): StorefrontResultAndroid { + return StorefrontResultAndroid( + countryCode = json["countryCode"] as String, + identifier = json["identifier"] as String, + ) + } + } + + fun toJson(): Map = mapOf( + "__typename" to "StorefrontResultAndroid", + "countryCode" to countryCode, + "identifier" to identifier, + ) +} + public data class SubscriptionInfoIOS( val introductoryOffer: SubscriptionOfferIOS? = null, val promotionalOffers: List? = null, diff --git a/src/generated/Types.swift b/src/generated/Types.swift index 14edf9b..da5b372 100644 --- a/src/generated/Types.swift +++ b/src/generated/Types.swift @@ -62,6 +62,13 @@ public enum PaymentModeIOS: String, Codable, CaseIterable { case payUpFront = "pay-up-front" } +public enum ProductDetailType: String, Codable, CaseIterable { + case consumable = "consumable" + case nonConsumable = "non-consumable" + case autoRenewableSubscription = "auto-renewable-subscription" + case nonRenewingSubscription = "non-renewing-subscription" +} + public enum ProductQueryType: String, Codable, CaseIterable { case inApp = "in-app" case subs = "subs" @@ -115,6 +122,7 @@ public protocol ProductCommon: Codable { var price: Double? { get } var title: String { get } var type: ProductType { get } + var typeDetails: ProductDetailType { get } } public protocol PurchaseCommon: Codable { @@ -223,6 +231,7 @@ public struct ProductAndroid: Codable, ProductCommon { public var subscriptionOfferDetailsAndroid: [ProductSubscriptionAndroidOfferDetails]? public var title: String public var type: ProductType + public var typeDetails: ProductDetailType } public struct ProductAndroidOneTimePurchaseOfferDetail: Codable { @@ -246,6 +255,7 @@ public struct ProductIOS: Codable, ProductCommon { public var subscriptionInfoIOS: SubscriptionInfoIOS? public var title: String public var type: ProductType + public var typeDetails: ProductDetailType public var typeIOS: ProductTypeIOS } @@ -263,6 +273,7 @@ public struct ProductSubscriptionAndroid: Codable, ProductCommon { public var subscriptionOfferDetailsAndroid: [ProductSubscriptionAndroidOfferDetails] public var title: String public var type: ProductType + public var typeDetails: ProductDetailType } public struct ProductSubscriptionAndroidOfferDetails: Codable { @@ -296,6 +307,7 @@ public struct ProductSubscriptionIOS: Codable, ProductCommon { public var subscriptionPeriodUnitIOS: SubscriptionPeriodIOS? public var title: String public var type: ProductType + public var typeDetails: ProductDetailType public var typeIOS: ProductTypeIOS } @@ -414,6 +426,11 @@ public enum RequestPurchaseResult { case purchases([Purchase]?) } +public struct StorefrontResultAndroid: Codable { + public var countryCode: String + public var identifier: String +} + public struct SubscriptionInfoIOS: Codable { public var introductoryOffer: SubscriptionOfferIOS? public var promotionalOffers: [SubscriptionOfferIOS]? @@ -733,6 +750,15 @@ public enum Product: Codable, ProductCommon { return value.type } } + + public var typeDetails: ProductDetailType { + switch self { + case let .productAndroid(value): + return value.typeDetails + case let .productIos(value): + return value.typeDetails + } + } } public enum ProductSubscription: Codable, ProductCommon { @@ -828,6 +854,15 @@ public enum ProductSubscription: Codable, ProductCommon { return value.type } } + + public var typeDetails: ProductDetailType { + switch self { + case let .productSubscriptionAndroid(value): + return value.typeDetails + case let .productSubscriptionIos(value): + return value.typeDetails + } + } } public enum Purchase: Codable, PurchaseCommon { diff --git a/src/generated/types.dart b/src/generated/types.dart index 6ac3374..222ae70 100644 --- a/src/generated/types.dart +++ b/src/generated/types.dart @@ -279,6 +279,40 @@ enum PaymentModeIOS { String toJson() => value; } +enum ProductDetailType { + Consumable('consumable'), + NonConsumable('non-consumable'), + AutoRenewableSubscription('auto-renewable-subscription'), + NonRenewingSubscription('non-renewing-subscription'); + + const ProductDetailType(this.value); + final String value; + + factory ProductDetailType.fromJson(String value) { + switch (value) { + case 'consumable': + case 'CONSUMABLE': + case 'Consumable': + return ProductDetailType.Consumable; + case 'non-consumable': + case 'NON_CONSUMABLE': + case 'NonConsumable': + return ProductDetailType.NonConsumable; + case 'auto-renewable-subscription': + case 'AUTO_RENEWABLE_SUBSCRIPTION': + case 'AutoRenewableSubscription': + return ProductDetailType.AutoRenewableSubscription; + case 'non-renewing-subscription': + case 'NON_RENEWING_SUBSCRIPTION': + case 'NonRenewingSubscription': + return ProductDetailType.NonRenewingSubscription; + } + throw ArgumentError('Unknown ProductDetailType value: $value'); + } + + String toJson() => value; +} + enum ProductQueryType { InApp('in-app'), Subs('subs'), @@ -486,6 +520,7 @@ abstract class ProductCommon { double? get price; String get title; ProductType get type; + ProductDetailType get typeDetails; } abstract class PurchaseCommon { @@ -495,6 +530,7 @@ abstract class PurchaseCommon { IapPlatform get platform; String get productId; PurchaseState get purchaseState; + /// Unified purchase token (iOS JWS, Android purchaseToken) String? get purchaseToken; int get quantity; @@ -531,7 +567,8 @@ class ActiveSubscription { factory ActiveSubscription.fromJson(Map json) { return ActiveSubscription( autoRenewingAndroid: json['autoRenewingAndroid'] as bool?, - daysUntilExpirationIOS: (json['daysUntilExpirationIOS'] as num?)?.toDouble(), + daysUntilExpirationIOS: (json['daysUntilExpirationIOS'] as num?) + ?.toDouble(), environmentIOS: json['environmentIOS'] as String?, expirationDateIOS: (json['expirationDateIOS'] as num?)?.toDouble(), isActive: json['isActive'] as bool, @@ -682,24 +719,32 @@ class DiscountOfferIOS { const DiscountOfferIOS({ /// Discount identifier required this.identifier, + /// Key identifier for validation required this.keyIdentifier, + /// Cryptographic nonce required this.nonce, + /// Signature for validation required this.signature, + /// Timestamp of discount offer required this.timestamp, }); /// Discount identifier final String identifier; + /// Key identifier for validation final String keyIdentifier; + /// Cryptographic nonce final String nonce; + /// Signature for validation final String signature; + /// Timestamp of discount offer final double timestamp; @@ -810,15 +855,15 @@ class PricingPhaseAndroid { } class PricingPhasesAndroid { - const PricingPhasesAndroid({ - required this.pricingPhaseList, - }); + const PricingPhasesAndroid({required this.pricingPhaseList}); final List pricingPhaseList; factory PricingPhasesAndroid.fromJson(Map json) { return PricingPhasesAndroid( - pricingPhaseList: (json['pricingPhaseList'] as List).map((e) => PricingPhaseAndroid.fromJson(e as Map)).toList(), + pricingPhaseList: (json['pricingPhaseList'] as List) + .map((e) => PricingPhaseAndroid.fromJson(e as Map)) + .toList(), ); } @@ -845,6 +890,7 @@ class ProductAndroid extends Product implements ProductCommon { this.subscriptionOfferDetailsAndroid, required this.title, required this.type, + required this.typeDetails, }); final String currency; @@ -854,12 +900,15 @@ class ProductAndroid extends Product implements ProductCommon { final String displayPrice; final String id; final String nameAndroid; - final ProductAndroidOneTimePurchaseOfferDetail? oneTimePurchaseOfferDetailsAndroid; + final ProductAndroidOneTimePurchaseOfferDetail? + oneTimePurchaseOfferDetailsAndroid; final IapPlatform platform; final double? price; - final List? subscriptionOfferDetailsAndroid; + final List? + subscriptionOfferDetailsAndroid; final String title; final ProductType type; + final ProductDetailType typeDetails; factory ProductAndroid.fromJson(Map json) { return ProductAndroid( @@ -870,12 +919,28 @@ class ProductAndroid extends Product implements ProductCommon { displayPrice: json['displayPrice'] as String, id: json['id'] as String, nameAndroid: json['nameAndroid'] as String, - oneTimePurchaseOfferDetailsAndroid: json['oneTimePurchaseOfferDetailsAndroid'] != null ? ProductAndroidOneTimePurchaseOfferDetail.fromJson(json['oneTimePurchaseOfferDetailsAndroid'] as Map) : null, + oneTimePurchaseOfferDetailsAndroid: + json['oneTimePurchaseOfferDetailsAndroid'] != null + ? ProductAndroidOneTimePurchaseOfferDetail.fromJson( + json['oneTimePurchaseOfferDetailsAndroid'] + as Map, + ) + : null, platform: IapPlatform.fromJson(json['platform'] as String), price: (json['price'] as num?)?.toDouble(), - subscriptionOfferDetailsAndroid: (json['subscriptionOfferDetailsAndroid'] as List?) == null ? null : (json['subscriptionOfferDetailsAndroid'] as List?)!.map((e) => ProductSubscriptionAndroidOfferDetails.fromJson(e as Map)).toList(), + subscriptionOfferDetailsAndroid: + (json['subscriptionOfferDetailsAndroid'] as List?) == null + ? null + : (json['subscriptionOfferDetailsAndroid'] as List?)! + .map( + (e) => ProductSubscriptionAndroidOfferDetails.fromJson( + e as Map, + ), + ) + .toList(), title: json['title'] as String, type: ProductType.fromJson(json['type'] as String), + typeDetails: ProductDetailType.fromJson(json['typeDetails'] as String), ); } @@ -890,12 +955,16 @@ class ProductAndroid extends Product implements ProductCommon { 'displayPrice': displayPrice, 'id': id, 'nameAndroid': nameAndroid, - 'oneTimePurchaseOfferDetailsAndroid': oneTimePurchaseOfferDetailsAndroid?.toJson(), + 'oneTimePurchaseOfferDetailsAndroid': oneTimePurchaseOfferDetailsAndroid + ?.toJson(), 'platform': platform.toJson(), 'price': price, - 'subscriptionOfferDetailsAndroid': subscriptionOfferDetailsAndroid == null ? null : subscriptionOfferDetailsAndroid!.map((e) => e.toJson()).toList(), + 'subscriptionOfferDetailsAndroid': subscriptionOfferDetailsAndroid == null + ? null + : subscriptionOfferDetailsAndroid!.map((e) => e.toJson()).toList(), 'title': title, 'type': type.toJson(), + 'typeDetails': typeDetails.toJson(), }; } } @@ -911,7 +980,9 @@ class ProductAndroidOneTimePurchaseOfferDetail { final String priceAmountMicros; final String priceCurrencyCode; - factory ProductAndroidOneTimePurchaseOfferDetail.fromJson(Map json) { + factory ProductAndroidOneTimePurchaseOfferDetail.fromJson( + Map json, + ) { return ProductAndroidOneTimePurchaseOfferDetail( formattedPrice: json['formattedPrice'] as String, priceAmountMicros: json['priceAmountMicros'] as String, @@ -945,6 +1016,7 @@ class ProductIOS extends Product implements ProductCommon { this.subscriptionInfoIOS, required this.title, required this.type, + required this.typeDetails, required this.typeIOS, }); @@ -962,6 +1034,7 @@ class ProductIOS extends Product implements ProductCommon { final SubscriptionInfoIOS? subscriptionInfoIOS; final String title; final ProductType type; + final ProductDetailType typeDetails; final ProductTypeIOS typeIOS; factory ProductIOS.fromJson(Map json) { @@ -977,9 +1050,14 @@ class ProductIOS extends Product implements ProductCommon { jsonRepresentationIOS: json['jsonRepresentationIOS'] as String, platform: IapPlatform.fromJson(json['platform'] as String), price: (json['price'] as num?)?.toDouble(), - subscriptionInfoIOS: json['subscriptionInfoIOS'] != null ? SubscriptionInfoIOS.fromJson(json['subscriptionInfoIOS'] as Map) : null, + subscriptionInfoIOS: json['subscriptionInfoIOS'] != null + ? SubscriptionInfoIOS.fromJson( + json['subscriptionInfoIOS'] as Map, + ) + : null, title: json['title'] as String, type: ProductType.fromJson(json['type'] as String), + typeDetails: ProductDetailType.fromJson(json['typeDetails'] as String), typeIOS: ProductTypeIOS.fromJson(json['typeIOS'] as String), ); } @@ -1002,12 +1080,14 @@ class ProductIOS extends Product implements ProductCommon { 'subscriptionInfoIOS': subscriptionInfoIOS?.toJson(), 'title': title, 'type': type.toJson(), + 'typeDetails': typeDetails.toJson(), 'typeIOS': typeIOS.toJson(), }; } } -class ProductSubscriptionAndroid extends ProductSubscription implements ProductCommon { +class ProductSubscriptionAndroid extends ProductSubscription + implements ProductCommon { const ProductSubscriptionAndroid({ required this.currency, this.debugDescription, @@ -1022,6 +1102,7 @@ class ProductSubscriptionAndroid extends ProductSubscription implements ProductC required this.subscriptionOfferDetailsAndroid, required this.title, required this.type, + required this.typeDetails, }); final String currency; @@ -1031,12 +1112,15 @@ class ProductSubscriptionAndroid extends ProductSubscription implements ProductC final String displayPrice; final String id; final String nameAndroid; - final ProductAndroidOneTimePurchaseOfferDetail? oneTimePurchaseOfferDetailsAndroid; + final ProductAndroidOneTimePurchaseOfferDetail? + oneTimePurchaseOfferDetailsAndroid; final IapPlatform platform; final double? price; - final List subscriptionOfferDetailsAndroid; + final List + subscriptionOfferDetailsAndroid; final String title; final ProductType type; + final ProductDetailType typeDetails; factory ProductSubscriptionAndroid.fromJson(Map json) { return ProductSubscriptionAndroid( @@ -1047,12 +1131,26 @@ class ProductSubscriptionAndroid extends ProductSubscription implements ProductC displayPrice: json['displayPrice'] as String, id: json['id'] as String, nameAndroid: json['nameAndroid'] as String, - oneTimePurchaseOfferDetailsAndroid: json['oneTimePurchaseOfferDetailsAndroid'] != null ? ProductAndroidOneTimePurchaseOfferDetail.fromJson(json['oneTimePurchaseOfferDetailsAndroid'] as Map) : null, + oneTimePurchaseOfferDetailsAndroid: + json['oneTimePurchaseOfferDetailsAndroid'] != null + ? ProductAndroidOneTimePurchaseOfferDetail.fromJson( + json['oneTimePurchaseOfferDetailsAndroid'] + as Map, + ) + : null, platform: IapPlatform.fromJson(json['platform'] as String), price: (json['price'] as num?)?.toDouble(), - subscriptionOfferDetailsAndroid: (json['subscriptionOfferDetailsAndroid'] as List).map((e) => ProductSubscriptionAndroidOfferDetails.fromJson(e as Map)).toList(), + subscriptionOfferDetailsAndroid: + (json['subscriptionOfferDetailsAndroid'] as List) + .map( + (e) => ProductSubscriptionAndroidOfferDetails.fromJson( + e as Map, + ), + ) + .toList(), title: json['title'] as String, type: ProductType.fromJson(json['type'] as String), + typeDetails: ProductDetailType.fromJson(json['typeDetails'] as String), ); } @@ -1067,12 +1165,16 @@ class ProductSubscriptionAndroid extends ProductSubscription implements ProductC 'displayPrice': displayPrice, 'id': id, 'nameAndroid': nameAndroid, - 'oneTimePurchaseOfferDetailsAndroid': oneTimePurchaseOfferDetailsAndroid?.toJson(), + 'oneTimePurchaseOfferDetailsAndroid': oneTimePurchaseOfferDetailsAndroid + ?.toJson(), 'platform': platform.toJson(), 'price': price, - 'subscriptionOfferDetailsAndroid': subscriptionOfferDetailsAndroid.map((e) => e.toJson()).toList(), + 'subscriptionOfferDetailsAndroid': subscriptionOfferDetailsAndroid + .map((e) => e.toJson()) + .toList(), 'title': title, 'type': type.toJson(), + 'typeDetails': typeDetails.toJson(), }; } } @@ -1092,13 +1194,19 @@ class ProductSubscriptionAndroidOfferDetails { final String offerToken; final PricingPhasesAndroid pricingPhases; - factory ProductSubscriptionAndroidOfferDetails.fromJson(Map json) { + factory ProductSubscriptionAndroidOfferDetails.fromJson( + Map json, + ) { return ProductSubscriptionAndroidOfferDetails( basePlanId: json['basePlanId'] as String, offerId: json['offerId'] as String?, - offerTags: (json['offerTags'] as List).map((e) => e as String).toList(), + offerTags: (json['offerTags'] as List) + .map((e) => e as String) + .toList(), offerToken: json['offerToken'] as String, - pricingPhases: PricingPhasesAndroid.fromJson(json['pricingPhases'] as Map), + pricingPhases: PricingPhasesAndroid.fromJson( + json['pricingPhases'] as Map, + ), ); } @@ -1114,7 +1222,8 @@ class ProductSubscriptionAndroidOfferDetails { } } -class ProductSubscriptionIOS extends ProductSubscription implements ProductCommon { +class ProductSubscriptionIOS extends ProductSubscription + implements ProductCommon { const ProductSubscriptionIOS({ required this.currency, this.debugDescription, @@ -1138,6 +1247,7 @@ class ProductSubscriptionIOS extends ProductSubscription implements ProductCommo this.subscriptionPeriodUnitIOS, required this.title, required this.type, + required this.typeDetails, required this.typeIOS, }); @@ -1163,6 +1273,7 @@ class ProductSubscriptionIOS extends ProductSubscription implements ProductCommo final SubscriptionPeriodIOS? subscriptionPeriodUnitIOS; final String title; final ProductType type; + final ProductDetailType typeDetails; final ProductTypeIOS typeIOS; factory ProductSubscriptionIOS.fromJson(Map json) { @@ -1170,25 +1281,51 @@ class ProductSubscriptionIOS extends ProductSubscription implements ProductCommo currency: json['currency'] as String, debugDescription: json['debugDescription'] as String?, description: json['description'] as String, - discountsIOS: (json['discountsIOS'] as List?) == null ? null : (json['discountsIOS'] as List?)!.map((e) => DiscountIOS.fromJson(e as Map)).toList(), + discountsIOS: (json['discountsIOS'] as List?) == null + ? null + : (json['discountsIOS'] as List?)! + .map((e) => DiscountIOS.fromJson(e as Map)) + .toList(), displayName: json['displayName'] as String?, displayNameIOS: json['displayNameIOS'] as String, displayPrice: json['displayPrice'] as String, id: json['id'] as String, - introductoryPriceAsAmountIOS: json['introductoryPriceAsAmountIOS'] as String?, + introductoryPriceAsAmountIOS: + json['introductoryPriceAsAmountIOS'] as String?, introductoryPriceIOS: json['introductoryPriceIOS'] as String?, - introductoryPriceNumberOfPeriodsIOS: json['introductoryPriceNumberOfPeriodsIOS'] as String?, - introductoryPricePaymentModeIOS: json['introductoryPricePaymentModeIOS'] != null ? PaymentModeIOS.fromJson(json['introductoryPricePaymentModeIOS'] as String) : null, - introductoryPriceSubscriptionPeriodIOS: json['introductoryPriceSubscriptionPeriodIOS'] != null ? SubscriptionPeriodIOS.fromJson(json['introductoryPriceSubscriptionPeriodIOS'] as String) : null, + introductoryPriceNumberOfPeriodsIOS: + json['introductoryPriceNumberOfPeriodsIOS'] as String?, + introductoryPricePaymentModeIOS: + json['introductoryPricePaymentModeIOS'] != null + ? PaymentModeIOS.fromJson( + json['introductoryPricePaymentModeIOS'] as String, + ) + : null, + introductoryPriceSubscriptionPeriodIOS: + json['introductoryPriceSubscriptionPeriodIOS'] != null + ? SubscriptionPeriodIOS.fromJson( + json['introductoryPriceSubscriptionPeriodIOS'] as String, + ) + : null, isFamilyShareableIOS: json['isFamilyShareableIOS'] as bool, jsonRepresentationIOS: json['jsonRepresentationIOS'] as String, platform: IapPlatform.fromJson(json['platform'] as String), price: (json['price'] as num?)?.toDouble(), - subscriptionInfoIOS: json['subscriptionInfoIOS'] != null ? SubscriptionInfoIOS.fromJson(json['subscriptionInfoIOS'] as Map) : null, - subscriptionPeriodNumberIOS: json['subscriptionPeriodNumberIOS'] as String?, - subscriptionPeriodUnitIOS: json['subscriptionPeriodUnitIOS'] != null ? SubscriptionPeriodIOS.fromJson(json['subscriptionPeriodUnitIOS'] as String) : null, + subscriptionInfoIOS: json['subscriptionInfoIOS'] != null + ? SubscriptionInfoIOS.fromJson( + json['subscriptionInfoIOS'] as Map, + ) + : null, + subscriptionPeriodNumberIOS: + json['subscriptionPeriodNumberIOS'] as String?, + subscriptionPeriodUnitIOS: json['subscriptionPeriodUnitIOS'] != null + ? SubscriptionPeriodIOS.fromJson( + json['subscriptionPeriodUnitIOS'] as String, + ) + : null, title: json['title'] as String, type: ProductType.fromJson(json['type'] as String), + typeDetails: ProductDetailType.fromJson(json['typeDetails'] as String), typeIOS: ProductTypeIOS.fromJson(json['typeIOS'] as String), ); } @@ -1200,16 +1337,21 @@ class ProductSubscriptionIOS extends ProductSubscription implements ProductCommo 'currency': currency, 'debugDescription': debugDescription, 'description': description, - 'discountsIOS': discountsIOS == null ? null : discountsIOS!.map((e) => e.toJson()).toList(), + 'discountsIOS': discountsIOS == null + ? null + : discountsIOS!.map((e) => e.toJson()).toList(), 'displayName': displayName, 'displayNameIOS': displayNameIOS, 'displayPrice': displayPrice, 'id': id, 'introductoryPriceAsAmountIOS': introductoryPriceAsAmountIOS, 'introductoryPriceIOS': introductoryPriceIOS, - 'introductoryPriceNumberOfPeriodsIOS': introductoryPriceNumberOfPeriodsIOS, - 'introductoryPricePaymentModeIOS': introductoryPricePaymentModeIOS?.toJson(), - 'introductoryPriceSubscriptionPeriodIOS': introductoryPriceSubscriptionPeriodIOS?.toJson(), + 'introductoryPriceNumberOfPeriodsIOS': + introductoryPriceNumberOfPeriodsIOS, + 'introductoryPricePaymentModeIOS': introductoryPricePaymentModeIOS + ?.toJson(), + 'introductoryPriceSubscriptionPeriodIOS': + introductoryPriceSubscriptionPeriodIOS?.toJson(), 'isFamilyShareableIOS': isFamilyShareableIOS, 'jsonRepresentationIOS': jsonRepresentationIOS, 'platform': platform.toJson(), @@ -1219,6 +1361,7 @@ class ProductSubscriptionIOS extends ProductSubscription implements ProductCommo 'subscriptionPeriodUnitIOS': subscriptionPeriodUnitIOS?.toJson(), 'title': title, 'type': type.toJson(), + 'typeDetails': typeDetails.toJson(), 'typeIOS': typeIOS.toJson(), }; } @@ -1271,7 +1414,9 @@ class PurchaseAndroid extends Purchase implements PurchaseCommon { dataAndroid: json['dataAndroid'] as String?, developerPayloadAndroid: json['developerPayloadAndroid'] as String?, id: json['id'] as String, - ids: (json['ids'] as List?) == null ? null : (json['ids'] as List?)!.map((e) => e as String).toList(), + ids: (json['ids'] as List?) == null + ? null + : (json['ids'] as List?)!.map((e) => e as String).toList(), isAcknowledgedAndroid: json['isAcknowledgedAndroid'] as bool?, isAutoRenewing: json['isAutoRenewing'] as bool, obfuscatedAccountIdAndroid: json['obfuscatedAccountIdAndroid'] as String?, @@ -1420,12 +1565,18 @@ class PurchaseIOS extends Purchase implements PurchaseCommon { environmentIOS: json['environmentIOS'] as String?, expirationDateIOS: (json['expirationDateIOS'] as num?)?.toDouble(), id: json['id'] as String, - ids: (json['ids'] as List?) == null ? null : (json['ids'] as List?)!.map((e) => e as String).toList(), + ids: (json['ids'] as List?) == null + ? null + : (json['ids'] as List?)!.map((e) => e as String).toList(), isAutoRenewing: json['isAutoRenewing'] as bool, isUpgradedIOS: json['isUpgradedIOS'] as bool?, - offerIOS: json['offerIOS'] != null ? PurchaseOfferIOS.fromJson(json['offerIOS'] as Map) : null, - originalTransactionDateIOS: (json['originalTransactionDateIOS'] as num?)?.toDouble(), - originalTransactionIdentifierIOS: json['originalTransactionIdentifierIOS'] as String?, + offerIOS: json['offerIOS'] != null + ? PurchaseOfferIOS.fromJson(json['offerIOS'] as Map) + : null, + originalTransactionDateIOS: (json['originalTransactionDateIOS'] as num?) + ?.toDouble(), + originalTransactionIdentifierIOS: + json['originalTransactionIdentifierIOS'] as String?, ownershipTypeIOS: json['ownershipTypeIOS'] as String?, platform: IapPlatform.fromJson(json['platform'] as String), productId: json['productId'] as String, @@ -1434,7 +1585,8 @@ class PurchaseIOS extends Purchase implements PurchaseCommon { quantity: json['quantity'] as int, quantityIOS: json['quantityIOS'] as int?, reasonIOS: json['reasonIOS'] as String?, - reasonStringRepresentationIOS: json['reasonStringRepresentationIOS'] as String?, + reasonStringRepresentationIOS: + json['reasonStringRepresentationIOS'] as String?, revocationDateIOS: (json['revocationDateIOS'] as num?)?.toDouble(), revocationReasonIOS: json['revocationReasonIOS'] as String?, storefrontCountryCodeIOS: json['storefrontCountryCodeIOS'] as String?, @@ -1608,20 +1760,26 @@ class ReceiptValidationResultIOS extends ReceiptValidationResult { const ReceiptValidationResultIOS({ /// Whether the receipt is valid required this.isValid, + /// JWS representation required this.jwsRepresentation, + /// Latest transaction if available this.latestTransaction, + /// Receipt data string required this.receiptData, }); /// Whether the receipt is valid final bool isValid; + /// JWS representation final String jwsRepresentation; + /// Latest transaction if available final Purchase? latestTransaction; + /// Receipt data string final String receiptData; @@ -1629,7 +1787,9 @@ class ReceiptValidationResultIOS extends ReceiptValidationResult { return ReceiptValidationResultIOS( isValid: json['isValid'] as bool, jwsRepresentation: json['jwsRepresentation'] as String, - latestTransaction: json['latestTransaction'] != null ? Purchase.fromJson(json['latestTransaction'] as Map) : null, + latestTransaction: json['latestTransaction'] != null + ? Purchase.fromJson(json['latestTransaction'] as Map) + : null, receiptData: json['receiptData'] as String, ); } @@ -1647,10 +1807,7 @@ class ReceiptValidationResultIOS extends ReceiptValidationResult { } class RefundResultIOS { - const RefundResultIOS({ - this.message, - required this.status, - }); + const RefundResultIOS({this.message, required this.status}); final String? message; final String status; @@ -1714,6 +1871,31 @@ class RequestPurchaseResultPurchases extends RequestPurchaseResult { final List? value; } +class StorefrontResultAndroid { + const StorefrontResultAndroid({ + required this.countryCode, + required this.identifier, + }); + + final String countryCode; + final String identifier; + + factory StorefrontResultAndroid.fromJson(Map json) { + return StorefrontResultAndroid( + countryCode: json['countryCode'] as String, + identifier: json['identifier'] as String, + ); + } + + Map toJson() { + return { + '__typename': 'StorefrontResultAndroid', + 'countryCode': countryCode, + 'identifier': identifier, + }; + } +} + class SubscriptionInfoIOS { const SubscriptionInfoIOS({ this.introductoryOffer, @@ -1729,10 +1911,23 @@ class SubscriptionInfoIOS { factory SubscriptionInfoIOS.fromJson(Map json) { return SubscriptionInfoIOS( - introductoryOffer: json['introductoryOffer'] != null ? SubscriptionOfferIOS.fromJson(json['introductoryOffer'] as Map) : null, - promotionalOffers: (json['promotionalOffers'] as List?) == null ? null : (json['promotionalOffers'] as List?)!.map((e) => SubscriptionOfferIOS.fromJson(e as Map)).toList(), + introductoryOffer: json['introductoryOffer'] != null + ? SubscriptionOfferIOS.fromJson( + json['introductoryOffer'] as Map, + ) + : null, + promotionalOffers: (json['promotionalOffers'] as List?) == null + ? null + : (json['promotionalOffers'] as List?)! + .map( + (e) => + SubscriptionOfferIOS.fromJson(e as Map), + ) + .toList(), subscriptionGroupId: json['subscriptionGroupId'] as String, - subscriptionPeriod: SubscriptionPeriodValueIOS.fromJson(json['subscriptionPeriod'] as Map), + subscriptionPeriod: SubscriptionPeriodValueIOS.fromJson( + json['subscriptionPeriod'] as Map, + ), ); } @@ -1740,7 +1935,9 @@ class SubscriptionInfoIOS { return { '__typename': 'SubscriptionInfoIOS', 'introductoryOffer': introductoryOffer?.toJson(), - 'promotionalOffers': promotionalOffers == null ? null : promotionalOffers!.map((e) => e.toJson()).toList(), + 'promotionalOffers': promotionalOffers == null + ? null + : promotionalOffers!.map((e) => e.toJson()).toList(), 'subscriptionGroupId': subscriptionGroupId, 'subscriptionPeriod': subscriptionPeriod.toJson(), }; @@ -1771,7 +1968,9 @@ class SubscriptionOfferIOS { displayPrice: json['displayPrice'] as String, id: json['id'] as String, paymentMode: PaymentModeIOS.fromJson(json['paymentMode'] as String), - period: SubscriptionPeriodValueIOS.fromJson(json['period'] as Map), + period: SubscriptionPeriodValueIOS.fromJson( + json['period'] as Map, + ), periodCount: json['periodCount'] as int, price: (json['price'] as num).toDouble(), type: SubscriptionOfferTypeIOS.fromJson(json['type'] as String), @@ -1793,10 +1992,7 @@ class SubscriptionOfferIOS { } class SubscriptionPeriodValueIOS { - const SubscriptionPeriodValueIOS({ - required this.unit, - required this.value, - }); + const SubscriptionPeriodValueIOS({required this.unit, required this.value}); final SubscriptionPeriodIOS unit; final int value; @@ -1818,17 +2014,16 @@ class SubscriptionPeriodValueIOS { } class SubscriptionStatusIOS { - const SubscriptionStatusIOS({ - this.renewalInfo, - required this.state, - }); + const SubscriptionStatusIOS({this.renewalInfo, required this.state}); final RenewalInfoIOS? renewalInfo; final String state; factory SubscriptionStatusIOS.fromJson(Map json) { return SubscriptionStatusIOS( - renewalInfo: json['renewalInfo'] != null ? RenewalInfoIOS.fromJson(json['renewalInfo'] as Map) : null, + renewalInfo: json['renewalInfo'] != null + ? RenewalInfoIOS.fromJson(json['renewalInfo'] as Map) + : null, state: json['state'] as String, ); } @@ -1850,12 +2045,14 @@ class AndroidSubscriptionOfferInput { const AndroidSubscriptionOfferInput({ /// Offer token required this.offerToken, + /// Product SKU required this.sku, }); /// Offer token final String offerToken; + /// Product SKU final String sku; @@ -1867,10 +2064,7 @@ class AndroidSubscriptionOfferInput { } Map toJson() { - return { - 'offerToken': offerToken, - 'sku': sku, - }; + return {'offerToken': offerToken, 'sku': sku}; } } @@ -1878,12 +2072,14 @@ class DeepLinkOptions { const DeepLinkOptions({ /// Android package name to target (required on Android) this.packageNameAndroid, + /// Android SKU to open (required on Android) this.skuAndroid, }); /// Android package name to target (required on Android) final String? packageNameAndroid; + /// Android SKU to open (required on Android) final String? skuAndroid; @@ -1895,10 +2091,7 @@ class DeepLinkOptions { } Map toJson() { - return { - 'packageNameAndroid': packageNameAndroid, - 'skuAndroid': skuAndroid, - }; + return {'packageNameAndroid': packageNameAndroid, 'skuAndroid': skuAndroid}; } } @@ -1906,24 +2099,32 @@ class DiscountOfferInputIOS { const DiscountOfferInputIOS({ /// Discount identifier required this.identifier, + /// Key identifier for validation required this.keyIdentifier, + /// Cryptographic nonce required this.nonce, + /// Signature for validation required this.signature, + /// Timestamp of discount offer required this.timestamp, }); /// Discount identifier final String identifier; + /// Key identifier for validation final String keyIdentifier; + /// Cryptographic nonce final String nonce; + /// Signature for validation final String signature; + /// Timestamp of discount offer final double timestamp; @@ -1949,10 +2150,7 @@ class DiscountOfferInputIOS { } class ProductRequest { - const ProductRequest({ - required this.skus, - this.type, - }); + const ProductRequest({required this.skus, this.type}); final List skus; final ProductQueryType? type; @@ -1960,15 +2158,14 @@ class ProductRequest { factory ProductRequest.fromJson(Map json) { return ProductRequest( skus: (json['skus'] as List).map((e) => e as String).toList(), - type: json['type'] != null ? ProductQueryType.fromJson(json['type'] as String) : null, + type: json['type'] != null + ? ProductQueryType.fromJson(json['type'] as String) + : null, ); } Map toJson() { - return { - 'skus': skus.map((e) => e).toList(), - 'type': type?.toJson(), - }; + return {'skus': skus.map((e) => e).toList(), 'type': type?.toJson()}; } } @@ -1998,7 +2195,9 @@ class PurchaseInput { factory PurchaseInput.fromJson(Map json) { return PurchaseInput( id: json['id'] as String, - ids: (json['ids'] as List?) == null ? null : (json['ids'] as List?)!.map((e) => e as String).toList(), + ids: (json['ids'] as List?) == null + ? null + : (json['ids'] as List?)!.map((e) => e as String).toList(), isAutoRenewing: json['isAutoRenewing'] as bool, platform: IapPlatform.fromJson(json['platform'] as String), productId: json['productId'] as String, @@ -2028,18 +2227,21 @@ class PurchaseOptions { const PurchaseOptions({ /// Also emit results through the iOS event listeners this.alsoPublishToEventListenerIOS, + /// Limit to currently active items on iOS this.onlyIncludeActiveItemsIOS, }); /// Also emit results through the iOS event listeners final bool? alsoPublishToEventListenerIOS; + /// Limit to currently active items on iOS final bool? onlyIncludeActiveItemsIOS; factory PurchaseOptions.fromJson(Map json) { return PurchaseOptions( - alsoPublishToEventListenerIOS: json['alsoPublishToEventListenerIOS'] as bool?, + alsoPublishToEventListenerIOS: + json['alsoPublishToEventListenerIOS'] as bool?, onlyIncludeActiveItemsIOS: json['onlyIncludeActiveItemsIOS'] as bool?, ); } @@ -2088,27 +2290,30 @@ class ReceiptValidationProps { const ReceiptValidationProps({ /// Android-specific validation options this.androidOptions, + /// Product SKU to validate required this.sku, }); /// Android-specific validation options final ReceiptValidationAndroidOptions? androidOptions; + /// Product SKU to validate final String sku; factory ReceiptValidationProps.fromJson(Map json) { return ReceiptValidationProps( - androidOptions: json['androidOptions'] != null ? ReceiptValidationAndroidOptions.fromJson(json['androidOptions'] as Map) : null, + androidOptions: json['androidOptions'] != null + ? ReceiptValidationAndroidOptions.fromJson( + json['androidOptions'] as Map, + ) + : null, sku: json['sku'] as String, ); } Map toJson() { - return { - 'androidOptions': androidOptions?.toJson(), - 'sku': sku, - }; + return {'androidOptions': androidOptions?.toJson(), 'sku': sku}; } } @@ -2116,20 +2321,26 @@ class RequestPurchaseAndroidProps { const RequestPurchaseAndroidProps({ /// Personalized offer flag this.isOfferPersonalized, + /// Obfuscated account ID this.obfuscatedAccountIdAndroid, + /// Obfuscated profile ID this.obfuscatedProfileIdAndroid, + /// List of product SKUs required this.skus, }); /// Personalized offer flag final bool? isOfferPersonalized; + /// Obfuscated account ID final String? obfuscatedAccountIdAndroid; + /// Obfuscated profile ID final String? obfuscatedProfileIdAndroid; + /// List of product SKUs final List skus; @@ -2156,40 +2367,54 @@ class RequestPurchaseIosProps { const RequestPurchaseIosProps({ /// Auto-finish transaction (dangerous) this.andDangerouslyFinishTransactionAutomatically, + /// App account token for user tracking this.appAccountToken, + /// Purchase quantity this.quantity, + /// Product SKU required this.sku, + /// Discount offer to apply this.withOffer, }); /// Auto-finish transaction (dangerous) final bool? andDangerouslyFinishTransactionAutomatically; + /// App account token for user tracking final String? appAccountToken; + /// Purchase quantity final int? quantity; + /// Product SKU final String sku; + /// Discount offer to apply final DiscountOfferInputIOS? withOffer; factory RequestPurchaseIosProps.fromJson(Map json) { return RequestPurchaseIosProps( - andDangerouslyFinishTransactionAutomatically: json['andDangerouslyFinishTransactionAutomatically'] as bool?, + andDangerouslyFinishTransactionAutomatically: + json['andDangerouslyFinishTransactionAutomatically'] as bool?, appAccountToken: json['appAccountToken'] as String?, quantity: json['quantity'] as int?, sku: json['sku'] as String, - withOffer: json['withOffer'] != null ? DiscountOfferInputIOS.fromJson(json['withOffer'] as Map) : null, + withOffer: json['withOffer'] != null + ? DiscountOfferInputIOS.fromJson( + json['withOffer'] as Map, + ) + : null, ); } Map toJson() { return { - 'andDangerouslyFinishTransactionAutomatically': andDangerouslyFinishTransactionAutomatically, + 'andDangerouslyFinishTransactionAutomatically': + andDangerouslyFinishTransactionAutomatically, 'appAccountToken': appAccountToken, 'quantity': quantity, 'sku': sku, @@ -2199,17 +2424,23 @@ class RequestPurchaseIosProps { } class RequestPurchaseProps { - RequestPurchaseProps({ - required this.request, - ProductQueryType? type, - }) : type = type ?? (request is RequestPurchasePropsRequestPurchase - ? ProductQueryType.InApp - : ProductQueryType.Subs) { - if (request is RequestPurchasePropsRequestPurchase && this.type != ProductQueryType.InApp) { - throw ArgumentError('type must be IN_APP when requestPurchase is provided'); + RequestPurchaseProps({required this.request, ProductQueryType? type}) + : type = + type ?? + (request is RequestPurchasePropsRequestPurchase + ? ProductQueryType.InApp + : ProductQueryType.Subs) { + if (request is RequestPurchasePropsRequestPurchase && + this.type != ProductQueryType.InApp) { + throw ArgumentError( + 'type must be IN_APP when requestPurchase is provided', + ); } - if (request is RequestPurchasePropsRequestSubscription && this.type != ProductQueryType.Subs) { - throw ArgumentError('type must be SUBS when requestSubscription is provided'); + if (request is RequestPurchasePropsRequestSubscription && + this.type != ProductQueryType.Subs) { + throw ArgumentError( + 'type must be SUBS when requestSubscription is provided', + ); } } @@ -2218,50 +2449,76 @@ class RequestPurchaseProps { factory RequestPurchaseProps.fromJson(Map json) { final typeValue = json['type'] as String?; - final parsedType = typeValue != null ? ProductQueryType.fromJson(typeValue) : null; + final parsedType = typeValue != null + ? ProductQueryType.fromJson(typeValue) + : null; final purchaseJson = json['requestPurchase'] as Map?; if (purchaseJson != null) { - final request = RequestPurchasePropsRequestPurchase(RequestPurchasePropsByPlatforms.fromJson(purchaseJson)); + final request = RequestPurchasePropsRequestPurchase( + RequestPurchasePropsByPlatforms.fromJson(purchaseJson), + ); final finalType = parsedType ?? ProductQueryType.InApp; if (finalType != ProductQueryType.InApp) { - throw ArgumentError('type must be IN_APP when requestPurchase is provided'); + throw ArgumentError( + 'type must be IN_APP when requestPurchase is provided', + ); } return RequestPurchaseProps(request: request, type: finalType); } - final subscriptionJson = json['requestSubscription'] as Map?; + final subscriptionJson = + json['requestSubscription'] as Map?; if (subscriptionJson != null) { - final request = RequestPurchasePropsRequestSubscription(RequestSubscriptionPropsByPlatforms.fromJson(subscriptionJson)); + final request = RequestPurchasePropsRequestSubscription( + RequestSubscriptionPropsByPlatforms.fromJson(subscriptionJson), + ); final finalType = parsedType ?? ProductQueryType.Subs; if (finalType != ProductQueryType.Subs) { - throw ArgumentError('type must be SUBS when requestSubscription is provided'); + throw ArgumentError( + 'type must be SUBS when requestSubscription is provided', + ); } return RequestPurchaseProps(request: request, type: finalType); } - throw ArgumentError('RequestPurchaseProps requires requestPurchase or requestSubscription'); + throw ArgumentError( + 'RequestPurchaseProps requires requestPurchase or requestSubscription', + ); } Map toJson() { if (request is RequestPurchasePropsRequestPurchase) { return { - 'requestPurchase': (request as RequestPurchasePropsRequestPurchase).value.toJson(), + 'requestPurchase': (request as RequestPurchasePropsRequestPurchase) + .value + .toJson(), 'type': type.toJson(), }; } if (request is RequestPurchasePropsRequestSubscription) { return { - 'requestSubscription': (request as RequestPurchasePropsRequestSubscription).value.toJson(), + 'requestSubscription': + (request as RequestPurchasePropsRequestSubscription).value.toJson(), 'type': type.toJson(), }; } throw StateError('Unsupported RequestPurchaseProps request variant'); } - static RequestPurchaseProps inApp({required RequestPurchasePropsByPlatforms request}) { - return RequestPurchaseProps(request: RequestPurchasePropsRequestPurchase(request), type: ProductQueryType.InApp); + static RequestPurchaseProps inApp({ + required RequestPurchasePropsByPlatforms request, + }) { + return RequestPurchaseProps( + request: RequestPurchasePropsRequestPurchase(request), + type: ProductQueryType.InApp, + ); } - static RequestPurchaseProps subs({required RequestSubscriptionPropsByPlatforms request}) { - return RequestPurchaseProps(request: RequestPurchasePropsRequestSubscription(request), type: ProductQueryType.Subs); + static RequestPurchaseProps subs({ + required RequestSubscriptionPropsByPlatforms request, + }) { + return RequestPurchaseProps( + request: RequestPurchasePropsRequestSubscription(request), + type: ProductQueryType.Subs, + ); } } @@ -2274,7 +2531,8 @@ class RequestPurchasePropsRequestPurchase extends RequestPurchasePropsRequest { final RequestPurchasePropsByPlatforms value; } -class RequestPurchasePropsRequestSubscription extends RequestPurchasePropsRequest { +class RequestPurchasePropsRequestSubscription + extends RequestPurchasePropsRequest { const RequestPurchasePropsRequestSubscription(this.value); final RequestSubscriptionPropsByPlatforms value; } @@ -2283,27 +2541,34 @@ class RequestPurchasePropsByPlatforms { const RequestPurchasePropsByPlatforms({ /// Android-specific purchase parameters this.android, + /// iOS-specific purchase parameters this.ios, }); /// Android-specific purchase parameters final RequestPurchaseAndroidProps? android; + /// iOS-specific purchase parameters final RequestPurchaseIosProps? ios; factory RequestPurchasePropsByPlatforms.fromJson(Map json) { return RequestPurchasePropsByPlatforms( - android: json['android'] != null ? RequestPurchaseAndroidProps.fromJson(json['android'] as Map) : null, - ios: json['ios'] != null ? RequestPurchaseIosProps.fromJson(json['ios'] as Map) : null, + android: json['android'] != null + ? RequestPurchaseAndroidProps.fromJson( + json['android'] as Map, + ) + : null, + ios: json['ios'] != null + ? RequestPurchaseIosProps.fromJson( + json['ios'] as Map, + ) + : null, ); } Map toJson() { - return { - 'android': android?.toJson(), - 'ios': ios?.toJson(), - }; + return {'android': android?.toJson(), 'ios': ios?.toJson()}; } } @@ -2311,32 +2576,44 @@ class RequestSubscriptionAndroidProps { const RequestSubscriptionAndroidProps({ /// Personalized offer flag this.isOfferPersonalized, + /// Obfuscated account ID this.obfuscatedAccountIdAndroid, + /// Obfuscated profile ID this.obfuscatedProfileIdAndroid, + /// Purchase token for upgrades/downgrades this.purchaseTokenAndroid, + /// Replacement mode for subscription changes this.replacementModeAndroid, + /// List of subscription SKUs required this.skus, + /// Subscription offers this.subscriptionOffers, }); /// Personalized offer flag final bool? isOfferPersonalized; + /// Obfuscated account ID final String? obfuscatedAccountIdAndroid; + /// Obfuscated profile ID final String? obfuscatedProfileIdAndroid; + /// Purchase token for upgrades/downgrades final String? purchaseTokenAndroid; + /// Replacement mode for subscription changes final int? replacementModeAndroid; + /// List of subscription SKUs final List skus; + /// Subscription offers final List? subscriptionOffers; @@ -2348,7 +2625,15 @@ class RequestSubscriptionAndroidProps { purchaseTokenAndroid: json['purchaseTokenAndroid'] as String?, replacementModeAndroid: json['replacementModeAndroid'] as int?, skus: (json['skus'] as List).map((e) => e as String).toList(), - subscriptionOffers: (json['subscriptionOffers'] as List?) == null ? null : (json['subscriptionOffers'] as List?)!.map((e) => AndroidSubscriptionOfferInput.fromJson(e as Map)).toList(), + subscriptionOffers: (json['subscriptionOffers'] as List?) == null + ? null + : (json['subscriptionOffers'] as List?)! + .map( + (e) => AndroidSubscriptionOfferInput.fromJson( + e as Map, + ), + ) + .toList(), ); } @@ -2360,7 +2645,9 @@ class RequestSubscriptionAndroidProps { 'purchaseTokenAndroid': purchaseTokenAndroid, 'replacementModeAndroid': replacementModeAndroid, 'skus': skus.map((e) => e).toList(), - 'subscriptionOffers': subscriptionOffers == null ? null : subscriptionOffers!.map((e) => e.toJson()).toList(), + 'subscriptionOffers': subscriptionOffers == null + ? null + : subscriptionOffers!.map((e) => e.toJson()).toList(), }; } } @@ -2382,17 +2669,23 @@ class RequestSubscriptionIosProps { factory RequestSubscriptionIosProps.fromJson(Map json) { return RequestSubscriptionIosProps( - andDangerouslyFinishTransactionAutomatically: json['andDangerouslyFinishTransactionAutomatically'] as bool?, + andDangerouslyFinishTransactionAutomatically: + json['andDangerouslyFinishTransactionAutomatically'] as bool?, appAccountToken: json['appAccountToken'] as String?, quantity: json['quantity'] as int?, sku: json['sku'] as String, - withOffer: json['withOffer'] != null ? DiscountOfferInputIOS.fromJson(json['withOffer'] as Map) : null, + withOffer: json['withOffer'] != null + ? DiscountOfferInputIOS.fromJson( + json['withOffer'] as Map, + ) + : null, ); } Map toJson() { return { - 'andDangerouslyFinishTransactionAutomatically': andDangerouslyFinishTransactionAutomatically, + 'andDangerouslyFinishTransactionAutomatically': + andDangerouslyFinishTransactionAutomatically, 'appAccountToken': appAccountToken, 'quantity': quantity, 'sku': sku, @@ -2405,27 +2698,36 @@ class RequestSubscriptionPropsByPlatforms { const RequestSubscriptionPropsByPlatforms({ /// Android-specific subscription parameters this.android, + /// iOS-specific subscription parameters this.ios, }); /// Android-specific subscription parameters final RequestSubscriptionAndroidProps? android; + /// iOS-specific subscription parameters final RequestSubscriptionIosProps? ios; - factory RequestSubscriptionPropsByPlatforms.fromJson(Map json) { + factory RequestSubscriptionPropsByPlatforms.fromJson( + Map json, + ) { return RequestSubscriptionPropsByPlatforms( - android: json['android'] != null ? RequestSubscriptionAndroidProps.fromJson(json['android'] as Map) : null, - ios: json['ios'] != null ? RequestSubscriptionIosProps.fromJson(json['ios'] as Map) : null, + android: json['android'] != null + ? RequestSubscriptionAndroidProps.fromJson( + json['android'] as Map, + ) + : null, + ios: json['ios'] != null + ? RequestSubscriptionIosProps.fromJson( + json['ios'] as Map, + ) + : null, ); } Map toJson() { - return { - 'android': android?.toJson(), - 'ios': ios?.toJson(), - }; + return {'android': android?.toJson(), 'ios': ios?.toJson()}; } } @@ -2465,6 +2767,8 @@ sealed class Product implements ProductCommon { String get title; @override ProductType get type; + @override + ProductDetailType get typeDetails; Map toJson(); } @@ -2480,7 +2784,9 @@ sealed class ProductSubscription implements ProductCommon { case 'ProductSubscriptionIOS': return ProductSubscriptionIOS.fromJson(json); } - throw ArgumentError('Unknown __typename for ProductSubscription: $typeName'); + throw ArgumentError( + 'Unknown __typename for ProductSubscription: $typeName', + ); } @override @@ -2503,6 +2809,8 @@ sealed class ProductSubscription implements ProductCommon { String get title; @override ProductType get type; + @override + ProductDetailType get typeDetails; Map toJson(); } @@ -2533,6 +2841,7 @@ sealed class Purchase implements PurchaseCommon { String get productId; @override PurchaseState get purchaseState; + /// Unified purchase token (iOS JWS, Android purchaseToken) @override String? get purchaseToken; @@ -2555,7 +2864,9 @@ sealed class ReceiptValidationResult { case 'ReceiptValidationResultIOS': return ReceiptValidationResultIOS.fromJson(json); } - throw ArgumentError('Unknown __typename for ReceiptValidationResult: $typeName'); + throw ArgumentError( + 'Unknown __typename for ReceiptValidationResult: $typeName', + ); } Map toJson(); @@ -2567,83 +2878,121 @@ sealed class ReceiptValidationResult { abstract class MutationResolver { /// Acknowledge a non-consumable purchase or subscription Future acknowledgePurchaseAndroid(String purchaseToken); + /// Initiate a refund request for a product (iOS 15+) Future beginRefundRequestIOS(String sku); + /// Clear pending transactions from the StoreKit payment queue Future clearTransactionIOS(); + /// Consume a purchase token so it can be repurchased Future consumePurchaseAndroid(String purchaseToken); + /// Open the native subscription management surface Future deepLinkToSubscriptions([DeepLinkOptions? options]); + /// Close the platform billing connection Future endConnection(); + /// Finish a transaction after validating receipts Future finishTransaction({ required PurchaseInput purchase, bool? isConsumable, }); + /// Establish the platform billing connection Future initConnection(); + /// Present the App Store code redemption sheet Future presentCodeRedemptionSheetIOS(); + /// Initiate a purchase flow; rely on events for final state Future requestPurchase(RequestPurchaseProps params); + /// Purchase the promoted product surfaced by the App Store Future requestPurchaseOnPromotedProductIOS(); + /// Restore completed purchases across platforms Future restorePurchases(); + /// Open subscription management UI and return changed purchases (iOS 15+) Future> showManageSubscriptionsIOS(); + /// Force a StoreKit sync for transactions (iOS 15+) Future syncIOS(); + /// Validate purchase receipts with the configured providers - Future validateReceipt(ReceiptValidationProps options); + Future validateReceipt( + ReceiptValidationProps options, + ); } /// GraphQL root query operations. abstract class QueryResolver { /// Get current StoreKit 2 entitlements (iOS 15+) Future currentEntitlementIOS(String sku); + /// Retrieve products or subscriptions from the store Future fetchProducts(ProductRequest params); + /// Get active subscriptions (filters by subscriptionIds when provided) - Future> getActiveSubscriptions([List? subscriptionIds]); + Future> getActiveSubscriptions([ + List? subscriptionIds, + ]); + /// Fetch the current app transaction (iOS 16+) Future getAppTransactionIOS(); + /// Get all available purchases for the current user Future> getAvailablePurchases([PurchaseOptions? options]); + /// Retrieve all pending transactions in the StoreKit queue Future> getPendingTransactionsIOS(); + /// Get the currently promoted product (iOS 11+) Future getPromotedProductIOS(); + /// Get base64-encoded receipt data for validation Future getReceiptDataIOS(); + /// Get the current storefront country code Future getStorefront(); + /// Get the current App Store storefront country code Future getStorefrontIOS(); + /// Get the transaction JWS (StoreKit 2) Future getTransactionJwsIOS(String sku); + /// Check whether the user has active subscriptions Future hasActiveSubscriptions([List? subscriptionIds]); + /// Check introductory offer eligibility for a subscription group Future isEligibleForIntroOfferIOS(String groupID); + /// Verify a StoreKit 2 transaction signature Future isTransactionVerifiedIOS(String sku); + /// Get the latest transaction for a product using StoreKit 2 Future latestTransactionIOS(String sku); + /// Get StoreKit 2 subscription status details (iOS 15+) Future> subscriptionStatusIOS(String sku); + /// Validate a receipt for a specific product - Future validateReceiptIOS(ReceiptValidationProps options); + Future validateReceiptIOS( + ReceiptValidationProps options, + ); } /// GraphQL root subscription operations. abstract class SubscriptionResolver { /// Fires when the App Store surfaces a promoted product (iOS only) Future promotedProductIOS(); + /// Fires when a purchase fails or is cancelled Future purchaseError(); + /// Fires when a purchase completes successfully or a pending purchase resolves Future purchaseUpdated(); } @@ -2652,24 +3001,33 @@ abstract class SubscriptionResolver { // MARK: - Mutation Helpers -typedef MutationAcknowledgePurchaseAndroidHandler = Future Function(String purchaseToken); -typedef MutationBeginRefundRequestIOSHandler = Future Function(String sku); +typedef MutationAcknowledgePurchaseAndroidHandler = + Future Function(String purchaseToken); +typedef MutationBeginRefundRequestIOSHandler = + Future Function(String sku); typedef MutationClearTransactionIOSHandler = Future Function(); -typedef MutationConsumePurchaseAndroidHandler = Future Function(String purchaseToken); -typedef MutationDeepLinkToSubscriptionsHandler = Future Function([DeepLinkOptions? options]); +typedef MutationConsumePurchaseAndroidHandler = + Future Function(String purchaseToken); +typedef MutationDeepLinkToSubscriptionsHandler = + Future Function([DeepLinkOptions? options]); typedef MutationEndConnectionHandler = Future Function(); -typedef MutationFinishTransactionHandler = Future Function({ - required PurchaseInput purchase, - bool? isConsumable, -}); +typedef MutationFinishTransactionHandler = + Future Function({ + required PurchaseInput purchase, + bool? isConsumable, + }); typedef MutationInitConnectionHandler = Future Function(); typedef MutationPresentCodeRedemptionSheetIOSHandler = Future Function(); -typedef MutationRequestPurchaseHandler = Future Function(RequestPurchaseProps params); -typedef MutationRequestPurchaseOnPromotedProductIOSHandler = Future Function(); +typedef MutationRequestPurchaseHandler = + Future Function(RequestPurchaseProps params); +typedef MutationRequestPurchaseOnPromotedProductIOSHandler = + Future Function(); typedef MutationRestorePurchasesHandler = Future Function(); -typedef MutationShowManageSubscriptionsIOSHandler = Future> Function(); +typedef MutationShowManageSubscriptionsIOSHandler = + Future> Function(); typedef MutationSyncIOSHandler = Future Function(); -typedef MutationValidateReceiptHandler = Future Function(ReceiptValidationProps options); +typedef MutationValidateReceiptHandler = + Future Function(ReceiptValidationProps options); class MutationHandlers { const MutationHandlers({ @@ -2698,9 +3056,11 @@ class MutationHandlers { final MutationEndConnectionHandler? endConnection; final MutationFinishTransactionHandler? finishTransaction; final MutationInitConnectionHandler? initConnection; - final MutationPresentCodeRedemptionSheetIOSHandler? presentCodeRedemptionSheetIOS; + final MutationPresentCodeRedemptionSheetIOSHandler? + presentCodeRedemptionSheetIOS; final MutationRequestPurchaseHandler? requestPurchase; - final MutationRequestPurchaseOnPromotedProductIOSHandler? requestPurchaseOnPromotedProductIOS; + final MutationRequestPurchaseOnPromotedProductIOSHandler? + requestPurchaseOnPromotedProductIOS; final MutationRestorePurchasesHandler? restorePurchases; final MutationShowManageSubscriptionsIOSHandler? showManageSubscriptionsIOS; final MutationSyncIOSHandler? syncIOS; @@ -2709,23 +3069,34 @@ class MutationHandlers { // MARK: - Query Helpers -typedef QueryCurrentEntitlementIOSHandler = Future Function(String sku); -typedef QueryFetchProductsHandler = Future Function(ProductRequest params); -typedef QueryGetActiveSubscriptionsHandler = Future> Function([List? subscriptionIds]); +typedef QueryCurrentEntitlementIOSHandler = + Future Function(String sku); +typedef QueryFetchProductsHandler = + Future Function(ProductRequest params); +typedef QueryGetActiveSubscriptionsHandler = + Future> Function([List? subscriptionIds]); typedef QueryGetAppTransactionIOSHandler = Future Function(); -typedef QueryGetAvailablePurchasesHandler = Future> Function([PurchaseOptions? options]); -typedef QueryGetPendingTransactionsIOSHandler = Future> Function(); +typedef QueryGetAvailablePurchasesHandler = + Future> Function([PurchaseOptions? options]); +typedef QueryGetPendingTransactionsIOSHandler = + Future> Function(); typedef QueryGetPromotedProductIOSHandler = Future Function(); typedef QueryGetReceiptDataIOSHandler = Future Function(); typedef QueryGetStorefrontHandler = Future Function(); typedef QueryGetStorefrontIOSHandler = Future Function(); typedef QueryGetTransactionJwsIOSHandler = Future Function(String sku); -typedef QueryHasActiveSubscriptionsHandler = Future Function([List? subscriptionIds]); -typedef QueryIsEligibleForIntroOfferIOSHandler = Future Function(String groupID); -typedef QueryIsTransactionVerifiedIOSHandler = Future Function(String sku); -typedef QueryLatestTransactionIOSHandler = Future Function(String sku); -typedef QuerySubscriptionStatusIOSHandler = Future> Function(String sku); -typedef QueryValidateReceiptIOSHandler = Future Function(ReceiptValidationProps options); +typedef QueryHasActiveSubscriptionsHandler = + Future Function([List? subscriptionIds]); +typedef QueryIsEligibleForIntroOfferIOSHandler = + Future Function(String groupID); +typedef QueryIsTransactionVerifiedIOSHandler = + Future Function(String sku); +typedef QueryLatestTransactionIOSHandler = + Future Function(String sku); +typedef QuerySubscriptionStatusIOSHandler = + Future> Function(String sku); +typedef QueryValidateReceiptIOSHandler = + Future Function(ReceiptValidationProps options); class QueryHandlers { const QueryHandlers({ diff --git a/src/generated/types.ts b/src/generated/types.ts index fe48b65..52af395 100644 --- a/src/generated/types.ts +++ b/src/generated/types.ts @@ -227,6 +227,7 @@ export interface ProductAndroid extends ProductCommon { subscriptionOfferDetailsAndroid?: (ProductSubscriptionAndroidOfferDetails[] | null); title: string; type: ProductType; + typeDetails: ProductDetailType; } export interface ProductAndroidOneTimePurchaseOfferDetail { @@ -246,8 +247,11 @@ export interface ProductCommon { price?: (number | null); title: string; type: ProductType; + typeDetails: ProductDetailType; } +export type ProductDetailType = 'consumable' | 'non-consumable' | 'auto-renewable-subscription' | 'non-renewing-subscription'; + export interface ProductIOS extends ProductCommon { currency: string; debugDescription?: (string | null); @@ -263,6 +267,7 @@ export interface ProductIOS extends ProductCommon { subscriptionInfoIOS?: (SubscriptionInfoIOS | null); title: string; type: ProductType; + typeDetails: ProductDetailType; typeIOS: ProductTypeIOS; } @@ -289,6 +294,7 @@ export interface ProductSubscriptionAndroid extends ProductCommon { subscriptionOfferDetailsAndroid: ProductSubscriptionAndroidOfferDetails[]; title: string; type: ProductType; + typeDetails: ProductDetailType; } export interface ProductSubscriptionAndroidOfferDetails { @@ -322,6 +328,7 @@ export interface ProductSubscriptionIOS extends ProductCommon { subscriptionPeriodUnitIOS?: (SubscriptionPeriodIOS | null); title: string; type: ProductType; + typeDetails: ProductDetailType; typeIOS: ProductTypeIOS; } @@ -632,6 +639,11 @@ export interface RequestSubscriptionPropsByPlatforms { ios?: (RequestSubscriptionIosProps | null); } +export interface StorefrontResultAndroid { + countryCode: string; + identifier: string; +} + export interface Subscription { /** Fires when the App Store surfaces a promoted product (iOS only) */ promotedProductIOS: string; diff --git a/src/type-android.graphql b/src/type-android.graphql index 3709ceb..ce7dd62 100644 --- a/src/type-android.graphql +++ b/src/type-android.graphql @@ -43,6 +43,7 @@ type ProductAndroid implements ProductCommon { # Android-specific nameAndroid: String! + typeDetails: ProductDetailType! oneTimePurchaseOfferDetailsAndroid: ProductAndroidOneTimePurchaseOfferDetail subscriptionOfferDetailsAndroid: [ProductSubscriptionAndroidOfferDetails!] } @@ -62,6 +63,7 @@ type ProductSubscriptionAndroid implements ProductCommon { # Android-specific nameAndroid: String! + typeDetails: ProductDetailType! oneTimePurchaseOfferDetailsAndroid: ProductAndroidOneTimePurchaseOfferDetail subscriptionOfferDetailsAndroid: [ProductSubscriptionAndroidOfferDetails!]! } diff --git a/src/type-ios.graphql b/src/type-ios.graphql index a242e42..71fe78d 100644 --- a/src/type-ios.graphql +++ b/src/type-ios.graphql @@ -1,7 +1,8 @@ # iOS-specific GraphQL Types # iOS detailed product types -enum ProductTypeIOS { +# @deprecated Use ProductDetailType from type.graphql instead +enum ProductTypeIOS @deprecated(reason: "Use ProductDetailType from common types instead") { Consumable NonConsumable AutoRenewableSubscription @@ -75,6 +76,7 @@ type ProductIOS implements ProductCommon { jsonRepresentationIOS: String! subscriptionInfoIOS: SubscriptionInfoIOS typeIOS: ProductTypeIOS! + typeDetails: ProductDetailType! } # iOS subscription product @@ -97,6 +99,7 @@ type ProductSubscriptionIOS implements ProductCommon { jsonRepresentationIOS: String! subscriptionInfoIOS: SubscriptionInfoIOS typeIOS: ProductTypeIOS! + typeDetails: ProductDetailType! discountsIOS: [DiscountIOS!] introductoryPriceIOS: String diff --git a/src/type.graphql b/src/type.graphql index 57bd0e0..7b10602 100644 --- a/src/type.graphql +++ b/src/type.graphql @@ -12,6 +12,17 @@ enum ProductType { Subs } +# Detailed product types (unified for both Android and iOS) +enum ProductDetailType { + # In-app purchases (one-time) + Consumable + NonConsumable + + # Subscriptions + AutoRenewableSubscription + NonRenewingSubscription +} + # Purchase lifecycle states enum PurchaseState { Pending @@ -35,6 +46,7 @@ interface ProductCommon { title: String! description: String! type: ProductType! + typeDetails: ProductDetailType! displayName: String displayPrice: String! currency: String! From e8fa569d38d32b1eb6dae74dea7685f87fe6e403 Mon Sep 17 00:00:00 2001 From: Hyo Date: Sun, 28 Sep 2025 01:38:11 +0900 Subject: [PATCH 2/2] chore: regenerate types --- src/generated/Types.kt | 21 -- src/generated/Types.swift | 5 - src/generated/types.dart | 636 ++++++++++---------------------------- src/generated/types.ts | 5 - 4 files changed, 160 insertions(+), 507 deletions(-) diff --git a/src/generated/Types.kt b/src/generated/Types.kt index e7cb583..5c38a86 100644 --- a/src/generated/Types.kt +++ b/src/generated/Types.kt @@ -1402,27 +1402,6 @@ public data class RequestPurchaseResultPurchase(val value: Purchase?) : RequestP public data class RequestPurchaseResultPurchases(val value: List?) : RequestPurchaseResult -public data class StorefrontResultAndroid( - val countryCode: String, - val identifier: String -) { - - companion object { - fun fromJson(json: Map): StorefrontResultAndroid { - return StorefrontResultAndroid( - countryCode = json["countryCode"] as String, - identifier = json["identifier"] as String, - ) - } - } - - fun toJson(): Map = mapOf( - "__typename" to "StorefrontResultAndroid", - "countryCode" to countryCode, - "identifier" to identifier, - ) -} - public data class SubscriptionInfoIOS( val introductoryOffer: SubscriptionOfferIOS? = null, val promotionalOffers: List? = null, diff --git a/src/generated/Types.swift b/src/generated/Types.swift index da5b372..4829efd 100644 --- a/src/generated/Types.swift +++ b/src/generated/Types.swift @@ -426,11 +426,6 @@ public enum RequestPurchaseResult { case purchases([Purchase]?) } -public struct StorefrontResultAndroid: Codable { - public var countryCode: String - public var identifier: String -} - public struct SubscriptionInfoIOS: Codable { public var introductoryOffer: SubscriptionOfferIOS? public var promotionalOffers: [SubscriptionOfferIOS]? diff --git a/src/generated/types.dart b/src/generated/types.dart index 222ae70..01b9310 100644 --- a/src/generated/types.dart +++ b/src/generated/types.dart @@ -530,7 +530,6 @@ abstract class PurchaseCommon { IapPlatform get platform; String get productId; PurchaseState get purchaseState; - /// Unified purchase token (iOS JWS, Android purchaseToken) String? get purchaseToken; int get quantity; @@ -567,8 +566,7 @@ class ActiveSubscription { factory ActiveSubscription.fromJson(Map json) { return ActiveSubscription( autoRenewingAndroid: json['autoRenewingAndroid'] as bool?, - daysUntilExpirationIOS: (json['daysUntilExpirationIOS'] as num?) - ?.toDouble(), + daysUntilExpirationIOS: (json['daysUntilExpirationIOS'] as num?)?.toDouble(), environmentIOS: json['environmentIOS'] as String?, expirationDateIOS: (json['expirationDateIOS'] as num?)?.toDouble(), isActive: json['isActive'] as bool, @@ -719,32 +717,24 @@ class DiscountOfferIOS { const DiscountOfferIOS({ /// Discount identifier required this.identifier, - /// Key identifier for validation required this.keyIdentifier, - /// Cryptographic nonce required this.nonce, - /// Signature for validation required this.signature, - /// Timestamp of discount offer required this.timestamp, }); /// Discount identifier final String identifier; - /// Key identifier for validation final String keyIdentifier; - /// Cryptographic nonce final String nonce; - /// Signature for validation final String signature; - /// Timestamp of discount offer final double timestamp; @@ -855,15 +845,15 @@ class PricingPhaseAndroid { } class PricingPhasesAndroid { - const PricingPhasesAndroid({required this.pricingPhaseList}); + const PricingPhasesAndroid({ + required this.pricingPhaseList, + }); final List pricingPhaseList; factory PricingPhasesAndroid.fromJson(Map json) { return PricingPhasesAndroid( - pricingPhaseList: (json['pricingPhaseList'] as List) - .map((e) => PricingPhaseAndroid.fromJson(e as Map)) - .toList(), + pricingPhaseList: (json['pricingPhaseList'] as List).map((e) => PricingPhaseAndroid.fromJson(e as Map)).toList(), ); } @@ -900,12 +890,10 @@ class ProductAndroid extends Product implements ProductCommon { final String displayPrice; final String id; final String nameAndroid; - final ProductAndroidOneTimePurchaseOfferDetail? - oneTimePurchaseOfferDetailsAndroid; + final ProductAndroidOneTimePurchaseOfferDetail? oneTimePurchaseOfferDetailsAndroid; final IapPlatform platform; final double? price; - final List? - subscriptionOfferDetailsAndroid; + final List? subscriptionOfferDetailsAndroid; final String title; final ProductType type; final ProductDetailType typeDetails; @@ -919,25 +907,10 @@ class ProductAndroid extends Product implements ProductCommon { displayPrice: json['displayPrice'] as String, id: json['id'] as String, nameAndroid: json['nameAndroid'] as String, - oneTimePurchaseOfferDetailsAndroid: - json['oneTimePurchaseOfferDetailsAndroid'] != null - ? ProductAndroidOneTimePurchaseOfferDetail.fromJson( - json['oneTimePurchaseOfferDetailsAndroid'] - as Map, - ) - : null, + oneTimePurchaseOfferDetailsAndroid: json['oneTimePurchaseOfferDetailsAndroid'] != null ? ProductAndroidOneTimePurchaseOfferDetail.fromJson(json['oneTimePurchaseOfferDetailsAndroid'] as Map) : null, platform: IapPlatform.fromJson(json['platform'] as String), price: (json['price'] as num?)?.toDouble(), - subscriptionOfferDetailsAndroid: - (json['subscriptionOfferDetailsAndroid'] as List?) == null - ? null - : (json['subscriptionOfferDetailsAndroid'] as List?)! - .map( - (e) => ProductSubscriptionAndroidOfferDetails.fromJson( - e as Map, - ), - ) - .toList(), + subscriptionOfferDetailsAndroid: (json['subscriptionOfferDetailsAndroid'] as List?) == null ? null : (json['subscriptionOfferDetailsAndroid'] as List?)!.map((e) => ProductSubscriptionAndroidOfferDetails.fromJson(e as Map)).toList(), title: json['title'] as String, type: ProductType.fromJson(json['type'] as String), typeDetails: ProductDetailType.fromJson(json['typeDetails'] as String), @@ -955,13 +928,10 @@ class ProductAndroid extends Product implements ProductCommon { 'displayPrice': displayPrice, 'id': id, 'nameAndroid': nameAndroid, - 'oneTimePurchaseOfferDetailsAndroid': oneTimePurchaseOfferDetailsAndroid - ?.toJson(), + 'oneTimePurchaseOfferDetailsAndroid': oneTimePurchaseOfferDetailsAndroid?.toJson(), 'platform': platform.toJson(), 'price': price, - 'subscriptionOfferDetailsAndroid': subscriptionOfferDetailsAndroid == null - ? null - : subscriptionOfferDetailsAndroid!.map((e) => e.toJson()).toList(), + 'subscriptionOfferDetailsAndroid': subscriptionOfferDetailsAndroid == null ? null : subscriptionOfferDetailsAndroid!.map((e) => e.toJson()).toList(), 'title': title, 'type': type.toJson(), 'typeDetails': typeDetails.toJson(), @@ -980,9 +950,7 @@ class ProductAndroidOneTimePurchaseOfferDetail { final String priceAmountMicros; final String priceCurrencyCode; - factory ProductAndroidOneTimePurchaseOfferDetail.fromJson( - Map json, - ) { + factory ProductAndroidOneTimePurchaseOfferDetail.fromJson(Map json) { return ProductAndroidOneTimePurchaseOfferDetail( formattedPrice: json['formattedPrice'] as String, priceAmountMicros: json['priceAmountMicros'] as String, @@ -1050,11 +1018,7 @@ class ProductIOS extends Product implements ProductCommon { jsonRepresentationIOS: json['jsonRepresentationIOS'] as String, platform: IapPlatform.fromJson(json['platform'] as String), price: (json['price'] as num?)?.toDouble(), - subscriptionInfoIOS: json['subscriptionInfoIOS'] != null - ? SubscriptionInfoIOS.fromJson( - json['subscriptionInfoIOS'] as Map, - ) - : null, + subscriptionInfoIOS: json['subscriptionInfoIOS'] != null ? SubscriptionInfoIOS.fromJson(json['subscriptionInfoIOS'] as Map) : null, title: json['title'] as String, type: ProductType.fromJson(json['type'] as String), typeDetails: ProductDetailType.fromJson(json['typeDetails'] as String), @@ -1086,8 +1050,7 @@ class ProductIOS extends Product implements ProductCommon { } } -class ProductSubscriptionAndroid extends ProductSubscription - implements ProductCommon { +class ProductSubscriptionAndroid extends ProductSubscription implements ProductCommon { const ProductSubscriptionAndroid({ required this.currency, this.debugDescription, @@ -1112,12 +1075,10 @@ class ProductSubscriptionAndroid extends ProductSubscription final String displayPrice; final String id; final String nameAndroid; - final ProductAndroidOneTimePurchaseOfferDetail? - oneTimePurchaseOfferDetailsAndroid; + final ProductAndroidOneTimePurchaseOfferDetail? oneTimePurchaseOfferDetailsAndroid; final IapPlatform platform; final double? price; - final List - subscriptionOfferDetailsAndroid; + final List subscriptionOfferDetailsAndroid; final String title; final ProductType type; final ProductDetailType typeDetails; @@ -1131,23 +1092,10 @@ class ProductSubscriptionAndroid extends ProductSubscription displayPrice: json['displayPrice'] as String, id: json['id'] as String, nameAndroid: json['nameAndroid'] as String, - oneTimePurchaseOfferDetailsAndroid: - json['oneTimePurchaseOfferDetailsAndroid'] != null - ? ProductAndroidOneTimePurchaseOfferDetail.fromJson( - json['oneTimePurchaseOfferDetailsAndroid'] - as Map, - ) - : null, + oneTimePurchaseOfferDetailsAndroid: json['oneTimePurchaseOfferDetailsAndroid'] != null ? ProductAndroidOneTimePurchaseOfferDetail.fromJson(json['oneTimePurchaseOfferDetailsAndroid'] as Map) : null, platform: IapPlatform.fromJson(json['platform'] as String), price: (json['price'] as num?)?.toDouble(), - subscriptionOfferDetailsAndroid: - (json['subscriptionOfferDetailsAndroid'] as List) - .map( - (e) => ProductSubscriptionAndroidOfferDetails.fromJson( - e as Map, - ), - ) - .toList(), + subscriptionOfferDetailsAndroid: (json['subscriptionOfferDetailsAndroid'] as List).map((e) => ProductSubscriptionAndroidOfferDetails.fromJson(e as Map)).toList(), title: json['title'] as String, type: ProductType.fromJson(json['type'] as String), typeDetails: ProductDetailType.fromJson(json['typeDetails'] as String), @@ -1165,13 +1113,10 @@ class ProductSubscriptionAndroid extends ProductSubscription 'displayPrice': displayPrice, 'id': id, 'nameAndroid': nameAndroid, - 'oneTimePurchaseOfferDetailsAndroid': oneTimePurchaseOfferDetailsAndroid - ?.toJson(), + 'oneTimePurchaseOfferDetailsAndroid': oneTimePurchaseOfferDetailsAndroid?.toJson(), 'platform': platform.toJson(), 'price': price, - 'subscriptionOfferDetailsAndroid': subscriptionOfferDetailsAndroid - .map((e) => e.toJson()) - .toList(), + 'subscriptionOfferDetailsAndroid': subscriptionOfferDetailsAndroid.map((e) => e.toJson()).toList(), 'title': title, 'type': type.toJson(), 'typeDetails': typeDetails.toJson(), @@ -1194,19 +1139,13 @@ class ProductSubscriptionAndroidOfferDetails { final String offerToken; final PricingPhasesAndroid pricingPhases; - factory ProductSubscriptionAndroidOfferDetails.fromJson( - Map json, - ) { + factory ProductSubscriptionAndroidOfferDetails.fromJson(Map json) { return ProductSubscriptionAndroidOfferDetails( basePlanId: json['basePlanId'] as String, offerId: json['offerId'] as String?, - offerTags: (json['offerTags'] as List) - .map((e) => e as String) - .toList(), + offerTags: (json['offerTags'] as List).map((e) => e as String).toList(), offerToken: json['offerToken'] as String, - pricingPhases: PricingPhasesAndroid.fromJson( - json['pricingPhases'] as Map, - ), + pricingPhases: PricingPhasesAndroid.fromJson(json['pricingPhases'] as Map), ); } @@ -1222,8 +1161,7 @@ class ProductSubscriptionAndroidOfferDetails { } } -class ProductSubscriptionIOS extends ProductSubscription - implements ProductCommon { +class ProductSubscriptionIOS extends ProductSubscription implements ProductCommon { const ProductSubscriptionIOS({ required this.currency, this.debugDescription, @@ -1281,48 +1219,23 @@ class ProductSubscriptionIOS extends ProductSubscription currency: json['currency'] as String, debugDescription: json['debugDescription'] as String?, description: json['description'] as String, - discountsIOS: (json['discountsIOS'] as List?) == null - ? null - : (json['discountsIOS'] as List?)! - .map((e) => DiscountIOS.fromJson(e as Map)) - .toList(), + discountsIOS: (json['discountsIOS'] as List?) == null ? null : (json['discountsIOS'] as List?)!.map((e) => DiscountIOS.fromJson(e as Map)).toList(), displayName: json['displayName'] as String?, displayNameIOS: json['displayNameIOS'] as String, displayPrice: json['displayPrice'] as String, id: json['id'] as String, - introductoryPriceAsAmountIOS: - json['introductoryPriceAsAmountIOS'] as String?, + introductoryPriceAsAmountIOS: json['introductoryPriceAsAmountIOS'] as String?, introductoryPriceIOS: json['introductoryPriceIOS'] as String?, - introductoryPriceNumberOfPeriodsIOS: - json['introductoryPriceNumberOfPeriodsIOS'] as String?, - introductoryPricePaymentModeIOS: - json['introductoryPricePaymentModeIOS'] != null - ? PaymentModeIOS.fromJson( - json['introductoryPricePaymentModeIOS'] as String, - ) - : null, - introductoryPriceSubscriptionPeriodIOS: - json['introductoryPriceSubscriptionPeriodIOS'] != null - ? SubscriptionPeriodIOS.fromJson( - json['introductoryPriceSubscriptionPeriodIOS'] as String, - ) - : null, + introductoryPriceNumberOfPeriodsIOS: json['introductoryPriceNumberOfPeriodsIOS'] as String?, + introductoryPricePaymentModeIOS: json['introductoryPricePaymentModeIOS'] != null ? PaymentModeIOS.fromJson(json['introductoryPricePaymentModeIOS'] as String) : null, + introductoryPriceSubscriptionPeriodIOS: json['introductoryPriceSubscriptionPeriodIOS'] != null ? SubscriptionPeriodIOS.fromJson(json['introductoryPriceSubscriptionPeriodIOS'] as String) : null, isFamilyShareableIOS: json['isFamilyShareableIOS'] as bool, jsonRepresentationIOS: json['jsonRepresentationIOS'] as String, platform: IapPlatform.fromJson(json['platform'] as String), price: (json['price'] as num?)?.toDouble(), - subscriptionInfoIOS: json['subscriptionInfoIOS'] != null - ? SubscriptionInfoIOS.fromJson( - json['subscriptionInfoIOS'] as Map, - ) - : null, - subscriptionPeriodNumberIOS: - json['subscriptionPeriodNumberIOS'] as String?, - subscriptionPeriodUnitIOS: json['subscriptionPeriodUnitIOS'] != null - ? SubscriptionPeriodIOS.fromJson( - json['subscriptionPeriodUnitIOS'] as String, - ) - : null, + subscriptionInfoIOS: json['subscriptionInfoIOS'] != null ? SubscriptionInfoIOS.fromJson(json['subscriptionInfoIOS'] as Map) : null, + subscriptionPeriodNumberIOS: json['subscriptionPeriodNumberIOS'] as String?, + subscriptionPeriodUnitIOS: json['subscriptionPeriodUnitIOS'] != null ? SubscriptionPeriodIOS.fromJson(json['subscriptionPeriodUnitIOS'] as String) : null, title: json['title'] as String, type: ProductType.fromJson(json['type'] as String), typeDetails: ProductDetailType.fromJson(json['typeDetails'] as String), @@ -1337,21 +1250,16 @@ class ProductSubscriptionIOS extends ProductSubscription 'currency': currency, 'debugDescription': debugDescription, 'description': description, - 'discountsIOS': discountsIOS == null - ? null - : discountsIOS!.map((e) => e.toJson()).toList(), + 'discountsIOS': discountsIOS == null ? null : discountsIOS!.map((e) => e.toJson()).toList(), 'displayName': displayName, 'displayNameIOS': displayNameIOS, 'displayPrice': displayPrice, 'id': id, 'introductoryPriceAsAmountIOS': introductoryPriceAsAmountIOS, 'introductoryPriceIOS': introductoryPriceIOS, - 'introductoryPriceNumberOfPeriodsIOS': - introductoryPriceNumberOfPeriodsIOS, - 'introductoryPricePaymentModeIOS': introductoryPricePaymentModeIOS - ?.toJson(), - 'introductoryPriceSubscriptionPeriodIOS': - introductoryPriceSubscriptionPeriodIOS?.toJson(), + 'introductoryPriceNumberOfPeriodsIOS': introductoryPriceNumberOfPeriodsIOS, + 'introductoryPricePaymentModeIOS': introductoryPricePaymentModeIOS?.toJson(), + 'introductoryPriceSubscriptionPeriodIOS': introductoryPriceSubscriptionPeriodIOS?.toJson(), 'isFamilyShareableIOS': isFamilyShareableIOS, 'jsonRepresentationIOS': jsonRepresentationIOS, 'platform': platform.toJson(), @@ -1414,9 +1322,7 @@ class PurchaseAndroid extends Purchase implements PurchaseCommon { dataAndroid: json['dataAndroid'] as String?, developerPayloadAndroid: json['developerPayloadAndroid'] as String?, id: json['id'] as String, - ids: (json['ids'] as List?) == null - ? null - : (json['ids'] as List?)!.map((e) => e as String).toList(), + ids: (json['ids'] as List?) == null ? null : (json['ids'] as List?)!.map((e) => e as String).toList(), isAcknowledgedAndroid: json['isAcknowledgedAndroid'] as bool?, isAutoRenewing: json['isAutoRenewing'] as bool, obfuscatedAccountIdAndroid: json['obfuscatedAccountIdAndroid'] as String?, @@ -1565,18 +1471,12 @@ class PurchaseIOS extends Purchase implements PurchaseCommon { environmentIOS: json['environmentIOS'] as String?, expirationDateIOS: (json['expirationDateIOS'] as num?)?.toDouble(), id: json['id'] as String, - ids: (json['ids'] as List?) == null - ? null - : (json['ids'] as List?)!.map((e) => e as String).toList(), + ids: (json['ids'] as List?) == null ? null : (json['ids'] as List?)!.map((e) => e as String).toList(), isAutoRenewing: json['isAutoRenewing'] as bool, isUpgradedIOS: json['isUpgradedIOS'] as bool?, - offerIOS: json['offerIOS'] != null - ? PurchaseOfferIOS.fromJson(json['offerIOS'] as Map) - : null, - originalTransactionDateIOS: (json['originalTransactionDateIOS'] as num?) - ?.toDouble(), - originalTransactionIdentifierIOS: - json['originalTransactionIdentifierIOS'] as String?, + offerIOS: json['offerIOS'] != null ? PurchaseOfferIOS.fromJson(json['offerIOS'] as Map) : null, + originalTransactionDateIOS: (json['originalTransactionDateIOS'] as num?)?.toDouble(), + originalTransactionIdentifierIOS: json['originalTransactionIdentifierIOS'] as String?, ownershipTypeIOS: json['ownershipTypeIOS'] as String?, platform: IapPlatform.fromJson(json['platform'] as String), productId: json['productId'] as String, @@ -1585,8 +1485,7 @@ class PurchaseIOS extends Purchase implements PurchaseCommon { quantity: json['quantity'] as int, quantityIOS: json['quantityIOS'] as int?, reasonIOS: json['reasonIOS'] as String?, - reasonStringRepresentationIOS: - json['reasonStringRepresentationIOS'] as String?, + reasonStringRepresentationIOS: json['reasonStringRepresentationIOS'] as String?, revocationDateIOS: (json['revocationDateIOS'] as num?)?.toDouble(), revocationReasonIOS: json['revocationReasonIOS'] as String?, storefrontCountryCodeIOS: json['storefrontCountryCodeIOS'] as String?, @@ -1760,26 +1659,20 @@ class ReceiptValidationResultIOS extends ReceiptValidationResult { const ReceiptValidationResultIOS({ /// Whether the receipt is valid required this.isValid, - /// JWS representation required this.jwsRepresentation, - /// Latest transaction if available this.latestTransaction, - /// Receipt data string required this.receiptData, }); /// Whether the receipt is valid final bool isValid; - /// JWS representation final String jwsRepresentation; - /// Latest transaction if available final Purchase? latestTransaction; - /// Receipt data string final String receiptData; @@ -1787,9 +1680,7 @@ class ReceiptValidationResultIOS extends ReceiptValidationResult { return ReceiptValidationResultIOS( isValid: json['isValid'] as bool, jwsRepresentation: json['jwsRepresentation'] as String, - latestTransaction: json['latestTransaction'] != null - ? Purchase.fromJson(json['latestTransaction'] as Map) - : null, + latestTransaction: json['latestTransaction'] != null ? Purchase.fromJson(json['latestTransaction'] as Map) : null, receiptData: json['receiptData'] as String, ); } @@ -1807,7 +1698,10 @@ class ReceiptValidationResultIOS extends ReceiptValidationResult { } class RefundResultIOS { - const RefundResultIOS({this.message, required this.status}); + const RefundResultIOS({ + this.message, + required this.status, + }); final String? message; final String status; @@ -1871,31 +1765,6 @@ class RequestPurchaseResultPurchases extends RequestPurchaseResult { final List? value; } -class StorefrontResultAndroid { - const StorefrontResultAndroid({ - required this.countryCode, - required this.identifier, - }); - - final String countryCode; - final String identifier; - - factory StorefrontResultAndroid.fromJson(Map json) { - return StorefrontResultAndroid( - countryCode: json['countryCode'] as String, - identifier: json['identifier'] as String, - ); - } - - Map toJson() { - return { - '__typename': 'StorefrontResultAndroid', - 'countryCode': countryCode, - 'identifier': identifier, - }; - } -} - class SubscriptionInfoIOS { const SubscriptionInfoIOS({ this.introductoryOffer, @@ -1911,23 +1780,10 @@ class SubscriptionInfoIOS { factory SubscriptionInfoIOS.fromJson(Map json) { return SubscriptionInfoIOS( - introductoryOffer: json['introductoryOffer'] != null - ? SubscriptionOfferIOS.fromJson( - json['introductoryOffer'] as Map, - ) - : null, - promotionalOffers: (json['promotionalOffers'] as List?) == null - ? null - : (json['promotionalOffers'] as List?)! - .map( - (e) => - SubscriptionOfferIOS.fromJson(e as Map), - ) - .toList(), + introductoryOffer: json['introductoryOffer'] != null ? SubscriptionOfferIOS.fromJson(json['introductoryOffer'] as Map) : null, + promotionalOffers: (json['promotionalOffers'] as List?) == null ? null : (json['promotionalOffers'] as List?)!.map((e) => SubscriptionOfferIOS.fromJson(e as Map)).toList(), subscriptionGroupId: json['subscriptionGroupId'] as String, - subscriptionPeriod: SubscriptionPeriodValueIOS.fromJson( - json['subscriptionPeriod'] as Map, - ), + subscriptionPeriod: SubscriptionPeriodValueIOS.fromJson(json['subscriptionPeriod'] as Map), ); } @@ -1935,9 +1791,7 @@ class SubscriptionInfoIOS { return { '__typename': 'SubscriptionInfoIOS', 'introductoryOffer': introductoryOffer?.toJson(), - 'promotionalOffers': promotionalOffers == null - ? null - : promotionalOffers!.map((e) => e.toJson()).toList(), + 'promotionalOffers': promotionalOffers == null ? null : promotionalOffers!.map((e) => e.toJson()).toList(), 'subscriptionGroupId': subscriptionGroupId, 'subscriptionPeriod': subscriptionPeriod.toJson(), }; @@ -1968,9 +1822,7 @@ class SubscriptionOfferIOS { displayPrice: json['displayPrice'] as String, id: json['id'] as String, paymentMode: PaymentModeIOS.fromJson(json['paymentMode'] as String), - period: SubscriptionPeriodValueIOS.fromJson( - json['period'] as Map, - ), + period: SubscriptionPeriodValueIOS.fromJson(json['period'] as Map), periodCount: json['periodCount'] as int, price: (json['price'] as num).toDouble(), type: SubscriptionOfferTypeIOS.fromJson(json['type'] as String), @@ -1992,7 +1844,10 @@ class SubscriptionOfferIOS { } class SubscriptionPeriodValueIOS { - const SubscriptionPeriodValueIOS({required this.unit, required this.value}); + const SubscriptionPeriodValueIOS({ + required this.unit, + required this.value, + }); final SubscriptionPeriodIOS unit; final int value; @@ -2014,16 +1869,17 @@ class SubscriptionPeriodValueIOS { } class SubscriptionStatusIOS { - const SubscriptionStatusIOS({this.renewalInfo, required this.state}); + const SubscriptionStatusIOS({ + this.renewalInfo, + required this.state, + }); final RenewalInfoIOS? renewalInfo; final String state; factory SubscriptionStatusIOS.fromJson(Map json) { return SubscriptionStatusIOS( - renewalInfo: json['renewalInfo'] != null - ? RenewalInfoIOS.fromJson(json['renewalInfo'] as Map) - : null, + renewalInfo: json['renewalInfo'] != null ? RenewalInfoIOS.fromJson(json['renewalInfo'] as Map) : null, state: json['state'] as String, ); } @@ -2045,14 +1901,12 @@ class AndroidSubscriptionOfferInput { const AndroidSubscriptionOfferInput({ /// Offer token required this.offerToken, - /// Product SKU required this.sku, }); /// Offer token final String offerToken; - /// Product SKU final String sku; @@ -2064,7 +1918,10 @@ class AndroidSubscriptionOfferInput { } Map toJson() { - return {'offerToken': offerToken, 'sku': sku}; + return { + 'offerToken': offerToken, + 'sku': sku, + }; } } @@ -2072,14 +1929,12 @@ class DeepLinkOptions { const DeepLinkOptions({ /// Android package name to target (required on Android) this.packageNameAndroid, - /// Android SKU to open (required on Android) this.skuAndroid, }); /// Android package name to target (required on Android) final String? packageNameAndroid; - /// Android SKU to open (required on Android) final String? skuAndroid; @@ -2091,7 +1946,10 @@ class DeepLinkOptions { } Map toJson() { - return {'packageNameAndroid': packageNameAndroid, 'skuAndroid': skuAndroid}; + return { + 'packageNameAndroid': packageNameAndroid, + 'skuAndroid': skuAndroid, + }; } } @@ -2099,32 +1957,24 @@ class DiscountOfferInputIOS { const DiscountOfferInputIOS({ /// Discount identifier required this.identifier, - /// Key identifier for validation required this.keyIdentifier, - /// Cryptographic nonce required this.nonce, - /// Signature for validation required this.signature, - /// Timestamp of discount offer required this.timestamp, }); /// Discount identifier final String identifier; - /// Key identifier for validation final String keyIdentifier; - /// Cryptographic nonce final String nonce; - /// Signature for validation final String signature; - /// Timestamp of discount offer final double timestamp; @@ -2150,7 +2000,10 @@ class DiscountOfferInputIOS { } class ProductRequest { - const ProductRequest({required this.skus, this.type}); + const ProductRequest({ + required this.skus, + this.type, + }); final List skus; final ProductQueryType? type; @@ -2158,14 +2011,15 @@ class ProductRequest { factory ProductRequest.fromJson(Map json) { return ProductRequest( skus: (json['skus'] as List).map((e) => e as String).toList(), - type: json['type'] != null - ? ProductQueryType.fromJson(json['type'] as String) - : null, + type: json['type'] != null ? ProductQueryType.fromJson(json['type'] as String) : null, ); } Map toJson() { - return {'skus': skus.map((e) => e).toList(), 'type': type?.toJson()}; + return { + 'skus': skus.map((e) => e).toList(), + 'type': type?.toJson(), + }; } } @@ -2195,9 +2049,7 @@ class PurchaseInput { factory PurchaseInput.fromJson(Map json) { return PurchaseInput( id: json['id'] as String, - ids: (json['ids'] as List?) == null - ? null - : (json['ids'] as List?)!.map((e) => e as String).toList(), + ids: (json['ids'] as List?) == null ? null : (json['ids'] as List?)!.map((e) => e as String).toList(), isAutoRenewing: json['isAutoRenewing'] as bool, platform: IapPlatform.fromJson(json['platform'] as String), productId: json['productId'] as String, @@ -2227,21 +2079,18 @@ class PurchaseOptions { const PurchaseOptions({ /// Also emit results through the iOS event listeners this.alsoPublishToEventListenerIOS, - /// Limit to currently active items on iOS this.onlyIncludeActiveItemsIOS, }); /// Also emit results through the iOS event listeners final bool? alsoPublishToEventListenerIOS; - /// Limit to currently active items on iOS final bool? onlyIncludeActiveItemsIOS; factory PurchaseOptions.fromJson(Map json) { return PurchaseOptions( - alsoPublishToEventListenerIOS: - json['alsoPublishToEventListenerIOS'] as bool?, + alsoPublishToEventListenerIOS: json['alsoPublishToEventListenerIOS'] as bool?, onlyIncludeActiveItemsIOS: json['onlyIncludeActiveItemsIOS'] as bool?, ); } @@ -2290,30 +2139,27 @@ class ReceiptValidationProps { const ReceiptValidationProps({ /// Android-specific validation options this.androidOptions, - /// Product SKU to validate required this.sku, }); /// Android-specific validation options final ReceiptValidationAndroidOptions? androidOptions; - /// Product SKU to validate final String sku; factory ReceiptValidationProps.fromJson(Map json) { return ReceiptValidationProps( - androidOptions: json['androidOptions'] != null - ? ReceiptValidationAndroidOptions.fromJson( - json['androidOptions'] as Map, - ) - : null, + androidOptions: json['androidOptions'] != null ? ReceiptValidationAndroidOptions.fromJson(json['androidOptions'] as Map) : null, sku: json['sku'] as String, ); } Map toJson() { - return {'androidOptions': androidOptions?.toJson(), 'sku': sku}; + return { + 'androidOptions': androidOptions?.toJson(), + 'sku': sku, + }; } } @@ -2321,26 +2167,20 @@ class RequestPurchaseAndroidProps { const RequestPurchaseAndroidProps({ /// Personalized offer flag this.isOfferPersonalized, - /// Obfuscated account ID this.obfuscatedAccountIdAndroid, - /// Obfuscated profile ID this.obfuscatedProfileIdAndroid, - /// List of product SKUs required this.skus, }); /// Personalized offer flag final bool? isOfferPersonalized; - /// Obfuscated account ID final String? obfuscatedAccountIdAndroid; - /// Obfuscated profile ID final String? obfuscatedProfileIdAndroid; - /// List of product SKUs final List skus; @@ -2367,54 +2207,40 @@ class RequestPurchaseIosProps { const RequestPurchaseIosProps({ /// Auto-finish transaction (dangerous) this.andDangerouslyFinishTransactionAutomatically, - /// App account token for user tracking this.appAccountToken, - /// Purchase quantity this.quantity, - /// Product SKU required this.sku, - /// Discount offer to apply this.withOffer, }); /// Auto-finish transaction (dangerous) final bool? andDangerouslyFinishTransactionAutomatically; - /// App account token for user tracking final String? appAccountToken; - /// Purchase quantity final int? quantity; - /// Product SKU final String sku; - /// Discount offer to apply final DiscountOfferInputIOS? withOffer; factory RequestPurchaseIosProps.fromJson(Map json) { return RequestPurchaseIosProps( - andDangerouslyFinishTransactionAutomatically: - json['andDangerouslyFinishTransactionAutomatically'] as bool?, + andDangerouslyFinishTransactionAutomatically: json['andDangerouslyFinishTransactionAutomatically'] as bool?, appAccountToken: json['appAccountToken'] as String?, quantity: json['quantity'] as int?, sku: json['sku'] as String, - withOffer: json['withOffer'] != null - ? DiscountOfferInputIOS.fromJson( - json['withOffer'] as Map, - ) - : null, + withOffer: json['withOffer'] != null ? DiscountOfferInputIOS.fromJson(json['withOffer'] as Map) : null, ); } Map toJson() { return { - 'andDangerouslyFinishTransactionAutomatically': - andDangerouslyFinishTransactionAutomatically, + 'andDangerouslyFinishTransactionAutomatically': andDangerouslyFinishTransactionAutomatically, 'appAccountToken': appAccountToken, 'quantity': quantity, 'sku': sku, @@ -2424,23 +2250,17 @@ class RequestPurchaseIosProps { } class RequestPurchaseProps { - RequestPurchaseProps({required this.request, ProductQueryType? type}) - : type = - type ?? - (request is RequestPurchasePropsRequestPurchase - ? ProductQueryType.InApp - : ProductQueryType.Subs) { - if (request is RequestPurchasePropsRequestPurchase && - this.type != ProductQueryType.InApp) { - throw ArgumentError( - 'type must be IN_APP when requestPurchase is provided', - ); + RequestPurchaseProps({ + required this.request, + ProductQueryType? type, + }) : type = type ?? (request is RequestPurchasePropsRequestPurchase + ? ProductQueryType.InApp + : ProductQueryType.Subs) { + if (request is RequestPurchasePropsRequestPurchase && this.type != ProductQueryType.InApp) { + throw ArgumentError('type must be IN_APP when requestPurchase is provided'); } - if (request is RequestPurchasePropsRequestSubscription && - this.type != ProductQueryType.Subs) { - throw ArgumentError( - 'type must be SUBS when requestSubscription is provided', - ); + if (request is RequestPurchasePropsRequestSubscription && this.type != ProductQueryType.Subs) { + throw ArgumentError('type must be SUBS when requestSubscription is provided'); } } @@ -2449,76 +2269,50 @@ class RequestPurchaseProps { factory RequestPurchaseProps.fromJson(Map json) { final typeValue = json['type'] as String?; - final parsedType = typeValue != null - ? ProductQueryType.fromJson(typeValue) - : null; + final parsedType = typeValue != null ? ProductQueryType.fromJson(typeValue) : null; final purchaseJson = json['requestPurchase'] as Map?; if (purchaseJson != null) { - final request = RequestPurchasePropsRequestPurchase( - RequestPurchasePropsByPlatforms.fromJson(purchaseJson), - ); + final request = RequestPurchasePropsRequestPurchase(RequestPurchasePropsByPlatforms.fromJson(purchaseJson)); final finalType = parsedType ?? ProductQueryType.InApp; if (finalType != ProductQueryType.InApp) { - throw ArgumentError( - 'type must be IN_APP when requestPurchase is provided', - ); + throw ArgumentError('type must be IN_APP when requestPurchase is provided'); } return RequestPurchaseProps(request: request, type: finalType); } - final subscriptionJson = - json['requestSubscription'] as Map?; + final subscriptionJson = json['requestSubscription'] as Map?; if (subscriptionJson != null) { - final request = RequestPurchasePropsRequestSubscription( - RequestSubscriptionPropsByPlatforms.fromJson(subscriptionJson), - ); + final request = RequestPurchasePropsRequestSubscription(RequestSubscriptionPropsByPlatforms.fromJson(subscriptionJson)); final finalType = parsedType ?? ProductQueryType.Subs; if (finalType != ProductQueryType.Subs) { - throw ArgumentError( - 'type must be SUBS when requestSubscription is provided', - ); + throw ArgumentError('type must be SUBS when requestSubscription is provided'); } return RequestPurchaseProps(request: request, type: finalType); } - throw ArgumentError( - 'RequestPurchaseProps requires requestPurchase or requestSubscription', - ); + throw ArgumentError('RequestPurchaseProps requires requestPurchase or requestSubscription'); } Map toJson() { if (request is RequestPurchasePropsRequestPurchase) { return { - 'requestPurchase': (request as RequestPurchasePropsRequestPurchase) - .value - .toJson(), + 'requestPurchase': (request as RequestPurchasePropsRequestPurchase).value.toJson(), 'type': type.toJson(), }; } if (request is RequestPurchasePropsRequestSubscription) { return { - 'requestSubscription': - (request as RequestPurchasePropsRequestSubscription).value.toJson(), + 'requestSubscription': (request as RequestPurchasePropsRequestSubscription).value.toJson(), 'type': type.toJson(), }; } throw StateError('Unsupported RequestPurchaseProps request variant'); } - static RequestPurchaseProps inApp({ - required RequestPurchasePropsByPlatforms request, - }) { - return RequestPurchaseProps( - request: RequestPurchasePropsRequestPurchase(request), - type: ProductQueryType.InApp, - ); + static RequestPurchaseProps inApp({required RequestPurchasePropsByPlatforms request}) { + return RequestPurchaseProps(request: RequestPurchasePropsRequestPurchase(request), type: ProductQueryType.InApp); } - static RequestPurchaseProps subs({ - required RequestSubscriptionPropsByPlatforms request, - }) { - return RequestPurchaseProps( - request: RequestPurchasePropsRequestSubscription(request), - type: ProductQueryType.Subs, - ); + static RequestPurchaseProps subs({required RequestSubscriptionPropsByPlatforms request}) { + return RequestPurchaseProps(request: RequestPurchasePropsRequestSubscription(request), type: ProductQueryType.Subs); } } @@ -2531,8 +2325,7 @@ class RequestPurchasePropsRequestPurchase extends RequestPurchasePropsRequest { final RequestPurchasePropsByPlatforms value; } -class RequestPurchasePropsRequestSubscription - extends RequestPurchasePropsRequest { +class RequestPurchasePropsRequestSubscription extends RequestPurchasePropsRequest { const RequestPurchasePropsRequestSubscription(this.value); final RequestSubscriptionPropsByPlatforms value; } @@ -2541,34 +2334,27 @@ class RequestPurchasePropsByPlatforms { const RequestPurchasePropsByPlatforms({ /// Android-specific purchase parameters this.android, - /// iOS-specific purchase parameters this.ios, }); /// Android-specific purchase parameters final RequestPurchaseAndroidProps? android; - /// iOS-specific purchase parameters final RequestPurchaseIosProps? ios; factory RequestPurchasePropsByPlatforms.fromJson(Map json) { return RequestPurchasePropsByPlatforms( - android: json['android'] != null - ? RequestPurchaseAndroidProps.fromJson( - json['android'] as Map, - ) - : null, - ios: json['ios'] != null - ? RequestPurchaseIosProps.fromJson( - json['ios'] as Map, - ) - : null, + android: json['android'] != null ? RequestPurchaseAndroidProps.fromJson(json['android'] as Map) : null, + ios: json['ios'] != null ? RequestPurchaseIosProps.fromJson(json['ios'] as Map) : null, ); } Map toJson() { - return {'android': android?.toJson(), 'ios': ios?.toJson()}; + return { + 'android': android?.toJson(), + 'ios': ios?.toJson(), + }; } } @@ -2576,44 +2362,32 @@ class RequestSubscriptionAndroidProps { const RequestSubscriptionAndroidProps({ /// Personalized offer flag this.isOfferPersonalized, - /// Obfuscated account ID this.obfuscatedAccountIdAndroid, - /// Obfuscated profile ID this.obfuscatedProfileIdAndroid, - /// Purchase token for upgrades/downgrades this.purchaseTokenAndroid, - /// Replacement mode for subscription changes this.replacementModeAndroid, - /// List of subscription SKUs required this.skus, - /// Subscription offers this.subscriptionOffers, }); /// Personalized offer flag final bool? isOfferPersonalized; - /// Obfuscated account ID final String? obfuscatedAccountIdAndroid; - /// Obfuscated profile ID final String? obfuscatedProfileIdAndroid; - /// Purchase token for upgrades/downgrades final String? purchaseTokenAndroid; - /// Replacement mode for subscription changes final int? replacementModeAndroid; - /// List of subscription SKUs final List skus; - /// Subscription offers final List? subscriptionOffers; @@ -2625,15 +2399,7 @@ class RequestSubscriptionAndroidProps { purchaseTokenAndroid: json['purchaseTokenAndroid'] as String?, replacementModeAndroid: json['replacementModeAndroid'] as int?, skus: (json['skus'] as List).map((e) => e as String).toList(), - subscriptionOffers: (json['subscriptionOffers'] as List?) == null - ? null - : (json['subscriptionOffers'] as List?)! - .map( - (e) => AndroidSubscriptionOfferInput.fromJson( - e as Map, - ), - ) - .toList(), + subscriptionOffers: (json['subscriptionOffers'] as List?) == null ? null : (json['subscriptionOffers'] as List?)!.map((e) => AndroidSubscriptionOfferInput.fromJson(e as Map)).toList(), ); } @@ -2645,9 +2411,7 @@ class RequestSubscriptionAndroidProps { 'purchaseTokenAndroid': purchaseTokenAndroid, 'replacementModeAndroid': replacementModeAndroid, 'skus': skus.map((e) => e).toList(), - 'subscriptionOffers': subscriptionOffers == null - ? null - : subscriptionOffers!.map((e) => e.toJson()).toList(), + 'subscriptionOffers': subscriptionOffers == null ? null : subscriptionOffers!.map((e) => e.toJson()).toList(), }; } } @@ -2669,23 +2433,17 @@ class RequestSubscriptionIosProps { factory RequestSubscriptionIosProps.fromJson(Map json) { return RequestSubscriptionIosProps( - andDangerouslyFinishTransactionAutomatically: - json['andDangerouslyFinishTransactionAutomatically'] as bool?, + andDangerouslyFinishTransactionAutomatically: json['andDangerouslyFinishTransactionAutomatically'] as bool?, appAccountToken: json['appAccountToken'] as String?, quantity: json['quantity'] as int?, sku: json['sku'] as String, - withOffer: json['withOffer'] != null - ? DiscountOfferInputIOS.fromJson( - json['withOffer'] as Map, - ) - : null, + withOffer: json['withOffer'] != null ? DiscountOfferInputIOS.fromJson(json['withOffer'] as Map) : null, ); } Map toJson() { return { - 'andDangerouslyFinishTransactionAutomatically': - andDangerouslyFinishTransactionAutomatically, + 'andDangerouslyFinishTransactionAutomatically': andDangerouslyFinishTransactionAutomatically, 'appAccountToken': appAccountToken, 'quantity': quantity, 'sku': sku, @@ -2698,36 +2456,27 @@ class RequestSubscriptionPropsByPlatforms { const RequestSubscriptionPropsByPlatforms({ /// Android-specific subscription parameters this.android, - /// iOS-specific subscription parameters this.ios, }); /// Android-specific subscription parameters final RequestSubscriptionAndroidProps? android; - /// iOS-specific subscription parameters final RequestSubscriptionIosProps? ios; - factory RequestSubscriptionPropsByPlatforms.fromJson( - Map json, - ) { + factory RequestSubscriptionPropsByPlatforms.fromJson(Map json) { return RequestSubscriptionPropsByPlatforms( - android: json['android'] != null - ? RequestSubscriptionAndroidProps.fromJson( - json['android'] as Map, - ) - : null, - ios: json['ios'] != null - ? RequestSubscriptionIosProps.fromJson( - json['ios'] as Map, - ) - : null, + android: json['android'] != null ? RequestSubscriptionAndroidProps.fromJson(json['android'] as Map) : null, + ios: json['ios'] != null ? RequestSubscriptionIosProps.fromJson(json['ios'] as Map) : null, ); } Map toJson() { - return {'android': android?.toJson(), 'ios': ios?.toJson()}; + return { + 'android': android?.toJson(), + 'ios': ios?.toJson(), + }; } } @@ -2784,9 +2533,7 @@ sealed class ProductSubscription implements ProductCommon { case 'ProductSubscriptionIOS': return ProductSubscriptionIOS.fromJson(json); } - throw ArgumentError( - 'Unknown __typename for ProductSubscription: $typeName', - ); + throw ArgumentError('Unknown __typename for ProductSubscription: $typeName'); } @override @@ -2841,7 +2588,6 @@ sealed class Purchase implements PurchaseCommon { String get productId; @override PurchaseState get purchaseState; - /// Unified purchase token (iOS JWS, Android purchaseToken) @override String? get purchaseToken; @@ -2864,9 +2610,7 @@ sealed class ReceiptValidationResult { case 'ReceiptValidationResultIOS': return ReceiptValidationResultIOS.fromJson(json); } - throw ArgumentError( - 'Unknown __typename for ReceiptValidationResult: $typeName', - ); + throw ArgumentError('Unknown __typename for ReceiptValidationResult: $typeName'); } Map toJson(); @@ -2878,121 +2622,83 @@ sealed class ReceiptValidationResult { abstract class MutationResolver { /// Acknowledge a non-consumable purchase or subscription Future acknowledgePurchaseAndroid(String purchaseToken); - /// Initiate a refund request for a product (iOS 15+) Future beginRefundRequestIOS(String sku); - /// Clear pending transactions from the StoreKit payment queue Future clearTransactionIOS(); - /// Consume a purchase token so it can be repurchased Future consumePurchaseAndroid(String purchaseToken); - /// Open the native subscription management surface Future deepLinkToSubscriptions([DeepLinkOptions? options]); - /// Close the platform billing connection Future endConnection(); - /// Finish a transaction after validating receipts Future finishTransaction({ required PurchaseInput purchase, bool? isConsumable, }); - /// Establish the platform billing connection Future initConnection(); - /// Present the App Store code redemption sheet Future presentCodeRedemptionSheetIOS(); - /// Initiate a purchase flow; rely on events for final state Future requestPurchase(RequestPurchaseProps params); - /// Purchase the promoted product surfaced by the App Store Future requestPurchaseOnPromotedProductIOS(); - /// Restore completed purchases across platforms Future restorePurchases(); - /// Open subscription management UI and return changed purchases (iOS 15+) Future> showManageSubscriptionsIOS(); - /// Force a StoreKit sync for transactions (iOS 15+) Future syncIOS(); - /// Validate purchase receipts with the configured providers - Future validateReceipt( - ReceiptValidationProps options, - ); + Future validateReceipt(ReceiptValidationProps options); } /// GraphQL root query operations. abstract class QueryResolver { /// Get current StoreKit 2 entitlements (iOS 15+) Future currentEntitlementIOS(String sku); - /// Retrieve products or subscriptions from the store Future fetchProducts(ProductRequest params); - /// Get active subscriptions (filters by subscriptionIds when provided) - Future> getActiveSubscriptions([ - List? subscriptionIds, - ]); - + Future> getActiveSubscriptions([List? subscriptionIds]); /// Fetch the current app transaction (iOS 16+) Future getAppTransactionIOS(); - /// Get all available purchases for the current user Future> getAvailablePurchases([PurchaseOptions? options]); - /// Retrieve all pending transactions in the StoreKit queue Future> getPendingTransactionsIOS(); - /// Get the currently promoted product (iOS 11+) Future getPromotedProductIOS(); - /// Get base64-encoded receipt data for validation Future getReceiptDataIOS(); - /// Get the current storefront country code Future getStorefront(); - /// Get the current App Store storefront country code Future getStorefrontIOS(); - /// Get the transaction JWS (StoreKit 2) Future getTransactionJwsIOS(String sku); - /// Check whether the user has active subscriptions Future hasActiveSubscriptions([List? subscriptionIds]); - /// Check introductory offer eligibility for a subscription group Future isEligibleForIntroOfferIOS(String groupID); - /// Verify a StoreKit 2 transaction signature Future isTransactionVerifiedIOS(String sku); - /// Get the latest transaction for a product using StoreKit 2 Future latestTransactionIOS(String sku); - /// Get StoreKit 2 subscription status details (iOS 15+) Future> subscriptionStatusIOS(String sku); - /// Validate a receipt for a specific product - Future validateReceiptIOS( - ReceiptValidationProps options, - ); + Future validateReceiptIOS(ReceiptValidationProps options); } /// GraphQL root subscription operations. abstract class SubscriptionResolver { /// Fires when the App Store surfaces a promoted product (iOS only) Future promotedProductIOS(); - /// Fires when a purchase fails or is cancelled Future purchaseError(); - /// Fires when a purchase completes successfully or a pending purchase resolves Future purchaseUpdated(); } @@ -3001,33 +2707,24 @@ abstract class SubscriptionResolver { // MARK: - Mutation Helpers -typedef MutationAcknowledgePurchaseAndroidHandler = - Future Function(String purchaseToken); -typedef MutationBeginRefundRequestIOSHandler = - Future Function(String sku); +typedef MutationAcknowledgePurchaseAndroidHandler = Future Function(String purchaseToken); +typedef MutationBeginRefundRequestIOSHandler = Future Function(String sku); typedef MutationClearTransactionIOSHandler = Future Function(); -typedef MutationConsumePurchaseAndroidHandler = - Future Function(String purchaseToken); -typedef MutationDeepLinkToSubscriptionsHandler = - Future Function([DeepLinkOptions? options]); +typedef MutationConsumePurchaseAndroidHandler = Future Function(String purchaseToken); +typedef MutationDeepLinkToSubscriptionsHandler = Future Function([DeepLinkOptions? options]); typedef MutationEndConnectionHandler = Future Function(); -typedef MutationFinishTransactionHandler = - Future Function({ - required PurchaseInput purchase, - bool? isConsumable, - }); +typedef MutationFinishTransactionHandler = Future Function({ + required PurchaseInput purchase, + bool? isConsumable, +}); typedef MutationInitConnectionHandler = Future Function(); typedef MutationPresentCodeRedemptionSheetIOSHandler = Future Function(); -typedef MutationRequestPurchaseHandler = - Future Function(RequestPurchaseProps params); -typedef MutationRequestPurchaseOnPromotedProductIOSHandler = - Future Function(); +typedef MutationRequestPurchaseHandler = Future Function(RequestPurchaseProps params); +typedef MutationRequestPurchaseOnPromotedProductIOSHandler = Future Function(); typedef MutationRestorePurchasesHandler = Future Function(); -typedef MutationShowManageSubscriptionsIOSHandler = - Future> Function(); +typedef MutationShowManageSubscriptionsIOSHandler = Future> Function(); typedef MutationSyncIOSHandler = Future Function(); -typedef MutationValidateReceiptHandler = - Future Function(ReceiptValidationProps options); +typedef MutationValidateReceiptHandler = Future Function(ReceiptValidationProps options); class MutationHandlers { const MutationHandlers({ @@ -3056,11 +2753,9 @@ class MutationHandlers { final MutationEndConnectionHandler? endConnection; final MutationFinishTransactionHandler? finishTransaction; final MutationInitConnectionHandler? initConnection; - final MutationPresentCodeRedemptionSheetIOSHandler? - presentCodeRedemptionSheetIOS; + final MutationPresentCodeRedemptionSheetIOSHandler? presentCodeRedemptionSheetIOS; final MutationRequestPurchaseHandler? requestPurchase; - final MutationRequestPurchaseOnPromotedProductIOSHandler? - requestPurchaseOnPromotedProductIOS; + final MutationRequestPurchaseOnPromotedProductIOSHandler? requestPurchaseOnPromotedProductIOS; final MutationRestorePurchasesHandler? restorePurchases; final MutationShowManageSubscriptionsIOSHandler? showManageSubscriptionsIOS; final MutationSyncIOSHandler? syncIOS; @@ -3069,34 +2764,23 @@ class MutationHandlers { // MARK: - Query Helpers -typedef QueryCurrentEntitlementIOSHandler = - Future Function(String sku); -typedef QueryFetchProductsHandler = - Future Function(ProductRequest params); -typedef QueryGetActiveSubscriptionsHandler = - Future> Function([List? subscriptionIds]); +typedef QueryCurrentEntitlementIOSHandler = Future Function(String sku); +typedef QueryFetchProductsHandler = Future Function(ProductRequest params); +typedef QueryGetActiveSubscriptionsHandler = Future> Function([List? subscriptionIds]); typedef QueryGetAppTransactionIOSHandler = Future Function(); -typedef QueryGetAvailablePurchasesHandler = - Future> Function([PurchaseOptions? options]); -typedef QueryGetPendingTransactionsIOSHandler = - Future> Function(); +typedef QueryGetAvailablePurchasesHandler = Future> Function([PurchaseOptions? options]); +typedef QueryGetPendingTransactionsIOSHandler = Future> Function(); typedef QueryGetPromotedProductIOSHandler = Future Function(); typedef QueryGetReceiptDataIOSHandler = Future Function(); typedef QueryGetStorefrontHandler = Future Function(); typedef QueryGetStorefrontIOSHandler = Future Function(); typedef QueryGetTransactionJwsIOSHandler = Future Function(String sku); -typedef QueryHasActiveSubscriptionsHandler = - Future Function([List? subscriptionIds]); -typedef QueryIsEligibleForIntroOfferIOSHandler = - Future Function(String groupID); -typedef QueryIsTransactionVerifiedIOSHandler = - Future Function(String sku); -typedef QueryLatestTransactionIOSHandler = - Future Function(String sku); -typedef QuerySubscriptionStatusIOSHandler = - Future> Function(String sku); -typedef QueryValidateReceiptIOSHandler = - Future Function(ReceiptValidationProps options); +typedef QueryHasActiveSubscriptionsHandler = Future Function([List? subscriptionIds]); +typedef QueryIsEligibleForIntroOfferIOSHandler = Future Function(String groupID); +typedef QueryIsTransactionVerifiedIOSHandler = Future Function(String sku); +typedef QueryLatestTransactionIOSHandler = Future Function(String sku); +typedef QuerySubscriptionStatusIOSHandler = Future> Function(String sku); +typedef QueryValidateReceiptIOSHandler = Future Function(ReceiptValidationProps options); class QueryHandlers { const QueryHandlers({ diff --git a/src/generated/types.ts b/src/generated/types.ts index 52af395..b9daed3 100644 --- a/src/generated/types.ts +++ b/src/generated/types.ts @@ -639,11 +639,6 @@ export interface RequestSubscriptionPropsByPlatforms { ios?: (RequestSubscriptionIosProps | null); } -export interface StorefrontResultAndroid { - countryCode: string; - identifier: string; -} - export interface Subscription { /** Fires when the App Store surfaces a promoted product (iOS only) */ promotedProductIOS: string;