react-native-purchases 9.3.0 → 9.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/RNPurchases.podspec +1 -1
- package/android/build.gradle +3 -3
- package/android/src/main/java/com/revenuecat/purchases/react/RNPurchasesModule.java +12 -3
- package/dist/browser/nativeModule.d.ts +2 -1
- package/dist/browser/nativeModule.js +17 -10
- package/dist/browser/simulatedstore/alertHelper.d.ts +5 -0
- package/dist/browser/simulatedstore/alertHelper.js +118 -0
- package/dist/browser/simulatedstore/offeringsLoader.d.ts +9 -0
- package/dist/browser/simulatedstore/offeringsLoader.js +76 -0
- package/dist/browser/simulatedstore/purchaseSimulatedPackageHelper.d.ts +2 -0
- package/dist/browser/simulatedstore/purchaseSimulatedPackageHelper.js +96 -0
- package/dist/purchases.d.ts +11 -1
- package/dist/purchases.js +24 -2
- package/ios/RNPurchases.m +11 -3
- package/package.json +3 -3
package/RNPurchases.podspec
CHANGED
package/android/build.gradle
CHANGED
|
@@ -6,7 +6,7 @@ buildscript {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
dependencies {
|
|
9
|
-
classpath 'com.android.tools.build:gradle:8.
|
|
9
|
+
classpath 'com.android.tools.build:gradle:8.13.0'
|
|
10
10
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -29,7 +29,7 @@ android {
|
|
|
29
29
|
minSdkVersion getExtOrIntegerDefault('minSdkVersion')
|
|
30
30
|
targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
|
|
31
31
|
versionCode 1
|
|
32
|
-
versionName '9.
|
|
32
|
+
versionName '9.4.1'
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
buildTypes {
|
|
@@ -121,6 +121,6 @@ def kotlin_version = getExtOrDefault('kotlinVersion')
|
|
|
121
121
|
dependencies {
|
|
122
122
|
//noinspection GradleDynamicVersion
|
|
123
123
|
api 'com.facebook.react:react-native:+'
|
|
124
|
-
implementation 'com.revenuecat.purchases:purchases-hybrid-common:17.
|
|
124
|
+
implementation 'com.revenuecat.purchases:purchases-hybrid-common:17.6.0'
|
|
125
125
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
126
126
|
}
|
|
@@ -47,7 +47,7 @@ public class RNPurchasesModule extends ReactContextBaseJavaModule implements Upd
|
|
|
47
47
|
private static final String CUSTOMER_INFO_UPDATED = "Purchases-CustomerInfoUpdated";
|
|
48
48
|
private static final String LOG_HANDLER_EVENT = "Purchases-LogHandlerEvent";
|
|
49
49
|
public static final String PLATFORM_NAME = "react-native";
|
|
50
|
-
public static final String PLUGIN_VERSION = "9.
|
|
50
|
+
public static final String PLUGIN_VERSION = "9.4.1";
|
|
51
51
|
|
|
52
52
|
private final ReactApplicationContext reactContext;
|
|
53
53
|
|
|
@@ -88,7 +88,9 @@ public class RNPurchasesModule extends ReactContextBaseJavaModule implements Upd
|
|
|
88
88
|
boolean shouldShowInAppMessagesAutomatically,
|
|
89
89
|
@Nullable String entitlementVerificationMode,
|
|
90
90
|
boolean pendingTransactionsForPrepaidPlansEnabled,
|
|
91
|
-
boolean diagnosticsEnabled
|
|
91
|
+
boolean diagnosticsEnabled,
|
|
92
|
+
boolean automaticDeviceIdentifierCollectionEnabled,
|
|
93
|
+
@Nullable String preferredUILocaleOverride) {
|
|
92
94
|
PlatformInfo platformInfo = new PlatformInfo(PLATFORM_NAME, PLUGIN_VERSION);
|
|
93
95
|
Store store = Store.PLAY_STORE;
|
|
94
96
|
if (useAmazon) {
|
|
@@ -105,7 +107,9 @@ public class RNPurchasesModule extends ReactContextBaseJavaModule implements Upd
|
|
|
105
107
|
shouldShowInAppMessagesAutomatically,
|
|
106
108
|
entitlementVerificationMode,
|
|
107
109
|
pendingTransactionsForPrepaidPlansEnabled,
|
|
108
|
-
diagnosticsEnabled
|
|
110
|
+
diagnosticsEnabled,
|
|
111
|
+
automaticDeviceIdentifierCollectionEnabled,
|
|
112
|
+
preferredUILocaleOverride
|
|
109
113
|
);
|
|
110
114
|
Purchases.getSharedInstance().setUpdatedCustomerInfoListener(this);
|
|
111
115
|
}
|
|
@@ -338,6 +342,11 @@ public class RNPurchasesModule extends ReactContextBaseJavaModule implements Upd
|
|
|
338
342
|
promise.resolve(Purchases.isConfigured());
|
|
339
343
|
}
|
|
340
344
|
|
|
345
|
+
@ReactMethod
|
|
346
|
+
public void overridePreferredLocale(@Nullable String locale) {
|
|
347
|
+
CommonKt.overridePreferredLocale(locale);
|
|
348
|
+
}
|
|
349
|
+
|
|
341
350
|
//================================================================================
|
|
342
351
|
// Virtual Currencies
|
|
343
352
|
//================================================================================
|
|
@@ -3,7 +3,7 @@ import { MakePurchaseResult } from '@revenuecat/purchases-typescript-internal';
|
|
|
3
3
|
* Browser implementation of the native module. This will be used in the browser and Expo Go.
|
|
4
4
|
*/
|
|
5
5
|
export declare const browserNativeModuleRNPurchases: {
|
|
6
|
-
setupPurchases: (apiKey: string, appUserID: string | null, _purchasesAreCompletedBy: string | null, _userDefaultsSuiteName: string | null, _storeKitVersion: string | null, _useAmazon: boolean, _shouldShowInAppMessagesAutomatically: boolean, _entitlementVerificationMode: string | null, _pendingTransactionsForPrepaidPlansEnabled: boolean, _diagnosticsEnabled: boolean) => Promise<void>;
|
|
6
|
+
setupPurchases: (apiKey: string, appUserID: string | null, _purchasesAreCompletedBy: string | null, _userDefaultsSuiteName: string | null, _storeKitVersion: string | null, _useAmazon: boolean, _shouldShowInAppMessagesAutomatically: boolean, _entitlementVerificationMode: string | null, _pendingTransactionsForPrepaidPlansEnabled: boolean, _diagnosticsEnabled: boolean, _automaticDeviceIdentifierCollectionEnabled: boolean, _preferredUILocaleOverride: string | null) => Promise<void>;
|
|
7
7
|
setAllowSharingStoreAccount: (_allowSharing: boolean) => Promise<void>;
|
|
8
8
|
setSimulatesAskToBuyInSandbox: (_simulatesAskToBuyInSandbox: boolean) => Promise<void>;
|
|
9
9
|
getOfferings: () => Promise<import("@revenuecat/purchases-typescript-internal").PurchasesOfferings>;
|
|
@@ -68,6 +68,7 @@ export declare const browserNativeModuleRNPurchases: {
|
|
|
68
68
|
setAd: (_ad: string) => Promise<void>;
|
|
69
69
|
setKeyword: (_keyword: string) => Promise<void>;
|
|
70
70
|
setCreative: (_creative: string) => Promise<void>;
|
|
71
|
+
overridePreferredLocale: (_locale: string | null) => Promise<void>;
|
|
71
72
|
canMakePayments: (_features: any[]) => Promise<boolean>;
|
|
72
73
|
beginRefundRequestForActiveEntitlement: () => Promise<void>;
|
|
73
74
|
beginRefundRequestForEntitlementId: (_entitlementIdentifier: string) => Promise<void>;
|
|
@@ -39,15 +39,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.browserNativeModuleRNPurchases = void 0;
|
|
40
40
|
var purchases_typescript_internal_1 = require("@revenuecat/purchases-typescript-internal");
|
|
41
41
|
var purchases_js_hybrid_mappings_1 = require("@revenuecat/purchases-js-hybrid-mappings");
|
|
42
|
-
var utils_1 = require("./utils");
|
|
43
42
|
var typeGuards_1 = require("./typeGuards");
|
|
44
43
|
var environment_1 = require("../utils/environment");
|
|
44
|
+
var utils_1 = require("./utils");
|
|
45
|
+
var purchaseSimulatedPackageHelper_1 = require("./simulatedstore/purchaseSimulatedPackageHelper");
|
|
45
46
|
var packageVersion = '9.1.0';
|
|
46
47
|
/**
|
|
47
48
|
* Browser implementation of the native module. This will be used in the browser and Expo Go.
|
|
48
49
|
*/
|
|
49
50
|
exports.browserNativeModuleRNPurchases = {
|
|
50
|
-
setupPurchases: function (apiKey, appUserID, _purchasesAreCompletedBy, _userDefaultsSuiteName, _storeKitVersion, _useAmazon, _shouldShowInAppMessagesAutomatically, _entitlementVerificationMode, _pendingTransactionsForPrepaidPlansEnabled, _diagnosticsEnabled) { return __awaiter(void 0, void 0, void 0, function () {
|
|
51
|
+
setupPurchases: function (apiKey, appUserID, _purchasesAreCompletedBy, _userDefaultsSuiteName, _storeKitVersion, _useAmazon, _shouldShowInAppMessagesAutomatically, _entitlementVerificationMode, _pendingTransactionsForPrepaidPlansEnabled, _diagnosticsEnabled, _automaticDeviceIdentifierCollectionEnabled, _preferredUILocaleOverride) { return __awaiter(void 0, void 0, void 0, function () {
|
|
51
52
|
return __generator(this, function (_a) {
|
|
52
53
|
try {
|
|
53
54
|
purchases_js_hybrid_mappings_1.PurchasesCommon.configure({
|
|
@@ -245,14 +246,14 @@ exports.browserNativeModuleRNPurchases = {
|
|
|
245
246
|
switch (_a.label) {
|
|
246
247
|
case 0:
|
|
247
248
|
(0, utils_1.ensurePurchasesConfigured)();
|
|
248
|
-
if ((0, environment_1.isExpoGo)())
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
case
|
|
249
|
+
if (!(0, environment_1.isExpoGo)()) return [3 /*break*/, 2];
|
|
250
|
+
return [4 /*yield*/, (0, purchaseSimulatedPackageHelper_1.purchaseSimulatedPackage)(packageIdentifier, presentedOfferingContext)];
|
|
251
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
252
|
+
case 2: return [4 /*yield*/, purchases_js_hybrid_mappings_1.PurchasesCommon.getInstance().purchasePackage({
|
|
253
|
+
packageIdentifier: packageIdentifier,
|
|
254
|
+
presentedOfferingContext: presentedOfferingContext,
|
|
255
|
+
})];
|
|
256
|
+
case 3:
|
|
256
257
|
purchaseResult = _a.sent();
|
|
257
258
|
return [2 /*return*/, (0, typeGuards_1.validateAndTransform)(purchaseResult, typeGuards_1.isMakePurchaseResult, 'MakePurchaseResult')];
|
|
258
259
|
}
|
|
@@ -488,6 +489,12 @@ exports.browserNativeModuleRNPurchases = {
|
|
|
488
489
|
return [2 /*return*/];
|
|
489
490
|
});
|
|
490
491
|
}); },
|
|
492
|
+
overridePreferredLocale: function (_locale) { return __awaiter(void 0, void 0, void 0, function () {
|
|
493
|
+
return __generator(this, function (_a) {
|
|
494
|
+
(0, utils_1.methodNotSupportedOnWeb)('overridePreferredLocale');
|
|
495
|
+
return [2 /*return*/];
|
|
496
|
+
});
|
|
497
|
+
}); },
|
|
491
498
|
canMakePayments: function (_features) { return __awaiter(void 0, void 0, void 0, function () {
|
|
492
499
|
return __generator(this, function (_a) {
|
|
493
500
|
return [2 /*return*/, true];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PurchasesPackage } from "@revenuecat/purchases-typescript-internal";
|
|
2
|
+
/**
|
|
3
|
+
* Shows a simulated purchase alert for platforms that don't support DOM manipulation.
|
|
4
|
+
*/
|
|
5
|
+
export declare function showSimulatedPurchaseAlert(packageIdentifier: string, offeringIdentifier: string, onPurchase: (packageInfo: PurchasesPackage) => Promise<void>, onFailedPurchase: () => void, onCancel: () => void): Promise<void>;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.showSimulatedPurchaseAlert = void 0;
|
|
40
|
+
var react_native_1 = require("react-native");
|
|
41
|
+
var offeringsLoader_1 = require("./offeringsLoader");
|
|
42
|
+
/**
|
|
43
|
+
* Shows a simulated purchase alert for platforms that don't support DOM manipulation.
|
|
44
|
+
*/
|
|
45
|
+
function showSimulatedPurchaseAlert(packageIdentifier, offeringIdentifier, onPurchase, onFailedPurchase, onCancel) {
|
|
46
|
+
var _this = this;
|
|
47
|
+
return new Promise(function (resolve, reject) {
|
|
48
|
+
var handleCancel = function () {
|
|
49
|
+
onCancel();
|
|
50
|
+
resolve();
|
|
51
|
+
};
|
|
52
|
+
var handleFailedPurchase = function () {
|
|
53
|
+
onFailedPurchase();
|
|
54
|
+
resolve();
|
|
55
|
+
};
|
|
56
|
+
var handlePurchase = function (data) { return __awaiter(_this, void 0, void 0, function () {
|
|
57
|
+
var error_1;
|
|
58
|
+
return __generator(this, function (_a) {
|
|
59
|
+
switch (_a.label) {
|
|
60
|
+
case 0:
|
|
61
|
+
_a.trys.push([0, 2, , 3]);
|
|
62
|
+
return [4 /*yield*/, onPurchase(data.packageInfo)];
|
|
63
|
+
case 1:
|
|
64
|
+
_a.sent();
|
|
65
|
+
resolve();
|
|
66
|
+
return [3 /*break*/, 3];
|
|
67
|
+
case 2:
|
|
68
|
+
error_1 = _a.sent();
|
|
69
|
+
reject(error_1);
|
|
70
|
+
return [3 /*break*/, 3];
|
|
71
|
+
case 3: return [2 /*return*/];
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}); };
|
|
75
|
+
(0, offeringsLoader_1.loadSimulatedPurchaseData)(packageIdentifier, offeringIdentifier)
|
|
76
|
+
.then(function (data) {
|
|
77
|
+
var packageInfo = data.packageInfo, offers = data.offers;
|
|
78
|
+
var message = "\u26A0\uFE0F This is a test purchase and should only be used during development. In production, use an Apple/Google API key from RevenueCat.\n\n";
|
|
79
|
+
message += "Package ID: ".concat(packageInfo.identifier, "\n");
|
|
80
|
+
message += "Product ID: ".concat(packageInfo.product.identifier, "\n");
|
|
81
|
+
message += "Title: ".concat(packageInfo.product.title, "\n");
|
|
82
|
+
message += "Price: ".concat(packageInfo.product.priceString, "\n");
|
|
83
|
+
if (packageInfo.product.subscriptionPeriod) {
|
|
84
|
+
message += "Period: ".concat(packageInfo.product.subscriptionPeriod, "\n");
|
|
85
|
+
}
|
|
86
|
+
if (offers.length > 0) {
|
|
87
|
+
message += "\nOffers:\n".concat(offers.map(function (offer) { return "\u2022 ".concat(offer); }).join('\n'));
|
|
88
|
+
}
|
|
89
|
+
react_native_1.Alert.alert('Test Purchase', message, [
|
|
90
|
+
{
|
|
91
|
+
text: 'Cancel',
|
|
92
|
+
style: 'cancel',
|
|
93
|
+
onPress: handleCancel,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
text: 'Test Failed Purchase',
|
|
97
|
+
style: 'destructive',
|
|
98
|
+
onPress: handleFailedPurchase,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
text: 'Test Valid Purchase',
|
|
102
|
+
onPress: function () { return handlePurchase(data); },
|
|
103
|
+
},
|
|
104
|
+
], { cancelable: true, onDismiss: handleCancel });
|
|
105
|
+
})
|
|
106
|
+
.catch(function (error) {
|
|
107
|
+
console.error('Error loading package details:', error);
|
|
108
|
+
var errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
109
|
+
react_native_1.Alert.alert('Test Purchase Error', "Error loading package details: ".concat(errorMessage), [
|
|
110
|
+
{
|
|
111
|
+
text: 'Close',
|
|
112
|
+
onPress: function () { reject(error); },
|
|
113
|
+
},
|
|
114
|
+
], { cancelable: true, onDismiss: function () { reject(error); } });
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
exports.showSimulatedPurchaseAlert = showSimulatedPurchaseAlert;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PurchasesPackage } from "@revenuecat/purchases-typescript-internal";
|
|
2
|
+
export interface SimulatedPurchaseData {
|
|
3
|
+
packageInfo: PurchasesPackage;
|
|
4
|
+
offers: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Loads package data and formats offer information
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadSimulatedPurchaseData(packageIdentifier: string, offeringIdentifier: string): Promise<SimulatedPurchaseData>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.loadSimulatedPurchaseData = void 0;
|
|
40
|
+
var purchases_js_hybrid_mappings_1 = require("@revenuecat/purchases-js-hybrid-mappings");
|
|
41
|
+
var typeGuards_1 = require("../typeGuards");
|
|
42
|
+
/**
|
|
43
|
+
* Loads package data and formats offer information
|
|
44
|
+
*/
|
|
45
|
+
function loadSimulatedPurchaseData(packageIdentifier, offeringIdentifier) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
+
var offeringsResult, offerings, targetOffering, targetPackage, offers;
|
|
48
|
+
return __generator(this, function (_a) {
|
|
49
|
+
switch (_a.label) {
|
|
50
|
+
case 0: return [4 /*yield*/, purchases_js_hybrid_mappings_1.PurchasesCommon.getInstance().getOfferings()];
|
|
51
|
+
case 1:
|
|
52
|
+
offeringsResult = _a.sent();
|
|
53
|
+
offerings = (0, typeGuards_1.validateAndTransform)(offeringsResult, typeGuards_1.isPurchasesOfferings, 'PurchasesOfferings');
|
|
54
|
+
targetOffering = offerings.all[offeringIdentifier];
|
|
55
|
+
if (!targetOffering) {
|
|
56
|
+
throw new Error("Offering with identifier ".concat(offeringIdentifier, " not found"));
|
|
57
|
+
}
|
|
58
|
+
targetPackage = targetOffering.availablePackages.find(function (pkg) { return pkg.identifier === packageIdentifier; });
|
|
59
|
+
if (!targetPackage) {
|
|
60
|
+
throw new Error("Package with identifier ".concat(packageIdentifier, " not found in offering ").concat(offeringIdentifier));
|
|
61
|
+
}
|
|
62
|
+
offers = [];
|
|
63
|
+
if (targetPackage.product.introPrice) {
|
|
64
|
+
offers.push("Intro: ".concat(targetPackage.product.introPrice.priceString, " for ").concat(targetPackage.product.introPrice.cycles, " ").concat(targetPackage.product.introPrice.periodUnit.toLowerCase(), "(s)"));
|
|
65
|
+
}
|
|
66
|
+
if (targetPackage.product.discounts && targetPackage.product.discounts.length > 0) {
|
|
67
|
+
targetPackage.product.discounts.forEach(function (discount) {
|
|
68
|
+
offers.push("Discount: ".concat(discount.priceString, " for ").concat(discount.cycles, " ").concat(discount.periodUnit.toLowerCase(), "(s)"));
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return [2 /*return*/, { packageInfo: targetPackage, offers: offers }];
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
exports.loadSimulatedPurchaseData = loadSimulatedPurchaseData;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.purchaseSimulatedPackage = void 0;
|
|
40
|
+
var purchases_typescript_internal_1 = require("@revenuecat/purchases-typescript-internal");
|
|
41
|
+
var purchases_js_hybrid_mappings_1 = require("@revenuecat/purchases-js-hybrid-mappings");
|
|
42
|
+
var alertHelper_1 = require("./alertHelper");
|
|
43
|
+
// This will allow only to purchase simulated products in Expo Go since
|
|
44
|
+
// neither StoreKit, Play Store, nor Web Billing store are available.
|
|
45
|
+
function purchaseSimulatedPackage(packageIdentifier, presentedOfferingContext) {
|
|
46
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
47
|
+
var offeringIdentifier;
|
|
48
|
+
var _this = this;
|
|
49
|
+
return __generator(this, function (_a) {
|
|
50
|
+
offeringIdentifier = presentedOfferingContext === null || presentedOfferingContext === void 0 ? void 0 : presentedOfferingContext.offeringIdentifier;
|
|
51
|
+
if (!offeringIdentifier) {
|
|
52
|
+
throw new Error('No offering identifier provided in presentedOfferingContext');
|
|
53
|
+
}
|
|
54
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
55
|
+
var handlePurchase = function (_) { return __awaiter(_this, void 0, void 0, function () {
|
|
56
|
+
var purchaseResult, error_1;
|
|
57
|
+
return __generator(this, function (_a) {
|
|
58
|
+
switch (_a.label) {
|
|
59
|
+
case 0:
|
|
60
|
+
_a.trys.push([0, 2, , 3]);
|
|
61
|
+
return [4 /*yield*/, purchases_js_hybrid_mappings_1.PurchasesCommon.getInstance()._purchaseSimulatedStorePackage({
|
|
62
|
+
packageIdentifier: packageIdentifier,
|
|
63
|
+
presentedOfferingContext: presentedOfferingContext,
|
|
64
|
+
})];
|
|
65
|
+
case 1:
|
|
66
|
+
purchaseResult = _a.sent();
|
|
67
|
+
resolve(purchaseResult);
|
|
68
|
+
return [3 /*break*/, 3];
|
|
69
|
+
case 2:
|
|
70
|
+
error_1 = _a.sent();
|
|
71
|
+
reject(error_1);
|
|
72
|
+
return [3 /*break*/, 3];
|
|
73
|
+
case 3: return [2 /*return*/];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}); };
|
|
77
|
+
var handleFailedPurchase = function () {
|
|
78
|
+
reject({
|
|
79
|
+
code: purchases_typescript_internal_1.PURCHASES_ERROR_CODE.PRODUCT_NOT_AVAILABLE_FOR_PURCHASE_ERROR,
|
|
80
|
+
userCancelled: false,
|
|
81
|
+
message: 'Test purchase failure: no real transaction occurred'
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
var handleCancel = function () {
|
|
85
|
+
reject({
|
|
86
|
+
code: purchases_typescript_internal_1.PURCHASES_ERROR_CODE.PURCHASE_CANCELLED_ERROR,
|
|
87
|
+
userCancelled: true,
|
|
88
|
+
message: 'User cancelled purchase.'
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
(0, alertHelper_1.showSimulatedPurchaseAlert)(packageIdentifier, offeringIdentifier, handlePurchase, handleFailedPurchase, handleCancel).catch(reject);
|
|
92
|
+
})];
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
exports.purchaseSimulatedPackage = purchaseSimulatedPackage;
|
package/dist/purchases.d.ts
CHANGED
|
@@ -109,10 +109,12 @@ export default class Purchases {
|
|
|
109
109
|
* Default is null, which will make the SDK use standardUserDefaults.
|
|
110
110
|
* @param {boolean} [pendingTransactionsForPrepaidPlansEnabled=false] An optional boolean. Android-only. Set this to true to enable pending transactions for prepaid subscriptions in Google Play.
|
|
111
111
|
* @param {boolean} [diagnosticsEnabled=false] An optional boolean. Set this to true to enable SDK diagnostics.
|
|
112
|
+
* @param {boolean} [automaticDeviceIdentifierCollectionEnabled=true] An optional boolean. Set this to true to allow the collection of identifiers when setting the identifier for an attribution network.
|
|
113
|
+
* @param {String?} [preferredUILocaleOverride] An optional string. Set this to the preferred UI locale to use for RevenueCat UI components.
|
|
112
114
|
*
|
|
113
115
|
* @warning If you use purchasesAreCompletedBy=PurchasesAreCompletedByMyApp, you must also provide a value for storeKitVersion.
|
|
114
116
|
*/
|
|
115
|
-
static configure({ apiKey, appUserID, purchasesAreCompletedBy, userDefaultsSuiteName, storeKitVersion, useAmazon, shouldShowInAppMessagesAutomatically, entitlementVerificationMode, pendingTransactionsForPrepaidPlansEnabled, diagnosticsEnabled, }: PurchasesConfiguration): void;
|
|
117
|
+
static configure({ apiKey, appUserID, purchasesAreCompletedBy, userDefaultsSuiteName, storeKitVersion, useAmazon, shouldShowInAppMessagesAutomatically, entitlementVerificationMode, pendingTransactionsForPrepaidPlansEnabled, diagnosticsEnabled, automaticDeviceIdentifierCollectionEnabled, preferredUILocaleOverride, }: PurchasesConfiguration): void;
|
|
116
118
|
/**
|
|
117
119
|
* @deprecated, configure behavior through the RevenueCat dashboard (app.revenuecat.com) instead.
|
|
118
120
|
* If an user tries to purchase a product that is active on the current app store account,
|
|
@@ -699,6 +701,14 @@ export default class Purchases {
|
|
|
699
701
|
* setting the creative subscriber attribute.
|
|
700
702
|
*/
|
|
701
703
|
static setCreative(creative: string | null): Promise<void>;
|
|
704
|
+
/**
|
|
705
|
+
* Overrides the preferred UI locale used by RevenueCat UI components.
|
|
706
|
+
* Pass null to clear the override and use the device's locale.
|
|
707
|
+
*
|
|
708
|
+
* @param locale A BCP 47 locale identifier (e.g., "en-US") or null to clear.
|
|
709
|
+
* @returns {Promise<void>}
|
|
710
|
+
*/
|
|
711
|
+
static overridePreferredLocale(locale: string | null): Promise<void>;
|
|
702
712
|
/**
|
|
703
713
|
* Check if billing is supported for the current user (meaning IN-APP purchases are supported)
|
|
704
714
|
* and optionally, whether a list of specified feature types are supported.
|
package/dist/purchases.js
CHANGED
|
@@ -87,11 +87,13 @@ var Purchases = /** @class */ (function () {
|
|
|
87
87
|
* Default is null, which will make the SDK use standardUserDefaults.
|
|
88
88
|
* @param {boolean} [pendingTransactionsForPrepaidPlansEnabled=false] An optional boolean. Android-only. Set this to true to enable pending transactions for prepaid subscriptions in Google Play.
|
|
89
89
|
* @param {boolean} [diagnosticsEnabled=false] An optional boolean. Set this to true to enable SDK diagnostics.
|
|
90
|
+
* @param {boolean} [automaticDeviceIdentifierCollectionEnabled=true] An optional boolean. Set this to true to allow the collection of identifiers when setting the identifier for an attribution network.
|
|
91
|
+
* @param {String?} [preferredUILocaleOverride] An optional string. Set this to the preferred UI locale to use for RevenueCat UI components.
|
|
90
92
|
*
|
|
91
93
|
* @warning If you use purchasesAreCompletedBy=PurchasesAreCompletedByMyApp, you must also provide a value for storeKitVersion.
|
|
92
94
|
*/
|
|
93
95
|
Purchases.configure = function (_a) {
|
|
94
|
-
var apiKey = _a.apiKey, _b = _a.appUserID, appUserID = _b === void 0 ? null : _b, _c = _a.purchasesAreCompletedBy, purchasesAreCompletedBy = _c === void 0 ? purchases_typescript_internal_1.PURCHASES_ARE_COMPLETED_BY_TYPE.REVENUECAT : _c, userDefaultsSuiteName = _a.userDefaultsSuiteName, _d = _a.storeKitVersion, storeKitVersion = _d === void 0 ? purchases_typescript_internal_1.STOREKIT_VERSION.DEFAULT : _d, _e = _a.useAmazon, useAmazon = _e === void 0 ? false : _e, _f = _a.shouldShowInAppMessagesAutomatically, shouldShowInAppMessagesAutomatically = _f === void 0 ? true : _f, _g = _a.entitlementVerificationMode, entitlementVerificationMode = _g === void 0 ? purchases_typescript_internal_1.ENTITLEMENT_VERIFICATION_MODE.DISABLED : _g, _h = _a.pendingTransactionsForPrepaidPlansEnabled, pendingTransactionsForPrepaidPlansEnabled = _h === void 0 ? false : _h, _j = _a.diagnosticsEnabled, diagnosticsEnabled = _j === void 0 ? false : _j;
|
|
96
|
+
var apiKey = _a.apiKey, _b = _a.appUserID, appUserID = _b === void 0 ? null : _b, _c = _a.purchasesAreCompletedBy, purchasesAreCompletedBy = _c === void 0 ? purchases_typescript_internal_1.PURCHASES_ARE_COMPLETED_BY_TYPE.REVENUECAT : _c, userDefaultsSuiteName = _a.userDefaultsSuiteName, _d = _a.storeKitVersion, storeKitVersion = _d === void 0 ? purchases_typescript_internal_1.STOREKIT_VERSION.DEFAULT : _d, _e = _a.useAmazon, useAmazon = _e === void 0 ? false : _e, _f = _a.shouldShowInAppMessagesAutomatically, shouldShowInAppMessagesAutomatically = _f === void 0 ? true : _f, _g = _a.entitlementVerificationMode, entitlementVerificationMode = _g === void 0 ? purchases_typescript_internal_1.ENTITLEMENT_VERIFICATION_MODE.DISABLED : _g, _h = _a.pendingTransactionsForPrepaidPlansEnabled, pendingTransactionsForPrepaidPlansEnabled = _h === void 0 ? false : _h, _j = _a.diagnosticsEnabled, diagnosticsEnabled = _j === void 0 ? false : _j, _k = _a.automaticDeviceIdentifierCollectionEnabled, automaticDeviceIdentifierCollectionEnabled = _k === void 0 ? true : _k, preferredUILocaleOverride = _a.preferredUILocaleOverride;
|
|
95
97
|
if (!customLogHandler) {
|
|
96
98
|
this.setLogHandler(function (logLevel, message) {
|
|
97
99
|
switch (logLevel) {
|
|
@@ -143,7 +145,7 @@ var Purchases = /** @class */ (function () {
|
|
|
143
145
|
console.warn("Warning: You should provide the specific StoreKit version you're using in your implementation when configuring PURCHASES_ARE_COMPLETED_BY_TYPE.MY_APP, and not rely on the DEFAULT.");
|
|
144
146
|
}
|
|
145
147
|
}
|
|
146
|
-
RNPurchases.setupPurchases(apiKey, appUserID, purchasesCompletedByToUse, userDefaultsSuiteName, storeKitVersionToUse, useAmazon, shouldShowInAppMessagesAutomatically, entitlementVerificationMode, pendingTransactionsForPrepaidPlansEnabled, diagnosticsEnabled);
|
|
148
|
+
RNPurchases.setupPurchases(apiKey, appUserID, purchasesCompletedByToUse, userDefaultsSuiteName, storeKitVersionToUse, useAmazon, shouldShowInAppMessagesAutomatically, entitlementVerificationMode, pendingTransactionsForPrepaidPlansEnabled, diagnosticsEnabled, automaticDeviceIdentifierCollectionEnabled, preferredUILocaleOverride);
|
|
147
149
|
};
|
|
148
150
|
/**
|
|
149
151
|
* @deprecated, configure behavior through the RevenueCat dashboard (app.revenuecat.com) instead.
|
|
@@ -1498,6 +1500,26 @@ var Purchases = /** @class */ (function () {
|
|
|
1498
1500
|
});
|
|
1499
1501
|
});
|
|
1500
1502
|
};
|
|
1503
|
+
/**
|
|
1504
|
+
* Overrides the preferred UI locale used by RevenueCat UI components.
|
|
1505
|
+
* Pass null to clear the override and use the device's locale.
|
|
1506
|
+
*
|
|
1507
|
+
* @param locale A BCP 47 locale identifier (e.g., "en-US") or null to clear.
|
|
1508
|
+
* @returns {Promise<void>}
|
|
1509
|
+
*/
|
|
1510
|
+
Purchases.overridePreferredLocale = function (locale) {
|
|
1511
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
1512
|
+
return __generator(this, function (_a) {
|
|
1513
|
+
switch (_a.label) {
|
|
1514
|
+
case 0: return [4 /*yield*/, Purchases.throwIfNotConfigured()];
|
|
1515
|
+
case 1:
|
|
1516
|
+
_a.sent();
|
|
1517
|
+
RNPurchases.overridePreferredLocale(locale);
|
|
1518
|
+
return [2 /*return*/];
|
|
1519
|
+
}
|
|
1520
|
+
});
|
|
1521
|
+
});
|
|
1522
|
+
};
|
|
1501
1523
|
/**
|
|
1502
1524
|
* Check if billing is supported for the current user (meaning IN-APP purchases are supported)
|
|
1503
1525
|
* and optionally, whether a list of specified feature types are supported.
|
package/ios/RNPurchases.m
CHANGED
|
@@ -61,7 +61,9 @@ RCT_EXPORT_METHOD(setupPurchases:(NSString *)apiKey
|
|
|
61
61
|
shouldShowInAppMessagesAutomatically:(BOOL)shouldShowInAppMessagesAutomatically
|
|
62
62
|
entitlementVerificationMode:(nullable NSString *)entitlementVerificationMode
|
|
63
63
|
pendingTransactionsForPrepaidPlansEnabled:(BOOL)pendingTransactionsForPrepaidPlansEnabled
|
|
64
|
-
diagnosticsEnabled:(BOOL)diagnosticsEnabled
|
|
64
|
+
diagnosticsEnabled:(BOOL)diagnosticsEnabled
|
|
65
|
+
automaticDeviceIdentifierCollectionEnabled:(BOOL)automaticDeviceIdentifierCollectionEnabled
|
|
66
|
+
preferredUILocaleOverride:(nullable NSString *)preferredUILocaleOverride) {
|
|
65
67
|
RCPurchases *purchases = [RCPurchases configureWithAPIKey:apiKey.mappingNSNullToNil
|
|
66
68
|
appUserID:appUserID.mappingNSNullToNil
|
|
67
69
|
purchasesAreCompletedBy:purchasesAreCompletedBy.mappingNSNullToNil
|
|
@@ -72,7 +74,9 @@ RCT_EXPORT_METHOD(setupPurchases:(NSString *)apiKey
|
|
|
72
74
|
dangerousSettings:nil
|
|
73
75
|
shouldShowInAppMessagesAutomatically:shouldShowInAppMessagesAutomatically
|
|
74
76
|
verificationMode:entitlementVerificationMode.mappingNSNullToNil
|
|
75
|
-
diagnosticsEnabled:diagnosticsEnabled
|
|
77
|
+
diagnosticsEnabled:diagnosticsEnabled
|
|
78
|
+
automaticDeviceIdentifierCollectionEnabled:automaticDeviceIdentifierCollectionEnabled
|
|
79
|
+
preferredLocale:preferredUILocaleOverride.mappingNSNullToNil];
|
|
76
80
|
purchases.delegate = self;
|
|
77
81
|
}
|
|
78
82
|
|
|
@@ -430,6 +434,10 @@ RCT_EXPORT_METHOD(setCreative:(NSString *)creative) {
|
|
|
430
434
|
[RCCommonFunctionality setCreative:creative.mappingNSNullToNil];
|
|
431
435
|
}
|
|
432
436
|
|
|
437
|
+
RCT_EXPORT_METHOD(overridePreferredLocale:(nullable NSString *)locale) {
|
|
438
|
+
[RCCommonFunctionality overridePreferredLocale:locale.mappingNSNullToNil];
|
|
439
|
+
}
|
|
440
|
+
|
|
433
441
|
RCT_REMAP_METHOD(canMakePayments,
|
|
434
442
|
canMakePaymentsWithFeatures:(NSArray<NSNumber *> *)features
|
|
435
443
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
@@ -657,7 +665,7 @@ readyForPromotedProduct:(RCStoreProduct *)product
|
|
|
657
665
|
}
|
|
658
666
|
|
|
659
667
|
- (NSString *)platformFlavorVersion {
|
|
660
|
-
return @"9.
|
|
668
|
+
return @"9.4.1";
|
|
661
669
|
}
|
|
662
670
|
|
|
663
671
|
@end
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-purchases",
|
|
3
3
|
"title": "React Native Purchases",
|
|
4
|
-
"version": "9.
|
|
4
|
+
"version": "9.4.1",
|
|
5
5
|
"description": "React Native in-app purchases and subscriptions made easy. Supports iOS and Android. ",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
]
|
|
115
115
|
},
|
|
116
116
|
"dependencies": {
|
|
117
|
-
"@revenuecat/purchases-js-hybrid-mappings": "17.
|
|
118
|
-
"@revenuecat/purchases-typescript-internal": "17.
|
|
117
|
+
"@revenuecat/purchases-js-hybrid-mappings": "17.6.0",
|
|
118
|
+
"@revenuecat/purchases-typescript-internal": "17.6.0"
|
|
119
119
|
}
|
|
120
120
|
}
|