@umituz/react-native-subscription 2.31.23 → 2.31.25
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/package.json +1 -1
- package/src/domains/credits/presentation/useCredits.ts +5 -5
- package/src/domains/subscription/infrastructure/handlers/PackageHandler.ts +26 -2
- package/src/domains/subscription/infrastructure/hooks/useSubscriptionPackages.ts +5 -5
- package/src/domains/subscription/infrastructure/services/OfferingsFetcher.ts +41 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umituz/react-native-subscription",
|
|
3
|
-
"version": "2.31.
|
|
3
|
+
"version": "2.31.25",
|
|
4
4
|
"description": "Complete subscription management with RevenueCat, paywall UI, and credits system for React Native apps",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -44,11 +44,11 @@ export const useCredits = (): UseCreditsResult => {
|
|
|
44
44
|
return result.data ?? null;
|
|
45
45
|
},
|
|
46
46
|
enabled: queryEnabled,
|
|
47
|
-
gcTime:
|
|
48
|
-
staleTime:
|
|
49
|
-
refetchOnMount:
|
|
50
|
-
refetchOnWindowFocus:
|
|
51
|
-
refetchOnReconnect:
|
|
47
|
+
gcTime: 10 * 60 * 1000,
|
|
48
|
+
staleTime: 30 * 1000,
|
|
49
|
+
refetchOnMount: true,
|
|
50
|
+
refetchOnWindowFocus: false,
|
|
51
|
+
refetchOnReconnect: true,
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
const queryClient = useQueryClient();
|
|
@@ -8,6 +8,8 @@ import type { IRevenueCatService } from "../../../../shared/application/ports/IR
|
|
|
8
8
|
import { getPremiumEntitlement } from "../../../revenuecat/core/types";
|
|
9
9
|
import { PurchaseStatusResolver, type PremiumStatus } from "./PurchaseStatusResolver";
|
|
10
10
|
|
|
11
|
+
declare const __DEV__: boolean;
|
|
12
|
+
|
|
11
13
|
export interface RestoreResultInfo {
|
|
12
14
|
success: boolean;
|
|
13
15
|
productId: string | null;
|
|
@@ -31,19 +33,41 @@ export class PackageHandler {
|
|
|
31
33
|
try {
|
|
32
34
|
const offering = await this.service.fetchOfferings();
|
|
33
35
|
|
|
36
|
+
if (__DEV__) {
|
|
37
|
+
console.log('[PackageHandler] fetchOfferings result:', {
|
|
38
|
+
hasOffering: !!offering,
|
|
39
|
+
offeringId: offering?.identifier,
|
|
40
|
+
packagesCount: offering?.availablePackages?.length,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
34
44
|
if (!offering) {
|
|
35
|
-
|
|
45
|
+
if (__DEV__) {
|
|
46
|
+
console.warn('[PackageHandler] No offering returned, returning empty array');
|
|
47
|
+
}
|
|
36
48
|
return [];
|
|
37
49
|
}
|
|
38
50
|
|
|
39
51
|
const packages = offering.availablePackages;
|
|
40
52
|
if (!packages || packages.length === 0) {
|
|
41
|
-
|
|
53
|
+
if (__DEV__) {
|
|
54
|
+
console.warn('[PackageHandler] Offering has no packages, returning empty array');
|
|
55
|
+
}
|
|
42
56
|
return [];
|
|
43
57
|
}
|
|
44
58
|
|
|
59
|
+
if (__DEV__) {
|
|
60
|
+
console.log('[PackageHandler] Returning packages:', {
|
|
61
|
+
count: packages.length,
|
|
62
|
+
packageIds: packages.map(p => p.product.identifier),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
45
66
|
return packages;
|
|
46
67
|
} catch (error) {
|
|
68
|
+
if (__DEV__) {
|
|
69
|
+
console.error('[PackageHandler] Error fetching packages:', error);
|
|
70
|
+
}
|
|
47
71
|
throw new Error(
|
|
48
72
|
`Failed to fetch subscription packages. ${
|
|
49
73
|
error instanceof Error ? error.message : "Unknown error"
|
|
@@ -40,10 +40,10 @@ export const useSubscriptionPackages = () => {
|
|
|
40
40
|
return SubscriptionManager.getPackages();
|
|
41
41
|
},
|
|
42
42
|
enabled: isConfigured,
|
|
43
|
-
gcTime:
|
|
44
|
-
staleTime:
|
|
45
|
-
refetchOnMount:
|
|
46
|
-
refetchOnWindowFocus:
|
|
47
|
-
refetchOnReconnect:
|
|
43
|
+
gcTime: 5 * 60 * 1000,
|
|
44
|
+
staleTime: 2 * 60 * 1000,
|
|
45
|
+
refetchOnMount: true,
|
|
46
|
+
refetchOnWindowFocus: false,
|
|
47
|
+
refetchOnReconnect: true,
|
|
48
48
|
});
|
|
49
49
|
};
|
|
@@ -4,12 +4,52 @@ export interface OfferingsFetcherDeps {
|
|
|
4
4
|
isInitialized: () => boolean;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
+
declare const __DEV__: boolean;
|
|
8
|
+
|
|
7
9
|
export async function fetchOfferings(deps: OfferingsFetcherDeps): Promise<PurchasesOffering | null> {
|
|
8
10
|
if (!deps.isInitialized()) return null;
|
|
9
11
|
try {
|
|
10
12
|
const offerings = await Purchases.getOfferings();
|
|
11
|
-
|
|
13
|
+
|
|
14
|
+
if (__DEV__) {
|
|
15
|
+
console.log('[OfferingsFetcher] Offerings received:', {
|
|
16
|
+
hasCurrent: !!offerings.current,
|
|
17
|
+
currentId: offerings.current?.identifier,
|
|
18
|
+
allOfferingsCount: Object.keys(offerings.all).length,
|
|
19
|
+
allOfferingIds: Object.keys(offerings.all),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (offerings.current) {
|
|
24
|
+
if (__DEV__) {
|
|
25
|
+
console.log('[OfferingsFetcher] Using current offering:', {
|
|
26
|
+
id: offerings.current.identifier,
|
|
27
|
+
packagesCount: offerings.current.availablePackages.length,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return offerings.current;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const allOfferings = Object.values(offerings.all);
|
|
34
|
+
if (allOfferings.length > 0) {
|
|
35
|
+
if (__DEV__) {
|
|
36
|
+
console.log('[OfferingsFetcher] No current offering, using first from all:', {
|
|
37
|
+
id: allOfferings[0].identifier,
|
|
38
|
+
packagesCount: allOfferings[0].availablePackages.length,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return allOfferings[0];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (__DEV__) {
|
|
45
|
+
console.warn('[OfferingsFetcher] No offerings available!');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return null;
|
|
12
49
|
} catch (error) {
|
|
50
|
+
if (__DEV__) {
|
|
51
|
+
console.error('[OfferingsFetcher] Error:', error);
|
|
52
|
+
}
|
|
13
53
|
throw new Error(`Failed to fetch offerings: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
14
54
|
}
|
|
15
55
|
}
|