import { EmitterSubscription } from 'react-native'; import * as Apple from './apple' interface Common { title: string description: string price: string currency: string localizedPrice: string } export interface Product extends Common { type: 'inapp' | 'iap' productId: ID } export interface Subscription extends Common { type: 'subs' | 'sub' productId: ID introductoryPrice?: string introductoryPricePaymentModeIOS?: string introductoryPriceNumberOfPeriods?: number introductoryPriceSubscriptionPeriod: object subscriptionPeriodNumberIOS?: string subscriptionPeriodUnitIOS?: number introductoryPriceCyclesAndroid?: number introductoryPricePeriodAndroid?: string subscriptionPeriodAndroid?: string freeTrialPeriodAndroid: string } export interface ProductPurchase { productId: string; transactionId: string; transactionDate: string; transactionReceipt: string; signatureAndroid?: string; dataAndroid?: string; purchaseToken?: string; } export interface SubscriptionPurchase extends ProductPurchase { autoRenewingAndroid: boolean; originalTransactionDateIOS: string; originalTransactionIdentifierIOS: string; } export type Purchase = ProductPurchase | SubscriptionPurchase /** * @deprecated Deprecated since 2.0.0. Prepare module for purchase flow. Required on Android. No-op on iOS. * @returns {Promise} */ export function prepare() : Promise; /** * Init module for purchase flow. Required on Android. In ios it will check wheter user canMakePayment. * @returns {Promise} */ export function initConnection() : Promise; /** * End billing client. Will enchance android app's performance by releasing service. No-op on iOS. * @returns {Promise} */ export function endConnection() : Promise; /** * Consume all items in android. No-op in iOS. * @returns {Promise} */ export function consumeAllItems() : Promise; /** * Get a list of products (consumable and non-consumable items, but not subscriptions) * @param skus The item skus */ export function getProducts(skus: [A, B, C, D, E, F]): Promise<[Product, Product, Product, Product, Product, Product]>; export function getProducts(skus: [A, B, C, D, E]): Promise<[Product, Product, Product, Product, Product]>; export function getProducts(skus: [A, B, C, D]): Promise<[Product, Product, Product, Product]>; export function getProducts(skus: [A, B, C]): Promise<[Product, Product, Product]>; export function getProducts(skus: [A, B]): Promise<[Product, Product]>; export function getProducts(skus: [A]): Promise<[Product]>; export function getProducts(skus: string[]): Promise[]>; /** * Get a list of subscriptions * @param skus The item skus */ export function getSubscriptions(skus: [A, B, C, D, E, F]): Promise<[Subscription, Subscription, Subscription, Subscription, Subscription, Subscription]>; export function getSubscriptions(skus: [A, B, C, D, E]): Promise<[Subscription, Subscription, Subscription, Subscription, Subscription]>; export function getSubscriptions(skus: [A, B, C, D]): Promise<[Subscription, Subscription, Subscription, Subscription]>; export function getSubscriptions(skus: [A, B, C]): Promise<[Subscription, Subscription, Subscription]>; export function getSubscriptions(skus: [A, B]): Promise<[Subscription, Subscription]>; export function getSubscriptions(skus: [A]): Promise<[Subscription]>; export function getSubscriptions(skus: string[]): Promise[]>; /** * Gets an invetory of purchases made by the user regardless of consumption status * @returns {Promise} */ export function getPurchaseHistory() : Promise; /** * Get all purchases made by the user (either non-consumable, or haven't been consumed yet) * @returns {Promise} */ export function getAvailablePurchases() : Promise; /** * Create a subscription to a sku * @param {string} sku The product's sku/ID * @param {string} [developerPayload] Optional developerPayload * @param {string} [oldSku] Optional old product's ID for upgrade/downgrade (Android only) * @param {number} [prorationMode] Optional proration mode for upgrade/downgrade (Android only) * @returns {Promise} */ export function buySubscription(sku: string, developerPayload?: string, oldSku?: string, prorationMode?: number) : Promise; /** * Buy a product * @param {string} sku The product's sku/ID * @returns {Promise} */ export function buyProduct(sku: string) : Promise; /** * Buy a product with a specified quantity (iOS only) * @param {string} sku The product's sku/ID * @param {number} quantity The amount of product to buy * @returns {Promise} */ export function buyProductWithQuantityIOS(sku: string, quantity: number) : Promise; /** * Buy a product without finish transanction to sync with IOS purchasing consumables. Make sure to call finishTransanction when you are done with it or the purchase may not be transferred. Also, note that this method is not changed from buyProduct in android. * @param {string} sku The product's sku/ID * @returns {Promise} */ export function buyProductWithoutFinishTransaction(sku: string) : Promise; /** * Clear Transaction (iOS only) * Finish remaining transactions. Related to issue #257 * link : https://github.com/dooboolab/react-native-iap/issues/257 * @returns void */ export function clearTransaction(): void; /** * Clear valid Products (iOS only) * Remove all products which are validated by Apple server. * @returns {null} */ export function clearProducts(): void; /** * Send finishTransaction call to Apple IAP server. Call this function after receipt validation process. * @returns void */ export function finishTransaction(): void; /** * Consume a product (on Android.) No-op on iOS. * @param {string} token The product's token (on Android) * @returns {Promise} */ export function consumePurchase(token: string) : Promise; /** * Validate receipt for iOS. * @param receiptBody the receipt body to send to apple server. * @param isTest whether this is in test environment which is sandbox. */ export function validateReceiptIos(receiptBody: Apple.ReceiptValidationRequest, isTest: boolean): Promise; /** * Validate receipt for Android. * @param packageName package name of your app. * @param productId product id for your in app product. * @param productToken token for your purchase. Found in `transanctionReceipt` after `buyProduct` method. * @param accessToken accessToken from googleApis. * @param isSub whether this is subscription or inapp. `true` for subscription. */ export function validateReceiptAndroid(packageName: string, productId: string, productToken: string, accessToken: string, isSub: boolean): Promise; /** * Add IAP purchase event in ios. * @returns {callback(e: Event)} */ export function addAdditionalSuccessPurchaseListenerIOS(fn: Function) : EmitterSubscription;