react-native-iap 16.0.0 → 16.0.2

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 (45) hide show
  1. package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +15 -7
  2. package/ios/HybridRnIap.swift +11 -6
  3. package/ios/RnIapHelper.swift +33 -1
  4. package/lib/module/hooks/useIAP.js +27 -9
  5. package/lib/module/hooks/useIAP.js.map +1 -1
  6. package/lib/module/index.js +34 -22
  7. package/lib/module/index.js.map +1 -1
  8. package/lib/module/index.kepler.js +3 -2
  9. package/lib/module/index.kepler.js.map +1 -1
  10. package/lib/module/types.js.map +1 -1
  11. package/lib/module/utils/available-purchases.js +59 -0
  12. package/lib/module/utils/available-purchases.js.map +1 -0
  13. package/lib/module/utils/type-bridge.js +56 -6
  14. package/lib/module/utils/type-bridge.js.map +1 -1
  15. package/lib/module/vega-adapter.js +13 -7
  16. package/lib/module/vega-adapter.js.map +1 -1
  17. package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
  18. package/lib/typescript/src/index.d.ts.map +1 -1
  19. package/lib/typescript/src/index.kepler.d.ts.map +1 -1
  20. package/lib/typescript/src/specs/RnIap.nitro.d.ts +2 -0
  21. package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
  22. package/lib/typescript/src/types.d.ts +11 -0
  23. package/lib/typescript/src/types.d.ts.map +1 -1
  24. package/lib/typescript/src/utils/available-purchases.d.ts +8 -0
  25. package/lib/typescript/src/utils/available-purchases.d.ts.map +1 -0
  26. package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
  27. package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
  28. package/nitrogen/generated/android/c++/JNitroPurchase.hpp +11 -3
  29. package/nitrogen/generated/android/c++/JPurchaseAndroid.hpp +11 -3
  30. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +14 -4
  31. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseAndroid.kt +14 -4
  32. package/nitrogen/generated/ios/swift/NitroPurchase.swift +75 -1
  33. package/nitrogen/generated/ios/swift/PurchaseAndroid.swift +75 -1
  34. package/nitrogen/generated/shared/c++/NitroPurchase.hpp +10 -2
  35. package/nitrogen/generated/shared/c++/PurchaseAndroid.hpp +10 -2
  36. package/openiap-versions.json +3 -3
  37. package/package.json +1 -1
  38. package/src/hooks/useIAP.ts +27 -10
  39. package/src/index.kepler.ts +5 -9
  40. package/src/index.ts +41 -45
  41. package/src/specs/RnIap.nitro.ts +2 -0
  42. package/src/types.ts +11 -0
  43. package/src/utils/available-purchases.ts +73 -0
  44. package/src/utils/type-bridge.ts +84 -9
  45. package/src/vega-adapter.ts +24 -3
@@ -631,6 +631,14 @@ function isVegaParserError(error: unknown): boolean {
631
631
  );
632
632
  }
633
633
 
634
+ function malformedVegaResponse(error: unknown, operation: string): Error {
635
+ const detail = error instanceof Error ? error.message : String(error);
636
+ return createVegaError(
637
+ ErrorCode.BillingResponseJsonParseError,
638
+ `${operation} returned a malformed response: ${detail}`,
639
+ );
640
+ }
641
+
634
642
  function createPricingPhase(product: VegaProduct) {
635
643
  return {
636
644
  billingCycleCount: 0,
@@ -693,6 +701,7 @@ function mapReceipt(
693
701
  receipt: VegaReceipt,
694
702
  fallbackProductType?: unknown,
695
703
  productIdOverride?: string,
704
+ userData?: VegaUserData | null,
696
705
  ): NitroPurchase {
697
706
  const receiptId = receipt.receiptId ?? '';
698
707
  const productId = productIdOverride ?? getReceiptSku(receipt);
@@ -729,6 +738,8 @@ function mapReceipt(
729
738
  receipt.isDeferred && deferredSku
730
739
  ? {products: [deferredSku], purchaseToken: receiptId}
731
740
  : null,
741
+ userIdAmazon: nonBlankString(userData?.userId),
742
+ userMarketplaceAmazon: nonBlankString(userData?.marketplace),
732
743
  };
733
744
  }
734
745
 
@@ -934,7 +945,7 @@ export function createVegaIapModule(service: VegaPurchasingService): RnIap {
934
945
  response = await service.getPurchaseUpdates({reset});
935
946
  } catch (error) {
936
947
  if (isVegaParserError(error)) {
937
- return receipts;
948
+ throw malformedVegaResponse(error, 'Amazon Vega purchase updates');
938
949
  }
939
950
  throw error;
940
951
  }
@@ -1013,7 +1024,10 @@ export function createVegaIapModule(service: VegaPurchasingService): RnIap {
1013
1024
  );
1014
1025
  } catch (error) {
1015
1026
  if (isVegaParserError(error)) {
1016
- return;
1027
+ throw malformedVegaResponse(
1028
+ error,
1029
+ 'Amazon Vega purchase product metadata',
1030
+ );
1017
1031
  }
1018
1032
  throw error;
1019
1033
  }
@@ -1045,6 +1059,7 @@ export function createVegaIapModule(service: VegaPurchasingService): RnIap {
1045
1059
  receipt,
1046
1060
  getCachedProductType(receipt, productTypesBySku),
1047
1061
  resolveReceiptProductId(receipt),
1062
+ cachedUserData,
1048
1063
  ),
1049
1064
  );
1050
1065
  };
@@ -1133,6 +1148,7 @@ export function createVegaIapModule(service: VegaPurchasingService): RnIap {
1133
1148
  getCachedProductType(receipt, productTypesBySku, sku) ??
1134
1149
  (matchesRequestedSku ? fallbackProductType : undefined),
1135
1150
  resolveReceiptProductId(receipt, matchesRequestedSku ? sku : undefined),
1151
+ cachedUserData,
1136
1152
  );
1137
1153
  if (matchesRequestedSku) {
1138
1154
  requestedPurchases.push(purchase);
@@ -1481,7 +1497,12 @@ export function createVegaIapModule(service: VegaPurchasingService): RnIap {
1481
1497
  if (!response.receipt) return [];
1482
1498
 
1483
1499
  cachedUserData = response.userData ?? cachedUserData;
1484
- const purchase = mapReceipt(response.receipt, fallbackProductType, sku);
1500
+ const purchase = mapReceipt(
1501
+ response.receipt,
1502
+ fallbackProductType,
1503
+ sku,
1504
+ response.userData ?? cachedUserData,
1505
+ );
1485
1506
  emitPurchaseUpdated(purchase);
1486
1507
  return [purchase];
1487
1508
  } catch (error) {