react-native-iap 9.0.0-rc.2 → 9.0.0
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.
- package/RNIap.podspec +1 -1
- package/android/src/play/java/com/dooboolab/RNIap/RNIapModule.kt +48 -47
- package/ios/RNIapIos.swift +5 -2
- package/lib/commonjs/iap.js +1 -1
- package/lib/commonjs/iap.js.map +1 -1
- package/lib/commonjs/index.js +12 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types/index.js.map +1 -1
- package/lib/module/iap.js +1 -1
- package/lib/module/iap.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/types/index.js.map +1 -1
- package/lib/typescript/iap.d.ts +1 -1
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/types/index.d.ts +15 -12
- package/package.json +2 -1
- package/src/iap.ts +1 -1
- package/src/index.ts +1 -0
- package/src/types/index.ts +19 -13
package/RNIap.podspec
CHANGED
|
@@ -12,7 +12,7 @@ Pod::Spec.new do |s|
|
|
|
12
12
|
s.license = package["license"]
|
|
13
13
|
s.authors = package["author"]
|
|
14
14
|
|
|
15
|
-
s.platforms = { :ios => "10.0" }
|
|
15
|
+
s.platforms = { :ios => "10.0" , :tvos => "10.0"}
|
|
16
16
|
s.source = { :git => "https://github.com/dooboolab/react-native-iap.git", :tag => "#{s.version}" }
|
|
17
17
|
|
|
18
18
|
s.source_files = "ios/*.{h,m,mm,swift}"
|
|
@@ -200,8 +200,7 @@ class RNIapModule(
|
|
|
200
200
|
val skuList = ArrayList<QueryProductDetailsParams.Product>()
|
|
201
201
|
for (i in 0 until skuArr.size()) {
|
|
202
202
|
if (skuArr.getType(i) == ReadableType.String) {
|
|
203
|
-
|
|
204
|
-
sku?.let {
|
|
203
|
+
skuArr.getString(i)?.let { sku -> // null check for older versions of RN
|
|
205
204
|
skuList.add(
|
|
206
205
|
QueryProductDetailsParams.Product.newBuilder().setProductId(sku)
|
|
207
206
|
.setProductType(type).build()
|
|
@@ -236,52 +235,53 @@ class RNIapModule(
|
|
|
236
235
|
"priceAmountMicros",
|
|
237
236
|
it.priceAmountMicros.toString()
|
|
238
237
|
)
|
|
238
|
+
item.putMap("oneTimePurchaseOfferDetails", oneTimePurchaseOfferDetails)
|
|
239
239
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
subscriptionOfferDetailsItem.offerToken
|
|
248
|
-
)
|
|
249
|
-
val offerTags = Arguments.createArray()
|
|
250
|
-
subscriptionOfferDetailsItem.offerTags.forEach { offerTag ->
|
|
251
|
-
offerTags.pushString(offerTag)
|
|
252
|
-
}
|
|
253
|
-
offerDetails.putArray("offerTags", offerTags)
|
|
254
|
-
|
|
255
|
-
val pricingPhasesList = Arguments.createArray()
|
|
256
|
-
subscriptionOfferDetailsItem.pricingPhases.pricingPhaseList.forEach { pricingPhaseItem ->
|
|
257
|
-
val pricingPhase = Arguments.createMap()
|
|
258
|
-
pricingPhase.putString(
|
|
259
|
-
"formattedPrice",
|
|
260
|
-
pricingPhaseItem.formattedPrice
|
|
261
|
-
)
|
|
262
|
-
pricingPhase.putString(
|
|
263
|
-
"priceCurrencyCode",
|
|
264
|
-
pricingPhaseItem.priceCurrencyCode
|
|
240
|
+
skuDetails.subscriptionOfferDetails?.let {
|
|
241
|
+
val subscriptionOfferDetails = Arguments.createArray()
|
|
242
|
+
it.forEach { subscriptionOfferDetailsItem ->
|
|
243
|
+
val offerDetails = Arguments.createMap()
|
|
244
|
+
offerDetails.putString(
|
|
245
|
+
"offerToken",
|
|
246
|
+
subscriptionOfferDetailsItem.offerToken
|
|
265
247
|
)
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
248
|
+
val offerTags = Arguments.createArray()
|
|
249
|
+
subscriptionOfferDetailsItem.offerTags.forEach { offerTag ->
|
|
250
|
+
offerTags.pushString(offerTag)
|
|
251
|
+
}
|
|
252
|
+
offerDetails.putArray("offerTags", offerTags)
|
|
253
|
+
|
|
254
|
+
val pricingPhasesList = Arguments.createArray()
|
|
255
|
+
subscriptionOfferDetailsItem.pricingPhases.pricingPhaseList.forEach { pricingPhaseItem ->
|
|
256
|
+
val pricingPhase = Arguments.createMap()
|
|
257
|
+
pricingPhase.putString(
|
|
258
|
+
"formattedPrice",
|
|
259
|
+
pricingPhaseItem.formattedPrice
|
|
260
|
+
)
|
|
261
|
+
pricingPhase.putString(
|
|
262
|
+
"priceCurrencyCode",
|
|
263
|
+
pricingPhaseItem.priceCurrencyCode
|
|
264
|
+
)
|
|
265
|
+
pricingPhase.putString("billingPeriod", pricingPhaseItem.billingPeriod)
|
|
266
|
+
pricingPhase.putInt(
|
|
267
|
+
"billingCycleCount",
|
|
268
|
+
pricingPhaseItem.billingCycleCount
|
|
269
|
+
)
|
|
270
|
+
pricingPhase.putString(
|
|
271
|
+
"priceAmountMicros",
|
|
272
|
+
pricingPhaseItem.priceAmountMicros.toString()
|
|
273
|
+
)
|
|
274
|
+
pricingPhase.putInt("recurrenceMode", pricingPhaseItem.recurrenceMode)
|
|
275
|
+
|
|
276
|
+
pricingPhasesList.pushMap(pricingPhase)
|
|
277
|
+
}
|
|
278
|
+
val pricingPhases = Arguments.createMap()
|
|
279
|
+
pricingPhases.putArray("pricingPhaseList", pricingPhasesList)
|
|
280
|
+
offerDetails.putMap("pricingPhases", pricingPhases)
|
|
281
|
+
subscriptionOfferDetails.pushMap(offerDetails)
|
|
278
282
|
}
|
|
279
|
-
|
|
280
|
-
pricingPhases.putArray("pricingPhaseList", pricingPhasesList)
|
|
281
|
-
offerDetails.putMap("pricingPhases", pricingPhases)
|
|
282
|
-
subscriptionOfferDetails.pushMap(offerDetails)
|
|
283
|
+
item.putArray("subscriptionOfferDetails", subscriptionOfferDetails)
|
|
283
284
|
}
|
|
284
|
-
item.putArray("subscriptionOfferDetails", subscriptionOfferDetails)
|
|
285
285
|
items.pushMap(item)
|
|
286
286
|
}
|
|
287
287
|
promise.safeResolve(items)
|
|
@@ -438,8 +438,9 @@ class RNIapModule(
|
|
|
438
438
|
}
|
|
439
439
|
var productDetailParams = BillingFlowParams.ProductDetailsParams.newBuilder().setProductDetails(selectedSku)
|
|
440
440
|
if (type == BillingClient.ProductType.SUBS) {
|
|
441
|
-
|
|
442
|
-
|
|
441
|
+
offerTokenArr.getString(index)?.let { offerToken -> // null check for older versions of RN
|
|
442
|
+
productDetailParams = productDetailParams.setOfferToken(offerToken)
|
|
443
|
+
}
|
|
443
444
|
}
|
|
444
445
|
productDetailParams.build()
|
|
445
446
|
}
|
|
@@ -625,7 +626,7 @@ class RNIapModule(
|
|
|
625
626
|
accountIdentifiers.obfuscatedProfileId
|
|
626
627
|
)
|
|
627
628
|
}
|
|
628
|
-
promiseItems.pushMap(item)
|
|
629
|
+
promiseItems.pushMap(item.copy())
|
|
629
630
|
sendEvent(reactContext, "purchase-updated", item)
|
|
630
631
|
}
|
|
631
632
|
DoobooUtils.instance.resolvePromisesForKey(PROMISE_BUY_ITEM, promiseItems)
|
package/ios/RNIapIos.swift
CHANGED
|
@@ -209,7 +209,7 @@ class RNIapIos: RCTEventEmitter, SKRequestDelegate, SKPaymentTransactionObserver
|
|
|
209
209
|
|
|
210
210
|
let payment = SKMutablePayment(product: prod)
|
|
211
211
|
|
|
212
|
-
if applicationUsername
|
|
212
|
+
if let applicationUsername = applicationUsername {
|
|
213
213
|
payment.applicationUsername = applicationUsername
|
|
214
214
|
}
|
|
215
215
|
SKPaymentQueue.default().add(payment)
|
|
@@ -792,7 +792,10 @@ class RNIapIos: RCTEventEmitter, SKRequestDelegate, SKPaymentTransactionObserver
|
|
|
792
792
|
for discount in product.discounts {
|
|
793
793
|
let formatter = NumberFormatter()
|
|
794
794
|
formatter.numberStyle = .currency
|
|
795
|
-
|
|
795
|
+
let priceLocale: Locale? = discount.priceLocale
|
|
796
|
+
if let pLocale = priceLocale {
|
|
797
|
+
formatter.locale = pLocale
|
|
798
|
+
}
|
|
796
799
|
localizedPrice = formatter.string(from: discount.price)
|
|
797
800
|
var numberOfPeriods: String?
|
|
798
801
|
|
package/lib/commonjs/iap.js
CHANGED
|
@@ -263,7 +263,7 @@ const requestPurchase = _ref => {
|
|
|
263
263
|
* @param {ProrationModesAndroid} [prorationModeAndroid] UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY, IMMEDIATE_WITH_TIME_PRORATION, IMMEDIATE_AND_CHARGE_PRORATED_PRICE, IMMEDIATE_WITHOUT_PRORATION, DEFERRED
|
|
264
264
|
* @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.
|
|
265
265
|
* @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.
|
|
266
|
-
* @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every
|
|
266
|
+
* @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every sku must be paired with a corresponding offerToken
|
|
267
267
|
* @returns {Promise<SubscriptionPurchase | null>} Promise resolves to null when using proratioModesAndroid=DEFERRED, and to a SubscriptionPurchase otherwise
|
|
268
268
|
*/
|
|
269
269
|
|
package/lib/commonjs/iap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RNIapIos","RNIapModule","RNIapAmazonModule","NativeModules","isAndroid","Platform","OS","isAmazon","isIos","ANDROID_ITEM_TYPE_SUBSCRIPTION","ANDROID_ITEM_TYPE_IAP","IapError","constructor","code","message","getInstallSourceAndroid","InstallSourceAndroid","GOOGLE_PLAY","AMAZON","androidNativeModule","setAndroidNativeModule","nativeModule","checkNativeAndroidAvailable","Error","IAPErrorCode","E_IAP_NOT_AVAILABLE","getAndroidModule","checkNativeIOSAvailable","getIosModule","getNativeModule","initConnection","endConnection","flushFailedPurchasesCachedAsPendingAndroid","flushFailedPurchasesCachedAsPending","fillProductsAdditionalData","products","user","getUser","currencies","CA","ES","AU","DE","IN","US","JP","GB","IT","BR","FR","currency","userMarketplaceAmazon","forEach","product","getProducts","skus","select","ios","items","getItems","filter","item","includes","productId","type","android","getItemsByType","Promise","resolve","getSubscriptions","subscriptions","getPurchaseHistory","getAvailableItems","getPurchaseHistoryByType","concat","getAvailablePurchases","getAvailableItemsByType","requestPurchase","sku","andDangerouslyFinishTransactionAutomaticallyIOS","obfuscatedAccountIdAndroid","obfuscatedProfileIdAndroid","applicationUsername","isOfferPersonalized","undefined","console","warn","buyProduct","buyItemByType","length","requestSubscription","purchaseTokenAndroid","prorationModeAndroid","subscriptionOffers","reject","map","so","offerToken","requestPurchaseWithQuantityIOS","quantity","buyProductWithQuantityIOS","finishTransaction","purchase","isConsumable","developerPayloadAndroid","transactionId","consumeProduct","purchaseToken","userIdAmazon","isAcknowledgedAndroid","purchaseStateAndroid","PurchaseStateAndroid","PURCHASED","acknowledgePurchase","clearTransactionIOS","clearTransaction","clearProductsIOS","clearProducts","acknowledgePurchaseAndroid","token","developerPayload","deepLinkToSubscriptionsAndroid","Linking","openURL","getPackageName","getPromotedProductIOS","promotedProduct","buyPromotedProductIOS","buyPromotedProduct","fetchJsonOrThrow","url","receiptBody","response","fetch","method","headers","Accept","body","JSON","stringify","ok","Object","assign","statusText","statusCode","status","json","requestAgnosticReceiptValidationIos","ReceiptValidationStatus","TEST_RECEIPT","testResponse","requestPurchaseWithOfferIOS","forUser","withOffer","buyProductWithOffer","validateReceiptIos","isTest","validateReceiptAndroid","packageName","productToken","accessToken","isSub","validateReceiptAmazon","developerSecret","userId","receiptId","useSandbox","sandBoxUrl","purchaseUpdatedListener","listener","emitterSubscription","NativeEventEmitter","addListener","startListening","purchaseErrorListener","promotedProductListener","getPendingPurchasesIOS","getPendingTransactions","getReceiptIOS","forceRefresh","requestReceipt","presentCodeRedemptionSheetIOS","presentCodeRedemptionSheet"],"sources":["iap.ts"],"sourcesContent":["import {\n EmitterSubscription,\n Linking,\n NativeEventEmitter,\n NativeModules,\n Platform,\n} from 'react-native';\n\nimport type * as Amazon from './types/amazon';\nimport type * as Android from './types/android';\nimport type * as Apple from './types/apple';\nimport {ReceiptValidationStatus} from './types/apple';\nimport type {\n InAppPurchase,\n Product,\n ProductCommon,\n ProductPurchase,\n PurchaseError,\n PurchaseResult,\n RequestPurchase,\n RequestSubscription,\n Subscription,\n SubscriptionPurchase,\n} from './types';\nimport {\n IAPErrorCode,\n InstallSourceAndroid,\n PurchaseStateAndroid,\n} from './types';\n\nconst {RNIapIos, RNIapModule, RNIapAmazonModule} = NativeModules;\nconst isAndroid = Platform.OS === 'android';\nconst isAmazon = isAndroid && !!RNIapAmazonModule;\nconst isIos = Platform.OS === 'ios';\nconst ANDROID_ITEM_TYPE_SUBSCRIPTION = 'subs';\nconst ANDROID_ITEM_TYPE_IAP = 'inapp';\n\nexport class IapError implements PurchaseError {\n constructor(public code?: string, public message?: string) {\n this.code = code;\n this.message = message;\n }\n}\n\nexport const getInstallSourceAndroid = (): InstallSourceAndroid => {\n return RNIapModule\n ? InstallSourceAndroid.GOOGLE_PLAY\n : InstallSourceAndroid.AMAZON;\n};\n\nlet androidNativeModule = RNIapModule;\n\nexport const setAndroidNativeModule = (\n nativeModule: typeof RNIapModule,\n): void => {\n androidNativeModule = nativeModule;\n};\n\nconst checkNativeAndroidAvailable = (): void => {\n if (!RNIapModule && !RNIapAmazonModule) {\n throw new Error(IAPErrorCode.E_IAP_NOT_AVAILABLE);\n }\n};\n\nconst getAndroidModule = (): typeof RNIapModule | typeof RNIapAmazonModule => {\n checkNativeAndroidAvailable();\n\n return androidNativeModule\n ? androidNativeModule\n : RNIapModule\n ? RNIapModule\n : RNIapAmazonModule;\n};\n\nconst checkNativeIOSAvailable = (): void => {\n if (!RNIapIos) {\n throw new Error(IAPErrorCode.E_IAP_NOT_AVAILABLE);\n }\n};\n\nconst getIosModule = (): typeof RNIapIos => {\n checkNativeIOSAvailable();\n\n return RNIapIos;\n};\n\nconst getNativeModule = ():\n | typeof RNIapModule\n | typeof RNIapAmazonModule\n | typeof RNIapIos => {\n return isAndroid ? getAndroidModule() : getIosModule();\n};\n\n/**\n * Init module for purchase flow. Required on Android. In ios it will check whether user canMakePayment.\n * @returns {Promise<boolean>}\n */\nexport const initConnection = (): Promise<boolean> =>\n getNativeModule().initConnection();\n\n/**\n * End module for purchase flow.\n * @returns {Promise<void>}\n */\nexport const endConnection = (): Promise<void> =>\n getNativeModule().endConnection();\n\n/**\n * Consume all 'ghost' purchases (that is, pending payment that already failed but is still marked as pending in Play Store cache). Android only.\n * @returns {Promise<boolean>}\n */\nexport const flushFailedPurchasesCachedAsPendingAndroid = (): Promise<\n string[]\n> => getAndroidModule().flushFailedPurchasesCachedAsPending();\n\n/**\n * Fill products with additional data\n * @param {Array<ProductCommon>} products Products\n */\nconst fillProductsAdditionalData = async (\n products: Array<ProductCommon>,\n): Promise<Array<ProductCommon>> => {\n // Amazon\n if (RNIapAmazonModule) {\n // On amazon we must get the user marketplace to detect the currency\n const user = await RNIapAmazonModule.getUser();\n\n const currencies = {\n CA: 'CAD',\n ES: 'EUR',\n AU: 'AUD',\n DE: 'EUR',\n IN: 'INR',\n US: 'USD',\n JP: 'JPY',\n GB: 'GBP',\n IT: 'EUR',\n BR: 'BRL',\n FR: 'EUR',\n };\n\n const currency =\n currencies[user.userMarketplaceAmazon as keyof typeof currencies];\n\n // Add currency to products\n products.forEach((product) => {\n if (currency) {\n product.currency = currency;\n }\n });\n }\n\n return products;\n};\n\n/**\n * Get a list of products (consumable and non-consumable items, but not subscriptions)\n * @param {string[]} skus The item skus\n * @returns {Promise<Product[]>}\n */\nexport const getProducts = (skus: string[]): Promise<Array<Product>> =>\n (\n Platform.select({\n ios: async () => {\n const items = await getIosModule().getItems(skus);\n\n return items.filter(\n (item: Product) =>\n skus.includes(item.productId) && item.type === 'iap',\n );\n },\n android: async () => {\n const products = await getAndroidModule().getItemsByType(\n ANDROID_ITEM_TYPE_IAP,\n skus,\n );\n\n return fillProductsAdditionalData(products);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Get a list of subscriptions\n * @param {string[]} skus The item skus\n * @returns {Promise<Subscription[]>}\n */\nexport const getSubscriptions = (skus: string[]): Promise<Subscription[]> =>\n (\n Platform.select({\n ios: async () => {\n const items = await getIosModule().getItems(skus);\n\n return items.filter(\n (item: Subscription) =>\n skus.includes(item.productId) && item.type === 'subs',\n );\n },\n android: async () => {\n const subscriptions = await getAndroidModule().getItemsByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n skus,\n );\n\n return fillProductsAdditionalData(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Gets an inventory of purchases made by the user regardless of consumption status\n * @returns {Promise<(InAppPurchase | SubscriptionPurchase)[]>}\n */\nexport const getPurchaseHistory = (): Promise<\n (InAppPurchase | SubscriptionPurchase)[]\n> =>\n (\n Platform.select({\n ios: async () => {\n return getIosModule().getAvailableItems();\n },\n android: async () => {\n if (RNIapAmazonModule) {\n return await RNIapAmazonModule.getAvailableItems();\n }\n\n const products = await getAndroidModule().getPurchaseHistoryByType(\n ANDROID_ITEM_TYPE_IAP,\n );\n\n const subscriptions = await getAndroidModule().getPurchaseHistoryByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n );\n\n return products.concat(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Get all purchases made by the user (either non-consumable, or haven't been consumed yet)\n * @returns {Promise<(InAppPurchase | SubscriptionPurchase)[]>}\n */\nexport const getAvailablePurchases = (): Promise<\n (InAppPurchase | SubscriptionPurchase)[]\n> =>\n (\n Platform.select({\n ios: async () => {\n return getIosModule().getAvailableItems();\n },\n android: async () => {\n if (RNIapAmazonModule) {\n return await RNIapAmazonModule.getAvailableItems();\n }\n\n const products = await getAndroidModule().getAvailableItemsByType(\n ANDROID_ITEM_TYPE_IAP,\n );\n\n const subscriptions = await getAndroidModule().getAvailableItemsByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n );\n\n return products.concat(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} sku The product's sku/ID\n * @param {string} [applicationUsername] The purchaser's user ID\n * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.\n * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.\n * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.\n * @param {string[]} [skus] Product Ids to purchase. Note that this is only for Android. iOS only uses a single SKU. If not provided, it'll default to using [sku] for backward-compatibility\n * @param {boolean} [isOfferPersonalized] Defaults to false, Only for Android V5\n * @returns {Promise<InAppPurchase>}\n */\n\nexport const requestPurchase = ({\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n applicationUsername,\n skus, // Android Billing V5\n isOfferPersonalized = undefined, // Android Billing V5\n}: RequestPurchase): Promise<InAppPurchase> =>\n (\n Platform.select({\n ios: async () => {\n if (andDangerouslyFinishTransactionAutomaticallyIOS) {\n console.warn(\n 'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.',\n );\n }\n\n return getIosModule().buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n applicationUsername,\n );\n },\n android: async () => {\n return getAndroidModule().buyItemByType(\n ANDROID_ITEM_TYPE_IAP,\n skus?.length ? skus : [sku],\n null,\n -1,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n undefined,\n isOfferPersonalized ?? false,\n );\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} [sku] The product's sku/ID\n * @param {string} [applicationUsername] The purchaser's user ID\n * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.\n * @param {string} [purchaseTokenAndroid] purchaseToken that the user is upgrading or downgrading from (Android).\n * @param {ProrationModesAndroid} [prorationModeAndroid] UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY, IMMEDIATE_WITH_TIME_PRORATION, IMMEDIATE_AND_CHARGE_PRORATED_PRICE, IMMEDIATE_WITHOUT_PRORATION, DEFERRED\n * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.\n * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.\n * @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every sky must be paired with a corresponding offerToken\n * @returns {Promise<SubscriptionPurchase | null>} Promise resolves to null when using proratioModesAndroid=DEFERRED, and to a SubscriptionPurchase otherwise\n */\nexport const requestSubscription = ({\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n purchaseTokenAndroid,\n prorationModeAndroid = -1,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n subscriptionOffers = undefined, // Android Billing V5\n isOfferPersonalized = undefined, // Android Billing V5\n applicationUsername,\n}: RequestSubscription): Promise<SubscriptionPurchase | null> =>\n (\n Platform.select({\n ios: async () => {\n if (andDangerouslyFinishTransactionAutomaticallyIOS) {\n console.warn(\n 'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.',\n );\n }\n\n return getIosModule().buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n applicationUsername,\n );\n },\n android: async () => {\n if (isAmazon) {\n return RNIapAmazonModule.buyItemByType(sku);\n } else {\n if (!subscriptionOffers?.length) {\n Promise.reject(\n 'subscriptionOffers are required for Google Play Subscriptions',\n );\n return;\n }\n return RNIapModule.buyItemByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n subscriptionOffers?.map((so) => so.sku),\n purchaseTokenAndroid,\n prorationModeAndroid,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n subscriptionOffers?.map((so) => so.offerToken),\n isOfferPersonalized ?? false,\n );\n }\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} sku The product's sku/ID\n * @returns {Promise<void>}\n */\nexport const requestPurchaseWithQuantityIOS = (\n sku: string,\n quantity: number,\n): Promise<InAppPurchase> =>\n getIosModule().buyProductWithQuantityIOS(sku, quantity);\n\n/**\n * Finish Transaction (both platforms)\n * Abstracts Finish Transaction\n * iOS: Tells StoreKit that you have delivered the purchase to the user and StoreKit can now let go of the transaction.\n * Call this after you have persisted the purchased state to your server or local data in your app.\n * `react-native-iap` will continue to deliver the purchase updated events with the successful purchase until you finish the transaction. **Even after the app has relaunched.**\n * Android: it will consume purchase for consumables and acknowledge purchase for non-consumables.\n * @param {object} purchase The purchase that you would like to finish.\n * @param {boolean} isConsumable Checks if purchase is consumable. Has effect on `android`.\n * @param {string} developerPayloadAndroid Android developerPayload.\n * @returns {Promise<string | void> }\n */\nexport const finishTransaction = (\n purchase: InAppPurchase | ProductPurchase,\n isConsumable?: boolean,\n developerPayloadAndroid?: string,\n): Promise<string | void> => {\n return (\n Platform.select({\n ios: async () => {\n return getIosModule().finishTransaction(purchase.transactionId);\n },\n android: async () => {\n if (purchase) {\n if (isConsumable) {\n return getAndroidModule().consumeProduct(\n purchase.purchaseToken,\n developerPayloadAndroid,\n );\n } else if (\n purchase.userIdAmazon ||\n (!purchase.isAcknowledgedAndroid &&\n purchase.purchaseStateAndroid === PurchaseStateAndroid.PURCHASED)\n ) {\n return getAndroidModule().acknowledgePurchase(\n purchase.purchaseToken,\n developerPayloadAndroid,\n );\n } else {\n throw new Error('purchase is not suitable to be purchased');\n }\n } else {\n throw new Error('purchase is not assigned');\n }\n },\n }) || Promise.resolve\n )();\n};\n\n/**\n * Clear Transaction (iOS only)\n * Finish remaining transactions. Related to issue #257 and #801\n * link : https://github.com/dooboolab/react-native-iap/issues/257\n * https://github.com/dooboolab/react-native-iap/issues/801\n * @returns {Promise<void>}\n */\nexport const clearTransactionIOS = (): Promise<void> =>\n getIosModule().clearTransaction();\n\n/**\n * Clear valid Products (iOS only)\n * Remove all products which are validated by Apple server.\n * @returns {void}\n */\nexport const clearProductsIOS = (): Promise<void> =>\n getIosModule().clearProducts();\n\n/**\n * Acknowledge a product (on Android.) No-op on iOS.\n * @param {string} token The product's token (on Android)\n * @returns {Promise<PurchaseResult | void>}\n */\nexport const acknowledgePurchaseAndroid = (\n token: string,\n developerPayload?: string,\n): Promise<PurchaseResult | void> => {\n return getAndroidModule().acknowledgePurchase(token, developerPayload);\n};\n\n/**\n * Deep link to subscriptions screen on Android. No-op on iOS.\n * @param {string} sku The product's SKU (on Android)\n * @returns {Promise<void>}\n */\nexport const deepLinkToSubscriptionsAndroid = async (\n sku: string,\n): Promise<void> => {\n checkNativeAndroidAvailable();\n\n return Linking.openURL(\n `https://play.google.com/store/account/subscriptions?package=${await RNIapModule.getPackageName()}&sku=${sku}`,\n );\n};\n\n/**\n * Should Add Store Payment (iOS only)\n * Indicates the the App Store purchase should continue from the app instead of the App Store.\n * @returns {Promise<Product | null>} promoted product\n */\nexport const getPromotedProductIOS = (): Promise<Product | null> =>\n getIosModule().promotedProduct();\n\n/**\n * Buy the currently selected promoted product (iOS only)\n * Initiates the payment process for a promoted product. Should only be called in response to the `iap-promoted-product` event.\n * @returns {Promise<void>}\n */\nexport const buyPromotedProductIOS = (): Promise<void> =>\n getIosModule().buyPromotedProduct();\n\nconst fetchJsonOrThrow = async (\n url: string,\n receiptBody: Record<string, unknown>,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(receiptBody),\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\nconst requestAgnosticReceiptValidationIos = async (\n receiptBody: Record<string, unknown>,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n const response = await fetchJsonOrThrow(\n 'https://buy.itunes.apple.com/verifyReceipt',\n receiptBody,\n );\n\n // Best practice is to check for test receipt and check sandbox instead\n // https://developer.apple.com/documentation/appstorereceipts/verifyreceipt\n if (response && response.status === ReceiptValidationStatus.TEST_RECEIPT) {\n const testResponse = await fetchJsonOrThrow(\n 'https://sandbox.itunes.apple.com/verifyReceipt',\n receiptBody,\n );\n\n return testResponse;\n }\n\n return response;\n};\n\n/**\n * Buy products or subscriptions with offers (iOS only)\n *\n * Runs the payment process with some info you must fetch\n * from your server.\n * @param {string} sku The product identifier\n * @param {string} forUser An user identifier on you system\n * @param {Apple.PaymentDiscount} withOffer The offer information\n * @param {string} withOffer.identifier The offer identifier\n * @param {string} withOffer.keyIdentifier Key identifier that it uses to generate the signature\n * @param {string} withOffer.nonce An UUID returned from the server\n * @param {string} withOffer.signature The actual signature returned from the server\n * @param {number} withOffer.timestamp The timestamp of the signature\n * @returns {Promise<void>}\n */\nexport const requestPurchaseWithOfferIOS = (\n sku: string,\n forUser: string,\n withOffer: Apple.PaymentDiscount,\n): Promise<void> => getIosModule().buyProductWithOffer(sku, forUser, withOffer);\n\n/**\n * Validate receipt for iOS.\n * @param {object} receiptBody the receipt body to send to apple server.\n * @param {boolean} isTest whether this is in test environment which is sandbox.\n * @returns {Promise<Apple.ReceiptValidationResponse | false>}\n */\nexport const validateReceiptIos = async (\n receiptBody: Record<string, unknown>,\n isTest?: boolean,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n if (isTest == null) {\n return await requestAgnosticReceiptValidationIos(receiptBody);\n }\n\n const url = isTest\n ? 'https://sandbox.itunes.apple.com/verifyReceipt'\n : 'https://buy.itunes.apple.com/verifyReceipt';\n\n const response = await fetchJsonOrThrow(url, receiptBody);\n\n return response;\n};\n\n/**\n * Validate receipt for Android. NOTE: This method is here for debugging purposes only. Including\n * your access token in the binary you ship to users is potentially dangerous.\n * Use server side validation instead for your production builds\n * @param {string} packageName package name of your app.\n * @param {string} productId product id for your in app product.\n * @param {string} productToken token for your purchase.\n * @param {string} accessToken accessToken from googleApis.\n * @param {boolean} isSub whether this is subscription or inapp. `true` for subscription.\n * @returns {Promise<object>}\n */\nexport const validateReceiptAndroid = async (\n packageName: string,\n productId: string,\n productToken: string,\n accessToken: string,\n isSub?: boolean,\n): Promise<Android.ReceiptType> => {\n const type = isSub ? 'subscriptions' : 'products';\n\n const url =\n 'https://androidpublisher.googleapis.com/androidpublisher/v3/applications' +\n `/${packageName}/purchases/${type}/${productId}` +\n `/tokens/${productToken}?access_token=${accessToken}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\n/**\n * Validate receipt for Amazon. NOTE: This method is here for debugging purposes only. Including\n * your developer secret in the binary you ship to users is potentially dangerous.\n * Use server side validation instead for your production builds\n * @param {string} developerSecret: from the Amazon developer console.\n * @param {string} userId who purchased the item.\n * @param {string} receiptId long obfuscated string returned when purchasing the item\n * @param {boolean} useSandbox Defaults to true, use sandbox environment or production.\n * @returns {Promise<object>}\n */\nexport const validateReceiptAmazon = async (\n developerSecret: string,\n userId: string,\n receiptId: string,\n useSandbox: boolean = true,\n): Promise<Amazon.ReceiptType> => {\n const sandBoxUrl = useSandbox ? 'sandbox/' : '';\n const url = `https://appstore-sdk.amazon.com/${sandBoxUrl}version/1.0/verifyReceiptId/developer/${developerSecret}/user/${userId}/receiptId/${receiptId}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\n/**\n * Add IAP purchase event\n * @returns {callback(e: InAppPurchase | ProductPurchase)}\n */\nexport const purchaseUpdatedListener = (\n listener: (event: InAppPurchase | SubscriptionPurchase) => void,\n): EmitterSubscription => {\n const emitterSubscription = new NativeEventEmitter(\n getNativeModule(),\n ).addListener('purchase-updated', listener);\n\n if (isAndroid) {\n getAndroidModule().startListening();\n }\n\n return emitterSubscription;\n};\n\n/**\n * Add IAP purchase error event\n * @returns {callback(e: PurchaseError)}\n */\nexport const purchaseErrorListener = (\n listener: (errorEvent: PurchaseError) => void,\n): EmitterSubscription =>\n new NativeEventEmitter(getNativeModule()).addListener(\n 'purchase-error',\n listener,\n );\n\n/**\n * Add IAP promoted subscription event\n * Only available on iOS\n */\nexport const promotedProductListener = (\n listener: (productId?: string) => void,\n): EmitterSubscription | null => {\n if (isIos) {\n return new NativeEventEmitter(getIosModule()).addListener(\n 'iap-promoted-product',\n listener,\n );\n }\n return null;\n};\n\n/**\n * Get the current receipt base64 encoded in IOS.\n * @param {forceRefresh?:boolean}\n * @returns {Promise<ProductPurchase[]>}\n */\nexport const getPendingPurchasesIOS = async (): Promise<ProductPurchase[]> =>\n getIosModule().getPendingTransactions();\n\n/**\n * Get the current receipt base64 encoded in IOS.\n * @param {forceRefresh?:boolean}\n * @returns {Promise<string>}\n */\nexport const getReceiptIOS = async (forceRefresh?: boolean): Promise<string> =>\n getIosModule().requestReceipt(forceRefresh ?? false);\n\n/**\n * Launches a modal to register the redeem offer code in IOS.\n * @returns {Promise<null>}\n */\nexport const presentCodeRedemptionSheetIOS = async (): Promise<null> =>\n getIosModule().presentCodeRedemptionSheet();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["RNIapIos","RNIapModule","RNIapAmazonModule","NativeModules","isAndroid","Platform","OS","isAmazon","isIos","ANDROID_ITEM_TYPE_SUBSCRIPTION","ANDROID_ITEM_TYPE_IAP","IapError","constructor","code","message","getInstallSourceAndroid","InstallSourceAndroid","GOOGLE_PLAY","AMAZON","androidNativeModule","setAndroidNativeModule","nativeModule","checkNativeAndroidAvailable","Error","IAPErrorCode","E_IAP_NOT_AVAILABLE","getAndroidModule","checkNativeIOSAvailable","getIosModule","getNativeModule","initConnection","endConnection","flushFailedPurchasesCachedAsPendingAndroid","flushFailedPurchasesCachedAsPending","fillProductsAdditionalData","products","user","getUser","currencies","CA","ES","AU","DE","IN","US","JP","GB","IT","BR","FR","currency","userMarketplaceAmazon","forEach","product","getProducts","skus","select","ios","items","getItems","filter","item","includes","productId","type","android","getItemsByType","Promise","resolve","getSubscriptions","subscriptions","getPurchaseHistory","getAvailableItems","getPurchaseHistoryByType","concat","getAvailablePurchases","getAvailableItemsByType","requestPurchase","sku","andDangerouslyFinishTransactionAutomaticallyIOS","obfuscatedAccountIdAndroid","obfuscatedProfileIdAndroid","applicationUsername","isOfferPersonalized","undefined","console","warn","buyProduct","buyItemByType","length","requestSubscription","purchaseTokenAndroid","prorationModeAndroid","subscriptionOffers","reject","map","so","offerToken","requestPurchaseWithQuantityIOS","quantity","buyProductWithQuantityIOS","finishTransaction","purchase","isConsumable","developerPayloadAndroid","transactionId","consumeProduct","purchaseToken","userIdAmazon","isAcknowledgedAndroid","purchaseStateAndroid","PurchaseStateAndroid","PURCHASED","acknowledgePurchase","clearTransactionIOS","clearTransaction","clearProductsIOS","clearProducts","acknowledgePurchaseAndroid","token","developerPayload","deepLinkToSubscriptionsAndroid","Linking","openURL","getPackageName","getPromotedProductIOS","promotedProduct","buyPromotedProductIOS","buyPromotedProduct","fetchJsonOrThrow","url","receiptBody","response","fetch","method","headers","Accept","body","JSON","stringify","ok","Object","assign","statusText","statusCode","status","json","requestAgnosticReceiptValidationIos","ReceiptValidationStatus","TEST_RECEIPT","testResponse","requestPurchaseWithOfferIOS","forUser","withOffer","buyProductWithOffer","validateReceiptIos","isTest","validateReceiptAndroid","packageName","productToken","accessToken","isSub","validateReceiptAmazon","developerSecret","userId","receiptId","useSandbox","sandBoxUrl","purchaseUpdatedListener","listener","emitterSubscription","NativeEventEmitter","addListener","startListening","purchaseErrorListener","promotedProductListener","getPendingPurchasesIOS","getPendingTransactions","getReceiptIOS","forceRefresh","requestReceipt","presentCodeRedemptionSheetIOS","presentCodeRedemptionSheet"],"sources":["iap.ts"],"sourcesContent":["import {\n EmitterSubscription,\n Linking,\n NativeEventEmitter,\n NativeModules,\n Platform,\n} from 'react-native';\n\nimport type * as Amazon from './types/amazon';\nimport type * as Android from './types/android';\nimport type * as Apple from './types/apple';\nimport {ReceiptValidationStatus} from './types/apple';\nimport type {\n InAppPurchase,\n Product,\n ProductCommon,\n ProductPurchase,\n PurchaseError,\n PurchaseResult,\n RequestPurchase,\n RequestSubscription,\n Subscription,\n SubscriptionPurchase,\n} from './types';\nimport {\n IAPErrorCode,\n InstallSourceAndroid,\n PurchaseStateAndroid,\n} from './types';\n\nconst {RNIapIos, RNIapModule, RNIapAmazonModule} = NativeModules;\nconst isAndroid = Platform.OS === 'android';\nconst isAmazon = isAndroid && !!RNIapAmazonModule;\nconst isIos = Platform.OS === 'ios';\nconst ANDROID_ITEM_TYPE_SUBSCRIPTION = 'subs';\nconst ANDROID_ITEM_TYPE_IAP = 'inapp';\n\nexport class IapError implements PurchaseError {\n constructor(public code?: string, public message?: string) {\n this.code = code;\n this.message = message;\n }\n}\n\nexport const getInstallSourceAndroid = (): InstallSourceAndroid => {\n return RNIapModule\n ? InstallSourceAndroid.GOOGLE_PLAY\n : InstallSourceAndroid.AMAZON;\n};\n\nlet androidNativeModule = RNIapModule;\n\nexport const setAndroidNativeModule = (\n nativeModule: typeof RNIapModule,\n): void => {\n androidNativeModule = nativeModule;\n};\n\nconst checkNativeAndroidAvailable = (): void => {\n if (!RNIapModule && !RNIapAmazonModule) {\n throw new Error(IAPErrorCode.E_IAP_NOT_AVAILABLE);\n }\n};\n\nconst getAndroidModule = (): typeof RNIapModule | typeof RNIapAmazonModule => {\n checkNativeAndroidAvailable();\n\n return androidNativeModule\n ? androidNativeModule\n : RNIapModule\n ? RNIapModule\n : RNIapAmazonModule;\n};\n\nconst checkNativeIOSAvailable = (): void => {\n if (!RNIapIos) {\n throw new Error(IAPErrorCode.E_IAP_NOT_AVAILABLE);\n }\n};\n\nconst getIosModule = (): typeof RNIapIos => {\n checkNativeIOSAvailable();\n\n return RNIapIos;\n};\n\nconst getNativeModule = ():\n | typeof RNIapModule\n | typeof RNIapAmazonModule\n | typeof RNIapIos => {\n return isAndroid ? getAndroidModule() : getIosModule();\n};\n\n/**\n * Init module for purchase flow. Required on Android. In ios it will check whether user canMakePayment.\n * @returns {Promise<boolean>}\n */\nexport const initConnection = (): Promise<boolean> =>\n getNativeModule().initConnection();\n\n/**\n * End module for purchase flow.\n * @returns {Promise<void>}\n */\nexport const endConnection = (): Promise<void> =>\n getNativeModule().endConnection();\n\n/**\n * Consume all 'ghost' purchases (that is, pending payment that already failed but is still marked as pending in Play Store cache). Android only.\n * @returns {Promise<boolean>}\n */\nexport const flushFailedPurchasesCachedAsPendingAndroid = (): Promise<\n string[]\n> => getAndroidModule().flushFailedPurchasesCachedAsPending();\n\n/**\n * Fill products with additional data\n * @param {Array<ProductCommon>} products Products\n */\nconst fillProductsAdditionalData = async (\n products: Array<ProductCommon>,\n): Promise<Array<ProductCommon>> => {\n // Amazon\n if (RNIapAmazonModule) {\n // On amazon we must get the user marketplace to detect the currency\n const user = await RNIapAmazonModule.getUser();\n\n const currencies = {\n CA: 'CAD',\n ES: 'EUR',\n AU: 'AUD',\n DE: 'EUR',\n IN: 'INR',\n US: 'USD',\n JP: 'JPY',\n GB: 'GBP',\n IT: 'EUR',\n BR: 'BRL',\n FR: 'EUR',\n };\n\n const currency =\n currencies[user.userMarketplaceAmazon as keyof typeof currencies];\n\n // Add currency to products\n products.forEach((product) => {\n if (currency) {\n product.currency = currency;\n }\n });\n }\n\n return products;\n};\n\n/**\n * Get a list of products (consumable and non-consumable items, but not subscriptions)\n * @param {string[]} skus The item skus\n * @returns {Promise<Product[]>}\n */\nexport const getProducts = (skus: string[]): Promise<Array<Product>> =>\n (\n Platform.select({\n ios: async () => {\n const items = await getIosModule().getItems(skus);\n\n return items.filter(\n (item: Product) =>\n skus.includes(item.productId) && item.type === 'iap',\n );\n },\n android: async () => {\n const products = await getAndroidModule().getItemsByType(\n ANDROID_ITEM_TYPE_IAP,\n skus,\n );\n\n return fillProductsAdditionalData(products);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Get a list of subscriptions\n * @param {string[]} skus The item skus\n * @returns {Promise<Subscription[]>}\n */\nexport const getSubscriptions = (skus: string[]): Promise<Subscription[]> =>\n (\n Platform.select({\n ios: async () => {\n const items = await getIosModule().getItems(skus);\n\n return items.filter(\n (item: Subscription) =>\n skus.includes(item.productId) && item.type === 'subs',\n );\n },\n android: async () => {\n const subscriptions = await getAndroidModule().getItemsByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n skus,\n );\n\n return fillProductsAdditionalData(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Gets an inventory of purchases made by the user regardless of consumption status\n * @returns {Promise<(InAppPurchase | SubscriptionPurchase)[]>}\n */\nexport const getPurchaseHistory = (): Promise<\n (InAppPurchase | SubscriptionPurchase)[]\n> =>\n (\n Platform.select({\n ios: async () => {\n return getIosModule().getAvailableItems();\n },\n android: async () => {\n if (RNIapAmazonModule) {\n return await RNIapAmazonModule.getAvailableItems();\n }\n\n const products = await getAndroidModule().getPurchaseHistoryByType(\n ANDROID_ITEM_TYPE_IAP,\n );\n\n const subscriptions = await getAndroidModule().getPurchaseHistoryByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n );\n\n return products.concat(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Get all purchases made by the user (either non-consumable, or haven't been consumed yet)\n * @returns {Promise<(InAppPurchase | SubscriptionPurchase)[]>}\n */\nexport const getAvailablePurchases = (): Promise<\n (InAppPurchase | SubscriptionPurchase)[]\n> =>\n (\n Platform.select({\n ios: async () => {\n return getIosModule().getAvailableItems();\n },\n android: async () => {\n if (RNIapAmazonModule) {\n return await RNIapAmazonModule.getAvailableItems();\n }\n\n const products = await getAndroidModule().getAvailableItemsByType(\n ANDROID_ITEM_TYPE_IAP,\n );\n\n const subscriptions = await getAndroidModule().getAvailableItemsByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n );\n\n return products.concat(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} sku The product's sku/ID\n * @param {string} [applicationUsername] The purchaser's user ID\n * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.\n * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.\n * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.\n * @param {string[]} [skus] Product Ids to purchase. Note that this is only for Android. iOS only uses a single SKU. If not provided, it'll default to using [sku] for backward-compatibility\n * @param {boolean} [isOfferPersonalized] Defaults to false, Only for Android V5\n * @returns {Promise<InAppPurchase>}\n */\n\nexport const requestPurchase = ({\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n applicationUsername,\n skus, // Android Billing V5\n isOfferPersonalized = undefined, // Android Billing V5\n}: RequestPurchase): Promise<InAppPurchase> =>\n (\n Platform.select({\n ios: async () => {\n if (andDangerouslyFinishTransactionAutomaticallyIOS) {\n console.warn(\n 'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.',\n );\n }\n\n return getIosModule().buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n applicationUsername,\n );\n },\n android: async () => {\n return getAndroidModule().buyItemByType(\n ANDROID_ITEM_TYPE_IAP,\n skus?.length ? skus : [sku],\n null,\n -1,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n undefined,\n isOfferPersonalized ?? false,\n );\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} [sku] The product's sku/ID\n * @param {string} [applicationUsername] The purchaser's user ID\n * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.\n * @param {string} [purchaseTokenAndroid] purchaseToken that the user is upgrading or downgrading from (Android).\n * @param {ProrationModesAndroid} [prorationModeAndroid] UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY, IMMEDIATE_WITH_TIME_PRORATION, IMMEDIATE_AND_CHARGE_PRORATED_PRICE, IMMEDIATE_WITHOUT_PRORATION, DEFERRED\n * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.\n * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.\n * @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every sku must be paired with a corresponding offerToken\n * @returns {Promise<SubscriptionPurchase | null>} Promise resolves to null when using proratioModesAndroid=DEFERRED, and to a SubscriptionPurchase otherwise\n */\nexport const requestSubscription = ({\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n purchaseTokenAndroid,\n prorationModeAndroid = -1,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n subscriptionOffers = undefined, // Android Billing V5\n isOfferPersonalized = undefined, // Android Billing V5\n applicationUsername,\n}: RequestSubscription): Promise<SubscriptionPurchase | null> =>\n (\n Platform.select({\n ios: async () => {\n if (andDangerouslyFinishTransactionAutomaticallyIOS) {\n console.warn(\n 'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.',\n );\n }\n\n return getIosModule().buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n applicationUsername,\n );\n },\n android: async () => {\n if (isAmazon) {\n return RNIapAmazonModule.buyItemByType(sku);\n } else {\n if (!subscriptionOffers?.length) {\n Promise.reject(\n 'subscriptionOffers are required for Google Play Subscriptions',\n );\n return;\n }\n return RNIapModule.buyItemByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n subscriptionOffers?.map((so) => so.sku),\n purchaseTokenAndroid,\n prorationModeAndroid,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n subscriptionOffers?.map((so) => so.offerToken),\n isOfferPersonalized ?? false,\n );\n }\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} sku The product's sku/ID\n * @returns {Promise<void>}\n */\nexport const requestPurchaseWithQuantityIOS = (\n sku: string,\n quantity: number,\n): Promise<InAppPurchase> =>\n getIosModule().buyProductWithQuantityIOS(sku, quantity);\n\n/**\n * Finish Transaction (both platforms)\n * Abstracts Finish Transaction\n * iOS: Tells StoreKit that you have delivered the purchase to the user and StoreKit can now let go of the transaction.\n * Call this after you have persisted the purchased state to your server or local data in your app.\n * `react-native-iap` will continue to deliver the purchase updated events with the successful purchase until you finish the transaction. **Even after the app has relaunched.**\n * Android: it will consume purchase for consumables and acknowledge purchase for non-consumables.\n * @param {object} purchase The purchase that you would like to finish.\n * @param {boolean} isConsumable Checks if purchase is consumable. Has effect on `android`.\n * @param {string} developerPayloadAndroid Android developerPayload.\n * @returns {Promise<string | void> }\n */\nexport const finishTransaction = (\n purchase: InAppPurchase | ProductPurchase,\n isConsumable?: boolean,\n developerPayloadAndroid?: string,\n): Promise<string | void> => {\n return (\n Platform.select({\n ios: async () => {\n return getIosModule().finishTransaction(purchase.transactionId);\n },\n android: async () => {\n if (purchase) {\n if (isConsumable) {\n return getAndroidModule().consumeProduct(\n purchase.purchaseToken,\n developerPayloadAndroid,\n );\n } else if (\n purchase.userIdAmazon ||\n (!purchase.isAcknowledgedAndroid &&\n purchase.purchaseStateAndroid === PurchaseStateAndroid.PURCHASED)\n ) {\n return getAndroidModule().acknowledgePurchase(\n purchase.purchaseToken,\n developerPayloadAndroid,\n );\n } else {\n throw new Error('purchase is not suitable to be purchased');\n }\n } else {\n throw new Error('purchase is not assigned');\n }\n },\n }) || Promise.resolve\n )();\n};\n\n/**\n * Clear Transaction (iOS only)\n * Finish remaining transactions. Related to issue #257 and #801\n * link : https://github.com/dooboolab/react-native-iap/issues/257\n * https://github.com/dooboolab/react-native-iap/issues/801\n * @returns {Promise<void>}\n */\nexport const clearTransactionIOS = (): Promise<void> =>\n getIosModule().clearTransaction();\n\n/**\n * Clear valid Products (iOS only)\n * Remove all products which are validated by Apple server.\n * @returns {void}\n */\nexport const clearProductsIOS = (): Promise<void> =>\n getIosModule().clearProducts();\n\n/**\n * Acknowledge a product (on Android.) No-op on iOS.\n * @param {string} token The product's token (on Android)\n * @returns {Promise<PurchaseResult | void>}\n */\nexport const acknowledgePurchaseAndroid = (\n token: string,\n developerPayload?: string,\n): Promise<PurchaseResult | void> => {\n return getAndroidModule().acknowledgePurchase(token, developerPayload);\n};\n\n/**\n * Deep link to subscriptions screen on Android. No-op on iOS.\n * @param {string} sku The product's SKU (on Android)\n * @returns {Promise<void>}\n */\nexport const deepLinkToSubscriptionsAndroid = async (\n sku: string,\n): Promise<void> => {\n checkNativeAndroidAvailable();\n\n return Linking.openURL(\n `https://play.google.com/store/account/subscriptions?package=${await RNIapModule.getPackageName()}&sku=${sku}`,\n );\n};\n\n/**\n * Should Add Store Payment (iOS only)\n * Indicates the the App Store purchase should continue from the app instead of the App Store.\n * @returns {Promise<Product | null>} promoted product\n */\nexport const getPromotedProductIOS = (): Promise<Product | null> =>\n getIosModule().promotedProduct();\n\n/**\n * Buy the currently selected promoted product (iOS only)\n * Initiates the payment process for a promoted product. Should only be called in response to the `iap-promoted-product` event.\n * @returns {Promise<void>}\n */\nexport const buyPromotedProductIOS = (): Promise<void> =>\n getIosModule().buyPromotedProduct();\n\nconst fetchJsonOrThrow = async (\n url: string,\n receiptBody: Record<string, unknown>,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(receiptBody),\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\nconst requestAgnosticReceiptValidationIos = async (\n receiptBody: Record<string, unknown>,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n const response = await fetchJsonOrThrow(\n 'https://buy.itunes.apple.com/verifyReceipt',\n receiptBody,\n );\n\n // Best practice is to check for test receipt and check sandbox instead\n // https://developer.apple.com/documentation/appstorereceipts/verifyreceipt\n if (response && response.status === ReceiptValidationStatus.TEST_RECEIPT) {\n const testResponse = await fetchJsonOrThrow(\n 'https://sandbox.itunes.apple.com/verifyReceipt',\n receiptBody,\n );\n\n return testResponse;\n }\n\n return response;\n};\n\n/**\n * Buy products or subscriptions with offers (iOS only)\n *\n * Runs the payment process with some info you must fetch\n * from your server.\n * @param {string} sku The product identifier\n * @param {string} forUser An user identifier on you system\n * @param {Apple.PaymentDiscount} withOffer The offer information\n * @param {string} withOffer.identifier The offer identifier\n * @param {string} withOffer.keyIdentifier Key identifier that it uses to generate the signature\n * @param {string} withOffer.nonce An UUID returned from the server\n * @param {string} withOffer.signature The actual signature returned from the server\n * @param {number} withOffer.timestamp The timestamp of the signature\n * @returns {Promise<void>}\n */\nexport const requestPurchaseWithOfferIOS = (\n sku: string,\n forUser: string,\n withOffer: Apple.PaymentDiscount,\n): Promise<void> => getIosModule().buyProductWithOffer(sku, forUser, withOffer);\n\n/**\n * Validate receipt for iOS.\n * @param {object} receiptBody the receipt body to send to apple server.\n * @param {boolean} isTest whether this is in test environment which is sandbox.\n * @returns {Promise<Apple.ReceiptValidationResponse | false>}\n */\nexport const validateReceiptIos = async (\n receiptBody: Record<string, unknown>,\n isTest?: boolean,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n if (isTest == null) {\n return await requestAgnosticReceiptValidationIos(receiptBody);\n }\n\n const url = isTest\n ? 'https://sandbox.itunes.apple.com/verifyReceipt'\n : 'https://buy.itunes.apple.com/verifyReceipt';\n\n const response = await fetchJsonOrThrow(url, receiptBody);\n\n return response;\n};\n\n/**\n * Validate receipt for Android. NOTE: This method is here for debugging purposes only. Including\n * your access token in the binary you ship to users is potentially dangerous.\n * Use server side validation instead for your production builds\n * @param {string} packageName package name of your app.\n * @param {string} productId product id for your in app product.\n * @param {string} productToken token for your purchase.\n * @param {string} accessToken accessToken from googleApis.\n * @param {boolean} isSub whether this is subscription or inapp. `true` for subscription.\n * @returns {Promise<object>}\n */\nexport const validateReceiptAndroid = async (\n packageName: string,\n productId: string,\n productToken: string,\n accessToken: string,\n isSub?: boolean,\n): Promise<Android.ReceiptType> => {\n const type = isSub ? 'subscriptions' : 'products';\n\n const url =\n 'https://androidpublisher.googleapis.com/androidpublisher/v3/applications' +\n `/${packageName}/purchases/${type}/${productId}` +\n `/tokens/${productToken}?access_token=${accessToken}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\n/**\n * Validate receipt for Amazon. NOTE: This method is here for debugging purposes only. Including\n * your developer secret in the binary you ship to users is potentially dangerous.\n * Use server side validation instead for your production builds\n * @param {string} developerSecret: from the Amazon developer console.\n * @param {string} userId who purchased the item.\n * @param {string} receiptId long obfuscated string returned when purchasing the item\n * @param {boolean} useSandbox Defaults to true, use sandbox environment or production.\n * @returns {Promise<object>}\n */\nexport const validateReceiptAmazon = async (\n developerSecret: string,\n userId: string,\n receiptId: string,\n useSandbox: boolean = true,\n): Promise<Amazon.ReceiptType> => {\n const sandBoxUrl = useSandbox ? 'sandbox/' : '';\n const url = `https://appstore-sdk.amazon.com/${sandBoxUrl}version/1.0/verifyReceiptId/developer/${developerSecret}/user/${userId}/receiptId/${receiptId}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\n/**\n * Add IAP purchase event\n * @returns {callback(e: InAppPurchase | ProductPurchase)}\n */\nexport const purchaseUpdatedListener = (\n listener: (event: InAppPurchase | SubscriptionPurchase) => void,\n): EmitterSubscription => {\n const emitterSubscription = new NativeEventEmitter(\n getNativeModule(),\n ).addListener('purchase-updated', listener);\n\n if (isAndroid) {\n getAndroidModule().startListening();\n }\n\n return emitterSubscription;\n};\n\n/**\n * Add IAP purchase error event\n * @returns {callback(e: PurchaseError)}\n */\nexport const purchaseErrorListener = (\n listener: (errorEvent: PurchaseError) => void,\n): EmitterSubscription =>\n new NativeEventEmitter(getNativeModule()).addListener(\n 'purchase-error',\n listener,\n );\n\n/**\n * Add IAP promoted subscription event\n * Only available on iOS\n */\nexport const promotedProductListener = (\n listener: (productId?: string) => void,\n): EmitterSubscription | null => {\n if (isIos) {\n return new NativeEventEmitter(getIosModule()).addListener(\n 'iap-promoted-product',\n listener,\n );\n }\n return null;\n};\n\n/**\n * Get the current receipt base64 encoded in IOS.\n * @param {forceRefresh?:boolean}\n * @returns {Promise<ProductPurchase[]>}\n */\nexport const getPendingPurchasesIOS = async (): Promise<ProductPurchase[]> =>\n getIosModule().getPendingTransactions();\n\n/**\n * Get the current receipt base64 encoded in IOS.\n * @param {forceRefresh?:boolean}\n * @returns {Promise<string>}\n */\nexport const getReceiptIOS = async (forceRefresh?: boolean): Promise<string> =>\n getIosModule().requestReceipt(forceRefresh ?? false);\n\n/**\n * Launches a modal to register the redeem offer code in IOS.\n * @returns {Promise<null>}\n */\nexport const presentCodeRedemptionSheetIOS = async (): Promise<null> =>\n getIosModule().presentCodeRedemptionSheet();\n"],"mappings":"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"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -8,6 +8,18 @@ exports.default = void 0;
|
|
|
8
8
|
|
|
9
9
|
var iap = _interopRequireWildcard(require("./iap"));
|
|
10
10
|
|
|
11
|
+
Object.keys(iap).forEach(function (key) {
|
|
12
|
+
if (key === "default" || key === "__esModule") return;
|
|
13
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
14
|
+
if (key in exports && exports[key] === iap[key]) return;
|
|
15
|
+
Object.defineProperty(exports, key, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () {
|
|
18
|
+
return iap[key];
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
11
23
|
var _types = require("./types");
|
|
12
24
|
|
|
13
25
|
Object.keys(_types).forEach(function (key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["iap"],"sources":["index.ts"],"sourcesContent":["import * as iap from './iap';\n\nexport * from './types';\nexport * from './hooks/useIAP';\nexport * from './hooks/withIAPContext';\n\nexport default iap;\n"],"mappings":";;;;;;;;AAAA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;;;;;eAEeA,G"}
|
|
1
|
+
{"version":3,"names":["iap"],"sources":["index.ts"],"sourcesContent":["import * as iap from './iap';\n\nexport * from './iap';\nexport * from './types';\nexport * from './hooks/useIAP';\nexport * from './hooks/withIAPContext';\n\nexport default iap;\n"],"mappings":";;;;;;;;AAAA;;AAEA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;;;;;eAEeA,G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["IAPErrorCode","ProrationModesAndroid","PurchaseStateAndroid","PROMOTED_PRODUCT","InstallSourceAndroid"],"sources":["index.ts"],"sourcesContent":["export type Sku = string;\n\nexport enum IAPErrorCode {\n E_IAP_NOT_AVAILABLE = 'E_IAP_NOT_AVAILABLE',\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}\n\nexport enum ProrationModesAndroid {\n IMMEDIATE_WITH_TIME_PRORATION = 1,\n IMMEDIATE_AND_CHARGE_PRORATED_PRICE = 2,\n IMMEDIATE_WITHOUT_PRORATION = 3,\n DEFERRED = 4,\n UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY = 0,\n}\n\nexport enum PurchaseStateAndroid {\n UNSPECIFIED_STATE = 0,\n PURCHASED = 1,\n PENDING = 2,\n}\n\nexport const PROMOTED_PRODUCT = 'iap-promoted-product';\n\nexport enum InstallSourceAndroid {\n NOT_SET = 0,\n GOOGLE_PLAY = 1,\n AMAZON = 2,\n}\n\nexport interface ProductCommon {\n type: 'subs' | 'sub' | 'inapp' | 'iap';\n productId: string;\n productIds?: string[];\n title: string;\n description: string;\n price: string;\n currency: string;\n localizedPrice: string;\n countryCode?: string;\n}\n\nexport interface ProductPurchase {\n productId: string;\n transactionId?: string;\n transactionDate: number;\n transactionReceipt: string;\n purchaseToken?: string;\n //iOS\n quantityIOS?: number;\n originalTransactionDateIOS?: string;\n originalTransactionIdentifierIOS?: string;\n //Android\n productIds?: string[];\n dataAndroid?: string;\n signatureAndroid?: string;\n autoRenewingAndroid?: boolean;\n purchaseStateAndroid?: PurchaseStateAndroid;\n isAcknowledgedAndroid?: boolean;\n packageNameAndroid?: string;\n developerPayloadAndroid?: string;\n obfuscatedAccountIdAndroid?: string;\n obfuscatedProfileIdAndroid?: string;\n //Amazon\n userIdAmazon?: string;\n userMarketplaceAmazon?: string;\n userJsonAmazon?: string;\n isCanceledAmazon?: boolean;\n}\n\nexport interface PurchaseResult {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n}\n\nexport interface PurchaseError {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n productId?: string;\n}\n\nexport type InAppPurchase = ProductPurchase;\n\nexport interface SubscriptionPurchase extends ProductPurchase {\n autoRenewingAndroid?: boolean;\n originalTransactionDateIOS?: string;\n originalTransactionIdentifierIOS?: string;\n}\n\nexport type Purchase = InAppPurchase | SubscriptionPurchase;\n\nexport interface Discount {\n identifier: string;\n type: string;\n numberOfPeriods: string;\n price: string;\n localizedPrice: string;\n paymentMode: '' | 'FREETRIAL' | 'PAYASYOUGO' | 'PAYUPFRONT';\n subscriptionPeriod: string;\n}\n\nexport interface Product extends ProductCommon {\n type: 'inapp' | 'iap';\n}\n\n//Android V5\nexport interface SubscriptionAndroid extends ProductCommon {\n type: 'subs';\n\n productType?: string;\n name?: string;\n
|
|
1
|
+
{"version":3,"names":["IAPErrorCode","ProrationModesAndroid","PurchaseStateAndroid","PROMOTED_PRODUCT","InstallSourceAndroid"],"sources":["index.ts"],"sourcesContent":["export type Sku = string;\n\nexport enum IAPErrorCode {\n E_IAP_NOT_AVAILABLE = 'E_IAP_NOT_AVAILABLE',\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}\n\nexport enum ProrationModesAndroid {\n IMMEDIATE_WITH_TIME_PRORATION = 1,\n IMMEDIATE_AND_CHARGE_PRORATED_PRICE = 2,\n IMMEDIATE_WITHOUT_PRORATION = 3,\n DEFERRED = 4,\n UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY = 0,\n}\n\nexport enum PurchaseStateAndroid {\n UNSPECIFIED_STATE = 0,\n PURCHASED = 1,\n PENDING = 2,\n}\n\nexport const PROMOTED_PRODUCT = 'iap-promoted-product';\n\nexport enum InstallSourceAndroid {\n NOT_SET = 0,\n GOOGLE_PLAY = 1,\n AMAZON = 2,\n}\n\nexport interface ProductCommon {\n type: 'subs' | 'sub' | 'inapp' | 'iap';\n productId: string;\n productIds?: string[];\n title: string;\n description: string;\n price: string;\n currency: string;\n localizedPrice: string;\n countryCode?: string;\n}\n\nexport interface ProductPurchase {\n productId: string;\n transactionId?: string;\n transactionDate: number;\n transactionReceipt: string;\n purchaseToken?: string;\n //iOS\n quantityIOS?: number;\n originalTransactionDateIOS?: string;\n originalTransactionIdentifierIOS?: string;\n //Android\n productIds?: string[];\n dataAndroid?: string;\n signatureAndroid?: string;\n autoRenewingAndroid?: boolean;\n purchaseStateAndroid?: PurchaseStateAndroid;\n isAcknowledgedAndroid?: boolean;\n packageNameAndroid?: string;\n developerPayloadAndroid?: string;\n obfuscatedAccountIdAndroid?: string;\n obfuscatedProfileIdAndroid?: string;\n //Amazon\n userIdAmazon?: string;\n userMarketplaceAmazon?: string;\n userJsonAmazon?: string;\n isCanceledAmazon?: boolean;\n}\n\nexport interface PurchaseResult {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n}\n\nexport interface PurchaseError {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n productId?: string;\n}\n\nexport type InAppPurchase = ProductPurchase;\n\nexport interface SubscriptionPurchase extends ProductPurchase {\n autoRenewingAndroid?: boolean;\n originalTransactionDateIOS?: string;\n originalTransactionIdentifierIOS?: string;\n}\n\nexport type Purchase = InAppPurchase | SubscriptionPurchase;\n\nexport interface Discount {\n identifier: string;\n type: string;\n numberOfPeriods: string;\n price: string;\n localizedPrice: string;\n paymentMode: '' | 'FREETRIAL' | 'PAYASYOUGO' | 'PAYUPFRONT';\n subscriptionPeriod: string;\n}\n\nexport interface Product extends ProductCommon {\n type: 'inapp' | 'iap';\n // Android V5\n oneTimePurchaseOfferDetails?: {\n priceCurrencyCode: string;\n formattedPrice: string;\n priceAmountMicros: string;\n };\n}\n\n// Android V5\nexport interface SubscriptionAndroid extends ProductCommon {\n type: 'subs';\n\n productType?: string;\n name?: string;\n subscriptionOfferDetails?: {\n offerToken: string;\n pricingPhases: {\n pricingPhaseList: {\n formattedPrice: string;\n priceCurrencyCode: string;\n /**\n * P1W, P1M, P1Y\n */\n billingPeriod: string;\n billingCycleCount: number;\n priceAmountMicros: string;\n recurrenceMode: number;\n }[];\n };\n }[];\n}\n\nexport interface SubscriptionIOS extends ProductCommon {\n type: 'subs';\n\n discounts?: Discount[];\n introductoryPrice?: string;\n introductoryPriceAsAmountIOS?: string;\n introductoryPricePaymentModeIOS?:\n | ''\n | 'FREETRIAL'\n | 'PAYASYOUGO'\n | 'PAYUPFRONT';\n introductoryPriceNumberOfPeriodsIOS?: string;\n introductoryPriceSubscriptionPeriodIOS?:\n | 'DAY'\n | 'WEEK'\n | 'MONTH'\n | 'YEAR'\n | '';\n\n subscriptionPeriodNumberIOS?: string;\n subscriptionPeriodUnitIOS?: '' | 'YEAR' | 'MONTH' | 'WEEK' | 'DAY';\n}\n\nexport type Subscription = SubscriptionAndroid & SubscriptionIOS;\n\nexport interface RequestPurchaseBaseAndroid {\n obfuscatedAccountIdAndroid?: string;\n obfuscatedProfileIdAndroid?: string;\n isOfferPersonalized?: boolean; // For AndroidBilling V5 https://developer.android.com/google/play/billing/integrate#personalized-price\n}\n\nexport interface RequestPurchaseAndroid extends RequestPurchaseBaseAndroid {\n skus?: Sku[];\n}\n\nexport interface RequestPurchaseIOS {\n sku?: Sku;\n andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;\n applicationUsername?: string;\n}\n\nexport type RequestPurchase = RequestPurchaseAndroid & RequestPurchaseIOS;\n\n/**\n * In order to purchase a new subscription, every sku must have a selected offerToken\n * @see SubscriptionAndroid.subscriptionOfferDetails.offerToken\n */\nexport interface SubscriptionOffer {\n sku: Sku;\n offerToken: string;\n}\n\nexport interface RequestSubscriptionAndroid extends RequestPurchaseBaseAndroid {\n purchaseTokenAndroid?: string;\n prorationModeAndroid?: ProrationModesAndroid;\n subscriptionOffers?: SubscriptionOffer[]; // For AndroidBilling V5\n}\n\nexport type RequestSubscriptionIOS = RequestPurchaseIOS;\n\nexport type RequestSubscription = RequestSubscriptionAndroid &\n RequestSubscriptionIOS;\n"],"mappings":";;;;;;IAEYA,Y;;;WAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;GAAAA,Y,4BAAAA,Y;;IAmBAC,qB;;;WAAAA,qB;EAAAA,qB,CAAAA,qB;EAAAA,qB,CAAAA,qB;EAAAA,qB,CAAAA,qB;EAAAA,qB,CAAAA,qB;EAAAA,qB,CAAAA,qB;GAAAA,qB,qCAAAA,qB;;IAQAC,oB;;;WAAAA,oB;EAAAA,oB,CAAAA,oB;EAAAA,oB,CAAAA,oB;EAAAA,oB,CAAAA,oB;GAAAA,oB,oCAAAA,oB;;AAML,MAAMC,gBAAgB,GAAG,sBAAzB;;IAEKC,oB;;;WAAAA,oB;EAAAA,oB,CAAAA,oB;EAAAA,oB,CAAAA,oB;EAAAA,oB,CAAAA,oB;GAAAA,oB,oCAAAA,oB"}
|
package/lib/module/iap.js
CHANGED
|
@@ -223,7 +223,7 @@ export const requestPurchase = _ref => {
|
|
|
223
223
|
* @param {ProrationModesAndroid} [prorationModeAndroid] UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY, IMMEDIATE_WITH_TIME_PRORATION, IMMEDIATE_AND_CHARGE_PRORATED_PRICE, IMMEDIATE_WITHOUT_PRORATION, DEFERRED
|
|
224
224
|
* @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.
|
|
225
225
|
* @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.
|
|
226
|
-
* @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every
|
|
226
|
+
* @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every sku must be paired with a corresponding offerToken
|
|
227
227
|
* @returns {Promise<SubscriptionPurchase | null>} Promise resolves to null when using proratioModesAndroid=DEFERRED, and to a SubscriptionPurchase otherwise
|
|
228
228
|
*/
|
|
229
229
|
|
package/lib/module/iap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Linking","NativeEventEmitter","NativeModules","Platform","ReceiptValidationStatus","IAPErrorCode","InstallSourceAndroid","PurchaseStateAndroid","RNIapIos","RNIapModule","RNIapAmazonModule","isAndroid","OS","isAmazon","isIos","ANDROID_ITEM_TYPE_SUBSCRIPTION","ANDROID_ITEM_TYPE_IAP","IapError","constructor","code","message","getInstallSourceAndroid","GOOGLE_PLAY","AMAZON","androidNativeModule","setAndroidNativeModule","nativeModule","checkNativeAndroidAvailable","Error","E_IAP_NOT_AVAILABLE","getAndroidModule","checkNativeIOSAvailable","getIosModule","getNativeModule","initConnection","endConnection","flushFailedPurchasesCachedAsPendingAndroid","flushFailedPurchasesCachedAsPending","fillProductsAdditionalData","products","user","getUser","currencies","CA","ES","AU","DE","IN","US","JP","GB","IT","BR","FR","currency","userMarketplaceAmazon","forEach","product","getProducts","skus","select","ios","items","getItems","filter","item","includes","productId","type","android","getItemsByType","Promise","resolve","getSubscriptions","subscriptions","getPurchaseHistory","getAvailableItems","getPurchaseHistoryByType","concat","getAvailablePurchases","getAvailableItemsByType","requestPurchase","sku","andDangerouslyFinishTransactionAutomaticallyIOS","obfuscatedAccountIdAndroid","obfuscatedProfileIdAndroid","applicationUsername","isOfferPersonalized","undefined","console","warn","buyProduct","buyItemByType","length","requestSubscription","purchaseTokenAndroid","prorationModeAndroid","subscriptionOffers","reject","map","so","offerToken","requestPurchaseWithQuantityIOS","quantity","buyProductWithQuantityIOS","finishTransaction","purchase","isConsumable","developerPayloadAndroid","transactionId","consumeProduct","purchaseToken","userIdAmazon","isAcknowledgedAndroid","purchaseStateAndroid","PURCHASED","acknowledgePurchase","clearTransactionIOS","clearTransaction","clearProductsIOS","clearProducts","acknowledgePurchaseAndroid","token","developerPayload","deepLinkToSubscriptionsAndroid","openURL","getPackageName","getPromotedProductIOS","promotedProduct","buyPromotedProductIOS","buyPromotedProduct","fetchJsonOrThrow","url","receiptBody","response","fetch","method","headers","Accept","body","JSON","stringify","ok","Object","assign","statusText","statusCode","status","json","requestAgnosticReceiptValidationIos","TEST_RECEIPT","testResponse","requestPurchaseWithOfferIOS","forUser","withOffer","buyProductWithOffer","validateReceiptIos","isTest","validateReceiptAndroid","packageName","productToken","accessToken","isSub","validateReceiptAmazon","developerSecret","userId","receiptId","useSandbox","sandBoxUrl","purchaseUpdatedListener","listener","emitterSubscription","addListener","startListening","purchaseErrorListener","promotedProductListener","getPendingPurchasesIOS","getPendingTransactions","getReceiptIOS","forceRefresh","requestReceipt","presentCodeRedemptionSheetIOS","presentCodeRedemptionSheet"],"sources":["iap.ts"],"sourcesContent":["import {\n EmitterSubscription,\n Linking,\n NativeEventEmitter,\n NativeModules,\n Platform,\n} from 'react-native';\n\nimport type * as Amazon from './types/amazon';\nimport type * as Android from './types/android';\nimport type * as Apple from './types/apple';\nimport {ReceiptValidationStatus} from './types/apple';\nimport type {\n InAppPurchase,\n Product,\n ProductCommon,\n ProductPurchase,\n PurchaseError,\n PurchaseResult,\n RequestPurchase,\n RequestSubscription,\n Subscription,\n SubscriptionPurchase,\n} from './types';\nimport {\n IAPErrorCode,\n InstallSourceAndroid,\n PurchaseStateAndroid,\n} from './types';\n\nconst {RNIapIos, RNIapModule, RNIapAmazonModule} = NativeModules;\nconst isAndroid = Platform.OS === 'android';\nconst isAmazon = isAndroid && !!RNIapAmazonModule;\nconst isIos = Platform.OS === 'ios';\nconst ANDROID_ITEM_TYPE_SUBSCRIPTION = 'subs';\nconst ANDROID_ITEM_TYPE_IAP = 'inapp';\n\nexport class IapError implements PurchaseError {\n constructor(public code?: string, public message?: string) {\n this.code = code;\n this.message = message;\n }\n}\n\nexport const getInstallSourceAndroid = (): InstallSourceAndroid => {\n return RNIapModule\n ? InstallSourceAndroid.GOOGLE_PLAY\n : InstallSourceAndroid.AMAZON;\n};\n\nlet androidNativeModule = RNIapModule;\n\nexport const setAndroidNativeModule = (\n nativeModule: typeof RNIapModule,\n): void => {\n androidNativeModule = nativeModule;\n};\n\nconst checkNativeAndroidAvailable = (): void => {\n if (!RNIapModule && !RNIapAmazonModule) {\n throw new Error(IAPErrorCode.E_IAP_NOT_AVAILABLE);\n }\n};\n\nconst getAndroidModule = (): typeof RNIapModule | typeof RNIapAmazonModule => {\n checkNativeAndroidAvailable();\n\n return androidNativeModule\n ? androidNativeModule\n : RNIapModule\n ? RNIapModule\n : RNIapAmazonModule;\n};\n\nconst checkNativeIOSAvailable = (): void => {\n if (!RNIapIos) {\n throw new Error(IAPErrorCode.E_IAP_NOT_AVAILABLE);\n }\n};\n\nconst getIosModule = (): typeof RNIapIos => {\n checkNativeIOSAvailable();\n\n return RNIapIos;\n};\n\nconst getNativeModule = ():\n | typeof RNIapModule\n | typeof RNIapAmazonModule\n | typeof RNIapIos => {\n return isAndroid ? getAndroidModule() : getIosModule();\n};\n\n/**\n * Init module for purchase flow. Required on Android. In ios it will check whether user canMakePayment.\n * @returns {Promise<boolean>}\n */\nexport const initConnection = (): Promise<boolean> =>\n getNativeModule().initConnection();\n\n/**\n * End module for purchase flow.\n * @returns {Promise<void>}\n */\nexport const endConnection = (): Promise<void> =>\n getNativeModule().endConnection();\n\n/**\n * Consume all 'ghost' purchases (that is, pending payment that already failed but is still marked as pending in Play Store cache). Android only.\n * @returns {Promise<boolean>}\n */\nexport const flushFailedPurchasesCachedAsPendingAndroid = (): Promise<\n string[]\n> => getAndroidModule().flushFailedPurchasesCachedAsPending();\n\n/**\n * Fill products with additional data\n * @param {Array<ProductCommon>} products Products\n */\nconst fillProductsAdditionalData = async (\n products: Array<ProductCommon>,\n): Promise<Array<ProductCommon>> => {\n // Amazon\n if (RNIapAmazonModule) {\n // On amazon we must get the user marketplace to detect the currency\n const user = await RNIapAmazonModule.getUser();\n\n const currencies = {\n CA: 'CAD',\n ES: 'EUR',\n AU: 'AUD',\n DE: 'EUR',\n IN: 'INR',\n US: 'USD',\n JP: 'JPY',\n GB: 'GBP',\n IT: 'EUR',\n BR: 'BRL',\n FR: 'EUR',\n };\n\n const currency =\n currencies[user.userMarketplaceAmazon as keyof typeof currencies];\n\n // Add currency to products\n products.forEach((product) => {\n if (currency) {\n product.currency = currency;\n }\n });\n }\n\n return products;\n};\n\n/**\n * Get a list of products (consumable and non-consumable items, but not subscriptions)\n * @param {string[]} skus The item skus\n * @returns {Promise<Product[]>}\n */\nexport const getProducts = (skus: string[]): Promise<Array<Product>> =>\n (\n Platform.select({\n ios: async () => {\n const items = await getIosModule().getItems(skus);\n\n return items.filter(\n (item: Product) =>\n skus.includes(item.productId) && item.type === 'iap',\n );\n },\n android: async () => {\n const products = await getAndroidModule().getItemsByType(\n ANDROID_ITEM_TYPE_IAP,\n skus,\n );\n\n return fillProductsAdditionalData(products);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Get a list of subscriptions\n * @param {string[]} skus The item skus\n * @returns {Promise<Subscription[]>}\n */\nexport const getSubscriptions = (skus: string[]): Promise<Subscription[]> =>\n (\n Platform.select({\n ios: async () => {\n const items = await getIosModule().getItems(skus);\n\n return items.filter(\n (item: Subscription) =>\n skus.includes(item.productId) && item.type === 'subs',\n );\n },\n android: async () => {\n const subscriptions = await getAndroidModule().getItemsByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n skus,\n );\n\n return fillProductsAdditionalData(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Gets an inventory of purchases made by the user regardless of consumption status\n * @returns {Promise<(InAppPurchase | SubscriptionPurchase)[]>}\n */\nexport const getPurchaseHistory = (): Promise<\n (InAppPurchase | SubscriptionPurchase)[]\n> =>\n (\n Platform.select({\n ios: async () => {\n return getIosModule().getAvailableItems();\n },\n android: async () => {\n if (RNIapAmazonModule) {\n return await RNIapAmazonModule.getAvailableItems();\n }\n\n const products = await getAndroidModule().getPurchaseHistoryByType(\n ANDROID_ITEM_TYPE_IAP,\n );\n\n const subscriptions = await getAndroidModule().getPurchaseHistoryByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n );\n\n return products.concat(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Get all purchases made by the user (either non-consumable, or haven't been consumed yet)\n * @returns {Promise<(InAppPurchase | SubscriptionPurchase)[]>}\n */\nexport const getAvailablePurchases = (): Promise<\n (InAppPurchase | SubscriptionPurchase)[]\n> =>\n (\n Platform.select({\n ios: async () => {\n return getIosModule().getAvailableItems();\n },\n android: async () => {\n if (RNIapAmazonModule) {\n return await RNIapAmazonModule.getAvailableItems();\n }\n\n const products = await getAndroidModule().getAvailableItemsByType(\n ANDROID_ITEM_TYPE_IAP,\n );\n\n const subscriptions = await getAndroidModule().getAvailableItemsByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n );\n\n return products.concat(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} sku The product's sku/ID\n * @param {string} [applicationUsername] The purchaser's user ID\n * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.\n * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.\n * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.\n * @param {string[]} [skus] Product Ids to purchase. Note that this is only for Android. iOS only uses a single SKU. If not provided, it'll default to using [sku] for backward-compatibility\n * @param {boolean} [isOfferPersonalized] Defaults to false, Only for Android V5\n * @returns {Promise<InAppPurchase>}\n */\n\nexport const requestPurchase = ({\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n applicationUsername,\n skus, // Android Billing V5\n isOfferPersonalized = undefined, // Android Billing V5\n}: RequestPurchase): Promise<InAppPurchase> =>\n (\n Platform.select({\n ios: async () => {\n if (andDangerouslyFinishTransactionAutomaticallyIOS) {\n console.warn(\n 'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.',\n );\n }\n\n return getIosModule().buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n applicationUsername,\n );\n },\n android: async () => {\n return getAndroidModule().buyItemByType(\n ANDROID_ITEM_TYPE_IAP,\n skus?.length ? skus : [sku],\n null,\n -1,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n undefined,\n isOfferPersonalized ?? false,\n );\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} [sku] The product's sku/ID\n * @param {string} [applicationUsername] The purchaser's user ID\n * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.\n * @param {string} [purchaseTokenAndroid] purchaseToken that the user is upgrading or downgrading from (Android).\n * @param {ProrationModesAndroid} [prorationModeAndroid] UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY, IMMEDIATE_WITH_TIME_PRORATION, IMMEDIATE_AND_CHARGE_PRORATED_PRICE, IMMEDIATE_WITHOUT_PRORATION, DEFERRED\n * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.\n * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.\n * @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every sky must be paired with a corresponding offerToken\n * @returns {Promise<SubscriptionPurchase | null>} Promise resolves to null when using proratioModesAndroid=DEFERRED, and to a SubscriptionPurchase otherwise\n */\nexport const requestSubscription = ({\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n purchaseTokenAndroid,\n prorationModeAndroid = -1,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n subscriptionOffers = undefined, // Android Billing V5\n isOfferPersonalized = undefined, // Android Billing V5\n applicationUsername,\n}: RequestSubscription): Promise<SubscriptionPurchase | null> =>\n (\n Platform.select({\n ios: async () => {\n if (andDangerouslyFinishTransactionAutomaticallyIOS) {\n console.warn(\n 'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.',\n );\n }\n\n return getIosModule().buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n applicationUsername,\n );\n },\n android: async () => {\n if (isAmazon) {\n return RNIapAmazonModule.buyItemByType(sku);\n } else {\n if (!subscriptionOffers?.length) {\n Promise.reject(\n 'subscriptionOffers are required for Google Play Subscriptions',\n );\n return;\n }\n return RNIapModule.buyItemByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n subscriptionOffers?.map((so) => so.sku),\n purchaseTokenAndroid,\n prorationModeAndroid,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n subscriptionOffers?.map((so) => so.offerToken),\n isOfferPersonalized ?? false,\n );\n }\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} sku The product's sku/ID\n * @returns {Promise<void>}\n */\nexport const requestPurchaseWithQuantityIOS = (\n sku: string,\n quantity: number,\n): Promise<InAppPurchase> =>\n getIosModule().buyProductWithQuantityIOS(sku, quantity);\n\n/**\n * Finish Transaction (both platforms)\n * Abstracts Finish Transaction\n * iOS: Tells StoreKit that you have delivered the purchase to the user and StoreKit can now let go of the transaction.\n * Call this after you have persisted the purchased state to your server or local data in your app.\n * `react-native-iap` will continue to deliver the purchase updated events with the successful purchase until you finish the transaction. **Even after the app has relaunched.**\n * Android: it will consume purchase for consumables and acknowledge purchase for non-consumables.\n * @param {object} purchase The purchase that you would like to finish.\n * @param {boolean} isConsumable Checks if purchase is consumable. Has effect on `android`.\n * @param {string} developerPayloadAndroid Android developerPayload.\n * @returns {Promise<string | void> }\n */\nexport const finishTransaction = (\n purchase: InAppPurchase | ProductPurchase,\n isConsumable?: boolean,\n developerPayloadAndroid?: string,\n): Promise<string | void> => {\n return (\n Platform.select({\n ios: async () => {\n return getIosModule().finishTransaction(purchase.transactionId);\n },\n android: async () => {\n if (purchase) {\n if (isConsumable) {\n return getAndroidModule().consumeProduct(\n purchase.purchaseToken,\n developerPayloadAndroid,\n );\n } else if (\n purchase.userIdAmazon ||\n (!purchase.isAcknowledgedAndroid &&\n purchase.purchaseStateAndroid === PurchaseStateAndroid.PURCHASED)\n ) {\n return getAndroidModule().acknowledgePurchase(\n purchase.purchaseToken,\n developerPayloadAndroid,\n );\n } else {\n throw new Error('purchase is not suitable to be purchased');\n }\n } else {\n throw new Error('purchase is not assigned');\n }\n },\n }) || Promise.resolve\n )();\n};\n\n/**\n * Clear Transaction (iOS only)\n * Finish remaining transactions. Related to issue #257 and #801\n * link : https://github.com/dooboolab/react-native-iap/issues/257\n * https://github.com/dooboolab/react-native-iap/issues/801\n * @returns {Promise<void>}\n */\nexport const clearTransactionIOS = (): Promise<void> =>\n getIosModule().clearTransaction();\n\n/**\n * Clear valid Products (iOS only)\n * Remove all products which are validated by Apple server.\n * @returns {void}\n */\nexport const clearProductsIOS = (): Promise<void> =>\n getIosModule().clearProducts();\n\n/**\n * Acknowledge a product (on Android.) No-op on iOS.\n * @param {string} token The product's token (on Android)\n * @returns {Promise<PurchaseResult | void>}\n */\nexport const acknowledgePurchaseAndroid = (\n token: string,\n developerPayload?: string,\n): Promise<PurchaseResult | void> => {\n return getAndroidModule().acknowledgePurchase(token, developerPayload);\n};\n\n/**\n * Deep link to subscriptions screen on Android. No-op on iOS.\n * @param {string} sku The product's SKU (on Android)\n * @returns {Promise<void>}\n */\nexport const deepLinkToSubscriptionsAndroid = async (\n sku: string,\n): Promise<void> => {\n checkNativeAndroidAvailable();\n\n return Linking.openURL(\n `https://play.google.com/store/account/subscriptions?package=${await RNIapModule.getPackageName()}&sku=${sku}`,\n );\n};\n\n/**\n * Should Add Store Payment (iOS only)\n * Indicates the the App Store purchase should continue from the app instead of the App Store.\n * @returns {Promise<Product | null>} promoted product\n */\nexport const getPromotedProductIOS = (): Promise<Product | null> =>\n getIosModule().promotedProduct();\n\n/**\n * Buy the currently selected promoted product (iOS only)\n * Initiates the payment process for a promoted product. Should only be called in response to the `iap-promoted-product` event.\n * @returns {Promise<void>}\n */\nexport const buyPromotedProductIOS = (): Promise<void> =>\n getIosModule().buyPromotedProduct();\n\nconst fetchJsonOrThrow = async (\n url: string,\n receiptBody: Record<string, unknown>,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(receiptBody),\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\nconst requestAgnosticReceiptValidationIos = async (\n receiptBody: Record<string, unknown>,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n const response = await fetchJsonOrThrow(\n 'https://buy.itunes.apple.com/verifyReceipt',\n receiptBody,\n );\n\n // Best practice is to check for test receipt and check sandbox instead\n // https://developer.apple.com/documentation/appstorereceipts/verifyreceipt\n if (response && response.status === ReceiptValidationStatus.TEST_RECEIPT) {\n const testResponse = await fetchJsonOrThrow(\n 'https://sandbox.itunes.apple.com/verifyReceipt',\n receiptBody,\n );\n\n return testResponse;\n }\n\n return response;\n};\n\n/**\n * Buy products or subscriptions with offers (iOS only)\n *\n * Runs the payment process with some info you must fetch\n * from your server.\n * @param {string} sku The product identifier\n * @param {string} forUser An user identifier on you system\n * @param {Apple.PaymentDiscount} withOffer The offer information\n * @param {string} withOffer.identifier The offer identifier\n * @param {string} withOffer.keyIdentifier Key identifier that it uses to generate the signature\n * @param {string} withOffer.nonce An UUID returned from the server\n * @param {string} withOffer.signature The actual signature returned from the server\n * @param {number} withOffer.timestamp The timestamp of the signature\n * @returns {Promise<void>}\n */\nexport const requestPurchaseWithOfferIOS = (\n sku: string,\n forUser: string,\n withOffer: Apple.PaymentDiscount,\n): Promise<void> => getIosModule().buyProductWithOffer(sku, forUser, withOffer);\n\n/**\n * Validate receipt for iOS.\n * @param {object} receiptBody the receipt body to send to apple server.\n * @param {boolean} isTest whether this is in test environment which is sandbox.\n * @returns {Promise<Apple.ReceiptValidationResponse | false>}\n */\nexport const validateReceiptIos = async (\n receiptBody: Record<string, unknown>,\n isTest?: boolean,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n if (isTest == null) {\n return await requestAgnosticReceiptValidationIos(receiptBody);\n }\n\n const url = isTest\n ? 'https://sandbox.itunes.apple.com/verifyReceipt'\n : 'https://buy.itunes.apple.com/verifyReceipt';\n\n const response = await fetchJsonOrThrow(url, receiptBody);\n\n return response;\n};\n\n/**\n * Validate receipt for Android. NOTE: This method is here for debugging purposes only. Including\n * your access token in the binary you ship to users is potentially dangerous.\n * Use server side validation instead for your production builds\n * @param {string} packageName package name of your app.\n * @param {string} productId product id for your in app product.\n * @param {string} productToken token for your purchase.\n * @param {string} accessToken accessToken from googleApis.\n * @param {boolean} isSub whether this is subscription or inapp. `true` for subscription.\n * @returns {Promise<object>}\n */\nexport const validateReceiptAndroid = async (\n packageName: string,\n productId: string,\n productToken: string,\n accessToken: string,\n isSub?: boolean,\n): Promise<Android.ReceiptType> => {\n const type = isSub ? 'subscriptions' : 'products';\n\n const url =\n 'https://androidpublisher.googleapis.com/androidpublisher/v3/applications' +\n `/${packageName}/purchases/${type}/${productId}` +\n `/tokens/${productToken}?access_token=${accessToken}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\n/**\n * Validate receipt for Amazon. NOTE: This method is here for debugging purposes only. Including\n * your developer secret in the binary you ship to users is potentially dangerous.\n * Use server side validation instead for your production builds\n * @param {string} developerSecret: from the Amazon developer console.\n * @param {string} userId who purchased the item.\n * @param {string} receiptId long obfuscated string returned when purchasing the item\n * @param {boolean} useSandbox Defaults to true, use sandbox environment or production.\n * @returns {Promise<object>}\n */\nexport const validateReceiptAmazon = async (\n developerSecret: string,\n userId: string,\n receiptId: string,\n useSandbox: boolean = true,\n): Promise<Amazon.ReceiptType> => {\n const sandBoxUrl = useSandbox ? 'sandbox/' : '';\n const url = `https://appstore-sdk.amazon.com/${sandBoxUrl}version/1.0/verifyReceiptId/developer/${developerSecret}/user/${userId}/receiptId/${receiptId}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\n/**\n * Add IAP purchase event\n * @returns {callback(e: InAppPurchase | ProductPurchase)}\n */\nexport const purchaseUpdatedListener = (\n listener: (event: InAppPurchase | SubscriptionPurchase) => void,\n): EmitterSubscription => {\n const emitterSubscription = new NativeEventEmitter(\n getNativeModule(),\n ).addListener('purchase-updated', listener);\n\n if (isAndroid) {\n getAndroidModule().startListening();\n }\n\n return emitterSubscription;\n};\n\n/**\n * Add IAP purchase error event\n * @returns {callback(e: PurchaseError)}\n */\nexport const purchaseErrorListener = (\n listener: (errorEvent: PurchaseError) => void,\n): EmitterSubscription =>\n new NativeEventEmitter(getNativeModule()).addListener(\n 'purchase-error',\n listener,\n );\n\n/**\n * Add IAP promoted subscription event\n * Only available on iOS\n */\nexport const promotedProductListener = (\n listener: (productId?: string) => void,\n): EmitterSubscription | null => {\n if (isIos) {\n return new NativeEventEmitter(getIosModule()).addListener(\n 'iap-promoted-product',\n listener,\n );\n }\n return null;\n};\n\n/**\n * Get the current receipt base64 encoded in IOS.\n * @param {forceRefresh?:boolean}\n * @returns {Promise<ProductPurchase[]>}\n */\nexport const getPendingPurchasesIOS = async (): Promise<ProductPurchase[]> =>\n getIosModule().getPendingTransactions();\n\n/**\n * Get the current receipt base64 encoded in IOS.\n * @param {forceRefresh?:boolean}\n * @returns {Promise<string>}\n */\nexport const getReceiptIOS = async (forceRefresh?: boolean): Promise<string> =>\n getIosModule().requestReceipt(forceRefresh ?? false);\n\n/**\n * Launches a modal to register the redeem offer code in IOS.\n * @returns {Promise<null>}\n */\nexport const presentCodeRedemptionSheetIOS = async (): Promise<null> =>\n getIosModule().presentCodeRedemptionSheet();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Linking","NativeEventEmitter","NativeModules","Platform","ReceiptValidationStatus","IAPErrorCode","InstallSourceAndroid","PurchaseStateAndroid","RNIapIos","RNIapModule","RNIapAmazonModule","isAndroid","OS","isAmazon","isIos","ANDROID_ITEM_TYPE_SUBSCRIPTION","ANDROID_ITEM_TYPE_IAP","IapError","constructor","code","message","getInstallSourceAndroid","GOOGLE_PLAY","AMAZON","androidNativeModule","setAndroidNativeModule","nativeModule","checkNativeAndroidAvailable","Error","E_IAP_NOT_AVAILABLE","getAndroidModule","checkNativeIOSAvailable","getIosModule","getNativeModule","initConnection","endConnection","flushFailedPurchasesCachedAsPendingAndroid","flushFailedPurchasesCachedAsPending","fillProductsAdditionalData","products","user","getUser","currencies","CA","ES","AU","DE","IN","US","JP","GB","IT","BR","FR","currency","userMarketplaceAmazon","forEach","product","getProducts","skus","select","ios","items","getItems","filter","item","includes","productId","type","android","getItemsByType","Promise","resolve","getSubscriptions","subscriptions","getPurchaseHistory","getAvailableItems","getPurchaseHistoryByType","concat","getAvailablePurchases","getAvailableItemsByType","requestPurchase","sku","andDangerouslyFinishTransactionAutomaticallyIOS","obfuscatedAccountIdAndroid","obfuscatedProfileIdAndroid","applicationUsername","isOfferPersonalized","undefined","console","warn","buyProduct","buyItemByType","length","requestSubscription","purchaseTokenAndroid","prorationModeAndroid","subscriptionOffers","reject","map","so","offerToken","requestPurchaseWithQuantityIOS","quantity","buyProductWithQuantityIOS","finishTransaction","purchase","isConsumable","developerPayloadAndroid","transactionId","consumeProduct","purchaseToken","userIdAmazon","isAcknowledgedAndroid","purchaseStateAndroid","PURCHASED","acknowledgePurchase","clearTransactionIOS","clearTransaction","clearProductsIOS","clearProducts","acknowledgePurchaseAndroid","token","developerPayload","deepLinkToSubscriptionsAndroid","openURL","getPackageName","getPromotedProductIOS","promotedProduct","buyPromotedProductIOS","buyPromotedProduct","fetchJsonOrThrow","url","receiptBody","response","fetch","method","headers","Accept","body","JSON","stringify","ok","Object","assign","statusText","statusCode","status","json","requestAgnosticReceiptValidationIos","TEST_RECEIPT","testResponse","requestPurchaseWithOfferIOS","forUser","withOffer","buyProductWithOffer","validateReceiptIos","isTest","validateReceiptAndroid","packageName","productToken","accessToken","isSub","validateReceiptAmazon","developerSecret","userId","receiptId","useSandbox","sandBoxUrl","purchaseUpdatedListener","listener","emitterSubscription","addListener","startListening","purchaseErrorListener","promotedProductListener","getPendingPurchasesIOS","getPendingTransactions","getReceiptIOS","forceRefresh","requestReceipt","presentCodeRedemptionSheetIOS","presentCodeRedemptionSheet"],"sources":["iap.ts"],"sourcesContent":["import {\n EmitterSubscription,\n Linking,\n NativeEventEmitter,\n NativeModules,\n Platform,\n} from 'react-native';\n\nimport type * as Amazon from './types/amazon';\nimport type * as Android from './types/android';\nimport type * as Apple from './types/apple';\nimport {ReceiptValidationStatus} from './types/apple';\nimport type {\n InAppPurchase,\n Product,\n ProductCommon,\n ProductPurchase,\n PurchaseError,\n PurchaseResult,\n RequestPurchase,\n RequestSubscription,\n Subscription,\n SubscriptionPurchase,\n} from './types';\nimport {\n IAPErrorCode,\n InstallSourceAndroid,\n PurchaseStateAndroid,\n} from './types';\n\nconst {RNIapIos, RNIapModule, RNIapAmazonModule} = NativeModules;\nconst isAndroid = Platform.OS === 'android';\nconst isAmazon = isAndroid && !!RNIapAmazonModule;\nconst isIos = Platform.OS === 'ios';\nconst ANDROID_ITEM_TYPE_SUBSCRIPTION = 'subs';\nconst ANDROID_ITEM_TYPE_IAP = 'inapp';\n\nexport class IapError implements PurchaseError {\n constructor(public code?: string, public message?: string) {\n this.code = code;\n this.message = message;\n }\n}\n\nexport const getInstallSourceAndroid = (): InstallSourceAndroid => {\n return RNIapModule\n ? InstallSourceAndroid.GOOGLE_PLAY\n : InstallSourceAndroid.AMAZON;\n};\n\nlet androidNativeModule = RNIapModule;\n\nexport const setAndroidNativeModule = (\n nativeModule: typeof RNIapModule,\n): void => {\n androidNativeModule = nativeModule;\n};\n\nconst checkNativeAndroidAvailable = (): void => {\n if (!RNIapModule && !RNIapAmazonModule) {\n throw new Error(IAPErrorCode.E_IAP_NOT_AVAILABLE);\n }\n};\n\nconst getAndroidModule = (): typeof RNIapModule | typeof RNIapAmazonModule => {\n checkNativeAndroidAvailable();\n\n return androidNativeModule\n ? androidNativeModule\n : RNIapModule\n ? RNIapModule\n : RNIapAmazonModule;\n};\n\nconst checkNativeIOSAvailable = (): void => {\n if (!RNIapIos) {\n throw new Error(IAPErrorCode.E_IAP_NOT_AVAILABLE);\n }\n};\n\nconst getIosModule = (): typeof RNIapIos => {\n checkNativeIOSAvailable();\n\n return RNIapIos;\n};\n\nconst getNativeModule = ():\n | typeof RNIapModule\n | typeof RNIapAmazonModule\n | typeof RNIapIos => {\n return isAndroid ? getAndroidModule() : getIosModule();\n};\n\n/**\n * Init module for purchase flow. Required on Android. In ios it will check whether user canMakePayment.\n * @returns {Promise<boolean>}\n */\nexport const initConnection = (): Promise<boolean> =>\n getNativeModule().initConnection();\n\n/**\n * End module for purchase flow.\n * @returns {Promise<void>}\n */\nexport const endConnection = (): Promise<void> =>\n getNativeModule().endConnection();\n\n/**\n * Consume all 'ghost' purchases (that is, pending payment that already failed but is still marked as pending in Play Store cache). Android only.\n * @returns {Promise<boolean>}\n */\nexport const flushFailedPurchasesCachedAsPendingAndroid = (): Promise<\n string[]\n> => getAndroidModule().flushFailedPurchasesCachedAsPending();\n\n/**\n * Fill products with additional data\n * @param {Array<ProductCommon>} products Products\n */\nconst fillProductsAdditionalData = async (\n products: Array<ProductCommon>,\n): Promise<Array<ProductCommon>> => {\n // Amazon\n if (RNIapAmazonModule) {\n // On amazon we must get the user marketplace to detect the currency\n const user = await RNIapAmazonModule.getUser();\n\n const currencies = {\n CA: 'CAD',\n ES: 'EUR',\n AU: 'AUD',\n DE: 'EUR',\n IN: 'INR',\n US: 'USD',\n JP: 'JPY',\n GB: 'GBP',\n IT: 'EUR',\n BR: 'BRL',\n FR: 'EUR',\n };\n\n const currency =\n currencies[user.userMarketplaceAmazon as keyof typeof currencies];\n\n // Add currency to products\n products.forEach((product) => {\n if (currency) {\n product.currency = currency;\n }\n });\n }\n\n return products;\n};\n\n/**\n * Get a list of products (consumable and non-consumable items, but not subscriptions)\n * @param {string[]} skus The item skus\n * @returns {Promise<Product[]>}\n */\nexport const getProducts = (skus: string[]): Promise<Array<Product>> =>\n (\n Platform.select({\n ios: async () => {\n const items = await getIosModule().getItems(skus);\n\n return items.filter(\n (item: Product) =>\n skus.includes(item.productId) && item.type === 'iap',\n );\n },\n android: async () => {\n const products = await getAndroidModule().getItemsByType(\n ANDROID_ITEM_TYPE_IAP,\n skus,\n );\n\n return fillProductsAdditionalData(products);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Get a list of subscriptions\n * @param {string[]} skus The item skus\n * @returns {Promise<Subscription[]>}\n */\nexport const getSubscriptions = (skus: string[]): Promise<Subscription[]> =>\n (\n Platform.select({\n ios: async () => {\n const items = await getIosModule().getItems(skus);\n\n return items.filter(\n (item: Subscription) =>\n skus.includes(item.productId) && item.type === 'subs',\n );\n },\n android: async () => {\n const subscriptions = await getAndroidModule().getItemsByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n skus,\n );\n\n return fillProductsAdditionalData(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Gets an inventory of purchases made by the user regardless of consumption status\n * @returns {Promise<(InAppPurchase | SubscriptionPurchase)[]>}\n */\nexport const getPurchaseHistory = (): Promise<\n (InAppPurchase | SubscriptionPurchase)[]\n> =>\n (\n Platform.select({\n ios: async () => {\n return getIosModule().getAvailableItems();\n },\n android: async () => {\n if (RNIapAmazonModule) {\n return await RNIapAmazonModule.getAvailableItems();\n }\n\n const products = await getAndroidModule().getPurchaseHistoryByType(\n ANDROID_ITEM_TYPE_IAP,\n );\n\n const subscriptions = await getAndroidModule().getPurchaseHistoryByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n );\n\n return products.concat(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Get all purchases made by the user (either non-consumable, or haven't been consumed yet)\n * @returns {Promise<(InAppPurchase | SubscriptionPurchase)[]>}\n */\nexport const getAvailablePurchases = (): Promise<\n (InAppPurchase | SubscriptionPurchase)[]\n> =>\n (\n Platform.select({\n ios: async () => {\n return getIosModule().getAvailableItems();\n },\n android: async () => {\n if (RNIapAmazonModule) {\n return await RNIapAmazonModule.getAvailableItems();\n }\n\n const products = await getAndroidModule().getAvailableItemsByType(\n ANDROID_ITEM_TYPE_IAP,\n );\n\n const subscriptions = await getAndroidModule().getAvailableItemsByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n );\n\n return products.concat(subscriptions);\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} sku The product's sku/ID\n * @param {string} [applicationUsername] The purchaser's user ID\n * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.\n * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.\n * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.\n * @param {string[]} [skus] Product Ids to purchase. Note that this is only for Android. iOS only uses a single SKU. If not provided, it'll default to using [sku] for backward-compatibility\n * @param {boolean} [isOfferPersonalized] Defaults to false, Only for Android V5\n * @returns {Promise<InAppPurchase>}\n */\n\nexport const requestPurchase = ({\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n applicationUsername,\n skus, // Android Billing V5\n isOfferPersonalized = undefined, // Android Billing V5\n}: RequestPurchase): Promise<InAppPurchase> =>\n (\n Platform.select({\n ios: async () => {\n if (andDangerouslyFinishTransactionAutomaticallyIOS) {\n console.warn(\n 'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.',\n );\n }\n\n return getIosModule().buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n applicationUsername,\n );\n },\n android: async () => {\n return getAndroidModule().buyItemByType(\n ANDROID_ITEM_TYPE_IAP,\n skus?.length ? skus : [sku],\n null,\n -1,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n undefined,\n isOfferPersonalized ?? false,\n );\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} [sku] The product's sku/ID\n * @param {string} [applicationUsername] The purchaser's user ID\n * @param {boolean} [andDangerouslyFinishTransactionAutomaticallyIOS] You should set this to false and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.\n * @param {string} [purchaseTokenAndroid] purchaseToken that the user is upgrading or downgrading from (Android).\n * @param {ProrationModesAndroid} [prorationModeAndroid] UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY, IMMEDIATE_WITH_TIME_PRORATION, IMMEDIATE_AND_CHARGE_PRORATED_PRICE, IMMEDIATE_WITHOUT_PRORATION, DEFERRED\n * @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.\n * @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.\n * @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every sku must be paired with a corresponding offerToken\n * @returns {Promise<SubscriptionPurchase | null>} Promise resolves to null when using proratioModesAndroid=DEFERRED, and to a SubscriptionPurchase otherwise\n */\nexport const requestSubscription = ({\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS = false,\n purchaseTokenAndroid,\n prorationModeAndroid = -1,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n subscriptionOffers = undefined, // Android Billing V5\n isOfferPersonalized = undefined, // Android Billing V5\n applicationUsername,\n}: RequestSubscription): Promise<SubscriptionPurchase | null> =>\n (\n Platform.select({\n ios: async () => {\n if (andDangerouslyFinishTransactionAutomaticallyIOS) {\n console.warn(\n 'You are dangerously allowing react-native-iap to finish your transaction automatically. You should set andDangerouslyFinishTransactionAutomatically to false when calling requestPurchase and call finishTransaction manually when you have delivered the purchased goods to the user. It defaults to true to provide backwards compatibility. Will default to false in version 4.0.0.',\n );\n }\n\n return getIosModule().buyProduct(\n sku,\n andDangerouslyFinishTransactionAutomaticallyIOS,\n applicationUsername,\n );\n },\n android: async () => {\n if (isAmazon) {\n return RNIapAmazonModule.buyItemByType(sku);\n } else {\n if (!subscriptionOffers?.length) {\n Promise.reject(\n 'subscriptionOffers are required for Google Play Subscriptions',\n );\n return;\n }\n return RNIapModule.buyItemByType(\n ANDROID_ITEM_TYPE_SUBSCRIPTION,\n subscriptionOffers?.map((so) => so.sku),\n purchaseTokenAndroid,\n prorationModeAndroid,\n obfuscatedAccountIdAndroid,\n obfuscatedProfileIdAndroid,\n subscriptionOffers?.map((so) => so.offerToken),\n isOfferPersonalized ?? false,\n );\n }\n },\n }) || Promise.resolve\n )();\n\n/**\n * Request a purchase for product. This will be received in `PurchaseUpdatedListener`.\n * @param {string} sku The product's sku/ID\n * @returns {Promise<void>}\n */\nexport const requestPurchaseWithQuantityIOS = (\n sku: string,\n quantity: number,\n): Promise<InAppPurchase> =>\n getIosModule().buyProductWithQuantityIOS(sku, quantity);\n\n/**\n * Finish Transaction (both platforms)\n * Abstracts Finish Transaction\n * iOS: Tells StoreKit that you have delivered the purchase to the user and StoreKit can now let go of the transaction.\n * Call this after you have persisted the purchased state to your server or local data in your app.\n * `react-native-iap` will continue to deliver the purchase updated events with the successful purchase until you finish the transaction. **Even after the app has relaunched.**\n * Android: it will consume purchase for consumables and acknowledge purchase for non-consumables.\n * @param {object} purchase The purchase that you would like to finish.\n * @param {boolean} isConsumable Checks if purchase is consumable. Has effect on `android`.\n * @param {string} developerPayloadAndroid Android developerPayload.\n * @returns {Promise<string | void> }\n */\nexport const finishTransaction = (\n purchase: InAppPurchase | ProductPurchase,\n isConsumable?: boolean,\n developerPayloadAndroid?: string,\n): Promise<string | void> => {\n return (\n Platform.select({\n ios: async () => {\n return getIosModule().finishTransaction(purchase.transactionId);\n },\n android: async () => {\n if (purchase) {\n if (isConsumable) {\n return getAndroidModule().consumeProduct(\n purchase.purchaseToken,\n developerPayloadAndroid,\n );\n } else if (\n purchase.userIdAmazon ||\n (!purchase.isAcknowledgedAndroid &&\n purchase.purchaseStateAndroid === PurchaseStateAndroid.PURCHASED)\n ) {\n return getAndroidModule().acknowledgePurchase(\n purchase.purchaseToken,\n developerPayloadAndroid,\n );\n } else {\n throw new Error('purchase is not suitable to be purchased');\n }\n } else {\n throw new Error('purchase is not assigned');\n }\n },\n }) || Promise.resolve\n )();\n};\n\n/**\n * Clear Transaction (iOS only)\n * Finish remaining transactions. Related to issue #257 and #801\n * link : https://github.com/dooboolab/react-native-iap/issues/257\n * https://github.com/dooboolab/react-native-iap/issues/801\n * @returns {Promise<void>}\n */\nexport const clearTransactionIOS = (): Promise<void> =>\n getIosModule().clearTransaction();\n\n/**\n * Clear valid Products (iOS only)\n * Remove all products which are validated by Apple server.\n * @returns {void}\n */\nexport const clearProductsIOS = (): Promise<void> =>\n getIosModule().clearProducts();\n\n/**\n * Acknowledge a product (on Android.) No-op on iOS.\n * @param {string} token The product's token (on Android)\n * @returns {Promise<PurchaseResult | void>}\n */\nexport const acknowledgePurchaseAndroid = (\n token: string,\n developerPayload?: string,\n): Promise<PurchaseResult | void> => {\n return getAndroidModule().acknowledgePurchase(token, developerPayload);\n};\n\n/**\n * Deep link to subscriptions screen on Android. No-op on iOS.\n * @param {string} sku The product's SKU (on Android)\n * @returns {Promise<void>}\n */\nexport const deepLinkToSubscriptionsAndroid = async (\n sku: string,\n): Promise<void> => {\n checkNativeAndroidAvailable();\n\n return Linking.openURL(\n `https://play.google.com/store/account/subscriptions?package=${await RNIapModule.getPackageName()}&sku=${sku}`,\n );\n};\n\n/**\n * Should Add Store Payment (iOS only)\n * Indicates the the App Store purchase should continue from the app instead of the App Store.\n * @returns {Promise<Product | null>} promoted product\n */\nexport const getPromotedProductIOS = (): Promise<Product | null> =>\n getIosModule().promotedProduct();\n\n/**\n * Buy the currently selected promoted product (iOS only)\n * Initiates the payment process for a promoted product. Should only be called in response to the `iap-promoted-product` event.\n * @returns {Promise<void>}\n */\nexport const buyPromotedProductIOS = (): Promise<void> =>\n getIosModule().buyPromotedProduct();\n\nconst fetchJsonOrThrow = async (\n url: string,\n receiptBody: Record<string, unknown>,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(receiptBody),\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\nconst requestAgnosticReceiptValidationIos = async (\n receiptBody: Record<string, unknown>,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n const response = await fetchJsonOrThrow(\n 'https://buy.itunes.apple.com/verifyReceipt',\n receiptBody,\n );\n\n // Best practice is to check for test receipt and check sandbox instead\n // https://developer.apple.com/documentation/appstorereceipts/verifyreceipt\n if (response && response.status === ReceiptValidationStatus.TEST_RECEIPT) {\n const testResponse = await fetchJsonOrThrow(\n 'https://sandbox.itunes.apple.com/verifyReceipt',\n receiptBody,\n );\n\n return testResponse;\n }\n\n return response;\n};\n\n/**\n * Buy products or subscriptions with offers (iOS only)\n *\n * Runs the payment process with some info you must fetch\n * from your server.\n * @param {string} sku The product identifier\n * @param {string} forUser An user identifier on you system\n * @param {Apple.PaymentDiscount} withOffer The offer information\n * @param {string} withOffer.identifier The offer identifier\n * @param {string} withOffer.keyIdentifier Key identifier that it uses to generate the signature\n * @param {string} withOffer.nonce An UUID returned from the server\n * @param {string} withOffer.signature The actual signature returned from the server\n * @param {number} withOffer.timestamp The timestamp of the signature\n * @returns {Promise<void>}\n */\nexport const requestPurchaseWithOfferIOS = (\n sku: string,\n forUser: string,\n withOffer: Apple.PaymentDiscount,\n): Promise<void> => getIosModule().buyProductWithOffer(sku, forUser, withOffer);\n\n/**\n * Validate receipt for iOS.\n * @param {object} receiptBody the receipt body to send to apple server.\n * @param {boolean} isTest whether this is in test environment which is sandbox.\n * @returns {Promise<Apple.ReceiptValidationResponse | false>}\n */\nexport const validateReceiptIos = async (\n receiptBody: Record<string, unknown>,\n isTest?: boolean,\n): Promise<Apple.ReceiptValidationResponse | false> => {\n if (isTest == null) {\n return await requestAgnosticReceiptValidationIos(receiptBody);\n }\n\n const url = isTest\n ? 'https://sandbox.itunes.apple.com/verifyReceipt'\n : 'https://buy.itunes.apple.com/verifyReceipt';\n\n const response = await fetchJsonOrThrow(url, receiptBody);\n\n return response;\n};\n\n/**\n * Validate receipt for Android. NOTE: This method is here for debugging purposes only. Including\n * your access token in the binary you ship to users is potentially dangerous.\n * Use server side validation instead for your production builds\n * @param {string} packageName package name of your app.\n * @param {string} productId product id for your in app product.\n * @param {string} productToken token for your purchase.\n * @param {string} accessToken accessToken from googleApis.\n * @param {boolean} isSub whether this is subscription or inapp. `true` for subscription.\n * @returns {Promise<object>}\n */\nexport const validateReceiptAndroid = async (\n packageName: string,\n productId: string,\n productToken: string,\n accessToken: string,\n isSub?: boolean,\n): Promise<Android.ReceiptType> => {\n const type = isSub ? 'subscriptions' : 'products';\n\n const url =\n 'https://androidpublisher.googleapis.com/androidpublisher/v3/applications' +\n `/${packageName}/purchases/${type}/${productId}` +\n `/tokens/${productToken}?access_token=${accessToken}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\n/**\n * Validate receipt for Amazon. NOTE: This method is here for debugging purposes only. Including\n * your developer secret in the binary you ship to users is potentially dangerous.\n * Use server side validation instead for your production builds\n * @param {string} developerSecret: from the Amazon developer console.\n * @param {string} userId who purchased the item.\n * @param {string} receiptId long obfuscated string returned when purchasing the item\n * @param {boolean} useSandbox Defaults to true, use sandbox environment or production.\n * @returns {Promise<object>}\n */\nexport const validateReceiptAmazon = async (\n developerSecret: string,\n userId: string,\n receiptId: string,\n useSandbox: boolean = true,\n): Promise<Amazon.ReceiptType> => {\n const sandBoxUrl = useSandbox ? 'sandbox/' : '';\n const url = `https://appstore-sdk.amazon.com/${sandBoxUrl}version/1.0/verifyReceiptId/developer/${developerSecret}/user/${userId}/receiptId/${receiptId}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw Object.assign(new Error(response.statusText), {\n statusCode: response.status,\n });\n }\n\n return response.json();\n};\n\n/**\n * Add IAP purchase event\n * @returns {callback(e: InAppPurchase | ProductPurchase)}\n */\nexport const purchaseUpdatedListener = (\n listener: (event: InAppPurchase | SubscriptionPurchase) => void,\n): EmitterSubscription => {\n const emitterSubscription = new NativeEventEmitter(\n getNativeModule(),\n ).addListener('purchase-updated', listener);\n\n if (isAndroid) {\n getAndroidModule().startListening();\n }\n\n return emitterSubscription;\n};\n\n/**\n * Add IAP purchase error event\n * @returns {callback(e: PurchaseError)}\n */\nexport const purchaseErrorListener = (\n listener: (errorEvent: PurchaseError) => void,\n): EmitterSubscription =>\n new NativeEventEmitter(getNativeModule()).addListener(\n 'purchase-error',\n listener,\n );\n\n/**\n * Add IAP promoted subscription event\n * Only available on iOS\n */\nexport const promotedProductListener = (\n listener: (productId?: string) => void,\n): EmitterSubscription | null => {\n if (isIos) {\n return new NativeEventEmitter(getIosModule()).addListener(\n 'iap-promoted-product',\n listener,\n );\n }\n return null;\n};\n\n/**\n * Get the current receipt base64 encoded in IOS.\n * @param {forceRefresh?:boolean}\n * @returns {Promise<ProductPurchase[]>}\n */\nexport const getPendingPurchasesIOS = async (): Promise<ProductPurchase[]> =>\n getIosModule().getPendingTransactions();\n\n/**\n * Get the current receipt base64 encoded in IOS.\n * @param {forceRefresh?:boolean}\n * @returns {Promise<string>}\n */\nexport const getReceiptIOS = async (forceRefresh?: boolean): Promise<string> =>\n getIosModule().requestReceipt(forceRefresh ?? false);\n\n/**\n * Launches a modal to register the redeem offer code in IOS.\n * @returns {Promise<null>}\n */\nexport const presentCodeRedemptionSheetIOS = async (): Promise<null> =>\n getIosModule().presentCodeRedemptionSheet();\n"],"mappings":"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"}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["iap"],"sources":["index.ts"],"sourcesContent":["import * as iap from './iap';\n\nexport * from './types';\nexport * from './hooks/useIAP';\nexport * from './hooks/withIAPContext';\n\nexport default iap;\n"],"mappings":"AAAA,OAAO,KAAKA,GAAZ,MAAqB,OAArB;AAEA,cAAc,SAAd;AACA,cAAc,gBAAd;AACA,cAAc,wBAAd;AAEA,eAAeA,GAAf"}
|
|
1
|
+
{"version":3,"names":["iap"],"sources":["index.ts"],"sourcesContent":["import * as iap from './iap';\n\nexport * from './iap';\nexport * from './types';\nexport * from './hooks/useIAP';\nexport * from './hooks/withIAPContext';\n\nexport default iap;\n"],"mappings":"AAAA,OAAO,KAAKA,GAAZ,MAAqB,OAArB;AAEA,cAAc,OAAd;AACA,cAAc,SAAd;AACA,cAAc,gBAAd;AACA,cAAc,wBAAd;AAEA,eAAeA,GAAf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["IAPErrorCode","ProrationModesAndroid","PurchaseStateAndroid","PROMOTED_PRODUCT","InstallSourceAndroid"],"sources":["index.ts"],"sourcesContent":["export type Sku = string;\n\nexport enum IAPErrorCode {\n E_IAP_NOT_AVAILABLE = 'E_IAP_NOT_AVAILABLE',\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}\n\nexport enum ProrationModesAndroid {\n IMMEDIATE_WITH_TIME_PRORATION = 1,\n IMMEDIATE_AND_CHARGE_PRORATED_PRICE = 2,\n IMMEDIATE_WITHOUT_PRORATION = 3,\n DEFERRED = 4,\n UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY = 0,\n}\n\nexport enum PurchaseStateAndroid {\n UNSPECIFIED_STATE = 0,\n PURCHASED = 1,\n PENDING = 2,\n}\n\nexport const PROMOTED_PRODUCT = 'iap-promoted-product';\n\nexport enum InstallSourceAndroid {\n NOT_SET = 0,\n GOOGLE_PLAY = 1,\n AMAZON = 2,\n}\n\nexport interface ProductCommon {\n type: 'subs' | 'sub' | 'inapp' | 'iap';\n productId: string;\n productIds?: string[];\n title: string;\n description: string;\n price: string;\n currency: string;\n localizedPrice: string;\n countryCode?: string;\n}\n\nexport interface ProductPurchase {\n productId: string;\n transactionId?: string;\n transactionDate: number;\n transactionReceipt: string;\n purchaseToken?: string;\n //iOS\n quantityIOS?: number;\n originalTransactionDateIOS?: string;\n originalTransactionIdentifierIOS?: string;\n //Android\n productIds?: string[];\n dataAndroid?: string;\n signatureAndroid?: string;\n autoRenewingAndroid?: boolean;\n purchaseStateAndroid?: PurchaseStateAndroid;\n isAcknowledgedAndroid?: boolean;\n packageNameAndroid?: string;\n developerPayloadAndroid?: string;\n obfuscatedAccountIdAndroid?: string;\n obfuscatedProfileIdAndroid?: string;\n //Amazon\n userIdAmazon?: string;\n userMarketplaceAmazon?: string;\n userJsonAmazon?: string;\n isCanceledAmazon?: boolean;\n}\n\nexport interface PurchaseResult {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n}\n\nexport interface PurchaseError {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n productId?: string;\n}\n\nexport type InAppPurchase = ProductPurchase;\n\nexport interface SubscriptionPurchase extends ProductPurchase {\n autoRenewingAndroid?: boolean;\n originalTransactionDateIOS?: string;\n originalTransactionIdentifierIOS?: string;\n}\n\nexport type Purchase = InAppPurchase | SubscriptionPurchase;\n\nexport interface Discount {\n identifier: string;\n type: string;\n numberOfPeriods: string;\n price: string;\n localizedPrice: string;\n paymentMode: '' | 'FREETRIAL' | 'PAYASYOUGO' | 'PAYUPFRONT';\n subscriptionPeriod: string;\n}\n\nexport interface Product extends ProductCommon {\n type: 'inapp' | 'iap';\n}\n\n//Android V5\nexport interface SubscriptionAndroid extends ProductCommon {\n type: 'subs';\n\n productType?: string;\n name?: string;\n
|
|
1
|
+
{"version":3,"names":["IAPErrorCode","ProrationModesAndroid","PurchaseStateAndroid","PROMOTED_PRODUCT","InstallSourceAndroid"],"sources":["index.ts"],"sourcesContent":["export type Sku = string;\n\nexport enum IAPErrorCode {\n E_IAP_NOT_AVAILABLE = 'E_IAP_NOT_AVAILABLE',\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}\n\nexport enum ProrationModesAndroid {\n IMMEDIATE_WITH_TIME_PRORATION = 1,\n IMMEDIATE_AND_CHARGE_PRORATED_PRICE = 2,\n IMMEDIATE_WITHOUT_PRORATION = 3,\n DEFERRED = 4,\n UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY = 0,\n}\n\nexport enum PurchaseStateAndroid {\n UNSPECIFIED_STATE = 0,\n PURCHASED = 1,\n PENDING = 2,\n}\n\nexport const PROMOTED_PRODUCT = 'iap-promoted-product';\n\nexport enum InstallSourceAndroid {\n NOT_SET = 0,\n GOOGLE_PLAY = 1,\n AMAZON = 2,\n}\n\nexport interface ProductCommon {\n type: 'subs' | 'sub' | 'inapp' | 'iap';\n productId: string;\n productIds?: string[];\n title: string;\n description: string;\n price: string;\n currency: string;\n localizedPrice: string;\n countryCode?: string;\n}\n\nexport interface ProductPurchase {\n productId: string;\n transactionId?: string;\n transactionDate: number;\n transactionReceipt: string;\n purchaseToken?: string;\n //iOS\n quantityIOS?: number;\n originalTransactionDateIOS?: string;\n originalTransactionIdentifierIOS?: string;\n //Android\n productIds?: string[];\n dataAndroid?: string;\n signatureAndroid?: string;\n autoRenewingAndroid?: boolean;\n purchaseStateAndroid?: PurchaseStateAndroid;\n isAcknowledgedAndroid?: boolean;\n packageNameAndroid?: string;\n developerPayloadAndroid?: string;\n obfuscatedAccountIdAndroid?: string;\n obfuscatedProfileIdAndroid?: string;\n //Amazon\n userIdAmazon?: string;\n userMarketplaceAmazon?: string;\n userJsonAmazon?: string;\n isCanceledAmazon?: boolean;\n}\n\nexport interface PurchaseResult {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n}\n\nexport interface PurchaseError {\n responseCode?: number;\n debugMessage?: string;\n code?: string;\n message?: string;\n productId?: string;\n}\n\nexport type InAppPurchase = ProductPurchase;\n\nexport interface SubscriptionPurchase extends ProductPurchase {\n autoRenewingAndroid?: boolean;\n originalTransactionDateIOS?: string;\n originalTransactionIdentifierIOS?: string;\n}\n\nexport type Purchase = InAppPurchase | SubscriptionPurchase;\n\nexport interface Discount {\n identifier: string;\n type: string;\n numberOfPeriods: string;\n price: string;\n localizedPrice: string;\n paymentMode: '' | 'FREETRIAL' | 'PAYASYOUGO' | 'PAYUPFRONT';\n subscriptionPeriod: string;\n}\n\nexport interface Product extends ProductCommon {\n type: 'inapp' | 'iap';\n // Android V5\n oneTimePurchaseOfferDetails?: {\n priceCurrencyCode: string;\n formattedPrice: string;\n priceAmountMicros: string;\n };\n}\n\n// Android V5\nexport interface SubscriptionAndroid extends ProductCommon {\n type: 'subs';\n\n productType?: string;\n name?: string;\n subscriptionOfferDetails?: {\n offerToken: string;\n pricingPhases: {\n pricingPhaseList: {\n formattedPrice: string;\n priceCurrencyCode: string;\n /**\n * P1W, P1M, P1Y\n */\n billingPeriod: string;\n billingCycleCount: number;\n priceAmountMicros: string;\n recurrenceMode: number;\n }[];\n };\n }[];\n}\n\nexport interface SubscriptionIOS extends ProductCommon {\n type: 'subs';\n\n discounts?: Discount[];\n introductoryPrice?: string;\n introductoryPriceAsAmountIOS?: string;\n introductoryPricePaymentModeIOS?:\n | ''\n | 'FREETRIAL'\n | 'PAYASYOUGO'\n | 'PAYUPFRONT';\n introductoryPriceNumberOfPeriodsIOS?: string;\n introductoryPriceSubscriptionPeriodIOS?:\n | 'DAY'\n | 'WEEK'\n | 'MONTH'\n | 'YEAR'\n | '';\n\n subscriptionPeriodNumberIOS?: string;\n subscriptionPeriodUnitIOS?: '' | 'YEAR' | 'MONTH' | 'WEEK' | 'DAY';\n}\n\nexport type Subscription = SubscriptionAndroid & SubscriptionIOS;\n\nexport interface RequestPurchaseBaseAndroid {\n obfuscatedAccountIdAndroid?: string;\n obfuscatedProfileIdAndroid?: string;\n isOfferPersonalized?: boolean; // For AndroidBilling V5 https://developer.android.com/google/play/billing/integrate#personalized-price\n}\n\nexport interface RequestPurchaseAndroid extends RequestPurchaseBaseAndroid {\n skus?: Sku[];\n}\n\nexport interface RequestPurchaseIOS {\n sku?: Sku;\n andDangerouslyFinishTransactionAutomaticallyIOS?: boolean;\n applicationUsername?: string;\n}\n\nexport type RequestPurchase = RequestPurchaseAndroid & RequestPurchaseIOS;\n\n/**\n * In order to purchase a new subscription, every sku must have a selected offerToken\n * @see SubscriptionAndroid.subscriptionOfferDetails.offerToken\n */\nexport interface SubscriptionOffer {\n sku: Sku;\n offerToken: string;\n}\n\nexport interface RequestSubscriptionAndroid extends RequestPurchaseBaseAndroid {\n purchaseTokenAndroid?: string;\n prorationModeAndroid?: ProrationModesAndroid;\n subscriptionOffers?: SubscriptionOffer[]; // For AndroidBilling V5\n}\n\nexport type RequestSubscriptionIOS = RequestPurchaseIOS;\n\nexport type RequestSubscription = RequestSubscriptionAndroid &\n RequestSubscriptionIOS;\n"],"mappings":"AAEA,WAAYA,YAAZ;;WAAYA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;EAAAA,Y;GAAAA,Y,KAAAA,Y;;AAmBZ,WAAYC,qBAAZ;;WAAYA,qB;EAAAA,qB,CAAAA,qB;EAAAA,qB,CAAAA,qB;EAAAA,qB,CAAAA,qB;EAAAA,qB,CAAAA,qB;EAAAA,qB,CAAAA,qB;GAAAA,qB,KAAAA,qB;;AAQZ,WAAYC,oBAAZ;;WAAYA,oB;EAAAA,oB,CAAAA,oB;EAAAA,oB,CAAAA,oB;EAAAA,oB,CAAAA,oB;GAAAA,oB,KAAAA,oB;;AAMZ,OAAO,MAAMC,gBAAgB,GAAG,sBAAzB;AAEP,WAAYC,oBAAZ;;WAAYA,oB;EAAAA,oB,CAAAA,oB;EAAAA,oB,CAAAA,oB;EAAAA,oB,CAAAA,oB;GAAAA,oB,KAAAA,oB"}
|
package/lib/typescript/iap.d.ts
CHANGED
|
@@ -69,7 +69,7 @@ export declare const requestPurchase: ({ sku, andDangerouslyFinishTransactionAut
|
|
|
69
69
|
* @param {ProrationModesAndroid} [prorationModeAndroid] UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY, IMMEDIATE_WITH_TIME_PRORATION, IMMEDIATE_AND_CHARGE_PRORATED_PRICE, IMMEDIATE_WITHOUT_PRORATION, DEFERRED
|
|
70
70
|
* @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.
|
|
71
71
|
* @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.
|
|
72
|
-
* @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every
|
|
72
|
+
* @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every sku must be paired with a corresponding offerToken
|
|
73
73
|
* @returns {Promise<SubscriptionPurchase | null>} Promise resolves to null when using proratioModesAndroid=DEFERRED, and to a SubscriptionPurchase otherwise
|
|
74
74
|
*/
|
|
75
75
|
export declare const requestSubscription: ({ sku, andDangerouslyFinishTransactionAutomaticallyIOS, purchaseTokenAndroid, prorationModeAndroid, obfuscatedAccountIdAndroid, obfuscatedProfileIdAndroid, subscriptionOffers, isOfferPersonalized, applicationUsername, }: RequestSubscription) => Promise<SubscriptionPurchase | null>;
|
|
@@ -101,26 +101,29 @@ export interface Discount {
|
|
|
101
101
|
}
|
|
102
102
|
export interface Product extends ProductCommon {
|
|
103
103
|
type: 'inapp' | 'iap';
|
|
104
|
+
oneTimePurchaseOfferDetails?: {
|
|
105
|
+
priceCurrencyCode: string;
|
|
106
|
+
formattedPrice: string;
|
|
107
|
+
priceAmountMicros: string;
|
|
108
|
+
};
|
|
104
109
|
}
|
|
105
110
|
export interface SubscriptionAndroid extends ProductCommon {
|
|
106
111
|
type: 'subs';
|
|
107
112
|
productType?: string;
|
|
108
113
|
name?: string;
|
|
109
|
-
oneTimePurchaseOfferDetails?: {
|
|
110
|
-
priceCurrencyCode?: string;
|
|
111
|
-
formattedPrice?: string;
|
|
112
|
-
priceAmountMicros?: string;
|
|
113
|
-
}[];
|
|
114
114
|
subscriptionOfferDetails?: {
|
|
115
|
-
offerToken
|
|
115
|
+
offerToken: string;
|
|
116
116
|
pricingPhases: {
|
|
117
117
|
pricingPhaseList: {
|
|
118
|
-
formattedPrice
|
|
119
|
-
priceCurrencyCode
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
118
|
+
formattedPrice: string;
|
|
119
|
+
priceCurrencyCode: string;
|
|
120
|
+
/**
|
|
121
|
+
* P1W, P1M, P1Y
|
|
122
|
+
*/
|
|
123
|
+
billingPeriod: string;
|
|
124
|
+
billingCycleCount: number;
|
|
125
|
+
priceAmountMicros: string;
|
|
126
|
+
recurrenceMode: number;
|
|
124
127
|
}[];
|
|
125
128
|
};
|
|
126
129
|
}[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-iap",
|
|
3
|
-
"version": "9.0.0
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"description": "React Native In App Purchase Module.",
|
|
5
5
|
"repository": "https://github.com/dooboolab/react-native-iap",
|
|
6
6
|
"author": "dooboolab <support@dooboolab.com> (https://github.com/dooboolab)",
|
|
@@ -81,6 +81,7 @@
|
|
|
81
81
|
"babel-jest": "28.1.3",
|
|
82
82
|
"eslint": "8.20.0",
|
|
83
83
|
"eslint-config-prettier": "8.5.0",
|
|
84
|
+
"eslint-plugin-jest": "26.8.2",
|
|
84
85
|
"eslint-plugin-prettier": "4.2.1",
|
|
85
86
|
"eslint-plugin-simple-import-sort": "7.0.0",
|
|
86
87
|
"jest": "28.1.3",
|
package/src/iap.ts
CHANGED
|
@@ -327,7 +327,7 @@ export const requestPurchase = ({
|
|
|
327
327
|
* @param {ProrationModesAndroid} [prorationModeAndroid] UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY, IMMEDIATE_WITH_TIME_PRORATION, IMMEDIATE_AND_CHARGE_PRORATED_PRICE, IMMEDIATE_WITHOUT_PRORATION, DEFERRED
|
|
328
328
|
* @param {string} [obfuscatedAccountIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's account in your app.
|
|
329
329
|
* @param {string} [obfuscatedProfileIdAndroid] Specifies an optional obfuscated string that is uniquely associated with the user's profile in your app.
|
|
330
|
-
* @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every
|
|
330
|
+
* @param {SubscriptionOffers[]} [subscriptionOffers] Array of SubscriptionOffers. Every sku must be paired with a corresponding offerToken
|
|
331
331
|
* @returns {Promise<SubscriptionPurchase | null>} Promise resolves to null when using proratioModesAndroid=DEFERRED, and to a SubscriptionPurchase otherwise
|
|
332
332
|
*/
|
|
333
333
|
export const requestSubscription = ({
|
package/src/index.ts
CHANGED
package/src/types/index.ts
CHANGED
|
@@ -118,29 +118,33 @@ export interface Discount {
|
|
|
118
118
|
|
|
119
119
|
export interface Product extends ProductCommon {
|
|
120
120
|
type: 'inapp' | 'iap';
|
|
121
|
+
// Android V5
|
|
122
|
+
oneTimePurchaseOfferDetails?: {
|
|
123
|
+
priceCurrencyCode: string;
|
|
124
|
+
formattedPrice: string;
|
|
125
|
+
priceAmountMicros: string;
|
|
126
|
+
};
|
|
121
127
|
}
|
|
122
128
|
|
|
123
|
-
//Android V5
|
|
129
|
+
// Android V5
|
|
124
130
|
export interface SubscriptionAndroid extends ProductCommon {
|
|
125
131
|
type: 'subs';
|
|
126
132
|
|
|
127
133
|
productType?: string;
|
|
128
134
|
name?: string;
|
|
129
|
-
oneTimePurchaseOfferDetails?: {
|
|
130
|
-
priceCurrencyCode?: string;
|
|
131
|
-
formattedPrice?: string;
|
|
132
|
-
priceAmountMicros?: string;
|
|
133
|
-
}[];
|
|
134
135
|
subscriptionOfferDetails?: {
|
|
135
|
-
offerToken
|
|
136
|
+
offerToken: string;
|
|
136
137
|
pricingPhases: {
|
|
137
138
|
pricingPhaseList: {
|
|
138
|
-
formattedPrice
|
|
139
|
-
priceCurrencyCode
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
formattedPrice: string;
|
|
140
|
+
priceCurrencyCode: string;
|
|
141
|
+
/**
|
|
142
|
+
* P1W, P1M, P1Y
|
|
143
|
+
*/
|
|
144
|
+
billingPeriod: string;
|
|
145
|
+
billingCycleCount: number;
|
|
146
|
+
priceAmountMicros: string;
|
|
147
|
+
recurrenceMode: number;
|
|
144
148
|
}[];
|
|
145
149
|
};
|
|
146
150
|
}[];
|
|
@@ -188,6 +192,7 @@ export interface RequestPurchaseIOS {
|
|
|
188
192
|
}
|
|
189
193
|
|
|
190
194
|
export type RequestPurchase = RequestPurchaseAndroid & RequestPurchaseIOS;
|
|
195
|
+
|
|
191
196
|
/**
|
|
192
197
|
* In order to purchase a new subscription, every sku must have a selected offerToken
|
|
193
198
|
* @see SubscriptionAndroid.subscriptionOfferDetails.offerToken
|
|
@@ -196,6 +201,7 @@ export interface SubscriptionOffer {
|
|
|
196
201
|
sku: Sku;
|
|
197
202
|
offerToken: string;
|
|
198
203
|
}
|
|
204
|
+
|
|
199
205
|
export interface RequestSubscriptionAndroid extends RequestPurchaseBaseAndroid {
|
|
200
206
|
purchaseTokenAndroid?: string;
|
|
201
207
|
prorationModeAndroid?: ProrationModesAndroid;
|