react-native-iap 15.5.4 → 15.6.1

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 (77) hide show
  1. package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +163 -15
  2. package/android/src/main/java/com/margelo/nitro/iap/PendingEventBuffer.kt +86 -0
  3. package/android/src/main/java/com/margelo/nitro/iap/RnIapLog.kt +13 -0
  4. package/ios/HybridRnIap.swift +31 -4
  5. package/ios/RnIapHelper.swift +3 -2
  6. package/ios/RnIapLog.swift +14 -0
  7. package/lib/module/hooks/useIAP.js +8 -2
  8. package/lib/module/hooks/useIAP.js.map +1 -1
  9. package/lib/module/index.js +105 -30
  10. package/lib/module/index.js.map +1 -1
  11. package/lib/module/index.kepler.js +72 -5
  12. package/lib/module/index.kepler.js.map +1 -1
  13. package/lib/module/kit-api.js +78 -3
  14. package/lib/module/kit-api.js.map +1 -1
  15. package/lib/module/types.js +29 -25
  16. package/lib/module/types.js.map +1 -1
  17. package/lib/module/utils/deprecation.js +15 -0
  18. package/lib/module/utils/deprecation.js.map +1 -0
  19. package/lib/module/utils/platform-request.js +28 -0
  20. package/lib/module/utils/platform-request.js.map +1 -0
  21. package/lib/module/utils/type-bridge.js +9 -4
  22. package/lib/module/utils/type-bridge.js.map +1 -1
  23. package/lib/module/vega-adapter.js +34 -22
  24. package/lib/module/vega-adapter.js.map +1 -1
  25. package/lib/typescript/src/hooks/useIAP.d.ts +16 -2
  26. package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
  27. package/lib/typescript/src/index.d.ts +56 -12
  28. package/lib/typescript/src/index.d.ts.map +1 -1
  29. package/lib/typescript/src/index.kepler.d.ts +50 -4
  30. package/lib/typescript/src/index.kepler.d.ts.map +1 -1
  31. package/lib/typescript/src/kit-api.d.ts +18 -8
  32. package/lib/typescript/src/kit-api.d.ts.map +1 -1
  33. package/lib/typescript/src/specs/RnIap.nitro.d.ts +32 -6
  34. package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
  35. package/lib/typescript/src/types.d.ts +119 -175
  36. package/lib/typescript/src/types.d.ts.map +1 -1
  37. package/lib/typescript/src/utils/deprecation.d.ts +3 -0
  38. package/lib/typescript/src/utils/deprecation.d.ts.map +1 -0
  39. package/lib/typescript/src/utils/platform-request.d.ts +12 -0
  40. package/lib/typescript/src/utils/platform-request.d.ts.map +1 -0
  41. package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
  42. package/lib/typescript/src/vega-adapter.d.ts +1 -0
  43. package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
  44. package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +16 -0
  45. package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +1 -0
  46. package/nitrogen/generated/android/c++/JNitroPurchase.hpp +5 -1
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +4 -0
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +7 -2
  49. package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +8 -0
  50. package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +1 -0
  51. package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +19 -0
  52. package/nitrogen/generated/ios/swift/NitroPurchase.swift +39 -2
  53. package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +1 -0
  54. package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +1 -0
  55. package/nitrogen/generated/shared/c++/NitroPurchase.hpp +5 -1
  56. package/openiap-versions.json +3 -3
  57. package/package.json +1 -1
  58. package/src/hooks/useIAP.ts +22 -2
  59. package/src/index.kepler.ts +86 -8
  60. package/src/index.ts +139 -47
  61. package/src/kit-api.ts +136 -13
  62. package/src/specs/RnIap.nitro.ts +33 -6
  63. package/src/types.ts +130 -203
  64. package/src/utils/deprecation.ts +16 -0
  65. package/src/utils/platform-request.ts +37 -0
  66. package/src/utils/type-bridge.ts +20 -4
  67. package/src/vega-adapter.ts +50 -24
  68. package/lib/module/hooks/useWebhookEvents.js +0 -113
  69. package/lib/module/hooks/useWebhookEvents.js.map +0 -1
  70. package/lib/module/webhook-client.js +0 -164
  71. package/lib/module/webhook-client.js.map +0 -1
  72. package/lib/typescript/src/hooks/useWebhookEvents.d.ts +0 -55
  73. package/lib/typescript/src/hooks/useWebhookEvents.d.ts.map +0 -1
  74. package/lib/typescript/src/webhook-client.d.ts +0 -82
  75. package/lib/typescript/src/webhook-client.d.ts.map +0 -1
  76. package/src/hooks/useWebhookEvents.ts +0 -180
  77. package/src/webhook-client.ts +0 -312
@@ -25,9 +25,9 @@ export interface ActiveSubscription {
25
25
  transactionDate: number;
26
26
  transactionId: string;
27
27
  /**
28
- * @deprecated iOS only - use daysUntilExpirationIOS instead.
29
28
  * Whether the subscription will expire soon (within 7 days).
30
29
  * Consider using daysUntilExpirationIOS for more precise control.
30
+ * @deprecated iOS only - use daysUntilExpirationIOS instead. Scheduled for removal in OpenIAP 3.0.
31
31
  */
32
32
  willExpireSoon?: (boolean | null);
33
33
  }
@@ -80,8 +80,9 @@ export interface AdvancedCommerceRefundIOS {
80
80
  /**
81
81
  * Alternative billing mode for Android
82
82
  * Controls which billing system is used
83
- * @deprecated Use enableBillingProgramAndroid with BillingProgramAndroid instead.
84
- * Use USER_CHOICE_BILLING for user choice billing, EXTERNAL_OFFER for alternative only.
83
+ * Use the user-choice-billing program for user choice billing and external-offer
84
+ * for external digital-content offers.
85
+ * @deprecated Use enableBillingProgramAndroid with BillingProgramAndroid instead. Scheduled for removal in OpenIAP 3.0.
85
86
  */
86
87
  export type AlternativeBillingModeAndroid = 'none' | 'user-choice' | 'alternative-only';
87
88
  export interface AndroidSubscriptionOfferInput {
@@ -298,8 +299,8 @@ export interface DiscountDisplayInfoAndroid {
298
299
  }
299
300
  /**
300
301
  * Discount information returned from the store.
301
- * @deprecated Use the standardized SubscriptionOffer type instead for cross-platform compatibility.
302
- * @see https://openiap.dev/docs/types#subscription-offer
302
+ * @see https://openiap.dev/docs/types/subscription-offer
303
+ * @deprecated Use the standardized SubscriptionOffer type instead for cross-platform compatibility. Scheduled for removal in OpenIAP 3.0.
303
304
  */
304
305
  export interface DiscountIOS {
305
306
  identifier: string;
@@ -313,12 +314,13 @@ export interface DiscountIOS {
313
314
  }
314
315
  /**
315
316
  * Standardized one-time product discount offer.
316
- * Provides a unified interface for one-time purchase discounts across platforms.
317
+ * Provides a platform-neutral OpenIAP shape for Google Play one-time product
318
+ * purchase options and offers.
317
319
  *
318
- * Currently supported on Android (Google Play Billing 8.0+).
319
- * iOS does not support one-time purchase discounts in the same way.
320
+ * Currently populated only on Android (Google Play Billing 8.0+).
321
+ * iOS does not populate this type.
320
322
  *
321
- * @see https://openiap.dev/docs/features/discount
323
+ * @see https://openiap.dev/docs/types/discount-offer
322
324
  */
323
325
  export interface DiscountOffer {
324
326
  /** Currency code (ISO 4217, e.g., "USD") */
@@ -330,7 +332,7 @@ export interface DiscountOffer {
330
332
  discountAmountMicrosAndroid?: (string | null);
331
333
  /** Formatted display price string (e.g., "$4.99") */
332
334
  displayPrice: string;
333
- /** [Android] Formatted discount amount string (e.g., "$5.00 OFF"). */
335
+ /** [Android] Formatted discount amount including its currency sign (e.g., "$5.00"). */
334
336
  formattedDiscountAmountAndroid?: (string | null);
335
337
  /**
336
338
  * [Android] Original full price in micro-units before discount.
@@ -376,7 +378,11 @@ export interface DiscountOffer {
376
378
  purchaseOptionIdAndroid?: (string | null);
377
379
  /** [Android] Rental details if this is a rental offer. */
378
380
  rentalDetailsAndroid?: (RentalDetailsAndroid | null);
379
- /** Type of discount offer */
381
+ /**
382
+ * Offer category. DiscountOffer currently represents Android one-time product
383
+ * offers and is populated as OneTime. Introductory and Promotional are used by
384
+ * SubscriptionOffer.
385
+ */
380
386
  type: DiscountOfferType;
381
387
  /**
382
388
  * [Android] Valid time window for the offer.
@@ -386,8 +392,8 @@ export interface DiscountOffer {
386
392
  }
387
393
  /**
388
394
  * iOS DiscountOffer (output type).
389
- * @deprecated Use the standardized SubscriptionOffer type instead for cross-platform compatibility.
390
- * @see https://openiap.dev/docs/types#subscription-offer
395
+ * @see https://openiap.dev/docs/types/subscription-offer
396
+ * @deprecated Use the standardized SubscriptionOffer type instead for cross-platform compatibility. Scheduled for removal in OpenIAP 3.0.
391
397
  */
392
398
  export interface DiscountOfferIOS {
393
399
  /** Discount identifier */
@@ -449,8 +455,11 @@ export declare enum ErrorCode {
449
455
  PurchaseVerificationFinishFailed = "purchase-verification-finish-failed",
450
456
  PurchaseVerificationFinished = "purchase-verification-finished",
451
457
  QueryProduct = "query-product",
458
+ /** @deprecated Use PurchaseVerificationFailed instead. Scheduled for removal in OpenIAP 3.0. */
452
459
  ReceiptFailed = "receipt-failed",
460
+ /** @deprecated Use PurchaseVerificationFinished instead. Scheduled for removal in OpenIAP 3.0. */
453
461
  ReceiptFinished = "receipt-finished",
462
+ /** @deprecated Use PurchaseVerificationFinishFailed instead. Scheduled for removal in OpenIAP 3.0. */
454
463
  ReceiptFinishedFailed = "receipt-finished-failed",
455
464
  RemoteError = "remote-error",
456
465
  ServiceDisconnected = "service-disconnected",
@@ -479,8 +488,8 @@ export type ExternalLinkLaunchModeAndroid = 'unspecified' | 'launch-in-external-
479
488
  export type ExternalLinkTypeAndroid = 'unspecified' | 'link-to-digital-content-offer' | 'link-to-app-download';
480
489
  /**
481
490
  * External offer availability result (Android)
482
- * @deprecated Use BillingProgramAvailabilityResultAndroid with isBillingProgramAvailableAsync instead
483
491
  * Available in Google Play Billing Library 6.2.0+, deprecated in 8.2.0
492
+ * @deprecated Use BillingProgramAvailabilityResultAndroid from isBillingProgramAvailableAndroid instead. Scheduled for removal in OpenIAP 3.0.
484
493
  */
485
494
  export interface ExternalOfferAvailabilityResultAndroid {
486
495
  /** Whether external offers are available for the user */
@@ -488,8 +497,8 @@ export interface ExternalOfferAvailabilityResultAndroid {
488
497
  }
489
498
  /**
490
499
  * External offer reporting details (Android)
491
- * @deprecated Use BillingProgramReportingDetailsAndroid with createBillingProgramReportingDetailsAsync instead
492
500
  * Available in Google Play Billing Library 6.2.0+, deprecated in 8.2.0
501
+ * @deprecated Use BillingProgramReportingDetailsAndroid from createBillingProgramReportingDetailsAndroid instead. Scheduled for removal in OpenIAP 3.0.
493
502
  */
494
503
  export interface ExternalOfferReportingDetailsAndroid {
495
504
  /** External transaction token for reporting external offer transactions */
@@ -616,8 +625,8 @@ export interface InitConnectionConfig {
616
625
  /**
617
626
  * Alternative billing mode for Android
618
627
  * If not specified, defaults to NONE (standard Google Play billing)
619
- * @deprecated Use enableBillingProgramAndroid instead.
620
628
  * Use USER_CHOICE_BILLING for user choice billing, EXTERNAL_OFFER for alternative only.
629
+ * @deprecated Use enableBillingProgramAndroid instead. Scheduled for removal in OpenIAP 3.0.
621
630
  */
622
631
  alternativeBillingModeAndroid?: (AlternativeBillingModeAndroid | null);
623
632
  /**
@@ -710,6 +719,7 @@ export interface Mutation {
710
719
  * Returns true if available, false otherwise.
711
720
  * Throws OpenIapError.NotPrepared if billing client not ready.
712
721
  * See: https://openiap.dev/docs/apis/android/check-alternative-billing-availability-android
722
+ * @deprecated Use isBillingProgramAvailableAndroid with the external-offer BillingProgramAndroid value instead. Scheduled for removal in OpenIAP 3.0.
713
723
  */
714
724
  checkAlternativeBillingAvailabilityAndroid: Promise<boolean>;
715
725
  /**
@@ -729,6 +739,7 @@ export interface Mutation {
729
739
  * Returns token string, or null if creation failed.
730
740
  * Throws OpenIapError.NotPrepared if billing client not ready.
731
741
  * See: https://openiap.dev/docs/apis/android/create-alternative-billing-token-android
742
+ * @deprecated Use createBillingProgramReportingDetailsAndroid with the external-offer BillingProgramAndroid value instead. Scheduled for removal in OpenIAP 3.0.
732
743
  */
733
744
  createAlternativeBillingTokenAndroid?: Promise<(string | null)>;
734
745
  /**
@@ -789,6 +800,20 @@ export interface Mutation {
789
800
  * See: https://openiap.dev/docs/apis/android/launch-external-link-android
790
801
  */
791
802
  launchExternalLinkAndroid: Promise<boolean>;
803
+ /**
804
+ * Open the Google Play offer/promo code redemption flow so the user can enter a code.
805
+ * On Google Play builds, launches the Play Store redeem page
806
+ * (https://play.google.com/redeem). A purchase listener can receive the redeemed
807
+ * purchase while the app is running with an active billing connection; always
808
+ * reconcile with getAvailablePurchases when the app resumes.
809
+ * Does not require the billing client to be initialized (no Play Billing version requirement).
810
+ * Available in OpenIAP Spec 2.4.2 / openiap-google 2.5.0.
811
+ * Android counterpart of presentCodeRedemptionSheetIOS.
812
+ * Returns true when the redemption flow was launched, or false when the current
813
+ * store flavor does not provide an equivalent redemption flow.
814
+ * See: https://openiap.dev/docs/apis/android/open-redeem-offer-code-android
815
+ */
816
+ openRedeemOfferCodeAndroid: Promise<boolean>;
792
817
  /**
793
818
  * Show the App Store offer code redemption sheet.
794
819
  * See: https://openiap.dev/docs/apis/ios/present-code-redemption-sheet-ios
@@ -814,11 +839,8 @@ export interface Mutation {
814
839
  /**
815
840
  * Buy the currently promoted product.
816
841
  *
817
- * @deprecated Use promotedProductListenerIOS to receive the productId,
818
- * then call requestPurchase with that SKU instead. In StoreKit 2,
819
- * promoted products can be purchased directly via the standard purchase flow.
820
842
  * See: https://openiap.dev/docs/apis/ios/request-purchase-on-promoted-product-ios
821
- * @deprecated Use promotedProductListenerIOS + requestPurchase instead
843
+ * @deprecated Use the promoted-product listener or callback exposed by your SDK to receive the productId, then call requestPurchase with that SKU instead. In StoreKit 2, promoted products can be purchased directly via the standard purchase flow. Scheduled for removal in OpenIAP 3.0.
822
844
  */
823
845
  requestPurchaseOnPromotedProductIOS: Promise<boolean>;
824
846
  /**
@@ -832,6 +854,7 @@ export interface Mutation {
832
854
  * Returns true if user accepted, false if user canceled.
833
855
  * Throws OpenIapError.NotPrepared if billing client not ready.
834
856
  * See: https://openiap.dev/docs/apis/android/show-alternative-billing-dialog-android
857
+ * @deprecated Use launchExternalLinkAndroid instead. Scheduled for removal in OpenIAP 3.0.
835
858
  */
836
859
  showAlternativeBillingDialogAndroid: Promise<boolean>;
837
860
  /**
@@ -871,7 +894,7 @@ export interface Mutation {
871
894
  /**
872
895
  * Deprecated. Validate purchase receipts with the configured providers — use verifyPurchase instead.
873
896
  * See: https://openiap.dev/docs/features/validation#verify-purchase
874
- * @deprecated Use verifyPurchase
897
+ * @deprecated Use verifyPurchase. Scheduled for removal in OpenIAP 3.0.
875
898
  */
876
899
  validateReceipt: Promise<VerifyPurchaseResult>;
877
900
  /**
@@ -907,19 +930,7 @@ export type MutationInitConnectionArgs = (InitConnectionConfig | null) | undefin
907
930
  export type MutationIsBillingProgramAvailableAndroidArgs = BillingProgramAndroid;
908
931
  export type MutationLaunchExternalLinkAndroidArgs = LaunchExternalLinkParamsAndroid;
909
932
  export type MutationPresentExternalPurchaseLinkIosArgs = string;
910
- export type MutationRequestPurchaseArgs = {
911
- /** Per-platform purchase request props */
912
- request: RequestPurchasePropsByPlatforms;
913
- type: 'in-app';
914
- /** Use alternative billing (Google Play alternative billing, Apple external purchase link) */
915
- useAlternativeBilling?: boolean | null;
916
- } | {
917
- /** Per-platform subscription request props */
918
- request: RequestSubscriptionPropsByPlatforms;
919
- type: 'subs';
920
- /** Use alternative billing (Google Play alternative billing, Apple external purchase link) */
921
- useAlternativeBilling?: boolean | null;
922
- };
933
+ export type MutationRequestPurchaseArgs = RequestPurchaseProps;
923
934
  export type MutationShowBillingProgramInformationDialogAndroidArgs = BillingProgramInformationDialogParamsAndroid;
924
935
  export type MutationShowExternalPurchaseCustomLinkNoticeIosArgs = ExternalPurchaseCustomLinkNoticeTypeIOS;
925
936
  export type MutationShowInAppMessagesAndroidArgs = (InAppMessageParamsAndroid | null) | undefined;
@@ -984,9 +995,9 @@ export interface ProductAndroid extends ProductCommon {
984
995
  debugDescription?: (string | null);
985
996
  description: string;
986
997
  /**
987
- * Standardized discount offers for one-time products.
988
- * Cross-platform type with Android-specific fields using suffix.
989
- * @see https://openiap.dev/docs/types#discount-offer
998
+ * Standardized Android one-time product purchase options and offers.
999
+ * Native metadata uses Android-suffixed fields.
1000
+ * @see https://openiap.dev/docs/types/discount-offer
990
1001
  */
991
1002
  discountOffers?: (DiscountOffer[] | null);
992
1003
  displayName?: (string | null);
@@ -996,8 +1007,7 @@ export interface ProductAndroid extends ProductCommon {
996
1007
  /**
997
1008
  * One-time purchase offer details including discounts (Android)
998
1009
  * Returns all eligible offers. Available in Google Play Billing Library 8.0+
999
- * @deprecated Use discountOffers instead for cross-platform compatibility.
1000
- * @deprecated Use discountOffers instead
1010
+ * @deprecated Use the standardized discountOffers field instead. Scheduled for removal in OpenIAP 3.0.
1001
1011
  */
1002
1012
  oneTimePurchaseOfferDetailsAndroid?: (ProductAndroidOneTimePurchaseOfferDetail[] | null);
1003
1013
  platform: 'android';
@@ -1010,15 +1020,12 @@ export interface ProductAndroid extends ProductCommon {
1010
1020
  * Available in Google Play Billing Library 8.0.0+
1011
1021
  */
1012
1022
  productStatusAndroid?: (ProductStatusAndroid | null);
1013
- /**
1014
- * @deprecated Use subscriptionOffers instead for cross-platform compatibility.
1015
- * @deprecated Use subscriptionOffers instead
1016
- */
1023
+ /** @deprecated Use subscriptionOffers instead for cross-platform compatibility. Scheduled for removal in OpenIAP 3.0. */
1017
1024
  subscriptionOfferDetailsAndroid?: (ProductSubscriptionAndroidOfferDetails[] | null);
1018
1025
  /**
1019
1026
  * Standardized subscription offers.
1020
1027
  * Cross-platform type with Android-specific fields using suffix.
1021
- * @see https://openiap.dev/docs/types#subscription-offer
1028
+ * @see https://openiap.dev/docs/types/subscription-offer
1022
1029
  */
1023
1030
  subscriptionOffers?: (SubscriptionOffer[] | null);
1024
1031
  title: string;
@@ -1027,8 +1034,8 @@ export interface ProductAndroid extends ProductCommon {
1027
1034
  /**
1028
1035
  * One-time purchase offer details (Android).
1029
1036
  * Available in Google Play Billing Library 8.0+
1030
- * @deprecated Use the standardized DiscountOffer type instead for cross-platform compatibility.
1031
- * @see https://openiap.dev/docs/types#discount-offer
1037
+ * @see https://openiap.dev/docs/types/discount-offer
1038
+ * @deprecated Use the standardized DiscountOffer type for Android one-time offers. Scheduled for removal in OpenIAP 3.0.
1032
1039
  */
1033
1040
  export interface ProductAndroidOneTimePurchaseOfferDetail {
1034
1041
  /**
@@ -1097,16 +1104,13 @@ export interface ProductIOS extends ProductCommon {
1097
1104
  * monthly subscriptions with a 12-month commitment.
1098
1105
  */
1099
1106
  pricingTermsIOS?: (SubscriptionPricingTermsIOS[] | null);
1100
- /**
1101
- * @deprecated Use subscriptionOffers instead for cross-platform compatibility.
1102
- * @deprecated Use subscriptionOffers instead
1103
- */
1107
+ /** @deprecated Use subscriptionOffers instead for cross-platform compatibility. Scheduled for removal in OpenIAP 3.0. */
1104
1108
  subscriptionInfoIOS?: (SubscriptionInfoIOS | null);
1105
1109
  /**
1106
1110
  * Standardized subscription offers.
1107
1111
  * Cross-platform type with iOS-specific fields using suffix.
1108
1112
  * Note: iOS does not support one-time product discounts.
1109
- * @see https://openiap.dev/docs/types#subscription-offer
1113
+ * @see https://openiap.dev/docs/types/subscription-offer
1110
1114
  */
1111
1115
  subscriptionOffers?: (SubscriptionOffer[] | null);
1112
1116
  title: string;
@@ -1132,9 +1136,8 @@ export interface ProductSubscriptionAndroid extends ProductCommon {
1132
1136
  debugDescription?: (string | null);
1133
1137
  description: string;
1134
1138
  /**
1135
- * Standardized discount offers for one-time products.
1136
- * Cross-platform type with Android-specific fields using suffix.
1137
- * @see https://openiap.dev/docs/types#discount-offer
1139
+ * Nullable compatibility field. Google Play does not return one-time purchase
1140
+ * offer details for subscription products; use subscriptionOffers below.
1138
1141
  */
1139
1142
  discountOffers?: (DiscountOffer[] | null);
1140
1143
  displayName?: (string | null);
@@ -1142,10 +1145,9 @@ export interface ProductSubscriptionAndroid extends ProductCommon {
1142
1145
  id: string;
1143
1146
  nameAndroid: string;
1144
1147
  /**
1145
- * One-time purchase offer details including discounts (Android)
1146
- * Returns all eligible offers. Available in Google Play Billing Library 8.0+
1147
- * @deprecated Use discountOffers instead for cross-platform compatibility.
1148
- * @deprecated Use discountOffers instead
1148
+ * Legacy nullable compatibility field. Google Play does not populate one-time
1149
+ * purchase offer details for subscription products.
1150
+ * @deprecated One-time offers belong to ProductAndroid.discountOffers; subscriptions use subscriptionOffers. Scheduled for removal in OpenIAP 3.0.
1149
1151
  */
1150
1152
  oneTimePurchaseOfferDetailsAndroid?: (ProductAndroidOneTimePurchaseOfferDetail[] | null);
1151
1153
  platform: 'android';
@@ -1158,15 +1160,12 @@ export interface ProductSubscriptionAndroid extends ProductCommon {
1158
1160
  * Available in Google Play Billing Library 8.0.0+
1159
1161
  */
1160
1162
  productStatusAndroid?: (ProductStatusAndroid | null);
1161
- /**
1162
- * @deprecated Use subscriptionOffers instead for cross-platform compatibility.
1163
- * @deprecated Use subscriptionOffers instead
1164
- */
1163
+ /** @deprecated Use subscriptionOffers instead for cross-platform compatibility. Scheduled for removal in OpenIAP 3.0. */
1165
1164
  subscriptionOfferDetailsAndroid: ProductSubscriptionAndroidOfferDetails[];
1166
1165
  /**
1167
1166
  * Standardized subscription offers.
1168
1167
  * Cross-platform type with Android-specific fields using suffix.
1169
- * @see https://openiap.dev/docs/types#subscription-offer
1168
+ * @see https://openiap.dev/docs/types/subscription-offer
1170
1169
  */
1171
1170
  subscriptionOffers: SubscriptionOffer[];
1172
1171
  title: string;
@@ -1174,8 +1173,8 @@ export interface ProductSubscriptionAndroid extends ProductCommon {
1174
1173
  }
1175
1174
  /**
1176
1175
  * Subscription offer details (Android).
1177
- * @deprecated Use the standardized SubscriptionOffer type instead for cross-platform compatibility.
1178
- * @see https://openiap.dev/docs/types#subscription-offer
1176
+ * @see https://openiap.dev/docs/types/subscription-offer
1177
+ * @deprecated Use the standardized SubscriptionOffer type instead for cross-platform compatibility. Scheduled for removal in OpenIAP 3.0.
1179
1178
  */
1180
1179
  export interface ProductSubscriptionAndroidOfferDetails {
1181
1180
  basePlanId: string;
@@ -1194,10 +1193,7 @@ export interface ProductSubscriptionIOS extends ProductCommon {
1194
1193
  currency: string;
1195
1194
  debugDescription?: (string | null);
1196
1195
  description: string;
1197
- /**
1198
- * @deprecated Use subscriptionOffers instead for cross-platform compatibility.
1199
- * @deprecated Use subscriptionOffers instead
1200
- */
1196
+ /** @deprecated Use subscriptionOffers instead for cross-platform compatibility. Scheduled for removal in OpenIAP 3.0. */
1201
1197
  discountsIOS?: (DiscountIOS[] | null);
1202
1198
  displayName?: (string | null);
1203
1199
  displayNameIOS: string;
@@ -1219,15 +1215,12 @@ export interface ProductSubscriptionIOS extends ProductCommon {
1219
1215
  pricingTermsIOS?: (SubscriptionPricingTermsIOS[] | null);
1220
1216
  /** App Store subscription group identifier for intro-offer eligibility checks. */
1221
1217
  subscriptionGroupIdIOS?: (string | null);
1222
- /**
1223
- * @deprecated Use subscriptionOffers for offer metadata and subscriptionGroupIdIOS for the App Store subscription group identifier.
1224
- * @deprecated Use subscriptionOffers for offers and subscriptionGroupIdIOS for group ID
1225
- */
1218
+ /** @deprecated Use subscriptionOffers for offer metadata and subscriptionGroupIdIOS for the App Store subscription group identifier. Scheduled for removal in OpenIAP 3.0. */
1226
1219
  subscriptionInfoIOS?: (SubscriptionInfoIOS | null);
1227
1220
  /**
1228
1221
  * Standardized subscription offers.
1229
1222
  * Cross-platform type with iOS-specific fields using suffix.
1230
- * @see https://openiap.dev/docs/types#subscription-offer
1223
+ * @see https://openiap.dev/docs/types/subscription-offer
1231
1224
  */
1232
1225
  subscriptionOffers?: (SubscriptionOffer[] | null);
1233
1226
  subscriptionPeriodNumberIOS?: (string | null);
@@ -1282,7 +1275,7 @@ export interface PurchaseAndroid extends PurchaseCommon {
1282
1275
  * Available in Google Play Billing Library 5.0+
1283
1276
  */
1284
1277
  pendingPurchaseUpdateAndroid?: (PendingPurchaseUpdateAndroid | null);
1285
- /** @deprecated Use store instead */
1278
+ /** @deprecated Use store instead. Scheduled for removal in OpenIAP 3.0. */
1286
1279
  platform: IapPlatform;
1287
1280
  productId: string;
1288
1281
  purchaseState: PurchaseState;
@@ -1306,7 +1299,7 @@ export interface PurchaseCommon {
1306
1299
  id: string;
1307
1300
  ids?: (string[] | null);
1308
1301
  isAutoRenewing: boolean;
1309
- /** @deprecated Use store instead */
1302
+ /** @deprecated Use store instead. Scheduled for removal in OpenIAP 3.0. */
1310
1303
  platform: IapPlatform;
1311
1304
  productId: string;
1312
1305
  purchaseState: PurchaseState;
@@ -1356,7 +1349,7 @@ export interface PurchaseIOS extends PurchaseCommon {
1356
1349
  originalTransactionDateIOS?: (number | null);
1357
1350
  originalTransactionIdentifierIOS?: (string | null);
1358
1351
  ownershipTypeIOS?: (string | null);
1359
- /** @deprecated Use store instead */
1352
+ /** @deprecated Use store instead. Scheduled for removal in OpenIAP 3.0. */
1360
1353
  platform: IapPlatform;
1361
1354
  productId: string;
1362
1355
  purchaseState: PurchaseState;
@@ -1487,7 +1480,7 @@ export interface Query {
1487
1480
  * Deprecated. Get the current App Store storefront ISO 3166-1 alpha-3 country
1488
1481
  * code — use cross-platform getStorefront instead.
1489
1482
  * See: https://openiap.dev/docs/apis/ios/get-storefront-ios
1490
- * @deprecated Use getStorefront
1483
+ * @deprecated Use getStorefront. Scheduled for removal in OpenIAP 3.0.
1491
1484
  */
1492
1485
  getStorefrontIOS: Promise<string>;
1493
1486
  /**
@@ -1530,7 +1523,7 @@ export interface Query {
1530
1523
  /**
1531
1524
  * Deprecated. Legacy App Store receipt validation — use verifyPurchase instead.
1532
1525
  * See: https://openiap.dev/docs/apis/ios/validate-receipt-ios
1533
- * @deprecated Use verifyPurchase
1526
+ * @deprecated Use verifyPurchase. Scheduled for removal in OpenIAP 3.0.
1534
1527
  */
1535
1528
  validateReceiptIOS: Promise<VerifyPurchaseResultIOS>;
1536
1529
  }
@@ -1674,14 +1667,22 @@ export interface RequestPurchaseIosProps {
1674
1667
  export type RequestPurchaseProps = {
1675
1668
  /** Per-platform purchase request props */
1676
1669
  request: RequestPurchasePropsByPlatforms;
1670
+ /** Explicit purchase type hint (defaults to in-app) */
1677
1671
  type: 'in-app';
1678
- /** Use alternative billing (Google Play alternative billing, Apple external purchase link) */
1672
+ /**
1673
+ * This flag only logs debug info and has no effect on the purchase flow.
1674
+ * @deprecated Use enableBillingProgramAndroid in InitConnectionConfig instead. Scheduled for removal in OpenIAP 3.0.
1675
+ */
1679
1676
  useAlternativeBilling?: boolean | null;
1680
1677
  } | {
1681
1678
  /** Per-platform subscription request props */
1682
1679
  request: RequestSubscriptionPropsByPlatforms;
1680
+ /** Explicit purchase type hint (defaults to in-app) */
1683
1681
  type: 'subs';
1684
- /** Use alternative billing (Google Play alternative billing, Apple external purchase link) */
1682
+ /**
1683
+ * This flag only logs debug info and has no effect on the purchase flow.
1684
+ * @deprecated Use enableBillingProgramAndroid in InitConnectionConfig instead. Scheduled for removal in OpenIAP 3.0.
1685
+ */
1685
1686
  useAlternativeBilling?: boolean | null;
1686
1687
  };
1687
1688
  /**
@@ -1694,13 +1695,13 @@ export type RequestPurchaseProps = {
1694
1695
  * (determined at build time, not runtime)
1695
1696
  */
1696
1697
  export interface RequestPurchasePropsByPlatforms {
1697
- /** @deprecated Use google instead */
1698
+ /** @deprecated Use google instead. Scheduled for removal in OpenIAP 3.0. */
1698
1699
  android?: (RequestPurchaseAndroidProps | null);
1699
1700
  /** Apple-specific purchase parameters */
1700
1701
  apple?: (RequestPurchaseIosProps | null);
1701
1702
  /** Google-specific purchase parameters */
1702
1703
  google?: (RequestPurchaseAndroidProps | null);
1703
- /** @deprecated Use apple instead */
1704
+ /** @deprecated Use apple instead. Scheduled for removal in OpenIAP 3.0. */
1704
1705
  ios?: (RequestPurchaseIosProps | null);
1705
1706
  }
1706
1707
  export type RequestPurchaseResult = Purchase | Purchase[] | null;
@@ -1730,7 +1731,7 @@ export interface RequestSubscriptionAndroidProps {
1730
1731
  purchaseToken?: (string | null);
1731
1732
  /**
1732
1733
  * Replacement mode for subscription changes
1733
- * @deprecated Use subscriptionProductReplacementParams instead for item-level replacement (8.1.0+)
1734
+ * @deprecated Use subscriptionProductReplacementParams instead for item-level replacement (8.1.0+). Scheduled for removal in OpenIAP 3.0.
1734
1735
  */
1735
1736
  replacementMode?: (number | null);
1736
1737
  /** List of subscription SKUs */
@@ -1799,13 +1800,13 @@ export interface RequestSubscriptionIosProps {
1799
1800
  * (determined at build time, not runtime)
1800
1801
  */
1801
1802
  export interface RequestSubscriptionPropsByPlatforms {
1802
- /** @deprecated Use google instead */
1803
+ /** @deprecated Use google instead. Scheduled for removal in OpenIAP 3.0. */
1803
1804
  android?: (RequestSubscriptionAndroidProps | null);
1804
1805
  /** Apple-specific subscription parameters */
1805
1806
  apple?: (RequestSubscriptionIosProps | null);
1806
1807
  /** Google-specific subscription parameters */
1807
1808
  google?: (RequestSubscriptionAndroidProps | null);
1808
- /** @deprecated Use apple instead */
1809
+ /** @deprecated Use apple instead. Scheduled for removal in OpenIAP 3.0. */
1809
1810
  ios?: (RequestSubscriptionIosProps | null);
1810
1811
  }
1811
1812
  export interface RequestVerifyPurchaseWithIapkitAmazonProps {
@@ -1948,8 +1949,7 @@ export interface SubscriptionInfoIOS {
1948
1949
  * - iOS: Introductory offers, promotional offers with server-side signatures
1949
1950
  * - Android: Offer tokens with pricing phases
1950
1951
  *
1951
- * @see https://openiap.dev/docs/types/ios#discount-offer
1952
- * @see https://openiap.dev/docs/types/android#subscription-offer
1952
+ * @see https://openiap.dev/docs/types/subscription-offer
1953
1953
  */
1954
1954
  export interface SubscriptionOffer {
1955
1955
  /**
@@ -2022,8 +2022,8 @@ export interface SubscriptionOffer {
2022
2022
  }
2023
2023
  /**
2024
2024
  * iOS subscription offer details.
2025
- * @deprecated Use the standardized SubscriptionOffer type instead for cross-platform compatibility.
2026
- * @see https://openiap.dev/docs/types#subscription-offer
2025
+ * @see https://openiap.dev/docs/types/subscription-offer
2026
+ * @deprecated Use the standardized SubscriptionOffer type instead for cross-platform compatibility. Scheduled for removal in OpenIAP 3.0.
2027
2027
  */
2028
2028
  export interface SubscriptionOfferIOS {
2029
2029
  displayPrice: string;
@@ -2074,7 +2074,6 @@ export interface SubscriptionProductReplacementParamsAndroid {
2074
2074
  * Available in Google Play Billing Library 8.1.0+
2075
2075
  */
2076
2076
  export type SubscriptionReplacementModeAndroid = 'unknown-replacement-mode' | 'with-time-proration' | 'charge-prorated-price' | 'charge-full-price' | 'without-proration' | 'deferred' | 'keep-existing';
2077
- export type SubscriptionState = 'active' | 'expired' | 'in-billing-retry' | 'in-grace-period' | 'paused' | 'refunded' | 'revoked' | 'unknown';
2078
2077
  export interface SubscriptionStatusIOS {
2079
2078
  renewalInfo?: (RenewalInfoIOS | null);
2080
2079
  state: string;
@@ -2240,62 +2239,6 @@ export interface VerifyPurchaseWithProviderResult {
2240
2239
  provider: PurchaseVerificationProvider;
2241
2240
  }
2242
2241
  export type VoidResult = void;
2243
- export type WebhookCancellationReason = 'billing-error' | 'other' | 'price-increase-declined' | 'product-unavailable' | 'refunded' | 'user-canceled';
2244
- export interface WebhookEvent {
2245
- /** Reason for cancellation, when applicable. */
2246
- cancellationReason?: (WebhookCancellationReason | null);
2247
- /** Localized currency code (ISO 4217) at event time, when available. */
2248
- currency?: (string | null);
2249
- environment: WebhookEventEnvironment;
2250
- /** When the current subscription period ends. Epoch milliseconds. */
2251
- expiresAt?: (number | null);
2252
- /**
2253
- * Stable identifier suitable for idempotency. Derived from the source notification
2254
- * UUID where the store provides one (ASN v2 `notificationUUID`, RTDN message id);
2255
- * otherwise hashed from the canonicalized payload.
2256
- */
2257
- id: string;
2258
- /** Time the underlying event occurred at the store. Epoch milliseconds. */
2259
- occurredAt: number;
2260
- platform: IapPlatform;
2261
- /**
2262
- * Price in micros (1/1,000,000 of the currency unit) at event time, when available.
2263
- * Matches Google Play's `priceAmountMicros` convention; iOS values are converted.
2264
- */
2265
- priceAmountMicros?: (number | null);
2266
- /** Product the event pertains to. May be null for account-level events. */
2267
- productId?: (string | null);
2268
- /** kit project that owns the subscription / purchase this event refers to. */
2269
- projectId: string;
2270
- /**
2271
- * Cross-platform purchase identity used to correlate this event with an existing
2272
- * purchase record. iOS: `originalTransactionId`. Android: `purchaseToken`.
2273
- * Null for `TestNotification` events (Apple ASN v2 / Google RTDN test
2274
- * payloads carry no transaction); always present for every other event type.
2275
- */
2276
- purchaseToken?: (string | null);
2277
- /**
2278
- * Original signed payload from the store. ASN v2 events expose the JWS string;
2279
- * RTDN events expose the base64-decoded Pub/Sub message JSON. Provided so that
2280
- * consumers can independently verify or extract platform-specific fields. kit
2281
- * always validates this payload before emitting the event.
2282
- */
2283
- rawSignedPayload?: (string | null);
2284
- /** Time kit ingested and normalized this event. Epoch milliseconds. */
2285
- receivedAt: number;
2286
- /** When auto-renewal will charge again. Epoch milliseconds. */
2287
- renewsAt?: (number | null);
2288
- source: WebhookEventSource;
2289
- /**
2290
- * Normalized subscription state at the time of event, when the event refers to
2291
- * a subscription. Null for one-time purchase events.
2292
- */
2293
- subscriptionState?: (SubscriptionState | null);
2294
- type: WebhookEventType;
2295
- }
2296
- export type WebhookEventEnvironment = 'production' | 'sandbox' | 'xcode';
2297
- export type WebhookEventSource = 'apple-app-store-server-notifications-v2' | 'google-play-real-time-developer-notifications' | 'meta-horizon-reconciler';
2298
- export type WebhookEventType = 'purchase-consumption-request' | 'purchase-refunded' | 'subscription-canceled' | 'subscription-expired' | 'subscription-in-billing-retry' | 'subscription-in-grace-period' | 'subscription-paused' | 'subscription-price-change' | 'subscription-product-changed' | 'subscription-recovered' | 'subscription-renewed' | 'subscription-resumed' | 'subscription-revoked' | 'subscription-started' | 'subscription-uncanceled' | 'test-notification';
2299
2242
  /**
2300
2243
  * Win-back offer input for iOS 18+ (StoreKit 2)
2301
2244
  * Win-back offers are used to re-engage churned subscribers.
@@ -2306,34 +2249,6 @@ export interface WinBackOfferInputIOS {
2306
2249
  /** The win-back offer ID from App Store Connect */
2307
2250
  offerId: string;
2308
2251
  }
2309
- export type QueryArgsMap = {
2310
- canPresentExternalPurchaseNoticeIOS: never;
2311
- currentEntitlementIOS: QueryCurrentEntitlementIosArgs;
2312
- fetchProducts: QueryFetchProductsArgs;
2313
- getActiveSubscriptions: QueryGetActiveSubscriptionsArgs;
2314
- getAllTransactionsIOS: never;
2315
- getAppTransactionIOS: never;
2316
- getAvailablePurchases: QueryGetAvailablePurchasesArgs;
2317
- getBillingChoiceInfoAndroid: QueryGetBillingChoiceInfoAndroidArgs;
2318
- getExternalPurchaseCustomLinkTokenIOS: QueryGetExternalPurchaseCustomLinkTokenIosArgs;
2319
- getPendingTransactionsIOS: never;
2320
- getPromotedProductIOS: never;
2321
- getReceiptDataIOS: never;
2322
- getStorefront: never;
2323
- getStorefrontIOS: never;
2324
- getTransactionJwsIOS: QueryGetTransactionJwsIosArgs;
2325
- hasActiveSubscriptions: QueryHasActiveSubscriptionsArgs;
2326
- isEligibleForExternalPurchaseCustomLinkIOS: never;
2327
- isEligibleForIntroOfferIOS: QueryIsEligibleForIntroOfferIosArgs;
2328
- isTransactionVerifiedIOS: QueryIsTransactionVerifiedIosArgs;
2329
- latestTransactionIOS: QueryLatestTransactionIosArgs;
2330
- subscriptionStatusIOS: QuerySubscriptionStatusIosArgs;
2331
- validateReceiptIOS: QueryValidateReceiptIosArgs;
2332
- };
2333
- export type QueryField<K extends keyof Query> = QueryArgsMap[K] extends never ? () => NonNullable<Query[K]> : undefined extends QueryArgsMap[K] ? (args?: QueryArgsMap[K]) => NonNullable<Query[K]> : (args: QueryArgsMap[K]) => NonNullable<Query[K]>;
2334
- export type QueryFieldMap = {
2335
- [K in keyof Query]?: QueryField<K>;
2336
- };
2337
2252
  export type MutationArgsMap = {
2338
2253
  acknowledgePurchaseAndroid: MutationAcknowledgePurchaseAndroidArgs;
2339
2254
  beginRefundRequestIOS: MutationBeginRefundRequestIosArgs;
@@ -2348,6 +2263,7 @@ export type MutationArgsMap = {
2348
2263
  initConnection: MutationInitConnectionArgs;
2349
2264
  isBillingProgramAvailableAndroid: MutationIsBillingProgramAvailableAndroidArgs;
2350
2265
  launchExternalLinkAndroid: MutationLaunchExternalLinkAndroidArgs;
2266
+ openRedeemOfferCodeAndroid: never;
2351
2267
  presentCodeRedemptionSheetIOS: never;
2352
2268
  presentExternalPurchaseLinkIOS: MutationPresentExternalPurchaseLinkIosArgs;
2353
2269
  presentExternalPurchaseNoticeSheetIOS: never;
@@ -2368,6 +2284,34 @@ export type MutationField<K extends keyof Mutation> = MutationArgsMap[K] extends
2368
2284
  export type MutationFieldMap = {
2369
2285
  [K in keyof Mutation]?: MutationField<K>;
2370
2286
  };
2287
+ export type QueryArgsMap = {
2288
+ canPresentExternalPurchaseNoticeIOS: never;
2289
+ currentEntitlementIOS: QueryCurrentEntitlementIosArgs;
2290
+ fetchProducts: QueryFetchProductsArgs;
2291
+ getActiveSubscriptions: QueryGetActiveSubscriptionsArgs;
2292
+ getAllTransactionsIOS: never;
2293
+ getAppTransactionIOS: never;
2294
+ getAvailablePurchases: QueryGetAvailablePurchasesArgs;
2295
+ getBillingChoiceInfoAndroid: QueryGetBillingChoiceInfoAndroidArgs;
2296
+ getExternalPurchaseCustomLinkTokenIOS: QueryGetExternalPurchaseCustomLinkTokenIosArgs;
2297
+ getPendingTransactionsIOS: never;
2298
+ getPromotedProductIOS: never;
2299
+ getReceiptDataIOS: never;
2300
+ getStorefront: never;
2301
+ getStorefrontIOS: never;
2302
+ getTransactionJwsIOS: QueryGetTransactionJwsIosArgs;
2303
+ hasActiveSubscriptions: QueryHasActiveSubscriptionsArgs;
2304
+ isEligibleForExternalPurchaseCustomLinkIOS: never;
2305
+ isEligibleForIntroOfferIOS: QueryIsEligibleForIntroOfferIosArgs;
2306
+ isTransactionVerifiedIOS: QueryIsTransactionVerifiedIosArgs;
2307
+ latestTransactionIOS: QueryLatestTransactionIosArgs;
2308
+ subscriptionStatusIOS: QuerySubscriptionStatusIosArgs;
2309
+ validateReceiptIOS: QueryValidateReceiptIosArgs;
2310
+ };
2311
+ export type QueryField<K extends keyof Query> = QueryArgsMap[K] extends never ? () => NonNullable<Query[K]> : undefined extends QueryArgsMap[K] ? (args?: QueryArgsMap[K]) => NonNullable<Query[K]> : (args: QueryArgsMap[K]) => NonNullable<Query[K]>;
2312
+ export type QueryFieldMap = {
2313
+ [K in keyof Query]?: QueryField<K>;
2314
+ };
2371
2315
  export type SubscriptionArgsMap = {
2372
2316
  developerProvidedBillingAndroid: never;
2373
2317
  promotedProductIOS: never;