expo-iap 2.5.2 → 2.5.3

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.
@@ -5,10 +5,13 @@ import android.util.Log
5
5
  import com.android.billingclient.api.AcknowledgePurchaseParams
6
6
  import com.android.billingclient.api.BillingClient
7
7
  import com.android.billingclient.api.BillingClientStateListener
8
+ import com.android.billingclient.api.BillingConfig
8
9
  import com.android.billingclient.api.BillingFlowParams
9
10
  import com.android.billingclient.api.BillingFlowParams.SubscriptionUpdateParams
11
+ import com.android.billingclient.api.BillingConfigResponseListener
10
12
  import com.android.billingclient.api.BillingResult
11
13
  import com.android.billingclient.api.ConsumeParams
14
+ import com.android.billingclient.api.GetBillingConfigParams
12
15
  import com.android.billingclient.api.ProductDetails
13
16
  import com.android.billingclient.api.Purchase
14
17
  import com.android.billingclient.api.PurchaseHistoryRecord
@@ -488,6 +491,25 @@ class ExpoIapModule :
488
491
  }
489
492
  }
490
493
  }
494
+
495
+
496
+ AsyncFunction("getStorefront") {
497
+ promise: Promise,
498
+ ->
499
+ ensureConnection(promise) { billingClient ->
500
+ billingClient.getBillingConfigAsync(
501
+ GetBillingConfigParams.newBuilder().build(),
502
+ BillingConfigResponseListener { result: BillingResult, config: BillingConfig? ->
503
+ if (result.responseCode == BillingClient.BillingResponseCode.OK) {
504
+ promise.safeResolve(config?.countryCode.orEmpty())
505
+ } else {
506
+ val debugMessage = result.debugMessage.orEmpty()
507
+ promise.safeReject(result.responseCode.toString(), debugMessage)
508
+ }
509
+ },
510
+ )
511
+ }
512
+ }
491
513
  }
492
514
 
493
515
  /**
package/build/index.d.ts CHANGED
@@ -52,6 +52,7 @@ export declare const finishTransaction: ({ purchase, isConsumable, }: {
52
52
  purchase: Purchase;
53
53
  isConsumable?: boolean;
54
54
  }) => Promise<PurchaseResult | boolean>;
55
+ export declare const getStorefront: () => Promise<string>;
55
56
  export * from './useIap';
56
57
  export * from './utils/errorMapping';
57
58
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -203,6 +203,9 @@ export const finishTransaction = ({ purchase, isConsumable, }) => {
203
203
  },
204
204
  }) || (() => Promise.reject(new Error('Unsupported Platform'))))();
205
205
  };
206
+ export const getStorefront = () => {
207
+ return ExpoIapModule.getStorefront();
208
+ };
206
209
  export * from './useIap';
207
210
  export * from './utils/errorMapping';
208
211
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Import the native module. On web, it will be resolved to ExpoIap.web.ts\n// and on native platforms to ExpoIap.ts\nimport {NativeModulesProxy} from 'expo-modules-core';\nimport {Platform} from 'react-native';\nimport {\n Product,\n ProductPurchase,\n Purchase,\n PurchaseError,\n PurchaseResult,\n RequestSubscriptionProps,\n SubscriptionProduct,\n SubscriptionPurchase,\n} from './ExpoIap.types';\nimport ExpoIapModule from './ExpoIapModule';\nimport {\n ProductPurchaseAndroid,\n RequestPurchaseAndroidProps,\n RequestSubscriptionAndroidProps,\n} from './types/ExpoIapAndroid.types';\nimport {\n PaymentDiscount,\n RequestPurchaseIosProps,\n RequestSubscriptionIosProps,\n} from './types/ExpoIapIos.types';\nimport {isProductIos} from './modules/ios';\nimport {isProductAndroid} from './modules/android';\n\nexport * from './ExpoIap.types';\nexport * from './modules/android';\nexport * from './modules/ios';\n\n// Get the native constant value\nexport const PI = ExpoIapModule.PI;\n\nexport enum IapEvent {\n PurchaseUpdated = 'purchase-updated',\n PurchaseError = 'purchase-error',\n /** @deprecated Use PurchaseUpdated instead. This will be removed in a future version. */\n TransactionIapUpdated = 'iap-transaction-updated',\n}\n\nexport function setValueAsync(value: string) {\n return ExpoIapModule.setValueAsync(value);\n}\n\n// Ensure the emitter has proper EventEmitter interface\nexport const emitter = (ExpoIapModule || NativeModulesProxy.ExpoIap) as {\n addListener: (\n eventName: string,\n listener: (...args: any[]) => void,\n ) => {remove: () => void};\n removeListener: (\n eventName: string,\n listener: (...args: any[]) => void,\n ) => void;\n};\n\nexport const purchaseUpdatedListener = (\n listener: (event: Purchase) => void,\n) => {\n const emitterSubscription = emitter.addListener(\n IapEvent.PurchaseUpdated,\n listener,\n );\n return emitterSubscription;\n};\n\nexport const purchaseErrorListener = (\n listener: (error: PurchaseError) => void,\n) => {\n return emitter.addListener(IapEvent.PurchaseError, listener);\n};\n\nexport function initConnection() {\n return ExpoIapModule.initConnection();\n}\n\nexport const getProducts = async (skus: string[]): Promise<Product[]> => {\n if (!skus?.length) {\n return Promise.reject(new Error('\"skus\" is required'));\n }\n\n return Platform.select({\n ios: async () => {\n const rawItems = await ExpoIapModule.getItems(skus);\n return rawItems.filter((item: unknown) => {\n if (!isProductIos(item)) return false;\n return (\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n typeof item.id === 'string' &&\n skus.includes(item.id)\n );\n }) as Product[];\n },\n android: async () => {\n const products = await ExpoIapModule.getItemsByType('inapp', skus);\n return products.filter((product: unknown) =>\n isProductAndroid<Product>(product),\n );\n },\n default: () => Promise.reject(new Error('Unsupported Platform')),\n })();\n};\n\nexport const getSubscriptions = async (\n skus: string[],\n): Promise<SubscriptionProduct[]> => {\n if (!skus?.length) {\n return Promise.reject(new Error('\"skus\" is required'));\n }\n\n return Platform.select({\n ios: async () => {\n const rawItems = await ExpoIapModule.getItems(skus);\n return rawItems.filter((item: unknown) => {\n if (!isProductIos(item)) return false;\n return (\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n typeof item.id === 'string' &&\n skus.includes(item.id)\n );\n }) as SubscriptionProduct[];\n },\n android: async () => {\n const rawItems = await ExpoIapModule.getItemsByType('subs', skus);\n return rawItems.filter((item: unknown) => {\n if (!isProductAndroid(item)) return false;\n return (\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n typeof item.id === 'string' &&\n skus.includes(item.id)\n );\n }) as SubscriptionProduct[];\n },\n default: () => Promise.reject(new Error('Unsupported Platform')),\n })();\n};\n\nexport async function endConnection(): Promise<boolean> {\n return ExpoIapModule.endConnection();\n}\n\nexport const getPurchaseHistory = ({\n alsoPublishToEventListener = false,\n onlyIncludeActiveItems = false,\n}: {\n alsoPublishToEventListener?: boolean;\n onlyIncludeActiveItems?: boolean;\n} = {}): Promise<ProductPurchase[]> =>\n (\n Platform.select({\n ios: async () => {\n return ExpoIapModule.getAvailableItems(\n alsoPublishToEventListener,\n onlyIncludeActiveItems,\n );\n },\n android: async () => {\n const products = await ExpoIapModule.getPurchaseHistoryByType('inapp');\n const subscriptions =\n await ExpoIapModule.getPurchaseHistoryByType('subs');\n return products.concat(subscriptions);\n },\n }) || (() => Promise.resolve([]))\n )();\n\nexport const getAvailablePurchases = ({\n alsoPublishToEventListener = false,\n onlyIncludeActiveItems = true,\n}: {\n alsoPublishToEventListener?: boolean;\n onlyIncludeActiveItems?: boolean;\n} = {}): Promise<ProductPurchase[]> =>\n (\n Platform.select({\n ios: () =>\n ExpoIapModule.getAvailableItems(\n alsoPublishToEventListener,\n onlyIncludeActiveItems,\n ),\n android: async () => {\n const products = await ExpoIapModule.getAvailableItemsByType('inapp');\n const subscriptions =\n await ExpoIapModule.getAvailableItemsByType('subs');\n return products.concat(subscriptions);\n },\n }) || (() => Promise.resolve([]))\n )();\n\nconst offerToRecordIos = (\n offer: PaymentDiscount | undefined,\n): Record<keyof PaymentDiscount, string> | undefined => {\n if (!offer) return undefined;\n return {\n identifier: offer.identifier,\n keyIdentifier: offer.keyIdentifier,\n nonce: offer.nonce,\n signature: offer.signature,\n timestamp: offer.timestamp.toString(),\n };\n};\n\n// Define discriminated union with explicit type parameter\ntype PurchaseRequest =\n | {\n request: RequestPurchaseIosProps | RequestPurchaseAndroidProps;\n type?: 'inapp';\n }\n | {\n request: RequestSubscriptionAndroidProps | RequestSubscriptionIosProps;\n type: 'subs';\n };\n\n// Type guards for request objects\nconst isIosRequest = (\n request: any,\n): request is RequestPurchaseIosProps | RequestSubscriptionIosProps =>\n 'sku' in request && typeof request.sku === 'string';\n\nexport const requestPurchase = (\n requestObj: PurchaseRequest,\n): Promise<\n | ProductPurchase\n | SubscriptionPurchase\n | ProductPurchase[]\n | SubscriptionPurchase[]\n | void\n> => {\n const {request, type = 'inapp'} = requestObj;\n\n if (Platform.OS === 'ios') {\n if (!isIosRequest(request)) {\n throw new Error(\n 'Invalid request for iOS. The `sku` property is required and must be a string.',\n );\n }\n\n const {\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n appAccountToken,\n quantity,\n withOffer,\n } = request;\n\n return (async () => {\n const offer = offerToRecordIos(withOffer);\n const purchase = await ExpoIapModule.buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n appAccountToken,\n quantity ?? -1,\n offer,\n );\n\n return type === 'inapp'\n ? (purchase as ProductPurchase)\n : (purchase as SubscriptionPurchase);\n })();\n }\n\n if (Platform.OS === 'android') {\n if (type === 'inapp') {\n const {\n skus,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n isOfferPersonalized,\n } = request as RequestPurchaseAndroidProps;\n\n return (async () => {\n return ExpoIapModule.buyItemByType({\n type: 'inapp',\n skuArr: skus,\n purchaseToken: undefined,\n replacementMode: -1,\n obfuscatedAccountId: obfuscatedAccountIdAndroid,\n obfuscatedProfileId: obfuscatedProfileIdAndroid,\n offerTokenArr: [],\n isOfferPersonalized: isOfferPersonalized ?? false,\n }) as Promise<ProductPurchase[]>;\n })();\n }\n\n if (type === 'subs') {\n const {\n skus,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n isOfferPersonalized,\n subscriptionOffers = [],\n replacementModeAndroid = -1,\n purchaseTokenAndroid,\n } = request as RequestSubscriptionAndroidProps;\n\n return (async () => {\n return ExpoIapModule.buyItemByType({\n type: 'subs',\n skuArr: skus,\n purchaseToken: purchaseTokenAndroid,\n replacementMode: replacementModeAndroid,\n obfuscatedAccountId: obfuscatedAccountIdAndroid,\n obfuscatedProfileId: obfuscatedProfileIdAndroid,\n offerTokenArr: subscriptionOffers.map((so) => so.offerToken),\n isOfferPersonalized: isOfferPersonalized ?? false,\n }) as Promise<SubscriptionPurchase[]>;\n })();\n }\n\n throw new Error(\n \"Invalid request for Android: Expected a 'RequestPurchaseAndroidProps' object with a valid 'skus' array or a 'RequestSubscriptionAndroidProps' object with 'skus' and 'subscriptionOffers'.\",\n );\n }\n\n return Promise.resolve(); // Fallback for unsupported platforms\n};\n\n/**\n * @deprecated Use `requestPurchase({ request, type: 'subs' })` instead. This method will be removed in version 3.0.0+.\n */\nexport const requestSubscription = async (\n request: RequestSubscriptionProps,\n): Promise<SubscriptionPurchase | SubscriptionPurchase[] | null | void> => {\n console.warn(\n \"`requestSubscription` is deprecated. Use `requestPurchase({ request, type: 'subs' })` instead. This method will be removed in version 3.0.0+.\",\n );\n return (await requestPurchase({request, type: 'subs'})) as\n | SubscriptionPurchase\n | SubscriptionPurchase[]\n | null\n | void;\n};\n\nexport const finishTransaction = ({\n purchase,\n isConsumable,\n}: {\n purchase: Purchase;\n isConsumable?: boolean;\n}): Promise<PurchaseResult | boolean> => {\n return (\n Platform.select({\n ios: async () => {\n const transactionId = purchase.transactionId;\n if (!transactionId) {\n return Promise.reject(\n new Error('transactionId required to finish iOS transaction'),\n );\n }\n await ExpoIapModule.finishTransaction(transactionId);\n return Promise.resolve(true);\n },\n android: async () => {\n const androidPurchase = purchase as ProductPurchaseAndroid;\n\n if (!('purchaseTokenAndroid' in androidPurchase)) {\n return Promise.reject(\n new Error('purchaseToken is required to finish transaction'),\n );\n }\n if (isConsumable) {\n return ExpoIapModule.consumeProduct(\n androidPurchase.purchaseTokenAndroid,\n );\n } else {\n return ExpoIapModule.acknowledgePurchase(\n androidPurchase.purchaseTokenAndroid,\n );\n }\n },\n }) || (() => Promise.reject(new Error('Unsupported Platform')))\n )();\n};\n\nexport * from './useIap';\nexport * from './utils/errorMapping';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wCAAwC;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAWtC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAW5C,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAEnD,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAE9B,gCAAgC;AAChC,MAAM,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;AAEnC,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,gDAAoC,CAAA;IACpC,4CAAgC,CAAA;IAChC,yFAAyF;IACzF,6DAAiD,CAAA;AACnD,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,aAAa,IAAI,kBAAkB,CAAC,OAAO,CASlE,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,QAAmC,EACnC,EAAE;IACF,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAC7C,QAAQ,CAAC,eAAe,EACxB,QAAQ,CACT,CAAC;IACF,OAAO,mBAAmB,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAAwC,EACxC,EAAE;IACF,OAAO,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,UAAU,cAAc;IAC5B,OAAO,aAAa,CAAC,cAAc,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,IAAc,EAAsB,EAAE;IACtE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrB,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE;gBACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACtC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;oBACxB,IAAI,KAAK,IAAI;oBACb,IAAI,IAAI,IAAI;oBACZ,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;oBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CACvB,CAAC;YACJ,CAAC,CAAc,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACnE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAC1C,gBAAgB,CAAU,OAAO,CAAC,CACnC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACjE,CAAC,EAAE,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,IAAc,EACkB,EAAE;IAClC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrB,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE;gBACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACtC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;oBACxB,IAAI,KAAK,IAAI;oBACb,IAAI,IAAI,IAAI;oBACZ,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;oBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CACvB,CAAC;YACJ,CAAC,CAA0B,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAa,EAAE,EAAE;gBACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAC1C,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;oBACxB,IAAI,KAAK,IAAI;oBACb,IAAI,IAAI,IAAI;oBACZ,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;oBAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CACvB,CAAC;YACJ,CAAC,CAA0B,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACjE,CAAC,EAAE,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,aAAa,CAAC,aAAa,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,0BAA0B,GAAG,KAAK,EAClC,sBAAsB,GAAG,KAAK,MAI5B,EAAE,EAA8B,EAAE,CACpC,CACE,QAAQ,CAAC,MAAM,CAAC;IACd,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,OAAO,aAAa,CAAC,iBAAiB,CACpC,0BAA0B,EAC1B,sBAAsB,CACvB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACvE,MAAM,aAAa,GACjB,MAAM,aAAa,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAClC,EAAE,CAAC;AAEN,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,EACpC,0BAA0B,GAAG,KAAK,EAClC,sBAAsB,GAAG,IAAI,MAI3B,EAAE,EAA8B,EAAE,CACpC,CACE,QAAQ,CAAC,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,EAAE,CACR,aAAa,CAAC,iBAAiB,CAC7B,0BAA0B,EAC1B,sBAAsB,CACvB;IACH,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,aAAa,GACjB,MAAM,aAAa,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAClC,EAAE,CAAC;AAEN,MAAM,gBAAgB,GAAG,CACvB,KAAkC,EACiB,EAAE;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;KACtC,CAAC;AACJ,CAAC,CAAC;AAaF,kCAAkC;AAClC,MAAM,YAAY,GAAG,CACnB,OAAY,EACsD,EAAE,CACpE,KAAK,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,UAA2B,EAO3B,EAAE;IACF,MAAM,EAAC,OAAO,EAAE,IAAI,GAAG,OAAO,EAAC,GAAG,UAAU,CAAC;IAE7C,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QAED,MAAM,EACJ,GAAG,EACH,+CAA+C,GAAG,KAAK,EACvD,eAAe,EACf,QAAQ,EACR,SAAS,GACV,GAAG,OAAO,CAAC;QAEZ,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,UAAU,CAC7C,GAAG,EACH,+CAA+C,EAC/C,eAAe,EACf,QAAQ,IAAI,CAAC,CAAC,EACd,KAAK,CACN,CAAC;YAEF,OAAO,IAAI,KAAK,OAAO;gBACrB,CAAC,CAAE,QAA4B;gBAC/B,CAAC,CAAE,QAAiC,CAAC;QACzC,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,EACJ,IAAI,EACJ,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,GACpB,GAAG,OAAsC,CAAC;YAE3C,OAAO,CAAC,KAAK,IAAI,EAAE;gBACjB,OAAO,aAAa,CAAC,aAAa,CAAC;oBACjC,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,IAAI;oBACZ,aAAa,EAAE,SAAS;oBACxB,eAAe,EAAE,CAAC,CAAC;oBACnB,mBAAmB,EAAE,0BAA0B;oBAC/C,mBAAmB,EAAE,0BAA0B;oBAC/C,aAAa,EAAE,EAAE;oBACjB,mBAAmB,EAAE,mBAAmB,IAAI,KAAK;iBAClD,CAA+B,CAAC;YACnC,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,MAAM,EACJ,IAAI,EACJ,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,GAAG,EAAE,EACvB,sBAAsB,GAAG,CAAC,CAAC,EAC3B,oBAAoB,GACrB,GAAG,OAA0C,CAAC;YAE/C,OAAO,CAAC,KAAK,IAAI,EAAE;gBACjB,OAAO,aAAa,CAAC,aAAa,CAAC;oBACjC,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,IAAI;oBACZ,aAAa,EAAE,oBAAoB;oBACnC,eAAe,EAAE,sBAAsB;oBACvC,mBAAmB,EAAE,0BAA0B;oBAC/C,mBAAmB,EAAE,0BAA0B;oBAC/C,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;oBAC5D,mBAAmB,EAAE,mBAAmB,IAAI,KAAK;iBAClD,CAAoC,CAAC;YACxC,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAED,MAAM,IAAI,KAAK,CACb,4LAA4L,CAC7L,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,qCAAqC;AACjE,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAAiC,EACqC,EAAE;IACxE,OAAO,CAAC,IAAI,CACV,+IAA+I,CAChJ,CAAC;IACF,OAAO,CAAC,MAAM,eAAe,CAAC,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,CAAC,CAI9C,CAAC;AACX,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,QAAQ,EACR,YAAY,GAIb,EAAqC,EAAE;IACtC,OAAO,CACL,QAAQ,CAAC,MAAM,CAAC;QACd,GAAG,EAAE,KAAK,IAAI,EAAE;YACd,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;YAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAC9D,CAAC;YACJ,CAAC;YACD,MAAM,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YACrD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,eAAe,GAAG,QAAkC,CAAC;YAE3D,IAAI,CAAC,CAAC,sBAAsB,IAAI,eAAe,CAAC,EAAE,CAAC;gBACjD,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAC7D,CAAC;YACJ,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,aAAa,CAAC,cAAc,CACjC,eAAe,CAAC,oBAAoB,CACrC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,aAAa,CAAC,mBAAmB,CACtC,eAAe,CAAC,oBAAoB,CACrC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAChE,EAAE,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAoB,EAAE;IACjD,OAAO,aAAa,CAAC,aAAa,EAAE,CAAC;AACvC,CAAC,CAAC;AAEF,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC","sourcesContent":["// Import the native module. On web, it will be resolved to ExpoIap.web.ts\n// and on native platforms to ExpoIap.ts\nimport {NativeModulesProxy} from 'expo-modules-core';\nimport {Platform} from 'react-native';\nimport {\n Product,\n ProductPurchase,\n Purchase,\n PurchaseError,\n PurchaseResult,\n RequestSubscriptionProps,\n SubscriptionProduct,\n SubscriptionPurchase,\n} from './ExpoIap.types';\nimport ExpoIapModule from './ExpoIapModule';\nimport {\n ProductPurchaseAndroid,\n RequestPurchaseAndroidProps,\n RequestSubscriptionAndroidProps,\n} from './types/ExpoIapAndroid.types';\nimport {\n PaymentDiscount,\n RequestPurchaseIosProps,\n RequestSubscriptionIosProps,\n} from './types/ExpoIapIos.types';\nimport {isProductIos} from './modules/ios';\nimport {isProductAndroid} from './modules/android';\n\nexport * from './ExpoIap.types';\nexport * from './modules/android';\nexport * from './modules/ios';\n\n// Get the native constant value\nexport const PI = ExpoIapModule.PI;\n\nexport enum IapEvent {\n PurchaseUpdated = 'purchase-updated',\n PurchaseError = 'purchase-error',\n /** @deprecated Use PurchaseUpdated instead. This will be removed in a future version. */\n TransactionIapUpdated = 'iap-transaction-updated',\n}\n\nexport function setValueAsync(value: string) {\n return ExpoIapModule.setValueAsync(value);\n}\n\n// Ensure the emitter has proper EventEmitter interface\nexport const emitter = (ExpoIapModule || NativeModulesProxy.ExpoIap) as {\n addListener: (\n eventName: string,\n listener: (...args: any[]) => void,\n ) => {remove: () => void};\n removeListener: (\n eventName: string,\n listener: (...args: any[]) => void,\n ) => void;\n};\n\nexport const purchaseUpdatedListener = (\n listener: (event: Purchase) => void,\n) => {\n const emitterSubscription = emitter.addListener(\n IapEvent.PurchaseUpdated,\n listener,\n );\n return emitterSubscription;\n};\n\nexport const purchaseErrorListener = (\n listener: (error: PurchaseError) => void,\n) => {\n return emitter.addListener(IapEvent.PurchaseError, listener);\n};\n\nexport function initConnection() {\n return ExpoIapModule.initConnection();\n}\n\nexport const getProducts = async (skus: string[]): Promise<Product[]> => {\n if (!skus?.length) {\n return Promise.reject(new Error('\"skus\" is required'));\n }\n\n return Platform.select({\n ios: async () => {\n const rawItems = await ExpoIapModule.getItems(skus);\n return rawItems.filter((item: unknown) => {\n if (!isProductIos(item)) return false;\n return (\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n typeof item.id === 'string' &&\n skus.includes(item.id)\n );\n }) as Product[];\n },\n android: async () => {\n const products = await ExpoIapModule.getItemsByType('inapp', skus);\n return products.filter((product: unknown) =>\n isProductAndroid<Product>(product),\n );\n },\n default: () => Promise.reject(new Error('Unsupported Platform')),\n })();\n};\n\nexport const getSubscriptions = async (\n skus: string[],\n): Promise<SubscriptionProduct[]> => {\n if (!skus?.length) {\n return Promise.reject(new Error('\"skus\" is required'));\n }\n\n return Platform.select({\n ios: async () => {\n const rawItems = await ExpoIapModule.getItems(skus);\n return rawItems.filter((item: unknown) => {\n if (!isProductIos(item)) return false;\n return (\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n typeof item.id === 'string' &&\n skus.includes(item.id)\n );\n }) as SubscriptionProduct[];\n },\n android: async () => {\n const rawItems = await ExpoIapModule.getItemsByType('subs', skus);\n return rawItems.filter((item: unknown) => {\n if (!isProductAndroid(item)) return false;\n return (\n typeof item === 'object' &&\n item !== null &&\n 'id' in item &&\n typeof item.id === 'string' &&\n skus.includes(item.id)\n );\n }) as SubscriptionProduct[];\n },\n default: () => Promise.reject(new Error('Unsupported Platform')),\n })();\n};\n\nexport async function endConnection(): Promise<boolean> {\n return ExpoIapModule.endConnection();\n}\n\nexport const getPurchaseHistory = ({\n alsoPublishToEventListener = false,\n onlyIncludeActiveItems = false,\n}: {\n alsoPublishToEventListener?: boolean;\n onlyIncludeActiveItems?: boolean;\n} = {}): Promise<ProductPurchase[]> =>\n (\n Platform.select({\n ios: async () => {\n return ExpoIapModule.getAvailableItems(\n alsoPublishToEventListener,\n onlyIncludeActiveItems,\n );\n },\n android: async () => {\n const products = await ExpoIapModule.getPurchaseHistoryByType('inapp');\n const subscriptions =\n await ExpoIapModule.getPurchaseHistoryByType('subs');\n return products.concat(subscriptions);\n },\n }) || (() => Promise.resolve([]))\n )();\n\nexport const getAvailablePurchases = ({\n alsoPublishToEventListener = false,\n onlyIncludeActiveItems = true,\n}: {\n alsoPublishToEventListener?: boolean;\n onlyIncludeActiveItems?: boolean;\n} = {}): Promise<ProductPurchase[]> =>\n (\n Platform.select({\n ios: () =>\n ExpoIapModule.getAvailableItems(\n alsoPublishToEventListener,\n onlyIncludeActiveItems,\n ),\n android: async () => {\n const products = await ExpoIapModule.getAvailableItemsByType('inapp');\n const subscriptions =\n await ExpoIapModule.getAvailableItemsByType('subs');\n return products.concat(subscriptions);\n },\n }) || (() => Promise.resolve([]))\n )();\n\nconst offerToRecordIos = (\n offer: PaymentDiscount | undefined,\n): Record<keyof PaymentDiscount, string> | undefined => {\n if (!offer) return undefined;\n return {\n identifier: offer.identifier,\n keyIdentifier: offer.keyIdentifier,\n nonce: offer.nonce,\n signature: offer.signature,\n timestamp: offer.timestamp.toString(),\n };\n};\n\n// Define discriminated union with explicit type parameter\ntype PurchaseRequest =\n | {\n request: RequestPurchaseIosProps | RequestPurchaseAndroidProps;\n type?: 'inapp';\n }\n | {\n request: RequestSubscriptionAndroidProps | RequestSubscriptionIosProps;\n type: 'subs';\n };\n\n// Type guards for request objects\nconst isIosRequest = (\n request: any,\n): request is RequestPurchaseIosProps | RequestSubscriptionIosProps =>\n 'sku' in request && typeof request.sku === 'string';\n\nexport const requestPurchase = (\n requestObj: PurchaseRequest,\n): Promise<\n | ProductPurchase\n | SubscriptionPurchase\n | ProductPurchase[]\n | SubscriptionPurchase[]\n | void\n> => {\n const {request, type = 'inapp'} = requestObj;\n\n if (Platform.OS === 'ios') {\n if (!isIosRequest(request)) {\n throw new Error(\n 'Invalid request for iOS. The `sku` property is required and must be a string.',\n );\n }\n\n const {\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n appAccountToken,\n quantity,\n withOffer,\n } = request;\n\n return (async () => {\n const offer = offerToRecordIos(withOffer);\n const purchase = await ExpoIapModule.buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n appAccountToken,\n quantity ?? -1,\n offer,\n );\n\n return type === 'inapp'\n ? (purchase as ProductPurchase)\n : (purchase as SubscriptionPurchase);\n })();\n }\n\n if (Platform.OS === 'android') {\n if (type === 'inapp') {\n const {\n skus,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n isOfferPersonalized,\n } = request as RequestPurchaseAndroidProps;\n\n return (async () => {\n return ExpoIapModule.buyItemByType({\n type: 'inapp',\n skuArr: skus,\n purchaseToken: undefined,\n replacementMode: -1,\n obfuscatedAccountId: obfuscatedAccountIdAndroid,\n obfuscatedProfileId: obfuscatedProfileIdAndroid,\n offerTokenArr: [],\n isOfferPersonalized: isOfferPersonalized ?? false,\n }) as Promise<ProductPurchase[]>;\n })();\n }\n\n if (type === 'subs') {\n const {\n skus,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n isOfferPersonalized,\n subscriptionOffers = [],\n replacementModeAndroid = -1,\n purchaseTokenAndroid,\n } = request as RequestSubscriptionAndroidProps;\n\n return (async () => {\n return ExpoIapModule.buyItemByType({\n type: 'subs',\n skuArr: skus,\n purchaseToken: purchaseTokenAndroid,\n replacementMode: replacementModeAndroid,\n obfuscatedAccountId: obfuscatedAccountIdAndroid,\n obfuscatedProfileId: obfuscatedProfileIdAndroid,\n offerTokenArr: subscriptionOffers.map((so) => so.offerToken),\n isOfferPersonalized: isOfferPersonalized ?? false,\n }) as Promise<SubscriptionPurchase[]>;\n })();\n }\n\n throw new Error(\n \"Invalid request for Android: Expected a 'RequestPurchaseAndroidProps' object with a valid 'skus' array or a 'RequestSubscriptionAndroidProps' object with 'skus' and 'subscriptionOffers'.\",\n );\n }\n\n return Promise.resolve(); // Fallback for unsupported platforms\n};\n\n/**\n * @deprecated Use `requestPurchase({ request, type: 'subs' })` instead. This method will be removed in version 3.0.0+.\n */\nexport const requestSubscription = async (\n request: RequestSubscriptionProps,\n): Promise<SubscriptionPurchase | SubscriptionPurchase[] | null | void> => {\n console.warn(\n \"`requestSubscription` is deprecated. Use `requestPurchase({ request, type: 'subs' })` instead. This method will be removed in version 3.0.0+.\",\n );\n return (await requestPurchase({request, type: 'subs'})) as\n | SubscriptionPurchase\n | SubscriptionPurchase[]\n | null\n | void;\n};\n\nexport const finishTransaction = ({\n purchase,\n isConsumable,\n}: {\n purchase: Purchase;\n isConsumable?: boolean;\n}): Promise<PurchaseResult | boolean> => {\n return (\n Platform.select({\n ios: async () => {\n const transactionId = purchase.transactionId;\n if (!transactionId) {\n return Promise.reject(\n new Error('transactionId required to finish iOS transaction'),\n );\n }\n await ExpoIapModule.finishTransaction(transactionId);\n return Promise.resolve(true);\n },\n android: async () => {\n const androidPurchase = purchase as ProductPurchaseAndroid;\n\n if (!('purchaseTokenAndroid' in androidPurchase)) {\n return Promise.reject(\n new Error('purchaseToken is required to finish transaction'),\n );\n }\n if (isConsumable) {\n return ExpoIapModule.consumeProduct(\n androidPurchase.purchaseTokenAndroid,\n );\n } else {\n return ExpoIapModule.acknowledgePurchase(\n androidPurchase.purchaseTokenAndroid,\n );\n }\n },\n }) || (() => Promise.reject(new Error('Unsupported Platform')))\n )();\n};\n\nexport const getStorefront = (): Promise<string> => {\n return ExpoIapModule.getStorefront();\n};\n\nexport * from './useIap';\nexport * from './utils/errorMapping';\n"]}
@@ -206,6 +206,11 @@ public class ExpoIapModule: Module {
206
206
  return AppStore.canMakePayments
207
207
  }
208
208
 
209
+ AsyncFunction("getStorefront") {
210
+ let storefront = await Storefront.current
211
+ return storefront?.countryCode
212
+ }
213
+
209
214
  AsyncFunction("getItems") { (skus: [String]) -> [[String: Any?]?] in
210
215
  guard let productStore = self.productStore else {
211
216
  throw Exception(name: "ExpoIapModule", description: "Connection not initialized", code: IapErrorCode.notPrepared)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-iap",
3
- "version": "2.5.2",
3
+ "version": "2.5.3",
4
4
  "description": "In App Purchase module in Expo",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
package/src/index.ts CHANGED
@@ -379,5 +379,9 @@ export const finishTransaction = ({
379
379
  )();
380
380
  };
381
381
 
382
+ export const getStorefront = (): Promise<string> => {
383
+ return ExpoIapModule.getStorefront();
384
+ };
385
+
382
386
  export * from './useIap';
383
387
  export * from './utils/errorMapping';