@qonversion/react-native-sdk 10.0.0-RC1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/README.md +129 -0
  2. package/android/build.gradle +92 -0
  3. package/android/gradle.properties +6 -0
  4. package/android/src/main/AndroidManifest.xml +2 -0
  5. package/android/src/main/java/com/qonversion/reactnativesdk/EntitiesConverter.kt +135 -0
  6. package/android/src/main/java/com/qonversion/reactnativesdk/NoCodesModule.kt +76 -0
  7. package/android/src/main/java/com/qonversion/reactnativesdk/QonversionModule.kt +278 -0
  8. package/android/src/main/java/com/qonversion/reactnativesdk/QonversionPackage.kt +43 -0
  9. package/android/src/main/java/com/qonversion/reactnativesdk/Utils.kt +32 -0
  10. package/ios/RNNoCodes.h +5 -0
  11. package/ios/RNNoCodes.mm +61 -0
  12. package/ios/RNNoCodesImpl.swift +69 -0
  13. package/ios/RNQonversion.h +5 -0
  14. package/ios/RNQonversion.mm +189 -0
  15. package/ios/RNQonversionImpl.swift +250 -0
  16. package/ios/qonversion-react-native-sdk-Bridging-Header.h +6 -0
  17. package/lib/module/NoCodes.js +32 -0
  18. package/lib/module/NoCodes.js.map +1 -0
  19. package/lib/module/NoCodesApi.js +2 -0
  20. package/lib/module/NoCodesApi.js.map +1 -0
  21. package/lib/module/NoCodesConfig.js +10 -0
  22. package/lib/module/NoCodesConfig.js.map +1 -0
  23. package/lib/module/NoCodesConfigBuilder.js +35 -0
  24. package/lib/module/NoCodesConfigBuilder.js.map +1 -0
  25. package/lib/module/Qonversion.js +35 -0
  26. package/lib/module/Qonversion.js.map +1 -0
  27. package/lib/module/QonversionApi.js +4 -0
  28. package/lib/module/QonversionApi.js.map +1 -0
  29. package/lib/module/QonversionConfig.js +16 -0
  30. package/lib/module/QonversionConfig.js.map +1 -0
  31. package/lib/module/QonversionConfigBuilder.js +90 -0
  32. package/lib/module/QonversionConfigBuilder.js.map +1 -0
  33. package/lib/module/dto/Entitlement.js +24 -0
  34. package/lib/module/dto/Entitlement.js.map +1 -0
  35. package/lib/module/dto/EntitlementsUpdateListener.js +4 -0
  36. package/lib/module/dto/EntitlementsUpdateListener.js.map +1 -0
  37. package/lib/module/dto/Experiment.js +11 -0
  38. package/lib/module/dto/Experiment.js.map +1 -0
  39. package/lib/module/dto/ExperimentGroup.js +11 -0
  40. package/lib/module/dto/ExperimentGroup.js.map +1 -0
  41. package/lib/module/dto/IntroEligibility.js +9 -0
  42. package/lib/module/dto/IntroEligibility.js.map +1 -0
  43. package/lib/module/dto/NoCodesAction.js +11 -0
  44. package/lib/module/dto/NoCodesAction.js.map +1 -0
  45. package/lib/module/dto/NoCodesError.js +13 -0
  46. package/lib/module/dto/NoCodesError.js.map +1 -0
  47. package/lib/module/dto/NoCodesListener.js +4 -0
  48. package/lib/module/dto/NoCodesListener.js.map +1 -0
  49. package/lib/module/dto/Offering.js +14 -0
  50. package/lib/module/dto/Offering.js.map +1 -0
  51. package/lib/module/dto/Offerings.js +13 -0
  52. package/lib/module/dto/Offerings.js.map +1 -0
  53. package/lib/module/dto/Product.js +114 -0
  54. package/lib/module/dto/Product.js.map +1 -0
  55. package/lib/module/dto/PromoPurchasesListener.js +4 -0
  56. package/lib/module/dto/PromoPurchasesListener.js.map +1 -0
  57. package/lib/module/dto/PromotionalOffer.js +10 -0
  58. package/lib/module/dto/PromotionalOffer.js.map +1 -0
  59. package/lib/module/dto/PurchaseModel.js +26 -0
  60. package/lib/module/dto/PurchaseModel.js.map +1 -0
  61. package/lib/module/dto/PurchaseOptions.js +15 -0
  62. package/lib/module/dto/PurchaseOptions.js.map +1 -0
  63. package/lib/module/dto/PurchaseOptionsBuilder.js +117 -0
  64. package/lib/module/dto/PurchaseOptionsBuilder.js.map +1 -0
  65. package/lib/module/dto/PurchaseUpdateModel.js +32 -0
  66. package/lib/module/dto/PurchaseUpdateModel.js.map +1 -0
  67. package/lib/module/dto/QonversionError.js +15 -0
  68. package/lib/module/dto/QonversionError.js.map +1 -0
  69. package/lib/module/dto/RemoteConfig.js +11 -0
  70. package/lib/module/dto/RemoteConfig.js.map +1 -0
  71. package/lib/module/dto/RemoteConfigList.js +18 -0
  72. package/lib/module/dto/RemoteConfigList.js.map +1 -0
  73. package/lib/module/dto/RemoteConfigurationSource.js +13 -0
  74. package/lib/module/dto/RemoteConfigurationSource.js.map +1 -0
  75. package/lib/module/dto/ScreenPresentationConfig.js +22 -0
  76. package/lib/module/dto/ScreenPresentationConfig.js.map +1 -0
  77. package/lib/module/dto/SubscriptionPeriod.js +26 -0
  78. package/lib/module/dto/SubscriptionPeriod.js.map +1 -0
  79. package/lib/module/dto/Transaction.js +18 -0
  80. package/lib/module/dto/Transaction.js.map +1 -0
  81. package/lib/module/dto/User.js +10 -0
  82. package/lib/module/dto/User.js.map +1 -0
  83. package/lib/module/dto/UserProperties.js +71 -0
  84. package/lib/module/dto/UserProperties.js.map +1 -0
  85. package/lib/module/dto/UserProperty.js +17 -0
  86. package/lib/module/dto/UserProperty.js.map +1 -0
  87. package/lib/module/dto/enums.js +425 -0
  88. package/lib/module/dto/enums.js.map +1 -0
  89. package/lib/module/dto/storeProducts/ProductInAppDetails.js +16 -0
  90. package/lib/module/dto/storeProducts/ProductInAppDetails.js.map +1 -0
  91. package/lib/module/dto/storeProducts/ProductInstallmentPlanDetails.js +25 -0
  92. package/lib/module/dto/storeProducts/ProductInstallmentPlanDetails.js.map +1 -0
  93. package/lib/module/dto/storeProducts/ProductOfferDetails.js +76 -0
  94. package/lib/module/dto/storeProducts/ProductOfferDetails.js.map +1 -0
  95. package/lib/module/dto/storeProducts/ProductPrice.js +37 -0
  96. package/lib/module/dto/storeProducts/ProductPrice.js.map +1 -0
  97. package/lib/module/dto/storeProducts/ProductPricingPhase.js +52 -0
  98. package/lib/module/dto/storeProducts/ProductPricingPhase.js.map +1 -0
  99. package/lib/module/dto/storeProducts/ProductStoreDetails.js +114 -0
  100. package/lib/module/dto/storeProducts/ProductStoreDetails.js.map +1 -0
  101. package/lib/module/dto/storeProducts/SKPaymentDiscount.js +13 -0
  102. package/lib/module/dto/storeProducts/SKPaymentDiscount.js.map +1 -0
  103. package/lib/module/dto/storeProducts/SKProduct.js +22 -0
  104. package/lib/module/dto/storeProducts/SKProduct.js.map +1 -0
  105. package/lib/module/dto/storeProducts/SKProductDiscount.js +16 -0
  106. package/lib/module/dto/storeProducts/SKProductDiscount.js.map +1 -0
  107. package/lib/module/dto/storeProducts/SKSubscriptionPeriod.js +10 -0
  108. package/lib/module/dto/storeProducts/SKSubscriptionPeriod.js.map +1 -0
  109. package/lib/module/dto/storeProducts/SkuDetails.js +30 -0
  110. package/lib/module/dto/storeProducts/SkuDetails.js.map +1 -0
  111. package/lib/module/index.js +40 -0
  112. package/lib/module/index.js.map +1 -0
  113. package/lib/module/internal/Mapper.js +676 -0
  114. package/lib/module/internal/Mapper.js.map +1 -0
  115. package/lib/module/internal/NoCodesInternal.js +70 -0
  116. package/lib/module/internal/NoCodesInternal.js.map +1 -0
  117. package/lib/module/internal/QonversionInternal.js +237 -0
  118. package/lib/module/internal/QonversionInternal.js.map +1 -0
  119. package/lib/module/internal/specs/NativeNoCodesModule.js +5 -0
  120. package/lib/module/internal/specs/NativeNoCodesModule.js.map +1 -0
  121. package/lib/module/internal/specs/NativeQonversionModule.js +5 -0
  122. package/lib/module/internal/specs/NativeQonversionModule.js.map +1 -0
  123. package/lib/module/internal/utils.js +10 -0
  124. package/lib/module/internal/utils.js.map +1 -0
  125. package/lib/module/package.json +1 -0
  126. package/lib/typescript/package.json +1 -0
  127. package/lib/typescript/src/NoCodes.d.ts +23 -0
  128. package/lib/typescript/src/NoCodes.d.ts.map +1 -0
  129. package/lib/typescript/src/NoCodesApi.d.ts +20 -0
  130. package/lib/typescript/src/NoCodesApi.d.ts.map +1 -0
  131. package/lib/typescript/src/NoCodesConfig.d.ts +8 -0
  132. package/lib/typescript/src/NoCodesConfig.d.ts.map +1 -0
  133. package/lib/typescript/src/NoCodesConfigBuilder.d.ts +26 -0
  134. package/lib/typescript/src/NoCodesConfigBuilder.d.ts.map +1 -0
  135. package/lib/typescript/src/Qonversion.d.ts +26 -0
  136. package/lib/typescript/src/Qonversion.d.ts.map +1 -0
  137. package/lib/typescript/src/QonversionApi.d.ts +285 -0
  138. package/lib/typescript/src/QonversionApi.d.ts.map +1 -0
  139. package/lib/typescript/src/QonversionConfig.d.ts +14 -0
  140. package/lib/typescript/src/QonversionConfig.d.ts.map +1 -0
  141. package/lib/typescript/src/QonversionConfigBuilder.d.ts +65 -0
  142. package/lib/typescript/src/QonversionConfigBuilder.d.ts.map +1 -0
  143. package/lib/typescript/src/dto/Entitlement.d.ts +22 -0
  144. package/lib/typescript/src/dto/Entitlement.d.ts.map +1 -0
  145. package/lib/typescript/src/dto/EntitlementsUpdateListener.d.ts +10 -0
  146. package/lib/typescript/src/dto/EntitlementsUpdateListener.d.ts.map +1 -0
  147. package/lib/typescript/src/dto/Experiment.d.ts +9 -0
  148. package/lib/typescript/src/dto/Experiment.d.ts.map +1 -0
  149. package/lib/typescript/src/dto/ExperimentGroup.d.ts +9 -0
  150. package/lib/typescript/src/dto/ExperimentGroup.d.ts.map +1 -0
  151. package/lib/typescript/src/dto/IntroEligibility.d.ts +7 -0
  152. package/lib/typescript/src/dto/IntroEligibility.d.ts.map +1 -0
  153. package/lib/typescript/src/dto/NoCodesAction.d.ts +10 -0
  154. package/lib/typescript/src/dto/NoCodesAction.d.ts.map +1 -0
  155. package/lib/typescript/src/dto/NoCodesError.d.ts +12 -0
  156. package/lib/typescript/src/dto/NoCodesError.d.ts.map +1 -0
  157. package/lib/typescript/src/dto/NoCodesListener.d.ts +34 -0
  158. package/lib/typescript/src/dto/NoCodesListener.d.ts.map +1 -0
  159. package/lib/typescript/src/dto/Offering.d.ts +11 -0
  160. package/lib/typescript/src/dto/Offering.d.ts.map +1 -0
  161. package/lib/typescript/src/dto/Offerings.d.ts +9 -0
  162. package/lib/typescript/src/dto/Offerings.d.ts.map +1 -0
  163. package/lib/typescript/src/dto/Product.d.ts +95 -0
  164. package/lib/typescript/src/dto/Product.d.ts.map +1 -0
  165. package/lib/typescript/src/dto/PromoPurchasesListener.d.ts +12 -0
  166. package/lib/typescript/src/dto/PromoPurchasesListener.d.ts.map +1 -0
  167. package/lib/typescript/src/dto/PromotionalOffer.d.ts +9 -0
  168. package/lib/typescript/src/dto/PromotionalOffer.d.ts.map +1 -0
  169. package/lib/typescript/src/dto/PurchaseModel.d.ts +19 -0
  170. package/lib/typescript/src/dto/PurchaseModel.d.ts.map +1 -0
  171. package/lib/typescript/src/dto/PurchaseOptions.d.ts +15 -0
  172. package/lib/typescript/src/dto/PurchaseOptions.d.ts.map +1 -0
  173. package/lib/typescript/src/dto/PurchaseOptionsBuilder.d.ts +84 -0
  174. package/lib/typescript/src/dto/PurchaseOptionsBuilder.d.ts.map +1 -0
  175. package/lib/typescript/src/dto/PurchaseUpdateModel.d.ts +25 -0
  176. package/lib/typescript/src/dto/PurchaseUpdateModel.d.ts.map +1 -0
  177. package/lib/typescript/src/dto/QonversionError.d.ts +11 -0
  178. package/lib/typescript/src/dto/QonversionError.d.ts.map +1 -0
  179. package/lib/typescript/src/dto/RemoteConfig.d.ts +10 -0
  180. package/lib/typescript/src/dto/RemoteConfig.d.ts.map +1 -0
  181. package/lib/typescript/src/dto/RemoteConfigList.d.ts +10 -0
  182. package/lib/typescript/src/dto/RemoteConfigList.d.ts.map +1 -0
  183. package/lib/typescript/src/dto/RemoteConfigurationSource.d.ts +11 -0
  184. package/lib/typescript/src/dto/RemoteConfigurationSource.d.ts.map +1 -0
  185. package/lib/typescript/src/dto/ScreenPresentationConfig.d.ts +18 -0
  186. package/lib/typescript/src/dto/ScreenPresentationConfig.d.ts.map +1 -0
  187. package/lib/typescript/src/dto/SubscriptionPeriod.d.ts +21 -0
  188. package/lib/typescript/src/dto/SubscriptionPeriod.d.ts.map +1 -0
  189. package/lib/typescript/src/dto/Transaction.d.ts +16 -0
  190. package/lib/typescript/src/dto/Transaction.d.ts.map +1 -0
  191. package/lib/typescript/src/dto/User.d.ts +7 -0
  192. package/lib/typescript/src/dto/User.d.ts.map +1 -0
  193. package/lib/typescript/src/dto/UserProperties.d.ts +49 -0
  194. package/lib/typescript/src/dto/UserProperties.d.ts.map +1 -0
  195. package/lib/typescript/src/dto/UserProperty.d.ts +13 -0
  196. package/lib/typescript/src/dto/UserProperty.d.ts.map +1 -0
  197. package/lib/typescript/src/dto/enums.d.ts +343 -0
  198. package/lib/typescript/src/dto/enums.d.ts.map +1 -0
  199. package/lib/typescript/src/dto/storeProducts/ProductInAppDetails.d.ts +13 -0
  200. package/lib/typescript/src/dto/storeProducts/ProductInAppDetails.d.ts.map +1 -0
  201. package/lib/typescript/src/dto/storeProducts/ProductInstallmentPlanDetails.d.ts +20 -0
  202. package/lib/typescript/src/dto/storeProducts/ProductInstallmentPlanDetails.d.ts.map +1 -0
  203. package/lib/typescript/src/dto/storeProducts/ProductOfferDetails.d.ts +63 -0
  204. package/lib/typescript/src/dto/storeProducts/ProductOfferDetails.d.ts.map +1 -0
  205. package/lib/typescript/src/dto/storeProducts/ProductPrice.d.ts +29 -0
  206. package/lib/typescript/src/dto/storeProducts/ProductPrice.d.ts.map +1 -0
  207. package/lib/typescript/src/dto/storeProducts/ProductPricingPhase.d.ts +44 -0
  208. package/lib/typescript/src/dto/storeProducts/ProductPricingPhase.d.ts.map +1 -0
  209. package/lib/typescript/src/dto/storeProducts/ProductStoreDetails.d.ts +97 -0
  210. package/lib/typescript/src/dto/storeProducts/ProductStoreDetails.d.ts.map +1 -0
  211. package/lib/typescript/src/dto/storeProducts/SKPaymentDiscount.d.ts +10 -0
  212. package/lib/typescript/src/dto/storeProducts/SKPaymentDiscount.d.ts.map +1 -0
  213. package/lib/typescript/src/dto/storeProducts/SKProduct.d.ts +21 -0
  214. package/lib/typescript/src/dto/storeProducts/SKProduct.d.ts.map +1 -0
  215. package/lib/typescript/src/dto/storeProducts/SKProductDiscount.d.ts +15 -0
  216. package/lib/typescript/src/dto/storeProducts/SKProductDiscount.d.ts.map +1 -0
  217. package/lib/typescript/src/dto/storeProducts/SKSubscriptionPeriod.d.ts +8 -0
  218. package/lib/typescript/src/dto/storeProducts/SKSubscriptionPeriod.d.ts.map +1 -0
  219. package/lib/typescript/src/dto/storeProducts/SkuDetails.d.ts +27 -0
  220. package/lib/typescript/src/dto/storeProducts/SkuDetails.d.ts.map +1 -0
  221. package/lib/typescript/src/index.d.ts +41 -0
  222. package/lib/typescript/src/index.d.ts.map +1 -0
  223. package/lib/typescript/src/internal/Mapper.d.ts +312 -0
  224. package/lib/typescript/src/internal/Mapper.d.ts.map +1 -0
  225. package/lib/typescript/src/internal/NoCodesInternal.d.ts +14 -0
  226. package/lib/typescript/src/internal/NoCodesInternal.d.ts.map +1 -0
  227. package/lib/typescript/src/internal/QonversionInternal.d.ts +60 -0
  228. package/lib/typescript/src/internal/QonversionInternal.d.ts.map +1 -0
  229. package/lib/typescript/src/internal/specs/NativeNoCodesModule.d.ts +17 -0
  230. package/lib/typescript/src/internal/specs/NativeNoCodesModule.d.ts.map +1 -0
  231. package/lib/typescript/src/internal/specs/NativeQonversionModule.d.ts +56 -0
  232. package/lib/typescript/src/internal/specs/NativeQonversionModule.d.ts.map +1 -0
  233. package/lib/typescript/src/internal/utils.d.ts +3 -0
  234. package/lib/typescript/src/internal/utils.d.ts.map +1 -0
  235. package/package.json +151 -0
  236. package/qonversion-react-native-sdk.podspec +21 -0
  237. package/src/NoCodes.ts +37 -0
  238. package/src/NoCodesApi.ts +22 -0
  239. package/src/NoCodesConfig.ts +16 -0
  240. package/src/NoCodesConfigBuilder.ts +40 -0
  241. package/src/Qonversion.ts +40 -0
  242. package/src/QonversionApi.ts +318 -0
  243. package/src/QonversionConfig.ts +32 -0
  244. package/src/QonversionConfigBuilder.ts +102 -0
  245. package/src/dto/Entitlement.ts +57 -0
  246. package/src/dto/EntitlementsUpdateListener.ts +11 -0
  247. package/src/dto/Experiment.ts +15 -0
  248. package/src/dto/ExperimentGroup.ts +15 -0
  249. package/src/dto/IntroEligibility.ts +11 -0
  250. package/src/dto/NoCodesAction.ts +21 -0
  251. package/src/dto/NoCodesError.ts +26 -0
  252. package/src/dto/NoCodesListener.ts +39 -0
  253. package/src/dto/Offering.ts +20 -0
  254. package/src/dto/Offerings.ts +17 -0
  255. package/src/dto/Product.ts +159 -0
  256. package/src/dto/PromoPurchasesListener.ts +13 -0
  257. package/src/dto/PromotionalOffer.ts +17 -0
  258. package/src/dto/PurchaseModel.ts +29 -0
  259. package/src/dto/PurchaseOptions.ts +33 -0
  260. package/src/dto/PurchaseOptionsBuilder.ts +127 -0
  261. package/src/dto/PurchaseUpdateModel.ts +43 -0
  262. package/src/dto/QonversionError.ts +24 -0
  263. package/src/dto/RemoteConfig.ts +16 -0
  264. package/src/dto/RemoteConfigList.ts +23 -0
  265. package/src/dto/RemoteConfigurationSource.ts +26 -0
  266. package/src/dto/ScreenPresentationConfig.ts +24 -0
  267. package/src/dto/SubscriptionPeriod.ts +33 -0
  268. package/src/dto/Transaction.ts +40 -0
  269. package/src/dto/User.ts +11 -0
  270. package/src/dto/UserProperties.ts +78 -0
  271. package/src/dto/UserProperty.ts +21 -0
  272. package/src/dto/enums.ts +389 -0
  273. package/src/dto/storeProducts/ProductInAppDetails.ts +17 -0
  274. package/src/dto/storeProducts/ProductInstallmentPlanDetails.ts +28 -0
  275. package/src/dto/storeProducts/ProductOfferDetails.ts +102 -0
  276. package/src/dto/storeProducts/ProductPrice.ts +46 -0
  277. package/src/dto/storeProducts/ProductPricingPhase.ts +71 -0
  278. package/src/dto/storeProducts/ProductStoreDetails.ts +151 -0
  279. package/src/dto/storeProducts/SKPaymentDiscount.ts +23 -0
  280. package/src/dto/storeProducts/SKProduct.ts +53 -0
  281. package/src/dto/storeProducts/SKProductDiscount.ts +38 -0
  282. package/src/dto/storeProducts/SKSubscriptionPeriod.ts +13 -0
  283. package/src/dto/storeProducts/SkuDetails.ts +68 -0
  284. package/src/index.ts +43 -0
  285. package/src/internal/Mapper.ts +1221 -0
  286. package/src/internal/NoCodesInternal.ts +84 -0
  287. package/src/internal/QonversionInternal.ts +370 -0
  288. package/src/internal/specs/NativeNoCodesModule.ts +20 -0
  289. package/src/internal/specs/NativeQonversionModule.ts +74 -0
  290. package/src/internal/utils.ts +9 -0
@@ -0,0 +1,1221 @@
1
+ import {
2
+ EntitlementGrantType,
3
+ EntitlementRenewState,
4
+ EntitlementSource,
5
+ ExperimentGroupType,
6
+ IntroEligibilityStatus,
7
+ OfferingTag,
8
+ PricingPhaseRecurrenceMode,
9
+ PricingPhaseType,
10
+ ProductType,
11
+ QonversionErrorCode,
12
+ RemoteConfigurationAssignmentType,
13
+ RemoteConfigurationSourceType,
14
+ SKPeriodUnit,
15
+ SKProductDiscountPaymentMode,
16
+ SKProductDiscountType,
17
+ SubscriptionPeriodUnit,
18
+ TransactionEnvironment,
19
+ TransactionOwnershipType,
20
+ TransactionType,
21
+ UserPropertyKey,
22
+ NoCodesErrorCode,
23
+ ActionType,
24
+ } from "../dto/enums";
25
+ import IntroEligibility from "../dto/IntroEligibility";
26
+ import Offering from "../dto/Offering";
27
+ import Offerings from "../dto/Offerings";
28
+ import Entitlement from "../dto/Entitlement";
29
+ import Product from "../dto/Product";
30
+ import SKProduct from "../dto/storeProducts/SKProduct";
31
+ import SKProductDiscount from "../dto/storeProducts/SKProductDiscount";
32
+ import SKSubscriptionPeriod from "../dto/storeProducts/SKSubscriptionPeriod";
33
+ import SkuDetails from "../dto/storeProducts/SkuDetails";
34
+ import User from '../dto/User';
35
+ import ScreenPresentationConfig from '../dto/ScreenPresentationConfig';
36
+ import Experiment from "../dto/Experiment";
37
+ import ExperimentGroup from "../dto/ExperimentGroup";
38
+ import SubscriptionPeriod from "../dto/SubscriptionPeriod";
39
+ import RemoteConfig from "../dto/RemoteConfig";
40
+ import RemoteConfigList from '../dto/RemoteConfigList';
41
+ import UserProperties from '../dto/UserProperties';
42
+ import UserProperty from '../dto/UserProperty';
43
+ import RemoteConfigurationSource from "../dto/RemoteConfigurationSource";
44
+ import Transaction from "../dto/Transaction";
45
+ import ProductStoreDetails from "../dto/storeProducts/ProductStoreDetails";
46
+ import ProductOfferDetails from "../dto/storeProducts/ProductOfferDetails";
47
+ import ProductInAppDetails from "../dto/storeProducts/ProductInAppDetails";
48
+ import ProductPrice from "../dto/storeProducts/ProductPrice";
49
+ import ProductPricingPhase from "../dto/storeProducts/ProductPricingPhase";
50
+ import ProductInstallmentPlanDetails from '../dto/storeProducts/ProductInstallmentPlanDetails';
51
+ import PromotionalOffer from '../dto/PromotionalOffer';
52
+ import SKPaymentDiscount from '../dto/storeProducts/SKPaymentDiscount';
53
+ import NoCodesAction from '../dto/NoCodesAction';
54
+ import QonversionError from '../dto/QonversionError';
55
+ import NoCodesError from '../dto/NoCodesError';
56
+
57
+ export type QProduct = {
58
+ id: string;
59
+ storeId: string;
60
+ basePlanId?: string | null;
61
+ type: string;
62
+ subscriptionPeriod?: QSubscriptionPeriod | null;
63
+ trialPeriod?: QSubscriptionPeriod | null;
64
+ skuDetails?: QSkuDetails | null; // android
65
+ storeDetails?: QProductStoreDetails // android
66
+ skProduct?: QSKProduct | null // iOS
67
+ prettyPrice?: string | null;
68
+ offeringId?: string | null;
69
+ };
70
+
71
+ type QProductStoreDetails = {
72
+ basePlanId?: string | null,
73
+ productId: string,
74
+ name: string,
75
+ title: string
76
+ description: string,
77
+ subscriptionOfferDetails?: QProductOfferDetails[] | null,
78
+ defaultSubscriptionOfferDetails?: QProductOfferDetails | null,
79
+ basePlanSubscriptionOfferDetails?: QProductOfferDetails | null,
80
+ inAppOfferDetails?: QProductInAppDetails | null,
81
+ hasTrialOffer: boolean,
82
+ hasIntroOffer: boolean,
83
+ hasTrialOrIntroOffer: boolean,
84
+ productType: string,
85
+ isInApp: boolean,
86
+ isSubscription: boolean,
87
+ isPrepaid: boolean,
88
+ isInstallment: boolean,
89
+ }
90
+
91
+ type QSubscriptionPeriod = {
92
+ unitCount: number,
93
+ unit: string,
94
+ iso: string,
95
+ }
96
+
97
+ type QProductPricingPhase = {
98
+ price: QProductPrice,
99
+ billingPeriod: QSubscriptionPeriod,
100
+ billingCycleCount: number,
101
+ recurrenceMode: string,
102
+ type: string
103
+ isTrial: boolean,
104
+ isIntro: boolean,
105
+ isBasePlan: boolean,
106
+ }
107
+
108
+ type QProductInstallmentPlanDetails = {
109
+ commitmentPaymentsCount: number;
110
+ subsequentCommitmentPaymentsCount: number;
111
+ }
112
+
113
+ export type QPromotionalOffer = {
114
+ productDiscount: QProductDiscount,
115
+ paymentDiscount: QPaymentDiscount,
116
+ }
117
+
118
+ type QProductOfferDetails = {
119
+ basePlanId: string,
120
+ offerId?: string | null,
121
+ offerToken: string,
122
+ tags: string[],
123
+ pricingPhases: QProductPricingPhase[],
124
+ basePlan?: QProductPricingPhase | null,
125
+ installmentPlanDetails?: QProductInstallmentPlanDetails | null,
126
+ trialPhase?: QProductPricingPhase | null,
127
+ introPhase: QProductPricingPhase | null,
128
+ hasTrial: boolean,
129
+ hasIntro: boolean,
130
+ hasTrialOrIntro: boolean,
131
+ }
132
+
133
+ type QProductPrice = {
134
+ priceAmountMicros: number,
135
+ priceCurrencyCode: string,
136
+ formattedPrice: string,
137
+ isFree: boolean,
138
+ currencySymbol: string,
139
+ }
140
+
141
+ type QProductInAppDetails = {
142
+ price: QProductPrice,
143
+ }
144
+
145
+ type QSkuDetails = {
146
+ description: string;
147
+ freeTrialPeriod: string;
148
+ iconUrl: string;
149
+ introductoryPrice: string;
150
+ introductoryPriceAmountMicros: number;
151
+ introductoryPriceCycles: number;
152
+ introductoryPricePeriod: string;
153
+ originalJson: string;
154
+ originalPrice: string;
155
+ originalPriceAmountMicros: number;
156
+ price: string;
157
+ priceAmountMicros: number;
158
+ priceCurrencyCode: string;
159
+ sku: string;
160
+ subscriptionPeriod: string;
161
+ title: string;
162
+ type: string;
163
+ hashCode: number;
164
+ toString: string;
165
+ };
166
+
167
+ type QSKProduct = {
168
+ subscriptionPeriod: null | QSKSubscriptionPeriod;
169
+ introductoryPrice: QProductDiscount | null;
170
+ discounts: Array<QProductDiscount> | null;
171
+ localizedDescription: string | undefined;
172
+ localizedTitle: string | undefined;
173
+ price: string;
174
+ priceLocale: QLocale;
175
+ productIdentifier: string | undefined;
176
+ isDownloadable: boolean | undefined;
177
+ downloadContentVersion: string | undefined;
178
+ downloadContentLengths: number[] | undefined;
179
+ productDiscount: SKProductDiscount | undefined;
180
+ subscriptionGroupIdentifier: string | undefined;
181
+ isFamilyShareable: boolean | undefined;
182
+ };
183
+
184
+ type QSKSubscriptionPeriod = {
185
+ numberOfUnits: number;
186
+ unit: keyof typeof SKPeriodUnit;
187
+ };
188
+
189
+ type QProductDiscount = {
190
+ subscriptionPeriod: null | QSKSubscriptionPeriod;
191
+ price: string;
192
+ numberOfPeriods: number;
193
+ paymentMode: keyof typeof SKProductDiscountPaymentMode;
194
+ identifier?: string;
195
+ type: keyof typeof SKProductDiscountType;
196
+ priceLocale: QLocale;
197
+ };
198
+
199
+ type QPaymentDiscount = {
200
+ identifier: string;
201
+ keyIdentifier: string;
202
+ nonce: string;
203
+ signature: string;
204
+ timestamp: number;
205
+ };
206
+
207
+ type QLocale = {
208
+ currencySymbol: string | null;
209
+ currencyCode: string | null;
210
+ localeIdentifier: string;
211
+ };
212
+
213
+ export type QEntitlement = {
214
+ id: string;
215
+ productId: string;
216
+ active: boolean;
217
+ renewState: string;
218
+ source: string;
219
+ startedTimestamp: number;
220
+ expirationTimestamp: number;
221
+ renewsCount: number;
222
+ trialStartTimestamp: number;
223
+ firstPurchaseTimestamp: number;
224
+ lastPurchaseTimestamp: number;
225
+ lastActivatedOfferCode: string;
226
+ grantType: string;
227
+ autoRenewDisableTimestamp: number;
228
+ transactions?: Array<QTransaction>;
229
+ };
230
+
231
+ type QTransaction = {
232
+ originalTransactionId: string;
233
+ transactionId: string;
234
+ offerCode: string;
235
+ transactionTimestamp: number;
236
+ expirationTimestamp: number;
237
+ transactionRevocationTimestamp: number;
238
+ environment: string;
239
+ ownershipType: string;
240
+ type: string;
241
+ promoOfferId: string;
242
+ }
243
+
244
+ export type QOfferings = {
245
+ availableOfferings?: Array<QOffering>;
246
+ main: QOffering;
247
+ };
248
+
249
+ type QOffering = {
250
+ id: string;
251
+ tag: keyof typeof OfferingTag;
252
+ products: Array<QProduct>;
253
+ };
254
+
255
+ export type QEligibilityInfo = {
256
+ status:
257
+ | "non_intro_or_trial_product"
258
+ | "intro_or_trial_eligible"
259
+ | "intro_or_trial_ineligible";
260
+ };
261
+
262
+ export type QUser = {
263
+ qonversionId: string;
264
+ identityId?: string | null;
265
+ };
266
+
267
+ export type QRemoteConfig = {
268
+ payload: Record<string, Object>;
269
+ experiment?: QExperiment | null;
270
+ source: QRemoteConfigurationSource;
271
+ };
272
+
273
+ export type QRemoteConfigList = {
274
+ remoteConfigs: Array<QRemoteConfig>;
275
+ }
276
+
277
+ type QRemoteConfigurationSource = {
278
+ id: string;
279
+ name: string;
280
+ type: string;
281
+ assignmentType: string;
282
+ contextKey: string | null | undefined;
283
+ };
284
+
285
+ type QExperiment = {
286
+ id: string;
287
+ name: string;
288
+ group: QExperimentGroup;
289
+ }
290
+
291
+ type QExperimentGroup = {
292
+ id: string;
293
+ name: string;
294
+ type: string;
295
+ }
296
+
297
+ type QUserProperty = {
298
+ key: string;
299
+ value: string;
300
+ };
301
+
302
+ export type QUserProperties = {
303
+ properties: QUserProperty[];
304
+ };
305
+
306
+ type QQonversionError = {
307
+ code: string | undefined;
308
+ description: string | null | undefined,
309
+ additionalMessage: string | null | undefined,
310
+ domain: string | null | undefined,
311
+ };
312
+
313
+ export type QNoCodeAction = {
314
+ type: ActionType;
315
+ parameters: Map<string, string | undefined>;
316
+ error: QNoCodesError | undefined;
317
+ };
318
+
319
+ export type QNoCodesError = QQonversionError & {
320
+ qonversionError?: QQonversionError | null,
321
+ };
322
+
323
+ export type QNoCodeScreenInfo = { screenId: string };
324
+
325
+ const priceMicrosRatio = 1000000;
326
+
327
+ class Mapper {
328
+ static convertPromoOffer(
329
+ promoOffer: QPromotionalOffer | null | undefined
330
+ ): PromotionalOffer | null {
331
+ if (!promoOffer) {
332
+ return null;
333
+ }
334
+
335
+ const productDiscount = this.convertProductDiscount(promoOffer.productDiscount);
336
+ const paymentDiscount = this.convertPaymentDiscount(promoOffer.paymentDiscount);
337
+
338
+ return new PromotionalOffer(productDiscount, paymentDiscount);
339
+ }
340
+
341
+ static convertEntitlements(
342
+ entitlements: Record<string, QEntitlement> | null | undefined
343
+ ): Map<string, Entitlement> {
344
+ let mappedPermissions = new Map();
345
+
346
+ if (!entitlements) {
347
+ return mappedPermissions;
348
+ }
349
+ for (const [key, entitlement] of Object.entries(entitlements)) {
350
+ let renewState: EntitlementRenewState;
351
+ switch (entitlement.renewState) {
352
+ case EntitlementRenewState.NON_RENEWABLE:
353
+ renewState = EntitlementRenewState.NON_RENEWABLE;
354
+ break;
355
+ case EntitlementRenewState.WILL_RENEW:
356
+ renewState = EntitlementRenewState.WILL_RENEW;
357
+ break;
358
+ case EntitlementRenewState.CANCELED:
359
+ renewState = EntitlementRenewState.CANCELED;
360
+ break;
361
+ case EntitlementRenewState.BILLING_ISSUE:
362
+ renewState = EntitlementRenewState.BILLING_ISSUE;
363
+ break;
364
+ default:
365
+ renewState = EntitlementRenewState.UNKNOWN;
366
+ break;
367
+ }
368
+
369
+ const entitlementSource = this.convertEntitlementSource(entitlement.source);
370
+ const entitlementGrantType = this.convertEntitlementGrantType(entitlement.grantType);
371
+ const transactions: Array<Transaction> = [];
372
+
373
+ if (Array.isArray(entitlement.transactions)) {
374
+ entitlement.transactions.forEach((transaction) => {
375
+ const mappedTransaction = this.convertTransaction(transaction);
376
+
377
+ transactions.push(mappedTransaction);
378
+ });
379
+ }
380
+
381
+ const mappedPermission = new Entitlement(
382
+ entitlement.id,
383
+ entitlement.productId,
384
+ entitlement.active,
385
+ renewState,
386
+ entitlementSource,
387
+ entitlement.startedTimestamp,
388
+ entitlement.renewsCount,
389
+ entitlementGrantType,
390
+ transactions,
391
+ entitlement.expirationTimestamp,
392
+ entitlement.trialStartTimestamp,
393
+ entitlement.firstPurchaseTimestamp,
394
+ entitlement.lastPurchaseTimestamp,
395
+ entitlement.autoRenewDisableTimestamp,
396
+ entitlement.lastActivatedOfferCode,
397
+ );
398
+ mappedPermissions.set(key, mappedPermission);
399
+ }
400
+
401
+ return mappedPermissions;
402
+ }
403
+
404
+ static convertTransaction(transaction: QTransaction): Transaction {
405
+ const environment = this.convertTransactionEnvironment(transaction.environment);
406
+ const ownershipType = this.convertTransactionOwnershipType(transaction.ownershipType);
407
+ const type = this.convertTransactionType(transaction.type);
408
+
409
+ return new Transaction(
410
+ transaction.originalTransactionId,
411
+ transaction.transactionId,
412
+ transaction.transactionTimestamp,
413
+ environment,
414
+ ownershipType,
415
+ type,
416
+ transaction.expirationTimestamp,
417
+ transaction.transactionRevocationTimestamp,
418
+ transaction.offerCode,
419
+ transaction.promoOfferId,
420
+ );
421
+ }
422
+
423
+ static convertTransactionType(typeKey: string): TransactionType {
424
+ switch (typeKey) {
425
+ case "SubscriptionStarted":
426
+ return TransactionType.SUBSCRIPTION_STARTED;
427
+ case "SubscriptionRenewed":
428
+ return TransactionType.SUBSCRIPTION_RENEWED;
429
+ case "TrialStarted":
430
+ return TransactionType.TRIAL_STARTED;
431
+ case "IntroStarted":
432
+ return TransactionType.INTRO_STARTED;
433
+ case "IntroRenewed":
434
+ return TransactionType.INTRO_RENEWED;
435
+ case "NonConsumablePurchase":
436
+ return TransactionType.NON_CONSUMABLE_PURCHASE;
437
+ }
438
+
439
+ return TransactionType.UNKNOWN;
440
+ }
441
+
442
+ static convertTransactionOwnershipType(ownershipTypeKey: string): TransactionOwnershipType {
443
+ switch (ownershipTypeKey) {
444
+ case "Owner":
445
+ return TransactionOwnershipType.OWNER;
446
+ case "FamilySharing":
447
+ return TransactionOwnershipType.FAMILY_SHARING;
448
+ }
449
+
450
+ return TransactionOwnershipType.OWNER;
451
+ }
452
+
453
+ static convertTransactionEnvironment(envKey: string): TransactionEnvironment {
454
+ switch (envKey) {
455
+ case "Production":
456
+ return TransactionEnvironment.PRODUCTION;
457
+ case "Sandbox":
458
+ return TransactionEnvironment.SANDBOX;
459
+ }
460
+
461
+ return TransactionEnvironment.PRODUCTION;
462
+ }
463
+
464
+ static convertEntitlementSource(sourceKey: string): EntitlementSource {
465
+ switch (sourceKey) {
466
+ case "Unknown":
467
+ return EntitlementSource.UNKNOWN;
468
+ case "AppStore":
469
+ return EntitlementSource.APP_STORE;
470
+ case "PlayStore":
471
+ return EntitlementSource.PLAY_STORE;
472
+ case "Stripe":
473
+ return EntitlementSource.STRIPE;
474
+ case "Manual":
475
+ return EntitlementSource.MANUAL;
476
+ }
477
+
478
+ return EntitlementSource.UNKNOWN;
479
+ }
480
+
481
+ static convertEntitlementGrantType(typeKey: string): EntitlementGrantType {
482
+ switch (typeKey) {
483
+ case "Purchase":
484
+ return EntitlementGrantType.PURCHASE;
485
+ case "FamilySharing":
486
+ return EntitlementGrantType.FAMILY_SHARING;
487
+ case "OfferCode":
488
+ return EntitlementGrantType.OFFER_CODE;
489
+ case "Manual":
490
+ return EntitlementGrantType.MANUAL;
491
+ }
492
+
493
+ return EntitlementGrantType.PURCHASE;
494
+ }
495
+
496
+ static convertDefinedUserPropertyKey(sourceKey: string): UserPropertyKey {
497
+ switch (sourceKey) {
498
+ case '_q_email':
499
+ return UserPropertyKey.EMAIL;
500
+ case '_q_name':
501
+ return UserPropertyKey.NAME;
502
+ case '_q_kochava_device_id':
503
+ return UserPropertyKey.KOCHAVA_DEVICE_ID;
504
+ case '_q_appsflyer_user_id':
505
+ return UserPropertyKey.APPS_FLYER_USER_ID;
506
+ case '_q_adjust_adid':
507
+ return UserPropertyKey.ADJUST_AD_ID;
508
+ case '_q_custom_user_id':
509
+ return UserPropertyKey.CUSTOM_USER_ID;
510
+ case '_q_fb_attribution':
511
+ return UserPropertyKey.FACEBOOK_ATTRIBUTION;
512
+ case '_q_firebase_instance_id':
513
+ return UserPropertyKey.FIREBASE_APP_INSTANCE_ID;
514
+ case '_q_app_set_id':
515
+ return UserPropertyKey.APP_SET_ID;
516
+ case '_q_advertising_id':
517
+ return UserPropertyKey.ADVERTISING_ID;
518
+ case "_q_appmetrica_device_id":
519
+ return UserPropertyKey.APP_METRICA_DEVICE_ID;
520
+ case "_q_appmetrica_user_profile_id":
521
+ return UserPropertyKey.APP_METRICA_USER_PROFILE_ID;
522
+ case "_q_pushwoosh_hwid":
523
+ return UserPropertyKey.PUSH_WOOSH_HW_ID;
524
+ case "_q_pushwoosh_user_id":
525
+ return UserPropertyKey.PUSH_WOOSH_USER_ID;
526
+ case "_q_tenjin_aiid":
527
+ return UserPropertyKey.TENJIN_ANALYTICS_INSTALLATION_ID;
528
+ }
529
+
530
+ return UserPropertyKey.CUSTOM;
531
+ }
532
+
533
+ static convertUserProperties(properties: QUserProperties): UserProperties {
534
+ const mappedProperties = properties.properties.map(propertyData =>
535
+ new UserProperty(propertyData.key, propertyData.value));
536
+
537
+ return new UserProperties(mappedProperties);
538
+ }
539
+
540
+ static convertProducts(products: Record<string, QProduct> | null | undefined): Map<string, Product> {
541
+ let mappedProducts = new Map();
542
+
543
+ if (!products) {
544
+ return mappedProducts;
545
+ }
546
+
547
+ for (const [key, product] of Object.entries(products)) {
548
+ const mappedProduct = this.convertProduct(product);
549
+ mappedProducts.set(key, mappedProduct);
550
+ }
551
+
552
+ return mappedProducts;
553
+ }
554
+
555
+ static convertProduct(product: QProduct): Product {
556
+ const productType = Mapper.convertProductType(product.type);
557
+ const subscriptionPeriod: SubscriptionPeriod | null = Mapper.convertSubscriptionPeriod(product.subscriptionPeriod);
558
+ const trialPeriod: SubscriptionPeriod | null = Mapper.convertSubscriptionPeriod(product.trialPeriod);
559
+ const offeringId: string | null = product.offeringId ?? null;
560
+
561
+ let skProduct: SKProduct | null = null;
562
+ let skuDetails: SkuDetails | null = null;
563
+ let storeDetails: ProductStoreDetails | null = null;
564
+ let price: number | undefined;
565
+ let currencyCode: string | undefined;
566
+ let storeTitle: string | undefined;
567
+ let storeDescription: string | undefined;
568
+ let prettyIntroductoryPrice: string | undefined;
569
+
570
+ if (!!product.skProduct) {
571
+ skProduct = Mapper.convertSKProduct(product.skProduct as QSKProduct);
572
+ price = parseFloat(skProduct.price);
573
+ currencyCode = skProduct.currencyCode;
574
+ storeTitle = skProduct.localizedTitle;
575
+ storeDescription = skProduct.localizedDescription;
576
+
577
+ if (skProduct.productDiscount) {
578
+ prettyIntroductoryPrice = skProduct.productDiscount.currencySymbol + skProduct.productDiscount.price;
579
+ }
580
+ } else {
581
+ let priceMicros = null
582
+ if (!!product.skuDetails) {
583
+ skuDetails = Mapper.convertSkuDetails(product.skuDetails as QSkuDetails);
584
+ storeTitle = skuDetails.title;
585
+ storeDescription = skuDetails.description;
586
+
587
+ priceMicros = skuDetails.priceAmountMicros;
588
+ currencyCode = skuDetails.priceCurrencyCode;
589
+ if (skuDetails.introductoryPrice.length > 0) {
590
+ prettyIntroductoryPrice = skuDetails.introductoryPrice;
591
+ }
592
+ }
593
+
594
+ if (!!product.storeDetails) {
595
+ storeDetails = Mapper.convertProductStoreDetails(product.storeDetails);
596
+ storeTitle = storeDetails.title;
597
+ storeDescription = storeDetails.description;
598
+
599
+ const defaultOffer = storeDetails.defaultSubscriptionOfferDetails;
600
+ const inAppOffer = storeDetails.inAppOfferDetails;
601
+ if (defaultOffer) {
602
+ priceMicros = defaultOffer.basePlan?.price?.priceAmountMicros;
603
+ currencyCode = defaultOffer.basePlan?.price?.priceCurrencyCode;
604
+ prettyIntroductoryPrice = defaultOffer.introPhase?.price?.formattedPrice;
605
+ } else if (inAppOffer) {
606
+ priceMicros = inAppOffer.price.priceAmountMicros;
607
+ currencyCode = inAppOffer.price.priceCurrencyCode;
608
+ prettyIntroductoryPrice = undefined;
609
+ }
610
+ }
611
+
612
+ price = priceMicros ? priceMicros / priceMicrosRatio : undefined;
613
+ }
614
+
615
+ const mappedProduct = new Product(
616
+ product.id,
617
+ product.storeId,
618
+ product.basePlanId ?? null,
619
+ skuDetails,
620
+ storeDetails,
621
+ skProduct,
622
+ offeringId,
623
+ subscriptionPeriod,
624
+ trialPeriod,
625
+ productType,
626
+ product.prettyPrice ?? null,
627
+ price,
628
+ currencyCode,
629
+ storeTitle,
630
+ storeDescription,
631
+ prettyIntroductoryPrice,
632
+ );
633
+
634
+ return mappedProduct;
635
+ }
636
+
637
+ static convertOfferings(offerings: QOfferings | null | undefined): Offerings | null {
638
+ if (!offerings) {
639
+ return null;
640
+ }
641
+
642
+ if (
643
+ !Array.isArray(offerings.availableOfferings) ||
644
+ offerings.availableOfferings.length === 0
645
+ ) {
646
+ return null;
647
+ }
648
+
649
+ let mainOffering: Offering | null = null;
650
+ if (offerings.main) {
651
+ mainOffering = this.convertOffering(offerings.main);
652
+ }
653
+
654
+ const availableOfferings: Array<Offering> = [];
655
+
656
+ offerings.availableOfferings.forEach((offering) => {
657
+ const mappedOffering = this.convertOffering(offering);
658
+
659
+ availableOfferings.push(mappedOffering);
660
+ });
661
+
662
+ return new Offerings(mainOffering, availableOfferings);
663
+ }
664
+
665
+ static convertOffering(offering: QOffering): Offering {
666
+ const products: Array<Product> = [];
667
+ offering.products.forEach((product) => {
668
+ const mappedProduct = this.convertProduct(product);
669
+
670
+ products.push(mappedProduct);
671
+ });
672
+
673
+ const tag = OfferingTag[offering.tag] ?? OfferingTag['0'];
674
+
675
+ return new Offering(offering.id, tag, products);
676
+ }
677
+
678
+ static convertSkuDetails(skuDetails: QSkuDetails): SkuDetails {
679
+ return new SkuDetails(
680
+ skuDetails.description,
681
+ skuDetails.freeTrialPeriod,
682
+ skuDetails.iconUrl,
683
+ skuDetails.introductoryPrice,
684
+ skuDetails.introductoryPriceAmountMicros,
685
+ skuDetails.introductoryPriceCycles,
686
+ skuDetails.introductoryPricePeriod,
687
+ skuDetails.originalJson,
688
+ skuDetails.originalPrice,
689
+ skuDetails.originalPriceAmountMicros,
690
+ skuDetails.price,
691
+ skuDetails.priceAmountMicros,
692
+ skuDetails.priceCurrencyCode,
693
+ skuDetails.sku,
694
+ skuDetails.subscriptionPeriod,
695
+ skuDetails.title,
696
+ skuDetails.type,
697
+ skuDetails.hashCode,
698
+ skuDetails.toString
699
+ );
700
+ }
701
+
702
+ static convertProductType(productType: string): ProductType {
703
+ let type = ProductType.UNKNOWN
704
+ switch (productType) {
705
+ case ProductType.TRIAL:
706
+ type = ProductType.TRIAL;
707
+ break;
708
+ case ProductType.INTRO:
709
+ type = ProductType.INTRO;
710
+ break;
711
+ case ProductType.SUBSCRIPTION:
712
+ type = ProductType.SUBSCRIPTION;
713
+ break;
714
+ case ProductType.IN_APP:
715
+ type = ProductType.IN_APP;
716
+ break;
717
+ }
718
+
719
+ return type;
720
+ }
721
+
722
+ static convertSubscriptionPeriod(productPeriod: QSubscriptionPeriod | null | undefined): SubscriptionPeriod | null {
723
+ if (!productPeriod) {
724
+ return null;
725
+ }
726
+
727
+ const unit = Mapper.convertSubscriptionPeriodUnit(productPeriod.unit);
728
+
729
+ return new SubscriptionPeriod(
730
+ productPeriod.unitCount,
731
+ unit,
732
+ productPeriod.iso,
733
+ )
734
+ }
735
+
736
+ static convertSubscriptionPeriodUnit(unit: string): SubscriptionPeriodUnit {
737
+ let result: SubscriptionPeriodUnit = SubscriptionPeriodUnit.UNKNOWN;
738
+ switch (unit) {
739
+ case SubscriptionPeriodUnit.DAY:
740
+ result = SubscriptionPeriodUnit.DAY;
741
+ break;
742
+ case SubscriptionPeriodUnit.WEEK:
743
+ result = SubscriptionPeriodUnit.WEEK;
744
+ break;
745
+ case SubscriptionPeriodUnit.MONTH:
746
+ result = SubscriptionPeriodUnit.MONTH;
747
+ break;
748
+ case SubscriptionPeriodUnit.YEAR:
749
+ result = SubscriptionPeriodUnit.YEAR;
750
+ break;
751
+ }
752
+
753
+ return result;
754
+ }
755
+
756
+ static convertProductPricingPhase(pricingPhase: QProductPricingPhase | null | undefined): ProductPricingPhase | null {
757
+ if (!pricingPhase) {
758
+ return null;
759
+ }
760
+
761
+ const price: ProductPrice = Mapper.convertProductPrice(pricingPhase.price);
762
+ const billingPeriod = Mapper.convertSubscriptionPeriod(pricingPhase.billingPeriod)!!;
763
+ const recurrenceMode = Mapper.convertPrisingPhaseRecurrenceMode(pricingPhase.recurrenceMode);
764
+ const type = Mapper.convertPrisingPhaseType(pricingPhase.type);
765
+
766
+ return new ProductPricingPhase(
767
+ price,
768
+ billingPeriod,
769
+ pricingPhase.billingCycleCount,
770
+ recurrenceMode,
771
+ type,
772
+ pricingPhase.isTrial,
773
+ pricingPhase.isIntro,
774
+ pricingPhase.isBasePlan,
775
+ );
776
+ }
777
+
778
+ static convertPrisingPhaseRecurrenceMode(recurrenceMode: string): PricingPhaseRecurrenceMode {
779
+ let mode: PricingPhaseRecurrenceMode = PricingPhaseRecurrenceMode.UNKNOWN;
780
+ switch (recurrenceMode) {
781
+ case PricingPhaseRecurrenceMode.INFINITE_RECURRING:
782
+ mode = PricingPhaseRecurrenceMode.INFINITE_RECURRING;
783
+ break;
784
+ case PricingPhaseRecurrenceMode.FINITE_RECURRING:
785
+ mode = PricingPhaseRecurrenceMode.FINITE_RECURRING;
786
+ break;
787
+ case PricingPhaseRecurrenceMode.NON_RECURRING:
788
+ mode = PricingPhaseRecurrenceMode.NON_RECURRING;
789
+ break;
790
+ }
791
+
792
+ return mode;
793
+ }
794
+
795
+ static convertPrisingPhaseType(type: string): PricingPhaseType {
796
+ let result: PricingPhaseType = PricingPhaseType.UNKNOWN
797
+ switch (type) {
798
+ case PricingPhaseType.REGULAR:
799
+ result = PricingPhaseType.REGULAR;
800
+ break;
801
+ case PricingPhaseType.FREE_TRIAL:
802
+ result = PricingPhaseType.FREE_TRIAL;
803
+ break;
804
+ case PricingPhaseType.DISCOUNTED_SINGLE_PAYMENT:
805
+ result = PricingPhaseType.DISCOUNTED_SINGLE_PAYMENT;
806
+ break;
807
+ case PricingPhaseType.DISCOUNTED_RECURRING_PAYMENT:
808
+ result = PricingPhaseType.DISCOUNTED_RECURRING_PAYMENT;
809
+ break;
810
+ }
811
+
812
+ return result;
813
+ }
814
+
815
+ static convertProductInstallmentPlanDetails(installmentPlanDetails: QProductInstallmentPlanDetails | null | undefined): ProductInstallmentPlanDetails | null {
816
+ if (!installmentPlanDetails) {
817
+ return null;
818
+ }
819
+
820
+ return new ProductInstallmentPlanDetails(
821
+ installmentPlanDetails.commitmentPaymentsCount,
822
+ installmentPlanDetails.subsequentCommitmentPaymentsCount,
823
+ );
824
+ }
825
+
826
+ static convertProductOfferDetails(offerDetails: QProductOfferDetails): ProductOfferDetails {
827
+ let basePlan = Mapper.convertProductPricingPhase(offerDetails.basePlan);
828
+ let trialPhase = Mapper.convertProductPricingPhase(offerDetails.trialPhase);
829
+ let introPhase = Mapper.convertProductPricingPhase(offerDetails.introPhase);
830
+
831
+ let installmentPlanDetails = Mapper.convertProductInstallmentPlanDetails(offerDetails.installmentPlanDetails);
832
+
833
+ let pricingPhases = offerDetails.pricingPhases.map(
834
+ pricingPhase => Mapper.convertProductPricingPhase(pricingPhase)
835
+ ).filter(Boolean) as ProductPricingPhase[];
836
+
837
+ return new ProductOfferDetails(
838
+ offerDetails.basePlanId,
839
+ offerDetails.offerId ?? null,
840
+ offerDetails.offerToken,
841
+ offerDetails.tags,
842
+ pricingPhases,
843
+ basePlan,
844
+ installmentPlanDetails,
845
+ introPhase,
846
+ trialPhase,
847
+ offerDetails.hasTrial,
848
+ offerDetails.hasIntro,
849
+ offerDetails.hasTrialOrIntro,
850
+ );
851
+ }
852
+
853
+ static convertInAppOfferDetails(inAppOfferDetails: QProductInAppDetails): ProductInAppDetails {
854
+ let productPrice: ProductPrice = this.convertProductPrice(inAppOfferDetails.price);
855
+
856
+ return new ProductInAppDetails(productPrice);
857
+ }
858
+
859
+ static convertProductPrice(productPrice: QProductPrice): ProductPrice {
860
+ return new ProductPrice(
861
+ productPrice.priceAmountMicros,
862
+ productPrice.priceCurrencyCode,
863
+ productPrice.formattedPrice,
864
+ productPrice.isFree,
865
+ productPrice.currencySymbol,
866
+ )
867
+ }
868
+
869
+ static convertProductStoreDetails(productStoreDetails: QProductStoreDetails): ProductStoreDetails {
870
+ let defaultSubscriptionOfferDetails: ProductOfferDetails | null = null;
871
+ if (productStoreDetails.defaultSubscriptionOfferDetails != null) {
872
+ defaultSubscriptionOfferDetails = this.convertProductOfferDetails(
873
+ productStoreDetails.defaultSubscriptionOfferDetails
874
+ );
875
+ }
876
+
877
+ let basePlanSubscriptionOfferDetails: ProductOfferDetails | null = null;
878
+ if (productStoreDetails.basePlanSubscriptionOfferDetails != null) {
879
+ basePlanSubscriptionOfferDetails = this.convertProductOfferDetails(
880
+ productStoreDetails.basePlanSubscriptionOfferDetails
881
+ );
882
+ }
883
+
884
+ let inAppOfferDetails: ProductInAppDetails | null = null;
885
+ if (productStoreDetails.inAppOfferDetails != null) {
886
+ inAppOfferDetails = this.convertInAppOfferDetails(productStoreDetails.inAppOfferDetails);
887
+ }
888
+
889
+ let subscriptionOfferDetails: ProductOfferDetails[] | null = null;
890
+ if (productStoreDetails.subscriptionOfferDetails != null) {
891
+ subscriptionOfferDetails = productStoreDetails.subscriptionOfferDetails.map(
892
+ defaultOfferDetail => this.convertProductOfferDetails(defaultOfferDetail));
893
+ }
894
+
895
+ const productType: ProductType = Mapper.convertProductType(productStoreDetails.productType);
896
+
897
+ return new ProductStoreDetails(
898
+ productStoreDetails.basePlanId ?? null,
899
+ productStoreDetails.productId,
900
+ productStoreDetails.name,
901
+ productStoreDetails.title,
902
+ productStoreDetails.description,
903
+ subscriptionOfferDetails,
904
+ defaultSubscriptionOfferDetails,
905
+ basePlanSubscriptionOfferDetails,
906
+ inAppOfferDetails,
907
+ productStoreDetails.hasTrialOffer,
908
+ productStoreDetails.hasIntroOffer,
909
+ productStoreDetails.hasTrialOrIntroOffer,
910
+ productType,
911
+ productStoreDetails.isInApp,
912
+ productStoreDetails.isSubscription,
913
+ productStoreDetails.isPrepaid,
914
+ productStoreDetails.isInstallment,
915
+ );
916
+ }
917
+
918
+ static convertSKProduct(skProduct: QSKProduct): SKProduct {
919
+ let subscriptionPeriod: SKSubscriptionPeriod | undefined;
920
+ if (skProduct.subscriptionPeriod != null) {
921
+ subscriptionPeriod = this.convertSKSubscriptionPeriod(
922
+ skProduct.subscriptionPeriod
923
+ );
924
+ }
925
+
926
+ let discount: SKProductDiscount | undefined;
927
+ if (skProduct.introductoryPrice) {
928
+ discount = this.convertProductDiscount(skProduct.introductoryPrice);
929
+ }
930
+
931
+ let discounts: SKProductDiscount[] | undefined;
932
+ if (Array.isArray(skProduct.discounts) && skProduct.discounts.length) {
933
+ discounts = this.convertDiscounts(skProduct.discounts);
934
+ }
935
+
936
+ return new SKProduct(
937
+ skProduct.localizedDescription,
938
+ skProduct.localizedTitle,
939
+ skProduct.price,
940
+ skProduct.priceLocale.localeIdentifier,
941
+ skProduct.productIdentifier,
942
+ !!skProduct.isDownloadable,
943
+ skProduct.downloadContentVersion,
944
+ skProduct.downloadContentLengths,
945
+ subscriptionPeriod,
946
+ discount,
947
+ discounts,
948
+ skProduct.subscriptionGroupIdentifier,
949
+ skProduct.isFamilyShareable,
950
+ skProduct.priceLocale.currencyCode ?? ""
951
+ );
952
+ }
953
+
954
+ static convertSKSubscriptionPeriod(
955
+ subscriptionPeriod: QSKSubscriptionPeriod
956
+ ): SKSubscriptionPeriod {
957
+ return new SKSubscriptionPeriod(
958
+ subscriptionPeriod.numberOfUnits,
959
+ SKPeriodUnit[subscriptionPeriod.unit]
960
+ );
961
+ }
962
+
963
+ static convertPaymentDiscount(discount: QPaymentDiscount): SKPaymentDiscount {
964
+ return new SKPaymentDiscount(discount.identifier, discount.keyIdentifier, discount.nonce, discount.signature, discount.timestamp)
965
+ }
966
+
967
+ static convertProductDiscount(discount: QProductDiscount): SKProductDiscount {
968
+ let subscriptionPeriod: SKSubscriptionPeriod | undefined = undefined;
969
+ if (discount.subscriptionPeriod != null) {
970
+ subscriptionPeriod = this.convertSKSubscriptionPeriod(
971
+ discount.subscriptionPeriod
972
+ );
973
+ }
974
+ return new SKProductDiscount(
975
+ discount.price,
976
+ discount.priceLocale.localeIdentifier,
977
+ discount.numberOfPeriods,
978
+ subscriptionPeriod,
979
+ SKProductDiscountPaymentMode[discount.paymentMode],
980
+ discount.identifier,
981
+ SKProductDiscountType[discount.type],
982
+ discount.priceLocale.currencySymbol ?? ""
983
+ );
984
+ }
985
+
986
+ static convertDiscounts(
987
+ discounts: Array<QProductDiscount>
988
+ ): SKProductDiscount[] {
989
+ const mappedDiscounts: SKProductDiscount[] = discounts.map((discount) => {
990
+ return this.convertProductDiscount(discount);
991
+ });
992
+ return mappedDiscounts;
993
+ }
994
+
995
+ static convertEligibility(
996
+ eligibilityMap: Record<string, QEligibilityInfo> | null | undefined
997
+ ): Map<string, IntroEligibility> {
998
+ let mappedEligibility = new Map<string, IntroEligibility>();
999
+
1000
+ if (!eligibilityMap) {
1001
+ return mappedEligibility;
1002
+ }
1003
+
1004
+ for (const [key, value] of Object.entries(eligibilityMap)) {
1005
+ const status = Mapper.convertEligibilityStatus(value.status);
1006
+
1007
+ const eligibilityInfo = new IntroEligibility(status);
1008
+ mappedEligibility.set(key, eligibilityInfo);
1009
+ }
1010
+
1011
+ return mappedEligibility;
1012
+ }
1013
+
1014
+ static convertEligibilityStatus(status: string): IntroEligibilityStatus {
1015
+ switch (status) {
1016
+ case "non_intro_or_trial_product":
1017
+ return IntroEligibilityStatus.NON_INTRO_OR_TRIAL_PRODUCT;
1018
+ case "intro_or_trial_eligible":
1019
+ return IntroEligibilityStatus.ELIGIBLE;
1020
+ case "intro_or_trial_ineligible":
1021
+ return IntroEligibilityStatus.INELIGIBLE;
1022
+ default:
1023
+ return IntroEligibilityStatus.UNKNOWN;
1024
+ }
1025
+ }
1026
+
1027
+ static convertUserInfo(user: QUser): User {
1028
+ return new User(user.qonversionId, user.identityId);
1029
+ }
1030
+
1031
+ static convertRemoteConfig(remoteConfig: QRemoteConfig): RemoteConfig {
1032
+ let experiment = null;
1033
+ if (remoteConfig.experiment) {
1034
+ const groupType = this.convertGroupType(remoteConfig.experiment.group.type);
1035
+ const group = new ExperimentGroup(remoteConfig.experiment.group.id, remoteConfig.experiment.group.name, groupType);
1036
+ experiment = new Experiment(remoteConfig.experiment.id, remoteConfig.experiment.name, group);
1037
+ }
1038
+
1039
+ const sourceType = this.convertRemoteConfigurationSourceType(remoteConfig.source.type);
1040
+ const assignmentType = this.convertRemoteConfigurationAssignmentType(remoteConfig.source.assignmentType);
1041
+
1042
+ const source = new RemoteConfigurationSource(
1043
+ remoteConfig.source.id,
1044
+ remoteConfig.source.name,
1045
+ sourceType,
1046
+ assignmentType,
1047
+ remoteConfig.source.contextKey ?? null,
1048
+ )
1049
+
1050
+ return new RemoteConfig(remoteConfig.payload, experiment, source);
1051
+ }
1052
+
1053
+ static convertRemoteConfigList(remoteConfigList: QRemoteConfigList): RemoteConfigList {
1054
+ const remoteConfigs = remoteConfigList.remoteConfigs.map(config => this.convertRemoteConfig(config));
1055
+ return new RemoteConfigList(remoteConfigs);
1056
+ }
1057
+
1058
+ static convertRemoteConfigurationSourceType(type: String): RemoteConfigurationSourceType {
1059
+ switch (type) {
1060
+ case "experiment_control_group":
1061
+ return RemoteConfigurationSourceType.EXPERIMENT_CONTROL_GROUP;
1062
+ case "experiment_treatment_group":
1063
+ return RemoteConfigurationSourceType.EXPERIMENT_TREATMENT_GROUP;
1064
+ case "remote_configuration":
1065
+ return RemoteConfigurationSourceType.REMOTE_CONFIGURATION;
1066
+ default:
1067
+ return RemoteConfigurationSourceType.UNKNOWN;
1068
+ }
1069
+ }
1070
+
1071
+ static convertRemoteConfigurationAssignmentType(type: String): RemoteConfigurationAssignmentType {
1072
+ switch (type) {
1073
+ case "auto":
1074
+ return RemoteConfigurationAssignmentType.AUTO;
1075
+ case "manual":
1076
+ return RemoteConfigurationAssignmentType.MANUAL;
1077
+ default:
1078
+ return RemoteConfigurationAssignmentType.UNKNOWN;
1079
+ }
1080
+ }
1081
+
1082
+ static convertGroupType(type: String): ExperimentGroupType {
1083
+ switch (type) {
1084
+ case "control":
1085
+ return ExperimentGroupType.CONTROL;
1086
+ case "treatment":
1087
+ return ExperimentGroupType.TREATMENT;
1088
+ default:
1089
+ return ExperimentGroupType.UNKNOWN;
1090
+ }
1091
+ }
1092
+
1093
+ static convertAction(
1094
+ payload: QNoCodeAction
1095
+ ): NoCodesAction {
1096
+ return new NoCodesAction(
1097
+ payload["type"],
1098
+ payload["parameters"],
1099
+ this.convertNoCodesError(payload["error"])
1100
+ );
1101
+ }
1102
+
1103
+ static convertNoCodesError(
1104
+ payload: QNoCodesError | undefined
1105
+ ): NoCodesError | undefined {
1106
+ if (!payload) return undefined;
1107
+
1108
+ const code = this.convertNoCodesErrorCode(payload.code);
1109
+ const error = payload.qonversionError ? this.convertQonversionError(payload.qonversionError) : undefined;
1110
+ return new NoCodesError(
1111
+ code,
1112
+ payload.description,
1113
+ payload.additionalMessage,
1114
+ payload.domain,
1115
+ error,
1116
+ );
1117
+ }
1118
+
1119
+ static convertQonversionError(
1120
+ payload: QQonversionError | undefined
1121
+ ): QonversionError | undefined {
1122
+ if (!payload) return undefined;
1123
+
1124
+ const code = this.convertQonversionErrorCode(payload.code);
1125
+ return new QonversionError(
1126
+ code,
1127
+ payload.description,
1128
+ payload.additionalMessage,
1129
+ payload.domain,
1130
+ );
1131
+ }
1132
+
1133
+ static convertScreenPresentationConfig(config: ScreenPresentationConfig): Object {
1134
+ return {
1135
+ presentationStyle: config.presentationStyle,
1136
+ animated: config.animated ? '1' : '0',
1137
+ };
1138
+ }
1139
+
1140
+ static convertNoCodesErrorCode(code: string | undefined): NoCodesErrorCode {
1141
+ if (!code) {
1142
+ return NoCodesErrorCode.UNKNOWN;
1143
+ }
1144
+
1145
+ switch (code) {
1146
+ case NoCodesErrorCode.UNKNOWN: return NoCodesErrorCode.UNKNOWN;
1147
+ case NoCodesErrorCode.BAD_NETWORK_REQUEST: return NoCodesErrorCode.BAD_NETWORK_REQUEST;
1148
+ case NoCodesErrorCode.BAD_RESPONSE: return NoCodesErrorCode.BAD_RESPONSE;
1149
+ case NoCodesErrorCode.ACTIVITY_START: return NoCodesErrorCode.ACTIVITY_START;
1150
+ case NoCodesErrorCode.NETWORK_REQUEST_EXECUTION: return NoCodesErrorCode.NETWORK_REQUEST_EXECUTION;
1151
+ case NoCodesErrorCode.SERIALIZATION: return NoCodesErrorCode.SERIALIZATION;
1152
+ case NoCodesErrorCode.DESERIALIZATION: return NoCodesErrorCode.DESERIALIZATION;
1153
+ case NoCodesErrorCode.REQUEST_DENIED: return NoCodesErrorCode.REQUEST_DENIED;
1154
+ case NoCodesErrorCode.MAPPING: return NoCodesErrorCode.MAPPING;
1155
+ case NoCodesErrorCode.BACKEND_ERROR: return NoCodesErrorCode.BACKEND_ERROR;
1156
+ case NoCodesErrorCode.SCREEN_NOT_FOUND: return NoCodesErrorCode.SCREEN_NOT_FOUND;
1157
+ case NoCodesErrorCode.QONVERSION_ERROR: return NoCodesErrorCode.QONVERSION_ERROR;
1158
+ case NoCodesErrorCode.INTERNAL: return NoCodesErrorCode.INTERNAL;
1159
+ case NoCodesErrorCode.AUTHORIZATION_FAILED: return NoCodesErrorCode.AUTHORIZATION_FAILED;
1160
+ case NoCodesErrorCode.CRITICAL: return NoCodesErrorCode.CRITICAL;
1161
+ case NoCodesErrorCode.PRODUCT_NOT_FOUND: return NoCodesErrorCode.PRODUCT_NOT_FOUND;
1162
+ case NoCodesErrorCode.PRODUCTS_LOADING_FAILED: return NoCodesErrorCode.PRODUCTS_LOADING_FAILED;
1163
+ case NoCodesErrorCode.RATE_LIMIT_EXCEEDED: return NoCodesErrorCode.RATE_LIMIT_EXCEEDED;
1164
+ case NoCodesErrorCode.SCREEN_LOADING_FAILED: return NoCodesErrorCode.SCREEN_LOADING_FAILED;
1165
+ case NoCodesErrorCode.SDK_INITIALIZATION_ERROR: return NoCodesErrorCode.SDK_INITIALIZATION_ERROR;
1166
+ }
1167
+
1168
+ return NoCodesErrorCode.UNKNOWN;
1169
+ }
1170
+
1171
+ static convertQonversionErrorCode(code: string | undefined): QonversionErrorCode {
1172
+ if (!code) {
1173
+ return QonversionErrorCode.UNKNOWN;
1174
+ }
1175
+
1176
+ switch (code) {
1177
+ case QonversionErrorCode.UNKNOWN: return QonversionErrorCode.UNKNOWN;
1178
+ case QonversionErrorCode.API_RATE_LIMIT_EXCEEDED: return QonversionErrorCode.API_RATE_LIMIT_EXCEEDED;
1179
+ case QonversionErrorCode.APPLE_STORE_ERROR: return QonversionErrorCode.APPLE_STORE_ERROR;
1180
+ case QonversionErrorCode.BACKEND_ERROR: return QonversionErrorCode.BACKEND_ERROR;
1181
+ case QonversionErrorCode.BILLING_UNAVAILABLE: return QonversionErrorCode.BILLING_UNAVAILABLE;
1182
+ case QonversionErrorCode.CLIENT_INVALID: return QonversionErrorCode.CLIENT_INVALID;
1183
+ case QonversionErrorCode.CLOUD_SERVICE_NETWORK_CONNECTION_FAILED: return QonversionErrorCode.CLOUD_SERVICE_NETWORK_CONNECTION_FAILED;
1184
+ case QonversionErrorCode.CLOUD_SERVICE_PERMISSION_DENIED: return QonversionErrorCode.CLOUD_SERVICE_PERMISSION_DENIED;
1185
+ case QonversionErrorCode.CLOUD_SERVICE_REVOKED: return QonversionErrorCode.CLOUD_SERVICE_REVOKED;
1186
+ case QonversionErrorCode.FAILED_TO_RECEIVE_DATA: return QonversionErrorCode.FAILED_TO_RECEIVE_DATA;
1187
+ case QonversionErrorCode.FEATURE_NOT_SUPPORTED: return QonversionErrorCode.FEATURE_NOT_SUPPORTED;
1188
+ case QonversionErrorCode.FRAUD_PURCHASE: return QonversionErrorCode.FRAUD_PURCHASE;
1189
+ case QonversionErrorCode.INCORRECT_REQUEST: return QonversionErrorCode.INCORRECT_REQUEST;
1190
+ case QonversionErrorCode.INTERNAL_ERROR: return QonversionErrorCode.INTERNAL_ERROR;
1191
+ case QonversionErrorCode.INVALID_CLIENT_UID: return QonversionErrorCode.INVALID_CLIENT_UID;
1192
+ case QonversionErrorCode.INVALID_CREDENTIALS: return QonversionErrorCode.INVALID_CREDENTIALS;
1193
+ case QonversionErrorCode.INVALID_STORE_CREDENTIALS: return QonversionErrorCode.INVALID_STORE_CREDENTIALS;
1194
+ case QonversionErrorCode.LAUNCH_ERROR: return QonversionErrorCode.LAUNCH_ERROR;
1195
+ case QonversionErrorCode.NETWORK_CONNECTION_FAILED: return QonversionErrorCode.NETWORK_CONNECTION_FAILED;
1196
+ case QonversionErrorCode.OFFERINGS_NOT_FOUND: return QonversionErrorCode.OFFERINGS_NOT_FOUND;
1197
+ case QonversionErrorCode.PAYMENT_INVALID: return QonversionErrorCode.PAYMENT_INVALID;
1198
+ case QonversionErrorCode.PAYMENT_NOT_ALLOWED: return QonversionErrorCode.PAYMENT_NOT_ALLOWED;
1199
+ case QonversionErrorCode.PLAY_STORE_ERROR: return QonversionErrorCode.PLAY_STORE_ERROR;
1200
+ case QonversionErrorCode.PRIVACY_ACKNOWLEDGEMENT_REQUIRED: return QonversionErrorCode.PRIVACY_ACKNOWLEDGEMENT_REQUIRED;
1201
+ case QonversionErrorCode.PRODUCT_ALREADY_OWNED: return QonversionErrorCode.PRODUCT_ALREADY_OWNED;
1202
+ case QonversionErrorCode.PRODUCT_NOT_FOUND: return QonversionErrorCode.PRODUCT_NOT_FOUND;
1203
+ case QonversionErrorCode.PRODUCT_NOT_OWNED: return QonversionErrorCode.PRODUCT_NOT_OWNED;
1204
+ case QonversionErrorCode.PROJECT_CONFIG_ERROR: return QonversionErrorCode.PROJECT_CONFIG_ERROR;
1205
+ case QonversionErrorCode.PURCHASE_CANCELED: return QonversionErrorCode.PURCHASE_CANCELED;
1206
+ case QonversionErrorCode.PURCHASE_INVALID: return QonversionErrorCode.PURCHASE_INVALID;
1207
+ case QonversionErrorCode.PURCHASE_PENDING: return QonversionErrorCode.PURCHASE_PENDING;
1208
+ case QonversionErrorCode.PURCHASE_UNSPECIFIED: return QonversionErrorCode.PURCHASE_UNSPECIFIED;
1209
+ case QonversionErrorCode.RECEIPT_VALIDATION_ERROR: return QonversionErrorCode.RECEIPT_VALIDATION_ERROR;
1210
+ case QonversionErrorCode.REMOTE_CONFIGURATION_NOT_AVAILABLE: return QonversionErrorCode.REMOTE_CONFIGURATION_NOT_AVAILABLE;
1211
+ case QonversionErrorCode.RESPONSE_PARSING_FAILED: return QonversionErrorCode.RESPONSE_PARSING_FAILED;
1212
+ case QonversionErrorCode.STORE_PRODUCT_NOT_AVAILABLE: return QonversionErrorCode.STORE_PRODUCT_NOT_AVAILABLE;
1213
+ case QonversionErrorCode.UNAUTHORIZED_REQUEST_DATA: return QonversionErrorCode.UNAUTHORIZED_REQUEST_DATA;
1214
+ case QonversionErrorCode.UNKNOWN_CLIENT_PLATFORM: return QonversionErrorCode.UNKNOWN_CLIENT_PLATFORM;
1215
+ }
1216
+
1217
+ return QonversionErrorCode.UNKNOWN;
1218
+ }
1219
+ }
1220
+
1221
+ export default Mapper;