@sudobility/subscription_lib 0.0.3 → 0.0.4
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/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/singleton.d.ts +7 -0
- package/dist/core/singleton.d.ts.map +1 -1
- package/dist/core/singleton.js +20 -0
- package/dist/hooks/useUserSubscription.d.ts +3 -1
- package/dist/hooks/useUserSubscription.d.ts.map +1 -1
- package/dist/hooks/useUserSubscription.js +18 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/core/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Core Exports
|
|
3
3
|
*/
|
|
4
4
|
export { SubscriptionService, type SubscriptionServiceConfig } from './service';
|
|
5
|
-
export { initializeSubscription, getSubscriptionInstance, isSubscriptionInitialized, resetSubscription, refreshSubscription, setSubscriptionUserId, getSubscriptionUserId, onSubscriptionUserIdChange, type SubscriptionConfig, } from './singleton';
|
|
5
|
+
export { initializeSubscription, getSubscriptionInstance, isSubscriptionInitialized, resetSubscription, refreshSubscription, setSubscriptionUserId, getSubscriptionUserId, onSubscriptionUserIdChange, onSubscriptionRefresh, type SubscriptionConfig, } from './singleton';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEhF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAEhF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Core Exports
|
|
3
3
|
*/
|
|
4
4
|
export { SubscriptionService } from './service';
|
|
5
|
-
export { initializeSubscription, getSubscriptionInstance, isSubscriptionInitialized, resetSubscription, refreshSubscription, setSubscriptionUserId, getSubscriptionUserId, onSubscriptionUserIdChange, } from './singleton';
|
|
5
|
+
export { initializeSubscription, getSubscriptionInstance, isSubscriptionInitialized, resetSubscription, refreshSubscription, setSubscriptionUserId, getSubscriptionUserId, onSubscriptionUserIdChange, onSubscriptionRefresh, } from './singleton';
|
package/dist/core/singleton.d.ts
CHANGED
|
@@ -92,4 +92,11 @@ export declare function getSubscriptionUserId(): string | undefined;
|
|
|
92
92
|
* @returns Unsubscribe function
|
|
93
93
|
*/
|
|
94
94
|
export declare function onSubscriptionUserIdChange(listener: () => void): () => void;
|
|
95
|
+
/**
|
|
96
|
+
* Subscribe to subscription data refresh events.
|
|
97
|
+
* Called after refreshSubscription() completes.
|
|
98
|
+
* @param listener Callback to invoke when subscription data is refreshed
|
|
99
|
+
* @returns Unsubscribe function
|
|
100
|
+
*/
|
|
101
|
+
export declare function onSubscriptionRefresh(listener: () => void): () => void;
|
|
95
102
|
//# sourceMappingURL=singleton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../src/core/singleton.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,8BAA8B;IAC9B,QAAQ,EAAE,cAAc,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../src/core/singleton.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,8BAA8B;IAC9B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAQD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAMvE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,mBAAmB,CAO7D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUzD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAQ3E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAQtE"}
|
package/dist/core/singleton.js
CHANGED
|
@@ -8,6 +8,7 @@ let instance = null;
|
|
|
8
8
|
let currentAdapter = null;
|
|
9
9
|
let currentUserId = undefined;
|
|
10
10
|
const userIdChangeListeners = [];
|
|
11
|
+
const subscriptionRefreshListeners = [];
|
|
11
12
|
/**
|
|
12
13
|
* Initialize the subscription singleton
|
|
13
14
|
*
|
|
@@ -74,6 +75,10 @@ export async function refreshSubscription() {
|
|
|
74
75
|
return;
|
|
75
76
|
}
|
|
76
77
|
await Promise.all([instance.loadOfferings(), instance.loadCustomerInfo()]);
|
|
78
|
+
// Notify listeners that subscription data has been refreshed
|
|
79
|
+
for (const listener of subscriptionRefreshListeners) {
|
|
80
|
+
listener();
|
|
81
|
+
}
|
|
77
82
|
}
|
|
78
83
|
/**
|
|
79
84
|
* Set the user ID for the subscription service.
|
|
@@ -134,3 +139,18 @@ export function onSubscriptionUserIdChange(listener) {
|
|
|
134
139
|
}
|
|
135
140
|
};
|
|
136
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Subscribe to subscription data refresh events.
|
|
144
|
+
* Called after refreshSubscription() completes.
|
|
145
|
+
* @param listener Callback to invoke when subscription data is refreshed
|
|
146
|
+
* @returns Unsubscribe function
|
|
147
|
+
*/
|
|
148
|
+
export function onSubscriptionRefresh(listener) {
|
|
149
|
+
subscriptionRefreshListeners.push(listener);
|
|
150
|
+
return () => {
|
|
151
|
+
const index = subscriptionRefreshListeners.indexOf(listener);
|
|
152
|
+
if (index >= 0) {
|
|
153
|
+
subscriptionRefreshListeners.splice(index, 1);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}
|
|
@@ -14,7 +14,9 @@ export interface UseUserSubscriptionResult {
|
|
|
14
14
|
isLoading: boolean;
|
|
15
15
|
/** Error if loading failed */
|
|
16
16
|
error: Error | null;
|
|
17
|
-
/**
|
|
17
|
+
/** Force refresh customer subscription data from the server */
|
|
18
|
+
update: () => Promise<void>;
|
|
19
|
+
/** @deprecated Use update() instead */
|
|
18
20
|
refetch: () => Promise<void>;
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUserSubscription.d.ts","sourceRoot":"","sources":["../../src/hooks/useUserSubscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"useUserSubscription.d.ts","sourceRoot":"","sources":["../../src/hooks/useUserSubscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAUjE;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,iDAAiD;IACjD,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,uCAAuC;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,CAAC,EAAE,0BAA0B,GACnC,yBAAyB,CAoG3B"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Fetch and manage current user's subscription status.
|
|
5
5
|
*/
|
|
6
6
|
import { useCallback, useEffect, useState } from 'react';
|
|
7
|
-
import { getSubscriptionInstance, getSubscriptionUserId, isSubscriptionInitialized, onSubscriptionUserIdChange, setSubscriptionUserId, } from '../core/singleton';
|
|
7
|
+
import { getSubscriptionInstance, getSubscriptionUserId, isSubscriptionInitialized, onSubscriptionRefresh, onSubscriptionUserIdChange, setSubscriptionUserId, } from '../core/singleton';
|
|
8
8
|
/**
|
|
9
9
|
* Hook to get current user's subscription status
|
|
10
10
|
*
|
|
@@ -76,13 +76,26 @@ export function useUserSubscription(options) {
|
|
|
76
76
|
useEffect(() => {
|
|
77
77
|
loadData();
|
|
78
78
|
// Subscribe to user ID changes to reload
|
|
79
|
-
const
|
|
79
|
+
const unsubscribeUserId = onSubscriptionUserIdChange(() => {
|
|
80
80
|
console.log('[useUserSubscription] User ID changed, reloading...');
|
|
81
81
|
loadData();
|
|
82
82
|
});
|
|
83
|
-
|
|
83
|
+
// Subscribe to subscription refresh events (e.g., after purchase)
|
|
84
|
+
const unsubscribeRefresh = onSubscriptionRefresh(() => {
|
|
85
|
+
console.log('[useUserSubscription] Subscription refreshed, updating...');
|
|
86
|
+
// Get the updated subscription from the service
|
|
87
|
+
if (isSubscriptionInitialized()) {
|
|
88
|
+
const service = getSubscriptionInstance();
|
|
89
|
+
const currentSub = service.getCurrentSubscription();
|
|
90
|
+
setSubscription(currentSub);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return () => {
|
|
94
|
+
unsubscribeUserId();
|
|
95
|
+
unsubscribeRefresh();
|
|
96
|
+
};
|
|
84
97
|
}, [loadData]);
|
|
85
|
-
const
|
|
98
|
+
const update = useCallback(async () => {
|
|
86
99
|
if (!isSubscriptionInitialized())
|
|
87
100
|
return;
|
|
88
101
|
const service = getSubscriptionInstance();
|
|
@@ -100,5 +113,5 @@ export function useUserSubscription(options) {
|
|
|
100
113
|
setIsLoading(false);
|
|
101
114
|
}
|
|
102
115
|
}, []);
|
|
103
|
-
return { subscription, isLoading, error, refetch };
|
|
116
|
+
return { subscription, isLoading, error, update, refetch: update };
|
|
104
117
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Cross-platform subscription management library with RevenueCat adapter pattern.
|
|
5
5
|
* Works with both React (web) and React Native.
|
|
6
6
|
*/
|
|
7
|
-
export { initializeSubscription, getSubscriptionInstance, isSubscriptionInitialized, resetSubscription, refreshSubscription, setSubscriptionUserId, getSubscriptionUserId, onSubscriptionUserIdChange, SubscriptionService, type SubscriptionConfig, type SubscriptionServiceConfig, } from './core';
|
|
7
|
+
export { initializeSubscription, getSubscriptionInstance, isSubscriptionInitialized, resetSubscription, refreshSubscription, setSubscriptionUserId, getSubscriptionUserId, onSubscriptionUserIdChange, onSubscriptionRefresh, SubscriptionService, type SubscriptionConfig, type SubscriptionServiceConfig, } from './core';
|
|
8
8
|
export { useSubscriptions, useUserSubscription, useSubscriptionPeriods, useSubscriptionForPeriod, useSubscribable, type UseSubscriptionsResult, type UseSubscriptionsOptions, type UseUserSubscriptionResult, type UseUserSubscriptionOptions, type UseSubscriptionPeriodsResult, type UseSubscriptionForPeriodResult, type UseSubscribableResult, type UseSubscribableOptions, } from './hooks';
|
|
9
9
|
export type { SubscriptionAdapter, AdapterOfferings, AdapterOffering, AdapterPackage, AdapterProduct, AdapterSubscriptionOption, AdapterPricingPhase, AdapterCustomerInfo, AdapterEntitlementInfo, AdapterPurchaseParams, AdapterPurchaseResult, SubscriptionProduct, SubscriptionPackage, SubscriptionOffer, CurrentSubscription, FreeTierConfig, PackageWithLevel, SubscriptionPeriod, } from './types';
|
|
10
10
|
export { PERIOD_RANKS, ALL_PERIODS } from './types';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,SAAS,CAAC;AAGjB,YAAY,EAEV,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EAErB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAEhB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGpD,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,GAC/B,MAAM,QAAQ,CAAC;AAGhB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,SAAS,CAAC;AAGjB,YAAY,EAEV,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EAErB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAEhB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGpD,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Works with both React (web) and React Native.
|
|
6
6
|
*/
|
|
7
7
|
// Core
|
|
8
|
-
export { initializeSubscription, getSubscriptionInstance, isSubscriptionInitialized, resetSubscription, refreshSubscription, setSubscriptionUserId, getSubscriptionUserId, onSubscriptionUserIdChange, SubscriptionService, } from './core';
|
|
8
|
+
export { initializeSubscription, getSubscriptionInstance, isSubscriptionInitialized, resetSubscription, refreshSubscription, setSubscriptionUserId, getSubscriptionUserId, onSubscriptionUserIdChange, onSubscriptionRefresh, SubscriptionService, } from './core';
|
|
9
9
|
// Hooks
|
|
10
10
|
export { useSubscriptions, useUserSubscription, useSubscriptionPeriods, useSubscriptionForPeriod, useSubscribable, } from './hooks';
|
|
11
11
|
export { PERIOD_RANKS, ALL_PERIODS } from './types';
|