Files
awesome-cordova-plugins/src/@awesome-cordova-plugins/plugins/purchases/index.ts
T
Daniel Sogl e4af3a0390 feat(revenue) update to cordova 5 (#4693)
* feat(diagnostics): add missing constants and methods for latest plugin version (#4600)

* feat(cordova-plugin-firebase-model): Add new plugin to download and process ML model hosted in firebase. (#4608)

* feat(unvired-cordova-sdk): Add new function to regenrate the JWT Token

* feat(unvired-cordova-sdk): Add couple of properties to login parameters.

* feat(cordova-plugin-firebase-model): Add new plugin for downloading and processing ML model hosted in Firebase.

* fix(cordova-plugin-unvired-sdk): revert last set of changes.

* fix(cordova-plugin-unvired-sdk): Add two new login properties.

* fix(cordova-plugin-firebase-model): Delete the previously added plugin.

* Revert "fix(cordova-plugin-firebase-model): Delete the previously added plugin."

This reverts commit 86f39dc7e8.

* Revert "fix(cordova-plugin-unvired-sdk): Add two new login properties."

This reverts commit a79f31e12e.

* feat(clevertap): support clevertap-cordova 2.7.0 (#4617) [skip ci]

* feat(clevertap): add CleverTap plugin

* style(clevertap): cleanup stray lint error

* refactor

* feat(clevertap): update for latest CleverTap Cordova plugin

* chore: Update Repo from Ionic Native Repo

* fix: Code Changes for parity SDK-155

* fix: Indentation fixes for SDK-155

* fix: Code Repo fix while updating fork branch

* fix: Remove unnecessary adder .scripts Folder

* fix: Remove unwanted added folder .circleci

* fix: Remove unwanted added File .npmrc

* fix: Revert .Github Folder Changes to as per Ionic-Native master

* fix: Update changes as per ionic-native master

* fix: Code Repo fix while updating fork branch

fix: Remove unnecessary adder .scripts Folder

fix: Remove unwanted added folder .circleci

fix: Remove unwanted added File .npmrc

fix: Revert .Github Folder Changes to as per Ionic-Native master

fix: Update changes as per ionic-native master

* fix(CleverTap): Fix for missing methods issue #3491

* refactor(profile): remove setProfile methods for fb and google

* refactor(dynamic variables): remove Product A/B Testing (Dynamic Variables) code

* fix(product config): add key param to product config getters

* feat(identity): add a new public method getCleverTapID and deprecate existing CleverTapID methods

* feat(profile): add public methods to increment/decrement values set via User properties

* feat(profile): add public methods to increment/decrement values set via User properties

* feat(inapp): add public methods for suspending/discarding & resuming InApp Notifications

* feat(inbox): add new api for iOS to delete bulk inbox messages for given message ids

* refactor(xiaomi-push): add region as an extra mandatory parameter to setPushXiaomiToken

* Update index.ts to support cordova 2.7.0

* Update index.ts

---------

Co-authored-by: Peter Wilkniss <peter@clevertap.com>
Co-authored-by: Daniel Sogl <mytechde@outlook.com>
Co-authored-by: Darshan Pania <darshan@clevertap.com>
Co-authored-by: Surya <suryanarayan@clevertap.com>
Co-authored-by: SuryaClevertap <63039490+SuryaClevertap@users.noreply.github.com>
Co-authored-by: Piyush Kukadiya <piyush.kukadiya@clevertap.com>
Co-authored-by: piyush-kukadiya <61137760+piyush-kukadiya@users.noreply.github.com>

* feat(save-dialog): add plugin (#4618)

* smtp-client

* fix plugin ref

* cloud settings

* + save-dialog

---------

Co-authored-by: Daniel Sogl <daniel@sogls.de>

* Update to cordova 5 (#98)

---------

Co-authored-by: Dave Alden <dpa99c@gmail.com>
Co-authored-by: Srinidhi <srinidhi.rao@unvired.com>
Co-authored-by: AishwaryaNanna <97506871+AishwaryaNanna@users.noreply.github.com>
Co-authored-by: Peter Wilkniss <peter@clevertap.com>
Co-authored-by: Darshan Pania <darshan@clevertap.com>
Co-authored-by: Surya <suryanarayan@clevertap.com>
Co-authored-by: SuryaClevertap <63039490+SuryaClevertap@users.noreply.github.com>
Co-authored-by: Piyush Kukadiya <piyush.kukadiya@clevertap.com>
Co-authored-by: piyush-kukadiya <61137760+piyush-kukadiya@users.noreply.github.com>
Co-authored-by: marysuon <marysuon@gmail.com>
Co-authored-by: Cesar de la Vega <cesarvegaro@gmail.com>
2023-12-19 21:58:30 +01:00

1689 lines
55 KiB
TypeScript

import { Injectable } from '@angular/core';
import { Plugin, Cordova, AwesomeCordovaNativePlugin } from '@awesome-cordova-plugins/core';
import { Observable } from 'rxjs';
export enum ATTRIBUTION_NETWORK {
APPLE_SEARCH_ADS = 0,
ADJUST = 1,
APPSFLYER = 2,
BRANCH = 3,
TENJIN = 4,
FACEBOOK = 5,
}
export enum PURCHASE_TYPE {
/**
* A type of SKU for in-app products.
*/
INAPP = 'inapp',
/**
* A type of SKU for subscriptions.
*/
SUBS = 'subs',
}
/**
* Enum for billing features.
* Currently, these are only relevant for Google Play Android users:
* https://developer.android.com/reference/com/android/billingclient/api/BillingClient.FeatureType
*/
export enum BILLING_FEATURE {
/**
* Purchase/query for subscriptions.
*/
SUBSCRIPTIONS,
/**
* Subscriptions update/replace.
*/
SUBSCRIPTIONS_UPDATE,
/**
* Purchase/query for in-app items on VR.
*/
IN_APP_ITEMS_ON_VR,
/**
* Purchase/query for subscriptions on VR.
*/
SUBSCRIPTIONS_ON_VR,
/**
* Launch a price change confirmation flow.
*/
PRICE_CHANGE_CONFIRMATION,
}
export enum REFUND_REQUEST_STATUS {
/**
* Apple has received the refund request.
*/
SUCCESS,
/**
* User canceled submission of the refund request.
*/
USER_CANCELLED,
/**
* There was an error with the request. See message for more details.
*/
ERROR,
}
export enum PRORATION_MODE {
UNKNOWN_SUBSCRIPTION_UPGRADE_DOWNGRADE_POLICY = 0,
/**
* Replacement takes effect immediately, and the remaining time will be
* prorated and credited to the user. This is the current default behavior.
*/
IMMEDIATE_WITH_TIME_PRORATION = 1,
/**
* Replacement takes effect immediately, and the billing cycle remains the
* same. The price for the remaining period will be charged. This option is
* only available for subscription upgrade.
*/
IMMEDIATE_AND_CHARGE_PRORATED_PRICE = 2,
/**
* Replacement takes effect immediately, and the new price will be charged on
* next recurrence time. The billing cycle stays the same.
*/
IMMEDIATE_WITHOUT_PRORATION = 3,
/**
* Replacement takes effect immediately, and the user is charged full price
* of new plan and is given a full billing cycle of subscription,
* plus remaining prorated time from the old plan.
*/
IMMEDIATE_AND_CHARGE_FULL_PRICE = 5,
}
export enum PACKAGE_TYPE {
/**
* A package that was defined with a custom identifier.
*/
UNKNOWN = 'UNKNOWN',
/**
* A package that was defined with a custom identifier.
*/
CUSTOM = 'CUSTOM',
/**
* A package configured with the predefined lifetime identifier.
*/
LIFETIME = 'LIFETIME',
/**
* A package configured with the predefined annual identifier.
*/
ANNUAL = 'ANNUAL',
/**
* A package configured with the predefined six month identifier.
*/
SIX_MONTH = 'SIX_MONTH',
/**
* A package configured with the predefined three month identifier.
*/
THREE_MONTH = 'THREE_MONTH',
/**
* A package configured with the predefined two month identifier.
*/
TWO_MONTH = 'TWO_MONTH',
/**
* A package configured with the predefined monthly identifier.
*/
MONTHLY = 'MONTHLY',
/**
* A package configured with the predefined weekly identifier.
*/
WEEKLY = 'WEEKLY',
}
export enum INTRO_ELIGIBILITY_STATUS {
/**
* RevenueCat doesn't have enough information to determine eligibility.
*/
INTRO_ELIGIBILITY_STATUS_UNKNOWN = 0,
/**
* The user is not eligible for a free trial or intro pricing for this product.
*/
INTRO_ELIGIBILITY_STATUS_INELIGIBLE,
/**
* The user is eligible for a free trial or intro pricing for this product.
*/
INTRO_ELIGIBILITY_STATUS_ELIGIBLE,
/**
* There is no free trial or intro pricing for this product.
*/
INTRO_ELIGIBILITY_STATUS_NO_INTRO_OFFER_EXISTS,
}
export enum LOG_LEVEL {
VERBOSE = 'VERBOSE',
DEBUG = 'DEBUG',
INFO = 'INFO',
WARN = 'WARN',
ERROR = 'ERROR',
}
/**
* Enum for in-app message types.
* This can be used if you disable automatic in-app message from showing automatically.
* Then, you can pass what type of messages you want to show in the `showInAppMessages`
* method in Purchases.
*/
export enum IN_APP_MESSAGE_TYPE {
// Make sure the enum values are in sync with those defined in iOS/Android
/**
* In-app messages to indicate there has been a billing issue charging the user.
*/
BILLING_ISSUE = 0,
/**
* iOS-only. This message will show if you increase the price of a subscription and
* the user needs to opt-in to the increase.
*/
PRICE_INCREASE_CONSENT = 1,
/**
* iOS-only. StoreKit generic messages.
*/
GENERIC = 2,
}
export enum PRODUCT_CATEGORY {
/**
* A type of product for non-subscription.
*/
NON_SUBSCRIPTION = 'NON_SUBSCRIPTION',
/**
* A type of product for subscriptions.
*/
SUBSCRIPTION = 'SUBSCRIPTION',
/**
* A type of product for unknowns.
*/
UNKNOWN = 'UNKNOWN',
}
/**
* Recurrence mode for a pricing phase
*/
export enum RECURRENCE_MODE {
/**
* Pricing phase repeats infinitely until cancellation
*/
INFINITE_RECURRING = 1,
/**
* Pricing phase repeats for a fixed number of billing periods
*/
FINITE_RECURRING = 2,
/**
* Pricing phase does not repeat
*/
NON_RECURRING = 3,
}
/**
* Payment mode for offer pricing phases. Google Play only.
*/
export enum OFFER_PAYMENT_MODE {
/**
* Subscribers don't pay until the specified period ends
*/
FREE_TRIAL = 'FREE_TRIAL',
/**
* Subscribers pay up front for a specified period
*/
SINGLE_PAYMENT = 'SINGLE_PAYMENT',
/**
* Subscribers pay a discounted amount for a specified number of periods
*/
DISCOUNTED_RECURRING_PAYMENT = 'DISCOUNTED_RECURRING_PAYMENT',
}
/**
* Time duration unit for Period.
*/
export enum PERIOD_UNIT {
DAY = 'DAY',
WEEK = 'WEEK',
MONTH = 'MONTH',
YEAR = 'YEAR',
UNKNOWN = 'UNKNOWN',
}
/**
* @name Purchases
* @description
* *Purchases* is a client for the [RevenueCat](https://www.revenuecat.com/) subscription and purchase tracking system.
* It is an open source framework that provides a wrapper around `BillingClient`, `StoreKit` and the RevenueCat backend
* to make implementing in-app subscriptions easy - receipt validation and status tracking included!
*
* ## Features
* | | RevenueCat |
* | --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
* | ✅ | Server-side receipt validation |
* | ➡️ | [Webhooks](https://docs.revenuecat.com/docs/webhooks) - enhanced server-to-server communication with events for purchases, renewals, cancellations, and more |
* | 🎯 | Subscription status tracking - know whether a user is subscribed whether they're on iOS, Android or web |
* | 📊 | Analytics - automatic calculation of metrics like conversion, mrr, and churn |
* | 📝 | [Online documentation](https://docs.revenuecat.com/docs) up to date |
* | 🔀 | [Integrations](https://www.revenuecat.com/integrations) - over a dozen integrations to easily send purchase data where you need it |
* | 💯 | Well maintained - [frequent releases](https://github.com/RevenueCat/cordova-plugin-purchases/releases) |
* | 📮 | Great support - [Help Center](https://revenuecat.zendesk.com) |
* | 🤩 | Awesome [new features](https://trello.com/b/RZRnWRbI/revenuecat-product-roadmap) |
*
* ## Capacitor
*
* The Cordova plugin is not guaranteed to be up to date and we are moving our efforts to the Capacitor plugin.
* Please consider using our [Capacitor plugin](https://docs.revenuecat.com/docs/capacitor) instead of the Cordova plugin and this wrapper.
*
* ## Getting Started
*
* Please follow the [Quickstart Guide](https://docs.revenuecat.com/docs/) for more information on how to use the SDK
*
* ## Latest changes to this plugin
*
* This latest release updates the plugin to use BillingClient 6 in Android. If you come from an older version of the
* RevenueCat SDK, see [Android Native - 5.x to 6.x Migration](https://www.revenuecat.com/docs/android-native-5x-to-6x-migration)
* for a more thorough explanation of the new Google subscription model announced with BillingClient 5 and how to take advantage of it.
*
* If your app supports product changes using [DEFERRED replacement mode](https://www.revenuecat.com/docs/managing-subscriptions#google-play),
* then you can either stick with the previous major version until support for DEFERRED is re-introduced in this major version,
* or you can remove DEFERRED replacement options from your app.
*
* @usage
*
* ### Requirements
* Requires XCode 13.2+ and minimum target iOS 11.0+
* This plugin has been tested with cordova-plugin-purchases@5.x.x
* @interfaces
* PurchasesError
* IntroEligibility
* UpgradeInfo
* PurchasesOfferings
* PurchasesOffering
* PurchasesPackage
* PurchasesStoreProduct
* CustomerInfo
* PurchasesEntitlementInfos
* PurchasesEntitlementInfo
* PurchasesStoreTransaction
*/
@Plugin({
pluginName: 'Purchases',
plugin: 'cordova-plugin-purchases@5.0.0',
pluginRef: 'Purchases', // the variable reference to call the plugin, example: navigator.geolocation
repo: 'https://github.com/RevenueCat/cordova-plugin-purchases', // the github repository URL for the plugin
platforms: ['Android', 'iOS'], // Array of platforms supported, example: ['Android', 'iOS']
})
@Injectable({
providedIn: 'root',
})
export class Purchases extends AwesomeCordovaNativePlugin {
/**
* Enum for attribution networks
*
* @readonly
* @enum {number}
*/
static ATTRIBUTION_NETWORK = ATTRIBUTION_NETWORK;
/**
* Supported SKU types.
*
* @readonly
* @enum {string}
*/
static PURCHASE_TYPE = PURCHASE_TYPE;
/**
* Supported product categories.
* @readonly
* @enum {string}
*/
public static PRODUCT_CATEGORY = PRODUCT_CATEGORY;
/**
* Enum for billing features.
* Currently, these are only relevant for Google Play Android users:
* https://developer.android.com/reference/com/android/billingclient/api/BillingClient.FeatureType
*/
static BILLING_FEATURE = BILLING_FEATURE;
/**
* Enum with possible return states for beginning refund request.
* @readonly
* @enum {string}
*/
static REFUND_REQUEST_STATUS = REFUND_REQUEST_STATUS;
/**
* Replace SKU's ProrationMode.
*
* @readonly
* @enum {number}
*/
static PRORATION_MODE = PRORATION_MODE;
/**
* Enumeration of all possible Package types.
*
* @readonly
* @enum {string}
*/
static PACKAGE_TYPE = PACKAGE_TYPE;
/**
* Enum of different possible states for intro price eligibility status.
*
* @readonly
* @enum {number}
*/
static INTRO_ELIGIBILITY_STATUS = INTRO_ELIGIBILITY_STATUS;
/**
* Enum of different possible log levels.
*
* @readonly
* @enum {string}
*/
static LOG_LEVEL = LOG_LEVEL;
/**
* Enum of different possible in-app message types.
*
* @readonly
* @enum {string}
*/
static IN_APP_MESSAGE_TYPE = IN_APP_MESSAGE_TYPE;
/**
* @deprecated Use {@link configureWith} instead. It accepts a {@link PurchasesConfiguration} object which offers more flexibility.
*
* Sets up Purchases with your API key and an app user id.
*
* @param {string} apiKey RevenueCat API Key. Needs to be a string
* @param {string?} appUserID A unique id for identifying the user
* @param {boolean} observerMode An optional boolean. Set this to TRUE if you have your own IAP implementation and
* want to use only RevenueCat's backend. Default is FALSE. If you are on Android and setting this to ON, you will have
* to acknowledge the purchases yourself.
* @param {string?} userDefaultsSuiteName An optional string. iOS-only, will be ignored for Android.
* Set this if you would like the RevenueCat SDK to store its preferences in a different NSUserDefaults
* suite, otherwise it will use standardUserDefaults. Default is null, which will make the SDK use standardUserDefaults.
*/
@Cordova({ sync: true })
configure(apiKey: string, appUserID?: string | null, observerMode = false, userDefaultsSuiteName?: string): void {}
/**
* Sets up Purchases with your API key and an app user id.
* @param {PurchasesConfiguration} configuration containing configuration parameters
*/
@Cordova({ sync: true })
configureWith(configuration: PurchasesConfiguration): void {}
/**
* Gets the Offerings configured in the dashboard
*
* @returns Will return a [PurchasesError] if the offerings are not properly configured in RevenueCat or if there is another error retrieving them.
*/
@Cordova()
getOfferings(): Promise<PurchasesOfferings> {
return;
}
/**
* Fetch the product info
*
* @param {string[]} productIdentifiers Array of product identifiers
* @param {PURCHASE_TYPE} type Optional type of products to fetch, can be inapp or subs. Subs by default
* @returns {Promise<PurchasesStoreProduct[]>} Will return a [PurchasesError] if the products are not properly configured in RevenueCat or if there is another error retrieving them.
*/
@Cordova({
successIndex: 1,
errorIndex: 2,
})
getProducts(
productIdentifiers: string[],
type: PURCHASE_TYPE = PURCHASE_TYPE.SUBS
): Promise<PurchasesStoreProduct[]> {
return;
}
/**
* Make a purchase
*
* @param {string} productIdentifier The product identifier of the product you want to purchase.
* @param {UpgradeInfo} upgradeInfo Android only. Optional UpgradeInfo you wish to upgrade from containing the oldSKU
* and the optional prorationMode.
* @param {PURCHASE_TYPE} type Optional type of product, can be inapp or subs. Subs by default
*/
@Cordova({
successIndex: 1,
errorIndex: 2,
})
purchaseProduct(
productIdentifier: string,
upgradeInfo?: UpgradeInfo | null,
type: PURCHASE_TYPE = PURCHASE_TYPE.SUBS
): Promise<{ productIdentifier: string; customerInfo: CustomerInfo }> {
return;
}
/**
* Make a purchase
*
* @param {PurchasesStoreProduct} product The product you want to purchase
* @param {GoogleProductChangeInfo} googleProductChangeInfo Android only. Optional GoogleProductChangeInfo you
* wish to upgrade from containing the oldProductIdentifier and the optional prorationMode.
* @param {boolean} googleIsPersonalizedPrice Android and Google only. Optional boolean indicates personalized pricing on products available for purchase in the EU.
* For compliance with EU regulations. User will see "This price has been customized for you" in the purchase dialog when true.
* See https://developer.android.com/google/play/billing/integrate#personalized-price for more info.
*
*/
@Cordova({
successIndex: 1,
errorIndex: 2,
})
purchaseStoreProduct(
product: PurchasesStoreProduct,
googleProductChangeInfo?: GoogleProductChangeInfo | null,
googleIsPersonalizedPrice = false
): Promise<{ productIdentifier: string; customerInfo: CustomerInfo }> {
return;
}
/**
* Make a purchase
*
* @param {PurchasesPackage} aPackage The Package you wish to purchase. You can get the Packages by calling getOfferings
* @param {UpgradeInfo} upgradeInfo Android only. Optional UpgradeInfo you wish to upgrade from containing the oldSKU
* and the optional prorationMode.
* @param {GoogleProductChangeInfo} googleProductChangeInfo Android only. Optional GoogleProductChangeInfo you
* wish to upgrade from containing the oldProductIdentifier and the optional prorationMode.
* @param {boolean} googleIsPersonalizedPrice Android and Google only. Optional boolean indicates personalized pricing
* on products available for purchase in the EU. For compliance with EU regulations.
* User will see "This price has been customized for you" in the purchase dialog when true.
* See https://developer.android.com/google/play/billing/integrate#personalized-price for more info.
*
*/
@Cordova({
successIndex: 1,
errorIndex: 2,
})
purchasePackage(
aPackage: PurchasesPackage,
upgradeInfo?: UpgradeInfo | null,
googleProductChangeInfo?: GoogleProductChangeInfo | null,
googleIsPersonalizedPrice = false
): Promise<{ productIdentifier: string; customerInfo: CustomerInfo }> {
return;
}
/**
* Google only. Make a purchase of a subscriptionOption
*
* @param {SubscriptionOption} subscriptionOption The SubscriptionOption you wish to purchase. You can get the
* SubscriptionOption from StoreProducts by calling getOfferings
* @param {GoogleProductChangeInfo} googleProductChangeInfo Android only. Optional GoogleProductChangeInfo you
* wish to upgrade from containing the oldProductIdentifier and the optional prorationMode.
* @param {boolean} googleIsPersonalizedPrice Android and Google only. Optional boolean indicates personalized pricing
* on products available for purchase in the EU. For compliance with EU regulations.
* User will see "This price has been customized for you" in the purchase dialog when true.
* See https://developer.android.com/google/play/billing/integrate#personalized-price for more info.
*
*/
@Cordova({
successIndex: 1,
errorIndex: 2,
})
public static purchaseSubscriptionOption(
subscriptionOption: SubscriptionOption,
googleProductChangeInfo?: GoogleProductChangeInfo | null,
googleIsPersonalizedPrice = false
): Promise<{ productIdentifier: string; customerInfo: CustomerInfo }> {
return;
}
/**
* Restores a user's previous purchases and links their appUserIDs to any user's also using those purchases.
*
*/
@Cordova()
restorePurchases(): Promise<CustomerInfo> {
return;
}
/**
* Get the appUserID that is currently in placed in the SDK
*/
@Cordova({ sync: true })
getAppUserID(): string {
return;
}
/**
* This function will logIn the current user with an appUserID. Typically this would be used after a log in
* to identify a user without calling configure.
*
* @param {string} appUserID The appUserID that should be linked to the currently user
*/
@Cordova()
logIn(appUserID: string): Promise<LogInResult> {
return;
}
/**
* Logs out the Purchases client clearing the saved appUserID. This will generate a random user id and save it in the cache.
* If the current user is already anonymous, this will produce a PurchasesError.
*/
@Cordova()
logOut(): Promise<CustomerInfo> {
return;
}
/**
* Gets the current purchaser info. This call will return the cached purchaser info unless the cache is stale, in which case,
* it will make a network call to retrieve it from the servers.
*/
@Cordova()
getCustomerInfo(): Promise<CustomerInfo> {
return;
}
/**
* Returns an observable that can be used to receive updates on the purchaser info
*/
@Cordova({
eventObservable: true,
event: 'onCustomerInfoUpdated',
element: 'window',
})
onCustomerInfoUpdated(): Observable<CustomerInfo> {
return;
}
/**
* @deprecated Use {@link setLogLevel} instead.
*
* Enables/Disables debugs logs
*
* @param {boolean} enabled true to enable debug logs, false to disable
*/
@Cordova({ sync: true })
setDebugLogsEnabled(enabled: boolean): void {}
/**
* Used to set the log level. Useful for debugging issues with the lovely team @RevenueCat.
* @param {LOG_LEVEL} level the minimum log level to enable.
*/
@Cordova({ sync: true })
setLogLevel(level: LOG_LEVEL): void {}
/**
* Set a custom log handler for redirecting logs to your own logging system.
* By default, this sends info, warning, and error messages.
* If you wish to receive Debug level messages, see [setLogLevel].
*
* @param {LogHandler} logHandler It will get called for each log event.
* Use this function to redirect the log to your own logging system
*/
@Cordova({ sync: true })
setLogHandler(logHandler: LogHandler): void {}
/**
* iOS only.
*
* @param {boolean} enabled Set this property to true *only* when testing the ask-to-buy / SCA purchases flow.
* More information: http://errors.rev.cat/ask-to-buy
*/
@Cordova({ sync: true })
setSimulatesAskToBuyInSandbox(enabled: boolean): void {}
/**
* This method will send all the purchases to the RevenueCat backend. Call this when using your own implementation
* for subscriptions anytime a sync is needed, like after a successful purchase.
*
* @warning This function should only be called if you're not calling purchaseProduct.
*/
@Cordova({ sync: true })
syncPurchases(): void {}
/**
* This method will send a purchase to the RevenueCat backend. This function should only be called if you are
* in Amazon observer mode or performing a client side migration of your current users to RevenueCat.
*
* The receipt IDs are cached if successfully posted so they are not posted more than once.
*
* @param {string} productID Product ID associated to the purchase.
* @param {string} receiptID ReceiptId that represents the Amazon purchase.
* @param {string} amazonUserID Amazon's userID. This parameter will be ignored when syncing a Google purchase.
* @param {(string|null|undefined)} isoCurrencyCode Product's currency code in ISO 4217 format.
* @param {(number|null|undefined)} price Product's price.
*/
@Cordova({ sync: true })
syncObserverModeAmazonPurchase(
productID: string,
receiptID: string,
amazonUserID: string,
isoCurrencyCode?: string | null,
price?: number | null
): void {}
/**
* Enable automatic collection of Apple Search Ads attribution. Disabled by default.
*
* @param {boolean} enabled Enable or not automatic collection
*/
@Cordova({ sync: true })
setAutomaticAppleSearchAdsAttributionCollection(enabled: boolean): void {}
/**
* Enable automatic collection of Apple Search Ads attribution using AdServices. Disabled by default.
*/
@Cordova({ sync: true })
enableAdServicesAttributionTokenCollection(): void {}
/**
*/
@Cordova({ sync: true })
isAnonymous(): boolean {
return;
}
/**
* iOS only. Computes whether or not a user is eligible for the introductory pricing period of a given product.
* You should use this method to determine whether or not you show the user the normal product price or the
* introductory price. This also applies to trials (trials are considered a type of introductory pricing).
*
* @note Subscription groups are automatically collected for determining eligibility. If RevenueCat can't
* definitively compute the eligibility, most likely because of missing group information, it will return
* `INTRO_ELIGIBILITY_STATUS_UNKNOWN`. The best course of action on unknown status is to display the non-intro
* pricing, to not create a misleading situation. To avoid this, make sure you are testing with the latest version of
* iOS so that the subscription group can be collected by the SDK. Android always returns INTRO_ELIGIBILITY_STATUS_UNKNOWN.
* @param productIdentifiers Array of product identifiers for which you want to compute eligibility
*/
@Cordova()
checkTrialOrIntroductoryPriceEligibility(
productIdentifiers: string[]
): Promise<{ [productId: string]: IntroEligibility }> {
return;
}
/**
* Sets a function to be called on purchases initiated on the Apple App Store. This is only used in iOS.
*
* @param {ShouldPurchasePromoProductListener} shouldPurchasePromoProductListener Called when a user initiates a
* promotional in-app purchase from the App Store. If your app is able to handle a purchase at the current time, run
* the deferredPurchase function. If the app is not in a state to make a purchase: cache the deferredPurchase, then
* call the deferredPurchase when the app is ready to make the promotional purchase.
* If the purchase should never be made, you don't need to ever call the deferredPurchase and the app will not
* proceed with promotional purchases.
*/
@Cordova({ sync: true })
addShouldPurchasePromoProductListener(shouldPurchasePromoProductListener: ShouldPurchasePromoProductListener): void {}
/**
* Removes a given ShouldPurchasePromoProductListener
*
* @param {ShouldPurchasePromoProductListener} listenerToRemove ShouldPurchasePromoProductListener reference of the listener to remove
*/
@Cordova({ sync: true })
removeShouldPurchasePromoProductListener(listenerToRemove: ShouldPurchasePromoProductListener): boolean {
return;
}
/**
* Invalidates the cache for customer information.
*
* Most apps will not need to use this method; invalidating the cache can leave your app in an invalid state.
* Refer to https://docs.revenuecat.com/docs/customer-info#section-get-user-information for more information on
* using the cache properly.
*
* This is useful for cases where customer information might have been updated outside of the
* app, like if a promotional subscription is granted through the RevenueCat dashboard.
*/
@Cordova({ sync: true })
invalidateCustomerInfoCache(): void {}
/**
* iOS only. Presents a code redemption sheet, useful for redeeming offer codes
* Refer to https://docs.revenuecat.com/docs/ios-subscription-offers#offer-codes for more information on how
* to configure and use offer codes.
*/
@Cordova({ sync: true })
presentCodeRedemptionSheet(): void {}
/**
* Subscriber attributes are useful for storing additional, structured information on a user.
* Since attributes are writable using a public key they should not be used for
* managing secure or sensitive information such as subscription status, coins, etc.
*
* Key names starting with "$" are reserved names used by RevenueCat. For a full list of key
* restrictions refer to our guide: https://docs.revenuecat.com/docs/subscriber-attributes
*
* @param attributes Map of attributes by key. Set the value as an empty string to delete an attribute.
*/
@Cordova({ sync: true })
setAttributes(attributes: { [key: string]: string | null }): void {}
/**
* Subscriber attribute associated with the email address for the user
*
* @param email Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setEmail(email: string | null): void {}
/**
* Subscriber attribute associated with the phone number for the user
*
* @param phoneNumber Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setPhoneNumber(phoneNumber: string | null): void {}
/**
* Subscriber attribute associated with the display name for the user
*
* @param displayName Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setDisplayName(displayName: string | null): void {}
/**
* Subscriber attribute associated with the push token for the user
*
* @param pushToken Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setPushToken(pushToken: string | null): void {}
/**
* Subscriber attribute associated with the Adjust Id for the user
* Required for the RevenueCat Adjust integration
*
* @param adjustID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setAdjustID(adjustID: string | null): void {}
/**
* Subscriber attribute associated with the AppsFlyer Id for the user
* Required for the RevenueCat AppsFlyer integration
*
* @param appsflyerID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setAppsflyerID(appsflyerID: string | null): void {}
/**
* Subscriber attribute associated with the Facebook SDK Anonymous Id for the user
* Recommended for the RevenueCat Facebook integration
*
* @param fbAnonymousID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setFBAnonymousID(fbAnonymousID: string | null): void {}
/**
* Subscriber attribute associated with the mParticle Id for the user
* Recommended for the RevenueCat mParticle integration
*
* @param mparticleID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setMparticleID(mparticleID: string | null): void {}
/**
* Subscriber attribute associated with the OneSignal Player Id for the user
* Required for the RevenueCat OneSignal integration
*
* @param onesignalID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setOnesignalID(onesignalID: string | null): void {}
/**
* Subscriber attribute associated with the Airship Channel Id for the user
* Required for the RevenueCat Airship integration
*
* @param airshipChannelID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setAirshipChannelID(airshipChannelID: string | null): void {}
/**
* Subscriber attribute associated with the Firebase App Instance ID for the user
* Required for the RevenueCat Firebase integration
*
* @param firebaseAppInstanceID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setFirebaseAppInstanceID(firebaseAppInstanceID: string | null): void {}
/**
* Subscriber attribute associated with the Mixpanel Distinct ID for the user
* Required for the RevenueCat Mixpanel integration
*
* @param mixpanelDistinctID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setMixpanelDistinctID(mixpanelDistinctID: string | null): void {}
/**
* Subscriber attribute associated with the CleverTap ID for the user
* Required for the RevenueCat CleverTap integration
*
* @param cleverTapID Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setCleverTapID(cleverTapID: string | null): void {}
/**
* Subscriber attribute associated with the install media source for the user
*
* @param mediaSource Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setMediaSource(mediaSource: string | null): void {}
/**
* Subscriber attribute associated with the install campaign for the user
*
* @param campaign Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setCampaign(campaign: string | null): void {}
/**
* Subscriber attribute associated with the install ad group for the user
*
* @param adGroup Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setAdGroup(adGroup: string | null): void {}
/**
* Subscriber attribute associated with the install ad for the user
*
* @param ad Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setAd(ad: string | null): void {}
/**
* Subscriber attribute associated with the install keyword for the user
*
* @param keyword Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setKeyword(keyword: string | null): void {}
/**
* Subscriber attribute associated with the install ad creative for the user
*
* @param creative Empty String or null will delete the subscriber attribute.
*/
@Cordova({ sync: true })
setCreative(creative: string | null): void {}
/**
* Automatically collect subscriber attributes associated with the device identifiers.
* $idfa, $idfv, $ip on iOS
* $gpsAdId, $androidId, $ip on Android
*/
@Cordova({ sync: true })
collectDeviceIdentifiers(): void {}
/**
* Check if billing is supported for the current user (meaning IN-APP purchases are supported)
* and optionally, whether a list of specified feature types are supported.
*
* Note: Billing features are only relevant to Google Play Android users.
* For other stores and platforms, billing features won't be checked.
*
* @param features An array of feature types to check for support. Feature types must be one of
* [BILLING_FEATURE]. By default, is an empty list and no specific feature support will be checked.
*
*/
@Cordova()
canMakePayments(features: BILLING_FEATURE[] = []): Promise<boolean> {
return;
}
/**
* Set this property to your proxy URL before configuring Purchases *only* if you've received a proxy key value from your RevenueCat contact.
*
* @param url Proxy URL as a string.
*/
@Cordova({ sync: true })
setProxyURL(url: string): void {}
/**
* iOS 15+ only. Presents a refund request sheet in the current window scene for
* the latest transaction associated with the active entitlement.
*
* If the request was unsuccessful, no active entitlements could be found for
* the user, or multiple active entitlements were found for the user,
* the promise will return an error.
* If called in an unsupported platform (iOS < 15), an `unsupportedError` will be sent to the callback.
*
* Important: This method should only be used if your user can only have a single active entitlement at a given time.
* If a user could have more than one entitlement at a time, use `beginRefundRequestForEntitlement` instead.
*
*/
@Cordova()
beginRefundRequestForActiveEntitlement(): Promise<REFUND_REQUEST_STATUS> {
return;
}
/**
* iOS 15+ only. Presents a refund request sheet in the current window scene for
* the latest transaction associated with the `entitlement`.
*
* If the request was unsuccessful, the promise will return an error.
* If called in an unsupported platform (iOS < 15), an `unsupportedError` will be sent to the callback.
*
* @param entitlementInfo The entitlement to begin a refund request for.
*
*/
@Cordova()
beginRefundRequestForEntitlement(entitlementInfo: PurchasesEntitlementInfo): Promise<REFUND_REQUEST_STATUS> {
return;
}
/**
* iOS 15+ only. Presents a refund request sheet in the current window scene for
* the latest transaction associated with the `product`.
*
* If the request was unsuccessful, the promise will return an error.
* If called in an unsupported platform (iOS < 15), an `unsupportedError` will be sent to the callback.
*
* @param storeProduct The StoreProduct to begin a refund request for.
*
*/
@Cordova()
beginRefundRequestForProduct(storeProduct: PurchasesStoreProduct): Promise<REFUND_REQUEST_STATUS> {
return;
}
/**
* Shows in-app messages available from the App Store or Google Play. You need to disable messages from showing
* automatically using [PurchasesConfiguration.shouldShowInAppMessagesAutomatically].
*
* Note: In iOS, this requires version 16+. In older versions the promise will be resolved successfully
* immediately.
*
* @param messageTypes An array of message types that the stores can display inside your app. Must be one of
* [IN_APP_MESSAGE_TYPE]. By default, is undefined and all message types will be shown.
*/
@Cordova({ sync: true })
showInAppMessages(messageTypes?: IN_APP_MESSAGE_TYPE[]): void {}
}
/**
* The EntitlementInfo object gives you access to all of the information about the status of a user entitlement.
*/
export interface PurchasesEntitlementInfo {
/**
* The entitlement identifier configured in the RevenueCat dashboard
*/
readonly identifier: string;
/**
* True if the user has access to this entitlement
*/
readonly isActive: boolean;
/**
* True if the underlying subscription is set to renew at the end of the billing period (expirationDate).
*/
readonly willRenew: boolean;
/**
* The last period type this entitlement was in. Either: NORMAL, INTRO, TRIAL.
*/
readonly periodType: string;
/**
* The latest purchase or renewal date for the entitlement.
*/
readonly latestPurchaseDate: string;
/**
* The first date this entitlement was purchased.
*/
readonly originalPurchaseDate: string;
/**
* The expiration date for the entitlement, can be `null` for lifetime access. If the `periodType` is `trial`,
* this is the trial expiration date.
*/
readonly expirationDate: string | null;
/**
* The store where this entitlement was unlocked from. Either: appStore, macAppStore, playStore, stripe,
* promotional, unknownStore
*/
readonly store: string;
/**
* The product identifier that unlocked this entitlement
*/
readonly productIdentifier: string;
/**
* False if this entitlement is unlocked via a production purchase
*/
readonly isSandbox: boolean;
/**
* The date an unsubscribe was detected. Can be `null`.
*
* @note: Entitlement may still be active even if user has unsubscribed. Check the `isActive` property.
*/
readonly unsubscribeDetectedAt: string | null;
/**
* The date a billing issue was detected. Can be `null` if there is no billing issue or an issue has been resolved
*
* @note: Entitlement may still be active even if there is a billing issue. Check the `isActive` property.
*/
readonly billingIssueDetectedAt: string | null;
}
/**
* Contains all the entitlements associated to the user.
*/
export interface PurchasesEntitlementInfos {
/**
* Map of all EntitlementInfo (`PurchasesEntitlementInfo`) objects (active and inactive) keyed by entitlement identifier.
*/
readonly all: { [key: string]: PurchasesEntitlementInfo };
/**
* Map of active EntitlementInfo (`PurchasesEntitlementInfo`) objects keyed by entitlement identifier.
*/
readonly active: { [key: string]: PurchasesEntitlementInfo };
/**
* Dictionary of active ``EntitlementInfo`` objects keyed by their identifiers.
* @ Note: When queried from the sandbox environment, it only returns entitlements active in sandbox.
* When queried from production, this only returns entitlements active in production.
*/
readonly activeInCurrentEnvironment: { [key: string]: PurchasesEntitlementInfo };
/**
* Dictionary of active ``EntitlementInfo`` objects keyed by their identifiers.
* @note: these can be active on any environment.
*/
readonly activeInAnyEnvironment: { [key: string]: PurchasesEntitlementInfo };
}
export interface PurchasesStoreTransaction {
/**
* RevenueCat Id associated to the transaction.
*/
readonly transactionIdentifier: string;
/**
* Product Id associated with the transaction.
*/
readonly productIdentifier: string;
/**
* Purchase date of the transaction in ISO 8601 format.
*/
readonly purchaseDate: string;
}
export interface CustomerInfo {
/**
* Entitlements attached to this customer info
*/
readonly entitlements: PurchasesEntitlementInfos;
/**
* Set of active subscription skus
*/
readonly activeSubscriptions: [string];
/**
* Set of purchased skus, active and inactive
*/
readonly allPurchasedProductIdentifiers: [string];
/**
* Returns all the non-subscription purchases a user has made.
* The purchases are ordered by purchase date in ascending order.
*/
readonly nonSubscriptionTransactions: PurchasesStoreTransaction[];
/**
* The latest expiration date of all purchased skus
*/
readonly latestExpirationDate: string | null;
/**
* The date this user was first seen in RevenueCat.
*/
readonly firstSeen: string;
/**
* The original App User Id recorded for this user.
*/
readonly originalAppUserId: string;
/**
* Date when this info was requested
*/
readonly requestDate: string;
/**
* Map of skus to expiration dates
*/
readonly allExpirationDates: { [key: string]: string | null };
/**
* Map of skus to purchase dates
*/
readonly allPurchaseDates: { [key: string]: string | null };
/**
* Returns the version number for the version of the application when the
* user bought the app. Use this for grandfathering users when migrating
* to subscriptions.
*
* This corresponds to the value of CFBundleVersion (in iOS) in the
* Info.plist file when the purchase was originally made. This is always null
* in Android
*/
readonly originalApplicationVersion: string | null;
/**
* Returns the purchase date for the version of the application when the user bought the app.
* Use this for grandfathering users when migrating to subscriptions.
*/
readonly originalPurchaseDate: string | null;
/**
* URL to manage the active subscription of the user. If this user has an active iOS
* subscription, this will point to the App Store, if the user has an active Play Store subscription
* it will point there. If there are no active subscriptions it will be null.
* If there are multiple for different platforms, it will point to the device store.
*/
readonly managementURL: string | null;
}
export interface PurchasesIntroPrice {
/**
* Price in the local currency.
*/
readonly price: number;
/**
* Formatted price, including its currency sign, such as €3.99.
*/
readonly priceString: string;
/**
* Number of subscription billing periods for which the user will be given the discount, such as 3.
*/
readonly cycles: number;
/**
* Billing period of the discount, specified in ISO 8601 format.
*/
readonly period: string;
/**
* Unit for the billing period of the discount, can be DAY, WEEK, MONTH or YEAR.
*/
readonly periodUnit: string;
/**
* Number of units for the billing period of the discount.
*/
readonly periodNumberOfUnits: number;
}
export interface PurchasesStoreProductDiscount {
/**
* Identifier of the discount.
*/
readonly identifier: string;
/**
* Price in the local currency.
*/
readonly price: number;
/**
* Formatted price, including its currency sign, such as €3.99.
*/
readonly priceString: string;
/**
* Number of subscription billing periods for which the user will be given the discount, such as 3.
*/
readonly cycles: number;
/**
* Billing period of the discount, specified in ISO 8601 format.
*/
readonly period: string;
/**
* Unit for the billing period of the discount, can be DAY, WEEK, MONTH or YEAR.
*/
readonly periodUnit: string;
/**
* Number of units for the billing period of the discount.
*/
readonly periodNumberOfUnits: number;
}
export interface PurchasesStoreProduct {
/**
* Product Id.
*/
readonly identifier: string;
/**
* Description of the product.
*/
readonly description: string;
/**
* Title of the product.
*/
readonly title: string;
/**
* Price of the product in the local currency.
*/
readonly price: number;
/**
* Formatted price of the item, including its currency sign, such as €3.99.
*/
readonly priceString: string;
/**
* Currency code for price and original price.
* Contains the currency code value of defaultOption for Google Play.
*/
readonly currencyCode: string;
/**
* Introductory price.
*/
readonly introPrice: PurchasesIntroPrice | null;
/**
* Collection of discount offers for a product. Null for Android.
*/
readonly discounts: PurchasesStoreProductDiscount[] | null;
/**
* Product category.
*/
readonly productCategory: PRODUCT_CATEGORY | null;
/**
* Subscription period, specified in ISO 8601 format. For example,
* P1W equates to one week, P1M equates to one month,
* P3M equates to three months, P6M equates to six months,
* and P1Y equates to one year.
* Note: Not available for Amazon.
*/
readonly subscriptionPeriod: string | null;
/**
* Default subscription option for a product. Google Play only.
*/
readonly defaultOption: SubscriptionOption | null;
/**
* Collection of subscription options for a product. Google Play only.
*/
readonly subscriptionOptions: SubscriptionOption[] | null;
/**
* Offering identifier the store product was presented from.
* Null if not using offerings or if fetched directly from store via getProducts.
*/
readonly presentedOfferingIdentifier: string | null;
}
/**
* Contains information about the product available for the user to purchase.
* For more info see https://docs.revenuecat.com/docs/entitlements
*/
export interface PurchasesPackage {
/**
* Unique identifier for this package. Can be one a predefined package type or a custom one.
*/
readonly identifier: string;
/**
* Package type for the product. Will be one of [PACKAGE_TYPE].
*/
readonly packageType: PACKAGE_TYPE;
/**
* Product assigned to this package.
*/
readonly product: PurchasesStoreProduct;
/**
* Offering this package belongs to.
*/
readonly offeringIdentifier: string;
}
/**
* An offering is a collection of Packages (`PurchasesPackage`) available for the user to purchase.
* For more info see https://docs.revenuecat.com/docs/entitlements
*/
export interface PurchasesOffering {
/**
* Unique identifier defined in RevenueCat dashboard.
*/
readonly identifier: string;
/**
* Offering description defined in RevenueCat dashboard.
*/
readonly serverDescription: string;
/**
* Offering metadata defined in RevenueCat dashboard. To access values, you need
* to check the type beforehand. For example:
* const my_unknown_value: unknown = offering.metadata['my_key'];
* const my_string_value: string | undefined = typeof(my_unknown_value) === 'string' ? my_unknown_value : undefined;
*/
readonly metadata: { [key: string]: unknown };
/**
* Array of `Package` objects available for purchase.
*/
readonly availablePackages: PurchasesPackage[];
/**
* Lifetime package type configured in the RevenueCat dashboard, if available.
*/
readonly lifetime: PurchasesPackage | null;
/**
* Annual package type configured in the RevenueCat dashboard, if available.
*/
readonly annual: PurchasesPackage | null;
/**
* Six month package type configured in the RevenueCat dashboard, if available.
*/
readonly sixMonth: PurchasesPackage | null;
/**
* Three month package type configured in the RevenueCat dashboard, if available.
*/
readonly threeMonth: PurchasesPackage | null;
/**
* Two month package type configured in the RevenueCat dashboard, if available.
*/
readonly twoMonth: PurchasesPackage | null;
/**
* Monthly package type configured in the RevenueCat dashboard, if available.
*/
readonly monthly: PurchasesPackage | null;
/**
* Weekly package type configured in the RevenueCat dashboard, if available.
*/
readonly weekly: PurchasesPackage | null;
}
/**
* Contains all the offerings configured in RevenueCat dashboard.
* For more info see https://docs.revenuecat.com/docs/entitlements
*/
export interface PurchasesOfferings {
/**
* Map of all Offerings [PurchasesOffering] objects keyed by their identifier.
*/
readonly all: { [key: string]: PurchasesOffering };
/**
* Current offering configured in the RevenueCat dashboard.
*/
readonly current: PurchasesOffering | null;
}
export interface PurchasesError {
code: number;
message: string;
readableErrorCode: string;
underlyingErrorMessage?: string;
}
/**
* Holds the information used when upgrading from another sku. For Android use only.
*/
export interface UpgradeInfo {
/**
* The oldSKU to upgrade from.
*/
readonly oldSKU: string;
/**
* The [PRORATION_MODE] to use when upgrading the given oldSKU.
*/
readonly prorationMode?: PRORATION_MODE;
}
/**
* Holds the information used when upgrading from another sku. For Android use only.
*/
export interface GoogleProductChangeInfo {
/**
* The old product identifier to upgrade from.
*/
readonly oldProductIdentifier: string;
/**
* The [PRORATION_MODE] to use when upgrading the given oldSKU.
*/
readonly prorationMode?: PRORATION_MODE;
}
/**
* Holds the introductory price status
*/
export interface IntroEligibility {
/**
* The introductory price eligibility status
*/
readonly status: INTRO_ELIGIBILITY_STATUS;
/**
* Description of the status
*/
readonly description: string;
}
/**
* Holds the logIn result
*/
export interface LogInResult {
/**
* The Customer Info for the user.
*/
readonly customerInfo: CustomerInfo;
/**
* True if the call resulted in a new user getting created in the RevenueCat backend.
*/
readonly created: boolean;
}
/**
* Holds parameters to initialize the SDK.
*/
export interface PurchasesConfiguration {
/**
* RevenueCat API Key. Needs to be a string
*/
apiKey: string;
/**
* A unique id for identifying the user
*/
appUserID?: string | null;
/**
* An optional boolean. Set this to TRUE if you have your own IAP implementation and
* want to use only RevenueCat's backend. Default is FALSE. If you are on Android and setting this to ON, you will have
* to acknowledge the purchases yourself.
*/
observerMode?: boolean;
/**
* An optional string. iOS-only, will be ignored for Android.
* Set this if you would like the RevenueCat SDK to store its preferences in a different NSUserDefaults
* suite, otherwise it will use standardUserDefaults. Default is null, which will make the SDK use standardUserDefaults.
*/
userDefaultsSuiteName?: string;
/**
* iOS-only, will be ignored for Android.
* Set this to TRUE to enable StoreKit2.
* Default is FALSE.
*
* @deprecated RevenueCat currently uses StoreKit 1 for purchases, as its stability in production scenarios has
* proven to be more performant than StoreKit 2.
* We're collecting more data on the best approach, but StoreKit 1 vs StoreKit 2 is an implementation detail
* that you shouldn't need to care about.
* We recommend not using this parameter, letting RevenueCat decide for you which StoreKit implementation to use.
*/
usesStoreKit2IfAvailable?: boolean;
/**
* An optional boolean. Android only. Required to configure the plugin to be used in the Amazon Appstore.
*/
useAmazon?: boolean;
/**
* Whether we should show store in-app messages automatically. Both Google Play and the App Store provide in-app
* messages for some situations like billing issues. By default, those messages will be shown automatically.
* This allows to disable that behavior, so you can display those messages at your convenience. For more information,
* check: https://rev.cat/storekit-message and https://rev.cat/googleplayinappmessaging
*/
shouldShowInAppMessagesAutomatically?: boolean;
}
/**
* Contains all details associated with a SubscriptionOption
* Used only for Google
*/
export interface SubscriptionOption {
/**
* Identifier of the subscription option
* If this SubscriptionOption represents a base plan, this will be the basePlanId.
* If it represents an offer, it will be {basePlanId}:{offerId}
*/
readonly id: string;
/**
* Identifier of the StoreProduct associated with this SubscriptionOption
* This will be {subId}:{basePlanId}
*/
readonly storeProductId: string;
/**
* Identifer of the subscription associated with this SubscriptionOption
* This will be {subId}
*/
readonly productId: string;
/**
* Pricing phases defining a user's payment plan for the product over time.
*/
readonly pricingPhases: PricingPhase[];
/**
* Tags defined on the base plan or offer. Empty for Amazon.
*/
readonly tags: string[];
/**
* True if this SubscriptionOption represents a subscription base plan (rather than an offer).
*/
readonly isBasePlan: boolean;
/**
* The subscription period of fullPricePhase (after free and intro trials).
*/
readonly billingPeriod: Period | null;
/**
* True if the subscription is pre-paid.
*/
readonly isPrepaid: boolean;
/**
* The full price PricingPhase of the subscription.
* Looks for the last price phase of the SubscriptionOption.
*/
readonly fullPricePhase: PricingPhase | null;
/**
* The free trial PricingPhase of the subscription.
* Looks for the first pricing phase of the SubscriptionOption where amountMicros is 0.
* There can be a freeTrialPhase and an introductoryPhase in the same SubscriptionOption.
*/
readonly freePhase: PricingPhase | null;
/**
* The intro trial PricingPhase of the subscription.
* Looks for the first pricing phase of the SubscriptionOption where amountMicros is greater than 0.
* There can be a freeTrialPhase and an introductoryPhase in the same SubscriptionOption.
*/
readonly introPhase: PricingPhase | null;
/**
* Offering identifier the subscription option was presented from
*/
readonly presentedOfferingIdentifier: string | null;
}
/**
* Contains all the details associated with a PricingPhase
*/
export interface PricingPhase {
/**
* Billing period for which the PricingPhase applies
*/
readonly billingPeriod: Period;
/**
* Recurrence mode of the PricingPhase
*/
readonly recurrenceMode: RECURRENCE_MODE | null;
/**
* Number of cycles for which the pricing phase applies.
* Null for infiniteRecurring or finiteRecurring recurrence modes.
*/
readonly billingCycleCount: number | null;
/**
* Price of the PricingPhase
*/
readonly price: Price;
/**
* Indicates how the pricing phase is charged for finiteRecurring pricing phases
*/
readonly offerPaymentMode: OFFER_PAYMENT_MODE | null;
}
/**
* Contains all the details associated with a Price
*/
export interface Price {
/**
* Formatted price of the item, including its currency sign. For example $3.00
*/
readonly formatted: string;
/**
* Price in micro-units, where 1,000,000 micro-units equal one unit of the currency.
*
* For example, if price is "€7.99", price_amount_micros is 7,990,000. This value represents
* the localized, rounded price for a particular currency.
*/
readonly amountMicros: number;
/**
* Returns ISO 4217 currency code for price and original price.
*
* For example, if price is specified in British pounds sterling, price_currency_code is "GBP".
* If currency code cannot be determined, currency symbol is returned.
*/
readonly currencyCode: string;
}
/**
* Contains all the details associated with a Period
*/
export interface Period {
/**
* The number of period units: day, week, month, year, unknown
*/
readonly unit: PERIOD_UNIT;
/**
* The increment of time that a subscription period is specified in
*/
readonly value: number;
/**
* Specified in ISO 8601 format. For example, P1W equates to one week,
* P1M equates to one month, P3M equates to three months, P6M equates to six months,
* and P1Y equates to one year
*/
readonly iso8601: string;
}
export type ShouldPurchasePromoProductListener = (deferredPurchase: () => void) => void;
export type LogHandler = (logLevel: LOG_LEVEL, message: string) => void;