expo-iap 2.7.14 → 2.8.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 (46) hide show
  1. package/.copilot-instructions.md +5 -5
  2. package/.cursorrules +31 -13
  3. package/CHANGELOG.md +53 -1
  4. package/CLAUDE.md +45 -4
  5. package/android/src/main/java/expo/modules/iap/ExpoIapModule.kt +52 -35
  6. package/build/ExpoIap.types.d.ts +21 -14
  7. package/build/ExpoIap.types.d.ts.map +1 -1
  8. package/build/ExpoIap.types.js +0 -1
  9. package/build/ExpoIap.types.js.map +1 -1
  10. package/build/helpers/subscription.d.ts.map +1 -1
  11. package/build/helpers/subscription.js +24 -17
  12. package/build/helpers/subscription.js.map +1 -1
  13. package/build/index.d.ts +2 -2
  14. package/build/index.js +10 -10
  15. package/build/index.js.map +1 -1
  16. package/build/modules/ios.d.ts +10 -23
  17. package/build/modules/ios.d.ts.map +1 -1
  18. package/build/modules/ios.js +9 -23
  19. package/build/modules/ios.js.map +1 -1
  20. package/build/types/ExpoIapAndroid.types.d.ts +50 -15
  21. package/build/types/ExpoIapAndroid.types.d.ts.map +1 -1
  22. package/build/types/ExpoIapAndroid.types.js +11 -6
  23. package/build/types/ExpoIapAndroid.types.js.map +1 -1
  24. package/build/types/{ExpoIapIos.types.d.ts → ExpoIapIOS.types.d.ts} +68 -39
  25. package/build/types/ExpoIapIOS.types.d.ts.map +1 -0
  26. package/build/types/ExpoIapIOS.types.js +2 -0
  27. package/build/types/ExpoIapIOS.types.js.map +1 -0
  28. package/build/{useIap.d.ts → useIAP.d.ts} +2 -2
  29. package/build/{useIap.d.ts.map → useIAP.d.ts.map} +1 -1
  30. package/build/{useIap.js → useIAP.js} +7 -6
  31. package/build/useIAP.js.map +1 -0
  32. package/bun.lock +677 -61
  33. package/ios/ExpoIapModule.swift +133 -51
  34. package/jest.config.js +43 -0
  35. package/package.json +8 -3
  36. package/src/ExpoIap.types.ts +44 -29
  37. package/src/helpers/subscription.ts +27 -20
  38. package/src/index.ts +13 -13
  39. package/src/modules/ios.ts +13 -40
  40. package/src/types/ExpoIapAndroid.types.ts +62 -15
  41. package/src/types/{ExpoIapIos.types.ts → ExpoIapIOS.types.ts} +73 -39
  42. package/src/{useIap.ts → useIAP.ts} +7 -6
  43. package/build/types/ExpoIapIos.types.d.ts.map +0 -1
  44. package/build/types/ExpoIapIos.types.js +0 -2
  45. package/build/types/ExpoIapIos.types.js.map +0 -1
  46. package/build/useIap.js.map +0 -1
@@ -20,14 +20,14 @@ When suggesting code for expo-iap, follow these naming conventions:
20
20
 
21
21
  Functions that only work on one platform MUST have platform suffixes:
22
22
 
23
- - iOS: `functionNameIos()`
23
+ - iOS: `functionNameIOS()`
24
24
  - Android: `functionNameAndroid()`
25
25
 
26
26
  ```typescript
27
27
  // Correct examples:
28
- export const getStorefrontIos = async (): Promise<string> => { ... }
28
+ export const getStorefrontIOS = async (): Promise<string> => { ... }
29
29
  export const consumeProductAndroid = async (token: string): Promise<void> => { ... }
30
- export const getAppTransactionIos = async (): Promise<AppTransactionIOS | null> => { ... }
30
+ export const getAppTransactionIOS = async (): Promise<AppTransactionIOS | null> => { ... }
31
31
  ```
32
32
 
33
33
  ### Cross-Platform Functions
@@ -145,7 +145,7 @@ src/
145
145
  ├── index.ts # Main exports
146
146
  ├── ExpoIap.types.ts # Core type definitions
147
147
  ├── ExpoIapModule.ts # Native module interface
148
- ├── useIap.ts # React hook (legacy support)
148
+ ├── useIAP.ts # React hook (legacy support)
149
149
  ├── modules/
150
150
  │ ├── android.ts # Android-specific utilities
151
151
  │ └── ios.ts # iOS-specific utilities
@@ -195,7 +195,7 @@ const handleSubscription = async (subscriptionId: string) => {
195
195
 
196
196
  ## Type Naming
197
197
 
198
- - Platform-specific types: `ProductIos`, `ProductAndroid`, `PurchaseErrorIos`
198
+ - Platform-specific types: `ProductIOS`, `ProductAndroid`, `PurchaseErrorIOS`
199
199
  - Cross-platform types: `Product`, `Purchase`, `PurchaseError`
200
200
 
201
201
  ## Code Suggestions
package/.cursorrules CHANGED
@@ -1,6 +1,7 @@
1
1
  # GitHub Copilot and Cursor Rules for expo-iap
2
2
 
3
3
  ## Package Manager
4
+
4
5
  **IMPORTANT: This project uses Bun exclusively. Do not suggest npm, yarn, or pnpm commands.**
5
6
 
6
7
  - Install dependencies: `bun install`
@@ -16,28 +17,35 @@
16
17
  When suggesting code for expo-iap, follow these naming conventions:
17
18
 
18
19
  ### Platform-Specific Functions
20
+
19
21
  Functions that only work on one platform MUST have platform suffixes:
20
- - iOS: `functionNameIos()`
22
+
23
+ - iOS: `functionNameIOS()`
21
24
  - Android: `functionNameAndroid()`
22
25
 
23
26
  ```typescript
24
27
  // Correct examples:
25
- export const getStorefrontIos = async (): Promise<string> => { ... }
28
+ export const getStorefrontIOS = async (): Promise<string> => { ... }
26
29
  export const consumeProductAndroid = async (token: string): Promise<void> => { ... }
27
- export const getAppTransactionIos = async (): Promise<AppTransactionIOS | null> => { ... }
30
+ export const getAppTransactionIOS = async (): Promise<AppTransactionIOS | null> => { ... }
28
31
  ```
29
32
 
30
33
  ### Cross-Platform Functions
34
+
31
35
  Functions that abstract platform differences don't need suffixes:
32
36
 
33
37
  ```typescript
34
38
  // Correct cross-platform example:
35
39
  export const getProducts = async (skus: string[]): Promise<Product[]> => {
36
40
  return Platform.select({
37
- ios: async () => { /* iOS implementation */ },
38
- android: async () => { /* Android implementation */ },
41
+ ios: async () => {
42
+ /* iOS implementation */
43
+ },
44
+ android: async () => {
45
+ /* Android implementation */
46
+ },
39
47
  })();
40
- }
48
+ };
41
49
  ```
42
50
 
43
51
  ## Project Overview
@@ -137,7 +145,7 @@ src/
137
145
  ├── index.ts # Main exports
138
146
  ├── ExpoIap.types.ts # Core type definitions
139
147
  ├── ExpoIapModule.ts # Native module interface
140
- ├── useIap.ts # React hook (legacy support)
148
+ ├── useIAP.ts # React hook (legacy support)
141
149
  ├── modules/
142
150
  │ ├── android.ts # Android-specific utilities
143
151
  │ └── ios.ts # iOS-specific utilities
@@ -187,12 +195,13 @@ const handleSubscription = async (subscriptionId: string) => {
187
195
 
188
196
  ## Type Naming
189
197
 
190
- - Platform-specific types: `ProductIos`, `ProductAndroid`, `PurchaseErrorIos`
198
+ - Platform-specific types: `ProductIOS`, `ProductAndroid`, `PurchaseErrorIOS`
191
199
  - Cross-platform types: `Product`, `Purchase`, `PurchaseError`
192
200
 
193
201
  ## Code Suggestions
194
202
 
195
203
  When generating code:
204
+
196
205
  1. Check if the function is platform-specific
197
206
  2. Add appropriate suffix if it only works on one platform
198
207
  3. Use Platform.select() for cross-platform implementations
@@ -201,7 +210,9 @@ When generating code:
201
210
  6. Add JSDoc comments for public APIs
202
211
 
203
212
  ## Testing
213
+
204
214
  Suggest tests that:
215
+
205
216
  - Cover both iOS and Android paths
206
217
  - Use `bun test` commands
207
218
  - Include platform mocking when needed
@@ -210,12 +221,19 @@ Suggest tests that:
210
221
  ## Common Patterns
211
222
 
212
223
  ### Platform Selection
224
+
213
225
  ```typescript
214
226
  Platform.select({
215
- ios: () => { /* iOS code */ },
216
- android: () => { /* Android code */ },
217
- default: () => { /* Fallback */ },
218
- })
227
+ ios: () => {
228
+ /* iOS code */
229
+ },
230
+ android: () => {
231
+ /* Android code */
232
+ },
233
+ default: () => {
234
+ /* Fallback */
235
+ },
236
+ });
219
237
  ```
220
238
 
221
239
  ### Receipt Validation (Platform-specific parameters)
@@ -300,4 +318,4 @@ const result = await requestPurchase({
300
318
  });
301
319
  ```
302
320
 
303
- While maintaining full power and flexibility for advanced enterprise use cases.
321
+ While maintaining full power and flexibility for advanced enterprise use cases.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,55 @@
1
1
  # CHANGELOG
2
2
 
3
- Checkout [Release Notes](https://github.com/hyochan/expo-iap/releases)
3
+ ## [2.8.1] - 2025-08-19
4
+
5
+ ### Added
6
+
7
+ - Added `debugDescription?: string` field to `ProductCommon` for debugging purposes
8
+ - Added `platform?: string` field to `ProductCommon` and `PurchaseCommon` for platform identification
9
+ - Added `platform: "ios"` to iOS-specific types (`ProductIOS`, `ProductSubscriptionIOS`, `PurchaseIOS`)
10
+ - Added `platform: "android"` to Android-specific types (`ProductAndroid`, `ProductSubscriptionAndroid`, `PurchaseAndroid`)
11
+ - Added `ids?: string[]` field to `PurchaseCommon` (moved from Android-specific types)
12
+
13
+ ### Changed
14
+
15
+ - Moved common fields from platform-specific types to shared Common types
16
+ - Updated iOS native code to populate missing subscription fields:
17
+ - `introductoryPriceAsAmountIOS`
18
+ - `introductoryPricePaymentModeIOS`
19
+ - `introductoryPriceNumberOfPeriodsIOS`
20
+ - `introductoryPriceSubscriptionPeriodIOS`
21
+ - `subscriptionPeriodNumberIOS`
22
+ - `subscriptionPeriodUnitIOS`
23
+ - Updated Android native code to use common `ids` field instead of platform-specific `idsAndroid`
24
+
25
+ ### Fixed
26
+
27
+ - Fixed type mismatches between Product and Purchase types across iOS and Android platforms
28
+ - Resolved missing field mappings in iOS native subscription data extraction
29
+ - Improved type consistency for cross-platform compatibility
30
+
31
+ ### Deprecated
32
+
33
+ **Note**: No breaking changes in this release. The following deprecated fields will be removed in v2.9.0:
34
+
35
+ - Android: `idsAndroid` (use common `ids` field instead)
36
+ - Android: `name`, `oneTimePurchaseOfferDetails`, `subscriptionOfferDetails` (use fields with `Android` suffix)
37
+ - iOS: `displayName`, `isFamilyShareable`, `jsonRepresentation`, `subscription` (use fields with `IOS` suffix)
38
+ - iOS: `discounts`, `introductoryPrice` (use fields with `IOS` suffix)
39
+
40
+ ## [2.8.0] - 2025-08-18
41
+
42
+ ### Breaking Changes
43
+
44
+ - **iOS Field Naming Convention**: All iOS-related field names ending with "Ios" have been renamed to end with "IOS" to follow the convention that acronyms at the end of field names should be uppercase.
45
+
46
+ **Migration Guide**: See the full migration guide at [expo-iap.hyo.dev/blog/v2-8-0-migration-guide](https://expo-iap.hyo.dev/blog/v2-8-0-migration-guide)
47
+
48
+ Affected fields:
49
+
50
+ - `quantityIos` → `quantityIOS`
51
+ - `expirationDateIos` → `expirationDateIOS`
52
+ - `environmentIos` → `environmentIOS`
53
+ - And all other iOS-suffixed fields
54
+
55
+ For older versions, checkout [Release Notes](https://github.com/hyochan/expo-iap/releases)
package/CLAUDE.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Implementation Guidelines
2
2
 
3
+ ## Release Notes
4
+
5
+ ### v2.8.1 (2025-08-19)
6
+
7
+ - Added `platform` field to all types for runtime type discrimination
8
+ - Moved common fields to shared base types (`ids`, `debugDescription`)
9
+ - Fixed iOS native code to populate missing subscription fields
10
+ - No breaking changes, but deprecated fields will be removed in v2.9.0
11
+
12
+ ### v2.8.0 (2025-08-18)
13
+
14
+ - **Breaking**: iOS field naming convention changed (e.g., `quantityIos` → `quantityIOS`)
15
+ - All iOS-related field names ending with "Ios" now end with "IOS"
16
+
3
17
  ## Expo-Specific Guidelines
4
18
 
5
19
  ### Pre-Commit Checks
@@ -17,10 +31,37 @@ Before committing any changes:
17
31
 
18
32
  ### Platform-Specific Naming Conventions
19
33
 
20
- - **iOS-related code**: Use `Ios` in naming (e.g., `PurchaseIos`, `SubscriptionOfferIos`)
21
- - **Android-related code**: Use `Android` in naming (e.g., `PurchaseAndroid`, `SubscriptionOfferAndroid`)
22
- - **IAP-related code**: Use `Iap` in naming (e.g., `IapPurchase`, not `IAPPurchase`)
23
- - This applies to both functions, types, and file names
34
+ #### Field Naming
35
+
36
+ - **iOS-related fields**: Use `IOS` suffix (e.g., `displayNameIOS`, `discountsIOS`, `introductoryPriceIOS`)
37
+ - **Exception**: When an acronym appears at the end of a field name, use uppercase (e.g., `quantityIOS`, `appBundleIdIOS`, not `quantityIos`)
38
+ - Platform-specific fields: `currencyCodeIOS`, `currencySymbolIOS`, `countryCodeIOS`
39
+ - Product fields: `isFamilyShareableIOS`, `jsonRepresentationIOS`, `subscriptionInfoIOS`
40
+ - **Android-related fields**: Use `Android` suffix (e.g., `nameAndroid`)
41
+ - Platform-specific fields: `oneTimePurchaseOfferDetailsAndroid`, `subscriptionOfferDetailsAndroid`
42
+ - Keep `pricingPhases` (not `pricingPhasesAndroid`) for consistency with Google Play Billing
43
+ - **Common fields**: Fields shared across platforms go in Common types (e.g., `ids`, `platform`, `debugDescription`)
44
+ - Use these for data that exists on both platforms without platform-specific variations
45
+
46
+ #### Type Naming
47
+
48
+ - **iOS types**: Use `IOS` suffix (e.g., `PurchaseIOS`, `ProductIOS`)
49
+ - **Android types**: Use descriptive prefixes to identify subtypes:
50
+ - ✅ Good: `ProductAndroidOneTimePurchaseOfferDetail`, `ProductSubscriptionAndroidOfferDetails`, `PurchaseAndroidState`
51
+ - ❌ Avoid: `OneTimePurchaseOfferDetails`, `SubscriptionOfferAndroid`, `PurchaseStateAndroid`
52
+ - **General IAP types**: Use `Iap` prefix (e.g., `IapPurchase`, not `IAPPurchase`)
53
+
54
+ #### General Rules
55
+
56
+ - **ID fields**: Use `Id` instead of `ID` (e.g., `productId`, `transactionId`, not `productID`, `transactionID`)
57
+ - **Consistent naming**: This applies to functions, types, and file names
58
+ - **Deprecation**: Fields without platform suffixes will be removed in v2.9.0
59
+
60
+ ### Type System
61
+
62
+ For complete type definitions and documentation, see: <https://www.openiap.dev/docs/types>
63
+
64
+ The library follows the OpenIAP type specifications with platform-specific extensions using iOS/Android suffixes.
24
65
 
25
66
  ### React/JSX Conventions
26
67
 
@@ -199,48 +199,65 @@ class ExpoIapModule :
199
199
  ?: productDetails.subscriptionOfferDetails?.firstOrNull()?.pricingPhases?.pricingPhaseList?.firstOrNull()?.formattedPrice
200
200
  ?: "N/A"
201
201
 
202
+ // Prepare reusable data
203
+ val oneTimePurchaseData = productDetails.oneTimePurchaseOfferDetails?.let {
204
+ mapOf(
205
+ "priceCurrencyCode" to it.priceCurrencyCode,
206
+ "formattedPrice" to it.formattedPrice,
207
+ "priceAmountMicros" to it.priceAmountMicros.toString(),
208
+ )
209
+ }
210
+
211
+ val subscriptionOfferData = productDetails.subscriptionOfferDetails?.map { subscriptionOfferDetailsItem ->
212
+ mapOf(
213
+ "basePlanId" to subscriptionOfferDetailsItem.basePlanId,
214
+ "offerId" to subscriptionOfferDetailsItem.offerId,
215
+ "offerToken" to subscriptionOfferDetailsItem.offerToken,
216
+ "offerTags" to subscriptionOfferDetailsItem.offerTags,
217
+ "pricingPhases" to
218
+ mapOf(
219
+ "pricingPhaseList" to
220
+ subscriptionOfferDetailsItem.pricingPhases.pricingPhaseList.map
221
+ { pricingPhaseItem ->
222
+ mapOf(
223
+ "formattedPrice" to pricingPhaseItem.formattedPrice,
224
+ "priceCurrencyCode" to pricingPhaseItem.priceCurrencyCode,
225
+ "billingPeriod" to pricingPhaseItem.billingPeriod,
226
+ "billingCycleCount" to pricingPhaseItem.billingCycleCount,
227
+ "priceAmountMicros" to
228
+ pricingPhaseItem.priceAmountMicros.toString(),
229
+ "recurrenceMode" to pricingPhaseItem.recurrenceMode,
230
+ )
231
+ },
232
+ ),
233
+ )
234
+ }
235
+
236
+ // Convert Android productType to our expected 'inapp' or 'subs'
237
+ val productType = if (productDetails.productType == BillingClient.ProductType.SUBS) "subs" else "inapp"
238
+
202
239
  mapOf(
203
240
  "id" to productDetails.productId,
204
241
  "title" to productDetails.title,
205
242
  "description" to productDetails.description,
206
- "type" to productDetails.productType,
207
- "displayName" to productDetails.name,
243
+ "type" to productType,
244
+ // New field names with Android suffix
245
+ "nameAndroid" to productDetails.name,
246
+ "oneTimePurchaseOfferDetailsAndroid" to oneTimePurchaseData,
247
+ "subscriptionOfferDetailsAndroid" to subscriptionOfferData,
208
248
  "platform" to "android",
209
249
  "currency" to currency,
210
250
  "displayPrice" to displayPrice,
211
- "oneTimePurchaseOfferDetails" to
212
- productDetails.oneTimePurchaseOfferDetails?.let {
213
- mapOf(
214
- "priceCurrencyCode" to it.priceCurrencyCode,
215
- "formattedPrice" to it.formattedPrice,
216
- "priceAmountMicros" to it.priceAmountMicros.toString(),
217
- )
218
- },
219
- "subscriptionOfferDetails" to
220
- productDetails.subscriptionOfferDetails?.map { subscriptionOfferDetailsItem ->
221
- mapOf(
222
- "basePlanId" to subscriptionOfferDetailsItem.basePlanId,
223
- "offerId" to subscriptionOfferDetailsItem.offerId,
224
- "offerToken" to subscriptionOfferDetailsItem.offerToken,
225
- "offerTags" to subscriptionOfferDetailsItem.offerTags,
226
- "pricingPhases" to
227
- mapOf(
228
- "pricingPhaseList" to
229
- subscriptionOfferDetailsItem.pricingPhases.pricingPhaseList.map
230
- { pricingPhaseItem ->
231
- mapOf(
232
- "formattedPrice" to pricingPhaseItem.formattedPrice,
233
- "priceCurrencyCode" to pricingPhaseItem.priceCurrencyCode,
234
- "billingPeriod" to pricingPhaseItem.billingPeriod,
235
- "billingCycleCount" to pricingPhaseItem.billingCycleCount,
236
- "priceAmountMicros" to
237
- pricingPhaseItem.priceAmountMicros.toString(),
238
- "recurrenceMode" to pricingPhaseItem.recurrenceMode,
239
- )
240
- },
241
- ),
242
- )
243
- },
251
+ // START: Deprecated - will be removed in v2.9.0
252
+ // Use nameAndroid instead of displayName
253
+ "displayName" to productDetails.name,
254
+ // Use nameAndroid instead of name
255
+ "name" to productDetails.name,
256
+ // Use oneTimePurchaseOfferDetailsAndroid instead of oneTimePurchaseOfferDetails
257
+ "oneTimePurchaseOfferDetails" to oneTimePurchaseData,
258
+ // Use subscriptionOfferDetailsAndroid instead of subscriptionOfferDetails
259
+ "subscriptionOfferDetails" to subscriptionOfferData,
260
+ // END: Deprecated - will be removed in v2.9.0
244
261
  )
245
262
  }
246
263
  promise.resolve(items)
@@ -1,10 +1,10 @@
1
- import { ProductAndroid, ProductPurchaseAndroid, SubscriptionProductAndroid } from './types/ExpoIapAndroid.types';
2
- import { ProductIos, ProductPurchaseIos, SubscriptionProductIos } from './types/ExpoIapIos.types';
1
+ import { ProductAndroid, ProductPurchaseAndroid, ProductSubscriptionAndroid } from './types/ExpoIapAndroid.types';
2
+ import { ProductIOS, ProductPurchaseIOS, ProductSubscriptionIOS } from './types/ExpoIapIOS.types';
3
3
  export type ChangeEventPayload = {
4
4
  value: string;
5
5
  };
6
6
  export type ProductType = 'inapp' | 'subs';
7
- export type ProductBase = {
7
+ export type ProductCommon = {
8
8
  id: string;
9
9
  title: string;
10
10
  description: string;
@@ -13,14 +13,21 @@ export type ProductBase = {
13
13
  displayPrice: string;
14
14
  currency: string;
15
15
  price?: number;
16
+ debugDescription?: string;
17
+ platform?: string;
16
18
  };
17
- export type PurchaseBase = {
19
+ export type PurchaseCommon = {
18
20
  id: string;
19
21
  productId: string;
22
+ ids?: string[];
20
23
  transactionId?: string;
21
24
  transactionDate: number;
22
25
  transactionReceipt: string;
23
26
  purchaseToken?: string;
27
+ platform?: string;
28
+ };
29
+ export type ProductSubscriptionCommon = ProductCommon & {
30
+ type: 'subs';
24
31
  };
25
32
  export type IosPlatform = {
26
33
  platform: 'ios';
@@ -28,14 +35,14 @@ export type IosPlatform = {
28
35
  export type AndroidPlatform = {
29
36
  platform: 'android';
30
37
  };
31
- export type Product = (ProductAndroid & AndroidPlatform) | (ProductIos & IosPlatform);
32
- export type SubscriptionProduct = (SubscriptionProductAndroid & AndroidPlatform) | (SubscriptionProductIos & IosPlatform);
33
- export type { ProductPurchaseAndroid } from './types/ExpoIapAndroid.types';
34
- export type { ProductPurchaseIos } from './types/ExpoIapIos.types';
35
- export type ProductPurchase = (ProductPurchaseAndroid & AndroidPlatform) | (ProductPurchaseIos & IosPlatform);
38
+ export type Product = (ProductAndroid & AndroidPlatform) | (ProductIOS & IosPlatform);
39
+ export type SubscriptionProduct = (ProductSubscriptionAndroid & AndroidPlatform) | (ProductSubscriptionIOS & IosPlatform);
40
+ export type { ProductPurchaseAndroid, PurchaseAndroid, ProductSubscriptionAndroid, SubscriptionProductAndroid, } from './types/ExpoIapAndroid.types';
41
+ export type { ProductPurchaseIOS, PurchaseIOS, ProductSubscriptionIOS, SubscriptionProductIOS, } from './types/ExpoIapIOS.types';
42
+ export type ProductPurchase = (ProductPurchaseAndroid & AndroidPlatform) | (ProductPurchaseIOS & IosPlatform);
36
43
  export type SubscriptionPurchase = (ProductPurchaseAndroid & AndroidPlatform & {
37
44
  autoRenewingAndroid: boolean;
38
- }) | (ProductPurchaseIos & IosPlatform);
45
+ }) | (ProductPurchaseIOS & IosPlatform);
39
46
  export type Purchase = ProductPurchase | SubscriptionPurchase;
40
47
  export type PurchaseResult = {
41
48
  responseCode?: number;
@@ -197,10 +204,10 @@ export declare const ErrorCodeUtils: {
197
204
  export interface UnifiedRequestPurchaseProps {
198
205
  readonly sku?: string;
199
206
  readonly skus?: string[];
200
- readonly andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;
207
+ readonly andDangerouslyFinishTransactionAutomatically?: boolean;
201
208
  readonly appAccountToken?: string;
202
209
  readonly quantity?: number;
203
- readonly withOffer?: import('./types/ExpoIapIos.types').PaymentDiscount;
210
+ readonly withOffer?: import('./types/ExpoIapIOS.types').PaymentDiscount;
204
211
  readonly obfuscatedAccountIdAndroid?: string;
205
212
  readonly obfuscatedProfileIdAndroid?: string;
206
213
  readonly isOfferPersonalized?: boolean;
@@ -210,10 +217,10 @@ export interface UnifiedRequestPurchaseProps {
210
217
  */
211
218
  export interface RequestPurchaseIosProps {
212
219
  readonly sku: string;
213
- readonly andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;
220
+ readonly andDangerouslyFinishTransactionAutomatically?: boolean;
214
221
  readonly appAccountToken?: string;
215
222
  readonly quantity?: number;
216
- readonly withOffer?: import('./types/ExpoIapIos.types').PaymentDiscount;
223
+ readonly withOffer?: import('./types/ExpoIapIOS.types').PaymentDiscount;
217
224
  }
218
225
  /**
219
226
  * Android-specific purchase request parameters
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoIap.types.d.ts","sourceRoot":"","sources":["../src/ExpoIap.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExpoIap.types.d.ts","sourceRoot":"","sources":["../src/ExpoIap.types.ts"],"names":[],"mappings":"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"}
@@ -181,5 +181,4 @@ export const ErrorCodeUtils = {
181
181
  return errorCode in ErrorCodeMapping[platform];
182
182
  },
183
183
  };
184
- // Note: Type guard functions are exported from index.ts to avoid conflicts
185
184
  //# sourceMappingURL=ExpoIap.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExpoIap.types.js","sourceRoot":"","sources":["../src/ExpoIap.types.ts"],"names":[],"mappings":"AAUA,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAyEnD;;;GAGG;AACH,MAAM,CAAN,IAAY,SAyBX;AAzBD,WAAY,SAAS;IACnB,oCAAuB,CAAA;IACvB,kDAAqC,CAAA;IACrC,0CAA6B,CAAA;IAC7B,sDAAyC,CAAA;IACzC,8CAAiC,CAAA;IACjC,gDAAmC,CAAA;IACnC,gDAAmC,CAAA;IACnC,kDAAqC,CAAA;IACrC,oEAAuD,CAAA;IACvD,8CAAiC,CAAA;IACjC,wCAA2B,CAAA;IAC3B,gDAAmC,CAAA;IACnC,oDAAuC,CAAA;IACvC,wFAA2E,CAAA;IAC3E,sDAAyC,CAAA;IACzC,4CAA+B,CAAA;IAC/B,wDAA2C,CAAA;IAC3C,kDAAqC,CAAA;IACrC,0CAA6B,CAAA;IAC7B,gFAAmE,CAAA;IACnE,8DAAiD,CAAA;IACjD,sDAAyC,CAAA;IACzC,oCAAuB,CAAA;IACvB,wDAA2C,CAAA;AAC7C,CAAC,EAzBW,SAAS,KAAT,SAAS,QAyBpB;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE;QACH,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACxB,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/B,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3B,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACjC,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7B,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/B,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACxC,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAChC,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE;QAChC,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE;QAC5B,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE;QAClC,CAAC,SAAS,CAAC,+BAA+B,CAAC,EAAE,EAAE;QAC/C,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE;QAC9B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE;QAC3B,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE;QAC/B,CAAC,SAAS,CAAC,mCAAmC,CAAC,EAAE,EAAE;QACnD,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,EAAE;QAC7B,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE;QACnC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,EAAE;QACtC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE;QAClC,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE;QACzB,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE;KACpC;IACD,OAAO,EAAE;QACP,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW;QAClC,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,kBAAkB;QAChD,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,cAAc;QACxC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,oBAAoB;QACpD,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,gBAAgB;QAC5C,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,iBAAiB;QAC9C,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,iBAAiB;QAC9C,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,kBAAkB;QAChD,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,2BAA2B;QAClE,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,gBAAgB;QAC5C,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,aAAa;QACtC,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,iBAAiB;QAC9C,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,mBAAmB;QAClD,CAAC,SAAS,CAAC,mCAAmC,CAAC,EAC7C,qCAAqC;QACvC,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,oBAAoB;QACpD,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,eAAe;QAC1C,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,qBAAqB;QACtD,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,kBAAkB;QAChD,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,cAAc;QACxC,CAAC,SAAS,CAAC,+BAA+B,CAAC,EACzC,iCAAiC;QACnC,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,wBAAwB;QAC5D,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,oBAAoB;QACpD,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,WAAW;QAClC,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,qBAAqB;KACvD;CACO,CAAC;AAEX,MAAM,OAAO,aAAa;IAEf;IACA;IACA;IACA;IACA;IACA;IACA;IAPT,YACS,IAAY,EACZ,OAAe,EACf,YAAqB,EACrB,YAAqB,EACrB,IAAgB,EAChB,SAAkB,EAClB,QAA4B;QAN5B,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAQ;QACf,iBAAY,GAAZ,YAAY,CAAS;QACrB,iBAAY,GAAZ,YAAY,CAAS;QACrB,SAAI,GAAJ,IAAI,CAAY;QAChB,cAAS,GAAT,SAAS,CAAS;QAClB,aAAQ,GAAR,QAAQ,CAAoB;QAEnC,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CACtB,SAAc,EACd,QAA2B;QAE3B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI;YAC9B,CAAC,CAAC,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC3D,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;QAExB,OAAO,IAAI,aAAa,CACtB,2BAA2B,EAC3B,SAAS,CAAC,OAAO,IAAI,wBAAwB,EAC7C,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,YAAY,EACtB,SAAS,EACT,SAAS,CAAC,SAAS,EACnB,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QACnD,OAAO,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,SAAoB,EAAU,EAAE;QACnD,OAAO,kBAAkB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,EAAE,CAChB,YAA6B,EAC7B,QAA2B,EAChB,EAAE;QACb,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE3C,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,SAAsB,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,cAAc,EAAE,CACd,SAAoB,EACpB,QAA2B,EACV,EAAE;QACnB,OAAO,CACL,gBAAgB,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;YACrC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CACvC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,EAAE,CAClB,SAAoB,EACpB,QAA2B,EAClB,EAAE;QACX,OAAO,SAAS,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;CACF,CAAC;AA8FF,2EAA2E","sourcesContent":["import {\n ProductAndroid,\n ProductPurchaseAndroid,\n SubscriptionProductAndroid,\n} from './types/ExpoIapAndroid.types';\nimport {\n ProductIos,\n ProductPurchaseIos,\n SubscriptionProductIos,\n} from './types/ExpoIapIos.types';\nimport {NATIVE_ERROR_CODES} from './ExpoIapModule';\n\nexport type ChangeEventPayload = {\n value: string;\n};\n\nexport type ProductType = 'inapp' | 'subs';\n\nexport type ProductBase = {\n id: string;\n title: string;\n description: string;\n type: ProductType;\n displayName?: string;\n displayPrice: string;\n currency: string;\n price?: number;\n};\n\nexport type PurchaseBase = {\n id: string; // Transaction identifier - used by finishTransaction\n productId: string; // Product identifier - which product was purchased\n transactionId?: string; // @deprecated - use id instead\n transactionDate: number;\n transactionReceipt: string;\n purchaseToken?: string; // Unified purchase token (jwsRepresentation for iOS, purchaseToken for Android)\n};\n\n// Define literal platform types for better type discrimination\nexport type IosPlatform = {platform: 'ios'};\nexport type AndroidPlatform = {platform: 'android'};\n\n// Platform-agnostic unified product types (public API)\nexport type Product =\n | (ProductAndroid & AndroidPlatform)\n | (ProductIos & IosPlatform);\n\nexport type SubscriptionProduct =\n | (SubscriptionProductAndroid & AndroidPlatform)\n | (SubscriptionProductIos & IosPlatform);\n\n// ============================================================================\n// Legacy Types (For backward compatibility with useIap hook)\n// ============================================================================\n\n// Re-export platform-specific purchase types for legacy compatibility\nexport type {ProductPurchaseAndroid} from './types/ExpoIapAndroid.types';\nexport type {ProductPurchaseIos} from './types/ExpoIapIos.types';\n\n// Union type for platform-specific purchase types (legacy support)\nexport type ProductPurchase =\n | (ProductPurchaseAndroid & AndroidPlatform)\n | (ProductPurchaseIos & IosPlatform);\n\n// Union type for platform-specific subscription purchase types (legacy support)\nexport type SubscriptionPurchase =\n | (ProductPurchaseAndroid & AndroidPlatform & {autoRenewingAndroid: boolean})\n | (ProductPurchaseIos & IosPlatform);\n\nexport type Purchase = ProductPurchase | SubscriptionPurchase;\n\n// Legacy result type\nexport type PurchaseResult = {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n /**\n * @deprecated Use `purchaseToken` instead. This field will be removed in a future version.\n */\n purchaseTokenAndroid?: string;\n purchaseToken?: string;\n};\n/**\n * Centralized error codes for expo-iap\n * These are mapped to platform-specific error codes and provide consistent error handling\n */\nexport enum ErrorCode {\n E_UNKNOWN = 'E_UNKNOWN',\n E_USER_CANCELLED = 'E_USER_CANCELLED',\n E_USER_ERROR = 'E_USER_ERROR',\n E_ITEM_UNAVAILABLE = 'E_ITEM_UNAVAILABLE',\n E_REMOTE_ERROR = 'E_REMOTE_ERROR',\n E_NETWORK_ERROR = 'E_NETWORK_ERROR',\n E_SERVICE_ERROR = 'E_SERVICE_ERROR',\n E_RECEIPT_FAILED = 'E_RECEIPT_FAILED',\n E_RECEIPT_FINISHED_FAILED = 'E_RECEIPT_FINISHED_FAILED',\n E_NOT_PREPARED = 'E_NOT_PREPARED',\n E_NOT_ENDED = 'E_NOT_ENDED',\n E_ALREADY_OWNED = 'E_ALREADY_OWNED',\n E_DEVELOPER_ERROR = 'E_DEVELOPER_ERROR',\n E_BILLING_RESPONSE_JSON_PARSE_ERROR = 'E_BILLING_RESPONSE_JSON_PARSE_ERROR',\n E_DEFERRED_PAYMENT = 'E_DEFERRED_PAYMENT',\n E_INTERRUPTED = 'E_INTERRUPTED',\n E_IAP_NOT_AVAILABLE = 'E_IAP_NOT_AVAILABLE',\n E_PURCHASE_ERROR = 'E_PURCHASE_ERROR',\n E_SYNC_ERROR = 'E_SYNC_ERROR',\n E_TRANSACTION_VALIDATION_FAILED = 'E_TRANSACTION_VALIDATION_FAILED',\n E_ACTIVITY_UNAVAILABLE = 'E_ACTIVITY_UNAVAILABLE',\n E_ALREADY_PREPARED = 'E_ALREADY_PREPARED',\n E_PENDING = 'E_PENDING',\n E_CONNECTION_CLOSED = 'E_CONNECTION_CLOSED',\n}\n\n/**\n * Platform-specific error code mappings\n * Maps ErrorCode enum values to platform-specific integer codes\n */\nexport const ErrorCodeMapping = {\n ios: {\n [ErrorCode.E_UNKNOWN]: 0,\n [ErrorCode.E_SERVICE_ERROR]: 1,\n [ErrorCode.E_USER_CANCELLED]: 2,\n [ErrorCode.E_USER_ERROR]: 3,\n [ErrorCode.E_ITEM_UNAVAILABLE]: 4,\n [ErrorCode.E_REMOTE_ERROR]: 5,\n [ErrorCode.E_NETWORK_ERROR]: 6,\n [ErrorCode.E_RECEIPT_FAILED]: 7,\n [ErrorCode.E_RECEIPT_FINISHED_FAILED]: 8,\n [ErrorCode.E_DEVELOPER_ERROR]: 9,\n [ErrorCode.E_PURCHASE_ERROR]: 10,\n [ErrorCode.E_SYNC_ERROR]: 11,\n [ErrorCode.E_DEFERRED_PAYMENT]: 12,\n [ErrorCode.E_TRANSACTION_VALIDATION_FAILED]: 13,\n [ErrorCode.E_NOT_PREPARED]: 14,\n [ErrorCode.E_NOT_ENDED]: 15,\n [ErrorCode.E_ALREADY_OWNED]: 16,\n [ErrorCode.E_BILLING_RESPONSE_JSON_PARSE_ERROR]: 17,\n [ErrorCode.E_INTERRUPTED]: 18,\n [ErrorCode.E_IAP_NOT_AVAILABLE]: 19,\n [ErrorCode.E_ACTIVITY_UNAVAILABLE]: 20,\n [ErrorCode.E_ALREADY_PREPARED]: 21,\n [ErrorCode.E_PENDING]: 22,\n [ErrorCode.E_CONNECTION_CLOSED]: 23,\n },\n android: {\n [ErrorCode.E_UNKNOWN]: 'E_UNKNOWN',\n [ErrorCode.E_USER_CANCELLED]: 'E_USER_CANCELLED',\n [ErrorCode.E_USER_ERROR]: 'E_USER_ERROR',\n [ErrorCode.E_ITEM_UNAVAILABLE]: 'E_ITEM_UNAVAILABLE',\n [ErrorCode.E_REMOTE_ERROR]: 'E_REMOTE_ERROR',\n [ErrorCode.E_NETWORK_ERROR]: 'E_NETWORK_ERROR',\n [ErrorCode.E_SERVICE_ERROR]: 'E_SERVICE_ERROR',\n [ErrorCode.E_RECEIPT_FAILED]: 'E_RECEIPT_FAILED',\n [ErrorCode.E_RECEIPT_FINISHED_FAILED]: 'E_RECEIPT_FINISHED_FAILED',\n [ErrorCode.E_NOT_PREPARED]: 'E_NOT_PREPARED',\n [ErrorCode.E_NOT_ENDED]: 'E_NOT_ENDED',\n [ErrorCode.E_ALREADY_OWNED]: 'E_ALREADY_OWNED',\n [ErrorCode.E_DEVELOPER_ERROR]: 'E_DEVELOPER_ERROR',\n [ErrorCode.E_BILLING_RESPONSE_JSON_PARSE_ERROR]:\n 'E_BILLING_RESPONSE_JSON_PARSE_ERROR',\n [ErrorCode.E_DEFERRED_PAYMENT]: 'E_DEFERRED_PAYMENT',\n [ErrorCode.E_INTERRUPTED]: 'E_INTERRUPTED',\n [ErrorCode.E_IAP_NOT_AVAILABLE]: 'E_IAP_NOT_AVAILABLE',\n [ErrorCode.E_PURCHASE_ERROR]: 'E_PURCHASE_ERROR',\n [ErrorCode.E_SYNC_ERROR]: 'E_SYNC_ERROR',\n [ErrorCode.E_TRANSACTION_VALIDATION_FAILED]:\n 'E_TRANSACTION_VALIDATION_FAILED',\n [ErrorCode.E_ACTIVITY_UNAVAILABLE]: 'E_ACTIVITY_UNAVAILABLE',\n [ErrorCode.E_ALREADY_PREPARED]: 'E_ALREADY_PREPARED',\n [ErrorCode.E_PENDING]: 'E_PENDING',\n [ErrorCode.E_CONNECTION_CLOSED]: 'E_CONNECTION_CLOSED',\n },\n} as const;\n\nexport class PurchaseError implements Error {\n constructor(\n public name: string,\n public message: string,\n public responseCode?: number,\n public debugMessage?: string,\n public code?: ErrorCode,\n public productId?: string,\n public platform?: 'ios' | 'android',\n ) {\n this.name = '[expo-iap]: PurchaseError';\n this.message = message;\n this.responseCode = responseCode;\n this.debugMessage = debugMessage;\n this.code = code;\n this.productId = productId;\n this.platform = platform;\n }\n\n /**\n * Creates a PurchaseError from platform-specific error data\n * @param errorData Raw error data from native modules\n * @param platform Platform where the error occurred\n * @returns Properly typed PurchaseError instance\n */\n static fromPlatformError(\n errorData: any,\n platform: 'ios' | 'android',\n ): PurchaseError {\n const errorCode = errorData.code\n ? ErrorCodeUtils.fromPlatformCode(errorData.code, platform)\n : ErrorCode.E_UNKNOWN;\n\n return new PurchaseError(\n '[expo-iap]: PurchaseError',\n errorData.message || 'Unknown error occurred',\n errorData.responseCode,\n errorData.debugMessage,\n errorCode,\n errorData.productId,\n platform,\n );\n }\n\n /**\n * Gets the platform-specific error code for this error\n * @returns Platform-specific error code\n */\n getPlatformCode(): string | number | undefined {\n if (!this.code || !this.platform) return undefined;\n return ErrorCodeUtils.toPlatformCode(this.code, this.platform);\n }\n}\n\n/**\n * Utility functions for error code mapping and validation\n */\nexport const ErrorCodeUtils = {\n /**\n * Gets the native error code for the current platform\n * @param errorCode ErrorCode enum value\n * @returns Platform-specific error code from native constants\n */\n getNativeErrorCode: (errorCode: ErrorCode): string => {\n return NATIVE_ERROR_CODES[errorCode] || errorCode;\n },\n\n /**\n * Maps a platform-specific error code back to the standardized ErrorCode enum\n * @param platformCode Platform-specific error code (string for Android, number for iOS)\n * @param platform Target platform\n * @returns Corresponding ErrorCode enum value or E_UNKNOWN if not found\n */\n fromPlatformCode: (\n platformCode: string | number,\n platform: 'ios' | 'android',\n ): ErrorCode => {\n const mapping = ErrorCodeMapping[platform];\n\n for (const [errorCode, mappedCode] of Object.entries(mapping)) {\n if (mappedCode === platformCode) {\n return errorCode as ErrorCode;\n }\n }\n\n return ErrorCode.E_UNKNOWN;\n },\n\n /**\n * Maps an ErrorCode enum to platform-specific code\n * @param errorCode ErrorCode enum value\n * @param platform Target platform\n * @returns Platform-specific error code\n */\n toPlatformCode: (\n errorCode: ErrorCode,\n platform: 'ios' | 'android',\n ): string | number => {\n return (\n ErrorCodeMapping[platform][errorCode] ??\n (platform === 'ios' ? 0 : 'E_UNKNOWN')\n );\n },\n\n /**\n * Checks if an error code is valid for the specified platform\n * @param errorCode ErrorCode enum value\n * @param platform Target platform\n * @returns True if the error code is supported on the platform\n */\n isValidForPlatform: (\n errorCode: ErrorCode,\n platform: 'ios' | 'android',\n ): boolean => {\n return errorCode in ErrorCodeMapping[platform];\n },\n};\n\n// ============================================================================\n// Enhanced Unified Request Types\n// ============================================================================\n\n/**\n * Unified request props that work on both iOS and Android platforms\n * iOS will use 'sku', Android will use 'skus' (or convert sku to skus array)\n */\nexport interface UnifiedRequestPurchaseProps {\n // Universal properties - works on both platforms\n readonly sku?: string; // Single SKU (iOS native, Android fallback)\n readonly skus?: string[]; // Multiple SKUs (Android native, iOS uses first item)\n\n // iOS-specific properties (ignored on Android)\n readonly andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;\n readonly appAccountToken?: string;\n readonly quantity?: number;\n readonly withOffer?: import('./types/ExpoIapIos.types').PaymentDiscount;\n\n // Android-specific properties (ignored on iOS)\n readonly obfuscatedAccountIdAndroid?: string;\n readonly obfuscatedProfileIdAndroid?: string;\n readonly isOfferPersonalized?: boolean;\n}\n\n// ============================================================================\n// New Platform-Specific Request Types (v2.7.0+)\n// ============================================================================\n\n/**\n * iOS-specific purchase request parameters\n */\nexport interface RequestPurchaseIosProps {\n readonly sku: string;\n readonly andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;\n readonly appAccountToken?: string;\n readonly quantity?: number;\n readonly withOffer?: import('./types/ExpoIapIos.types').PaymentDiscount;\n}\n\n/**\n * Android-specific purchase request parameters\n */\nexport interface RequestPurchaseAndroidProps {\n readonly skus: string[];\n readonly obfuscatedAccountIdAndroid?: string;\n readonly obfuscatedProfileIdAndroid?: string;\n readonly isOfferPersonalized?: boolean;\n}\n\n/**\n * Android-specific subscription request parameters\n */\nexport interface RequestSubscriptionAndroidProps\n extends RequestPurchaseAndroidProps {\n readonly purchaseTokenAndroid?: string;\n readonly replacementModeAndroid?: number;\n readonly subscriptionOffers: {\n sku: string;\n offerToken: string;\n }[];\n}\n\n/**\n * Modern platform-specific request structure (v2.7.0+)\n * Allows clear separation of iOS and Android parameters\n */\nexport interface RequestPurchasePropsByPlatforms {\n readonly ios?: RequestPurchaseIosProps;\n readonly android?: RequestPurchaseAndroidProps;\n}\n\n/**\n * Modern platform-specific subscription request structure (v2.7.0+)\n */\nexport interface RequestSubscriptionPropsByPlatforms {\n readonly ios?: RequestPurchaseIosProps;\n readonly android?: RequestSubscriptionAndroidProps;\n}\n\n/**\n * Modern request purchase parameters (v2.7.0+)\n * This is the recommended API moving forward\n */\nexport type RequestPurchaseProps = RequestPurchasePropsByPlatforms;\n\n/**\n * Modern request subscription parameters (v2.7.0+)\n * This is the recommended API moving forward\n */\nexport type RequestSubscriptionProps = RequestSubscriptionPropsByPlatforms;\n\n// Note: Type guard functions are exported from index.ts to avoid conflicts\n"]}
1
+ {"version":3,"file":"ExpoIap.types.js","sourceRoot":"","sources":["../src/ExpoIap.types.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ProductAndroid,\n ProductPurchaseAndroid,\n ProductSubscriptionAndroid,\n} from './types/ExpoIapAndroid.types';\nimport {\n ProductIOS,\n ProductPurchaseIOS,\n ProductSubscriptionIOS,\n} from './types/ExpoIapIOS.types';\nimport {NATIVE_ERROR_CODES} from './ExpoIapModule';\n\nexport type ChangeEventPayload = {\n value: string;\n};\n\nexport type ProductType = 'inapp' | 'subs';\n\n// =============================================================================\n// COMMON TYPES (Base types shared across all platforms)\n// =============================================================================\n\nexport type ProductCommon = {\n id: string;\n title: string;\n description: string;\n type: ProductType;\n displayName?: string;\n displayPrice: string;\n currency: string;\n price?: number;\n debugDescription?: string;\n platform?: string;\n};\n\nexport type PurchaseCommon = {\n id: string; // Transaction identifier - used by finishTransaction\n productId: string; // Product identifier - which product was purchased\n ids?: string[]; // Product identifiers for purchases that include multiple products\n transactionId?: string; // @deprecated - use id instead\n transactionDate: number;\n transactionReceipt: string;\n purchaseToken?: string; // Unified purchase token (jwsRepresentation for iOS, purchaseToken for Android)\n platform?: string;\n};\n\nexport type ProductSubscriptionCommon = ProductCommon & {\n type: 'subs';\n};\n\n// Define literal platform types for better type discrimination\nexport type IosPlatform = {platform: 'ios'};\nexport type AndroidPlatform = {platform: 'android'};\n\n// Platform-agnostic unified product types (public API)\nexport type Product =\n | (ProductAndroid & AndroidPlatform)\n | (ProductIOS & IosPlatform);\n\nexport type SubscriptionProduct =\n | (ProductSubscriptionAndroid & AndroidPlatform)\n | (ProductSubscriptionIOS & IosPlatform);\n\n// Re-export platform-specific types\nexport type {\n ProductPurchaseAndroid,\n PurchaseAndroid,\n ProductSubscriptionAndroid,\n SubscriptionProductAndroid, // Legacy\n} from './types/ExpoIapAndroid.types';\nexport type {\n ProductPurchaseIOS,\n PurchaseIOS,\n ProductSubscriptionIOS,\n SubscriptionProductIOS, // Legacy\n} from './types/ExpoIapIOS.types';\n\n// Union type for platform-specific purchase types\nexport type ProductPurchase =\n | (ProductPurchaseAndroid & AndroidPlatform)\n | (ProductPurchaseIOS & IosPlatform);\n\n// Union type for platform-specific subscription purchase types\nexport type SubscriptionPurchase =\n | (ProductPurchaseAndroid & AndroidPlatform & {autoRenewingAndroid: boolean})\n | (ProductPurchaseIOS & IosPlatform);\n\nexport type Purchase = ProductPurchase | SubscriptionPurchase;\n\nexport type PurchaseResult = {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n /**\n * @deprecated Use `purchaseToken` instead. This field will be removed in a future version.\n */\n purchaseTokenAndroid?: string;\n purchaseToken?: string;\n};\n/**\n * Centralized error codes for expo-iap\n * These are mapped to platform-specific error codes and provide consistent error handling\n */\nexport enum ErrorCode {\n E_UNKNOWN = 'E_UNKNOWN',\n E_USER_CANCELLED = 'E_USER_CANCELLED',\n E_USER_ERROR = 'E_USER_ERROR',\n E_ITEM_UNAVAILABLE = 'E_ITEM_UNAVAILABLE',\n E_REMOTE_ERROR = 'E_REMOTE_ERROR',\n E_NETWORK_ERROR = 'E_NETWORK_ERROR',\n E_SERVICE_ERROR = 'E_SERVICE_ERROR',\n E_RECEIPT_FAILED = 'E_RECEIPT_FAILED',\n E_RECEIPT_FINISHED_FAILED = 'E_RECEIPT_FINISHED_FAILED',\n E_NOT_PREPARED = 'E_NOT_PREPARED',\n E_NOT_ENDED = 'E_NOT_ENDED',\n E_ALREADY_OWNED = 'E_ALREADY_OWNED',\n E_DEVELOPER_ERROR = 'E_DEVELOPER_ERROR',\n E_BILLING_RESPONSE_JSON_PARSE_ERROR = 'E_BILLING_RESPONSE_JSON_PARSE_ERROR',\n E_DEFERRED_PAYMENT = 'E_DEFERRED_PAYMENT',\n E_INTERRUPTED = 'E_INTERRUPTED',\n E_IAP_NOT_AVAILABLE = 'E_IAP_NOT_AVAILABLE',\n E_PURCHASE_ERROR = 'E_PURCHASE_ERROR',\n E_SYNC_ERROR = 'E_SYNC_ERROR',\n E_TRANSACTION_VALIDATION_FAILED = 'E_TRANSACTION_VALIDATION_FAILED',\n E_ACTIVITY_UNAVAILABLE = 'E_ACTIVITY_UNAVAILABLE',\n E_ALREADY_PREPARED = 'E_ALREADY_PREPARED',\n E_PENDING = 'E_PENDING',\n E_CONNECTION_CLOSED = 'E_CONNECTION_CLOSED',\n}\n\n/**\n * Platform-specific error code mappings\n * Maps ErrorCode enum values to platform-specific integer codes\n */\nexport const ErrorCodeMapping = {\n ios: {\n [ErrorCode.E_UNKNOWN]: 0,\n [ErrorCode.E_SERVICE_ERROR]: 1,\n [ErrorCode.E_USER_CANCELLED]: 2,\n [ErrorCode.E_USER_ERROR]: 3,\n [ErrorCode.E_ITEM_UNAVAILABLE]: 4,\n [ErrorCode.E_REMOTE_ERROR]: 5,\n [ErrorCode.E_NETWORK_ERROR]: 6,\n [ErrorCode.E_RECEIPT_FAILED]: 7,\n [ErrorCode.E_RECEIPT_FINISHED_FAILED]: 8,\n [ErrorCode.E_DEVELOPER_ERROR]: 9,\n [ErrorCode.E_PURCHASE_ERROR]: 10,\n [ErrorCode.E_SYNC_ERROR]: 11,\n [ErrorCode.E_DEFERRED_PAYMENT]: 12,\n [ErrorCode.E_TRANSACTION_VALIDATION_FAILED]: 13,\n [ErrorCode.E_NOT_PREPARED]: 14,\n [ErrorCode.E_NOT_ENDED]: 15,\n [ErrorCode.E_ALREADY_OWNED]: 16,\n [ErrorCode.E_BILLING_RESPONSE_JSON_PARSE_ERROR]: 17,\n [ErrorCode.E_INTERRUPTED]: 18,\n [ErrorCode.E_IAP_NOT_AVAILABLE]: 19,\n [ErrorCode.E_ACTIVITY_UNAVAILABLE]: 20,\n [ErrorCode.E_ALREADY_PREPARED]: 21,\n [ErrorCode.E_PENDING]: 22,\n [ErrorCode.E_CONNECTION_CLOSED]: 23,\n },\n android: {\n [ErrorCode.E_UNKNOWN]: 'E_UNKNOWN',\n [ErrorCode.E_USER_CANCELLED]: 'E_USER_CANCELLED',\n [ErrorCode.E_USER_ERROR]: 'E_USER_ERROR',\n [ErrorCode.E_ITEM_UNAVAILABLE]: 'E_ITEM_UNAVAILABLE',\n [ErrorCode.E_REMOTE_ERROR]: 'E_REMOTE_ERROR',\n [ErrorCode.E_NETWORK_ERROR]: 'E_NETWORK_ERROR',\n [ErrorCode.E_SERVICE_ERROR]: 'E_SERVICE_ERROR',\n [ErrorCode.E_RECEIPT_FAILED]: 'E_RECEIPT_FAILED',\n [ErrorCode.E_RECEIPT_FINISHED_FAILED]: 'E_RECEIPT_FINISHED_FAILED',\n [ErrorCode.E_NOT_PREPARED]: 'E_NOT_PREPARED',\n [ErrorCode.E_NOT_ENDED]: 'E_NOT_ENDED',\n [ErrorCode.E_ALREADY_OWNED]: 'E_ALREADY_OWNED',\n [ErrorCode.E_DEVELOPER_ERROR]: 'E_DEVELOPER_ERROR',\n [ErrorCode.E_BILLING_RESPONSE_JSON_PARSE_ERROR]:\n 'E_BILLING_RESPONSE_JSON_PARSE_ERROR',\n [ErrorCode.E_DEFERRED_PAYMENT]: 'E_DEFERRED_PAYMENT',\n [ErrorCode.E_INTERRUPTED]: 'E_INTERRUPTED',\n [ErrorCode.E_IAP_NOT_AVAILABLE]: 'E_IAP_NOT_AVAILABLE',\n [ErrorCode.E_PURCHASE_ERROR]: 'E_PURCHASE_ERROR',\n [ErrorCode.E_SYNC_ERROR]: 'E_SYNC_ERROR',\n [ErrorCode.E_TRANSACTION_VALIDATION_FAILED]:\n 'E_TRANSACTION_VALIDATION_FAILED',\n [ErrorCode.E_ACTIVITY_UNAVAILABLE]: 'E_ACTIVITY_UNAVAILABLE',\n [ErrorCode.E_ALREADY_PREPARED]: 'E_ALREADY_PREPARED',\n [ErrorCode.E_PENDING]: 'E_PENDING',\n [ErrorCode.E_CONNECTION_CLOSED]: 'E_CONNECTION_CLOSED',\n },\n} as const;\n\nexport class PurchaseError implements Error {\n constructor(\n public name: string,\n public message: string,\n public responseCode?: number,\n public debugMessage?: string,\n public code?: ErrorCode,\n public productId?: string,\n public platform?: 'ios' | 'android',\n ) {\n this.name = '[expo-iap]: PurchaseError';\n this.message = message;\n this.responseCode = responseCode;\n this.debugMessage = debugMessage;\n this.code = code;\n this.productId = productId;\n this.platform = platform;\n }\n\n /**\n * Creates a PurchaseError from platform-specific error data\n * @param errorData Raw error data from native modules\n * @param platform Platform where the error occurred\n * @returns Properly typed PurchaseError instance\n */\n static fromPlatformError(\n errorData: any,\n platform: 'ios' | 'android',\n ): PurchaseError {\n const errorCode = errorData.code\n ? ErrorCodeUtils.fromPlatformCode(errorData.code, platform)\n : ErrorCode.E_UNKNOWN;\n\n return new PurchaseError(\n '[expo-iap]: PurchaseError',\n errorData.message || 'Unknown error occurred',\n errorData.responseCode,\n errorData.debugMessage,\n errorCode,\n errorData.productId,\n platform,\n );\n }\n\n /**\n * Gets the platform-specific error code for this error\n * @returns Platform-specific error code\n */\n getPlatformCode(): string | number | undefined {\n if (!this.code || !this.platform) return undefined;\n return ErrorCodeUtils.toPlatformCode(this.code, this.platform);\n }\n}\n\n/**\n * Utility functions for error code mapping and validation\n */\nexport const ErrorCodeUtils = {\n /**\n * Gets the native error code for the current platform\n * @param errorCode ErrorCode enum value\n * @returns Platform-specific error code from native constants\n */\n getNativeErrorCode: (errorCode: ErrorCode): string => {\n return NATIVE_ERROR_CODES[errorCode] || errorCode;\n },\n\n /**\n * Maps a platform-specific error code back to the standardized ErrorCode enum\n * @param platformCode Platform-specific error code (string for Android, number for iOS)\n * @param platform Target platform\n * @returns Corresponding ErrorCode enum value or E_UNKNOWN if not found\n */\n fromPlatformCode: (\n platformCode: string | number,\n platform: 'ios' | 'android',\n ): ErrorCode => {\n const mapping = ErrorCodeMapping[platform];\n\n for (const [errorCode, mappedCode] of Object.entries(mapping)) {\n if (mappedCode === platformCode) {\n return errorCode as ErrorCode;\n }\n }\n\n return ErrorCode.E_UNKNOWN;\n },\n\n /**\n * Maps an ErrorCode enum to platform-specific code\n * @param errorCode ErrorCode enum value\n * @param platform Target platform\n * @returns Platform-specific error code\n */\n toPlatformCode: (\n errorCode: ErrorCode,\n platform: 'ios' | 'android',\n ): string | number => {\n return (\n ErrorCodeMapping[platform][errorCode] ??\n (platform === 'ios' ? 0 : 'E_UNKNOWN')\n );\n },\n\n /**\n * Checks if an error code is valid for the specified platform\n * @param errorCode ErrorCode enum value\n * @param platform Target platform\n * @returns True if the error code is supported on the platform\n */\n isValidForPlatform: (\n errorCode: ErrorCode,\n platform: 'ios' | 'android',\n ): boolean => {\n return errorCode in ErrorCodeMapping[platform];\n },\n};\n\n// ============================================================================\n// Enhanced Unified Request Types\n// ============================================================================\n\n/**\n * Unified request props that work on both iOS and Android platforms\n * iOS will use 'sku', Android will use 'skus' (or convert sku to skus array)\n */\nexport interface UnifiedRequestPurchaseProps {\n // Universal properties - works on both platforms\n readonly sku?: string; // Single SKU (iOS native, Android fallback)\n readonly skus?: string[]; // Multiple SKUs (Android native, iOS uses first item)\n\n // iOS-specific properties (ignored on Android)\n readonly andDangerouslyFinishTransactionAutomatically?: boolean;\n readonly appAccountToken?: string;\n readonly quantity?: number;\n readonly withOffer?: import('./types/ExpoIapIOS.types').PaymentDiscount;\n\n // Android-specific properties (ignored on iOS)\n readonly obfuscatedAccountIdAndroid?: string;\n readonly obfuscatedProfileIdAndroid?: string;\n readonly isOfferPersonalized?: boolean;\n}\n\n// ============================================================================\n// New Platform-Specific Request Types (v2.7.0+)\n// ============================================================================\n\n/**\n * iOS-specific purchase request parameters\n */\nexport interface RequestPurchaseIosProps {\n readonly sku: string;\n readonly andDangerouslyFinishTransactionAutomatically?: boolean;\n readonly appAccountToken?: string;\n readonly quantity?: number;\n readonly withOffer?: import('./types/ExpoIapIOS.types').PaymentDiscount;\n}\n\n/**\n * Android-specific purchase request parameters\n */\nexport interface RequestPurchaseAndroidProps {\n readonly skus: string[];\n readonly obfuscatedAccountIdAndroid?: string;\n readonly obfuscatedProfileIdAndroid?: string;\n readonly isOfferPersonalized?: boolean;\n}\n\n/**\n * Android-specific subscription request parameters\n */\nexport interface RequestSubscriptionAndroidProps\n extends RequestPurchaseAndroidProps {\n readonly purchaseTokenAndroid?: string;\n readonly replacementModeAndroid?: number;\n readonly subscriptionOffers: {\n sku: string;\n offerToken: string;\n }[];\n}\n\n/**\n * Modern platform-specific request structure (v2.7.0+)\n * Allows clear separation of iOS and Android parameters\n */\nexport interface RequestPurchasePropsByPlatforms {\n readonly ios?: RequestPurchaseIosProps;\n readonly android?: RequestPurchaseAndroidProps;\n}\n\n/**\n * Modern platform-specific subscription request structure (v2.7.0+)\n */\nexport interface RequestSubscriptionPropsByPlatforms {\n readonly ios?: RequestPurchaseIosProps;\n readonly android?: RequestSubscriptionAndroidProps;\n}\n\n/**\n * Modern request purchase parameters (v2.7.0+)\n * This is the recommended API moving forward\n */\nexport type RequestPurchaseProps = RequestPurchasePropsByPlatforms;\n\n/**\n * Modern request subscription parameters (v2.7.0+)\n * This is the recommended API moving forward\n */\nexport type RequestSubscriptionProps = RequestSubscriptionPropsByPlatforms;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/helpers/subscription.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,kBAAkB,MAAM,EAAE,KACzB,OAAO,CAAC,kBAAkB,EAAE,CAyF9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,kBAAkB,MAAM,EAAE,KACzB,OAAO,CAAC,OAAO,CAGjB,CAAC"}
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/helpers/subscription.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,kBAAkB,MAAM,EAAE,KACzB,OAAO,CAAC,kBAAkB,EAAE,CAgG9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,kBAAkB,MAAM,EAAE,KACzB,OAAO,CAAC,OAAO,CAGjB,CAAC"}