@sudobility/subscription_lib 0.0.4 → 0.0.7

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.
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Adapter Exports
3
+ *
4
+ * Platform-specific adapters for RevenueCat SDK integration.
5
+ */
6
+ export { configureRevenueCatAdapter, createRevenueCatAdapter, setRevenueCatUser, clearRevenueCatUser, hasRevenueCatUser, } from './revenuecat-web';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Adapter Exports
3
+ *
4
+ * Platform-specific adapters for RevenueCat SDK integration.
5
+ */
6
+ export { configureRevenueCatAdapter, createRevenueCatAdapter, setRevenueCatUser, clearRevenueCatUser, hasRevenueCatUser, } from './revenuecat-web';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * RevenueCat Web Adapter
3
+ *
4
+ * Adapter for RevenueCat web SDK (@revenuecat/purchases-js).
5
+ * Provides lazy loading of the SDK to minimize initial bundle size.
6
+ */
7
+ import type { SubscriptionAdapter } from '../types/adapter';
8
+ /**
9
+ * Configure the RevenueCat adapter with API key.
10
+ * Call this before initializing subscription_lib.
11
+ * RevenueCat SDK is lazily loaded when first needed.
12
+ */
13
+ export declare function configureRevenueCatAdapter(revenueCatApiKey: string): void;
14
+ /**
15
+ * Set the current user for RevenueCat.
16
+ * Call this when user logs in.
17
+ */
18
+ export declare function setRevenueCatUser(userId: string, email?: string): Promise<void>;
19
+ /**
20
+ * Clear the current user (on logout).
21
+ */
22
+ export declare function clearRevenueCatUser(): void;
23
+ /**
24
+ * Check if RevenueCat has a user configured.
25
+ */
26
+ export declare function hasRevenueCatUser(): boolean;
27
+ /**
28
+ * Create the subscription adapter for subscription_lib.
29
+ */
30
+ export declare function createRevenueCatAdapter(): SubscriptionAdapter;
31
+ //# sourceMappingURL=revenuecat-web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revenuecat-web.d.ts","sourceRoot":"","sources":["../../src/adapters/revenuecat-web.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAKV,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAW1B;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAEzE;AA0BD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,mBAAmB,CAyM7D"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * RevenueCat Web Adapter
3
+ *
4
+ * Adapter for RevenueCat web SDK (@revenuecat/purchases-js).
5
+ * Provides lazy loading of the SDK to minimize initial bundle size.
6
+ */
7
+ // Module state
8
+ let purchasesInstance = null;
9
+ let currentUserId = null;
10
+ let apiKey = null;
11
+ /**
12
+ * Configure the RevenueCat adapter with API key.
13
+ * Call this before initializing subscription_lib.
14
+ * RevenueCat SDK is lazily loaded when first needed.
15
+ */
16
+ export function configureRevenueCatAdapter(revenueCatApiKey) {
17
+ apiKey = revenueCatApiKey;
18
+ }
19
+ /**
20
+ * Lazily initialize RevenueCat SDK when first needed.
21
+ * Requires a user to be set first via setRevenueCatUser().
22
+ */
23
+ async function ensureInitialized() {
24
+ if (!apiKey) {
25
+ throw new Error('RevenueCat not configured');
26
+ }
27
+ if (!currentUserId) {
28
+ throw new Error('RevenueCat user not set. Call setRevenueCatUser() first.');
29
+ }
30
+ if (!purchasesInstance) {
31
+ const SDK = await import('@revenuecat/purchases-js');
32
+ purchasesInstance = SDK.Purchases.configure({
33
+ apiKey,
34
+ appUserId: currentUserId,
35
+ });
36
+ }
37
+ return purchasesInstance;
38
+ }
39
+ /**
40
+ * Set the current user for RevenueCat.
41
+ * Call this when user logs in.
42
+ */
43
+ export async function setRevenueCatUser(userId, email) {
44
+ if (!apiKey) {
45
+ console.warn('[subscription] RevenueCat not configured');
46
+ return;
47
+ }
48
+ // Skip if same user
49
+ if (currentUserId === userId && purchasesInstance) {
50
+ return;
51
+ }
52
+ currentUserId = userId;
53
+ const SDK = await import('@revenuecat/purchases-js');
54
+ // Close existing instance
55
+ if (purchasesInstance) {
56
+ purchasesInstance.close();
57
+ }
58
+ // Configure new instance with user
59
+ purchasesInstance = SDK.Purchases.configure({
60
+ apiKey,
61
+ appUserId: userId,
62
+ });
63
+ // Set email attribute
64
+ if (email) {
65
+ try {
66
+ await purchasesInstance.setAttributes({ email });
67
+ }
68
+ catch {
69
+ // Ignore attribute errors
70
+ }
71
+ }
72
+ }
73
+ /**
74
+ * Clear the current user (on logout).
75
+ */
76
+ export function clearRevenueCatUser() {
77
+ if (purchasesInstance) {
78
+ purchasesInstance.close();
79
+ purchasesInstance = null;
80
+ }
81
+ currentUserId = null;
82
+ }
83
+ /**
84
+ * Check if RevenueCat has a user configured.
85
+ */
86
+ export function hasRevenueCatUser() {
87
+ return currentUserId !== null && purchasesInstance !== null;
88
+ }
89
+ /**
90
+ * Create the subscription adapter for subscription_lib.
91
+ */
92
+ export function createRevenueCatAdapter() {
93
+ return {
94
+ async setUserId(userId, email) {
95
+ if (userId) {
96
+ await setRevenueCatUser(userId, email);
97
+ }
98
+ else {
99
+ clearRevenueCatUser();
100
+ }
101
+ },
102
+ async getOfferings() {
103
+ // Return empty offerings if no user is set
104
+ if (!currentUserId) {
105
+ console.log('[revenuecat-web] No user set, returning empty offerings');
106
+ return { all: {}, current: null };
107
+ }
108
+ try {
109
+ const purchases = await ensureInitialized();
110
+ const offerings = await purchases.getOfferings();
111
+ console.log('[revenuecat-web] Raw offerings from RevenueCat:', {
112
+ allKeys: Object.keys(offerings.all),
113
+ currentIdentifier: offerings.current?.identifier,
114
+ currentPackageCount: offerings.current?.availablePackages.length,
115
+ });
116
+ const convertPackage = (pkg) => ({
117
+ identifier: pkg.identifier,
118
+ packageType: pkg.packageType,
119
+ product: {
120
+ identifier: pkg.rcBillingProduct.identifier,
121
+ title: pkg.rcBillingProduct.title,
122
+ description: pkg.rcBillingProduct.description || null,
123
+ price: pkg.rcBillingProduct.currentPrice?.amountMicros
124
+ ? pkg.rcBillingProduct.currentPrice.amountMicros / 1000000
125
+ : 0,
126
+ priceString: pkg.rcBillingProduct.currentPrice?.formattedPrice || '$0',
127
+ currencyCode: pkg.rcBillingProduct.currentPrice?.currency || 'USD',
128
+ normalPeriodDuration: pkg.rcBillingProduct.normalPeriodDuration || null,
129
+ subscriptionOptions: pkg.rcBillingProduct.defaultSubscriptionOption
130
+ ? {
131
+ [pkg.rcBillingProduct.defaultSubscriptionOption.id]: {
132
+ id: pkg.rcBillingProduct.defaultSubscriptionOption.id,
133
+ trial: pkg.rcBillingProduct.defaultSubscriptionOption.trial
134
+ ? {
135
+ periodDuration: pkg.rcBillingProduct.defaultSubscriptionOption.trial
136
+ .periodDuration || null,
137
+ price: pkg.rcBillingProduct.defaultSubscriptionOption
138
+ .trial.price?.amountMicros
139
+ ? pkg.rcBillingProduct.defaultSubscriptionOption
140
+ .trial.price.amountMicros / 1000000
141
+ : 0,
142
+ priceString: pkg.rcBillingProduct.defaultSubscriptionOption.trial
143
+ .price?.formattedPrice || '$0',
144
+ cycleCount: pkg.rcBillingProduct.defaultSubscriptionOption.trial
145
+ .cycleCount || 1,
146
+ }
147
+ : null,
148
+ introPrice: pkg.rcBillingProduct.defaultSubscriptionOption
149
+ .introPrice
150
+ ? {
151
+ periodDuration: pkg.rcBillingProduct.defaultSubscriptionOption
152
+ .introPrice.periodDuration || null,
153
+ price: pkg.rcBillingProduct.defaultSubscriptionOption
154
+ .introPrice.price?.amountMicros
155
+ ? pkg.rcBillingProduct.defaultSubscriptionOption
156
+ .introPrice.price.amountMicros / 1000000
157
+ : 0,
158
+ priceString: pkg.rcBillingProduct.defaultSubscriptionOption
159
+ .introPrice.price?.formattedPrice || '$0',
160
+ cycleCount: pkg.rcBillingProduct.defaultSubscriptionOption
161
+ .introPrice.cycleCount || 1,
162
+ }
163
+ : null,
164
+ },
165
+ }
166
+ : undefined,
167
+ },
168
+ });
169
+ const all = {};
170
+ for (const [key, offering] of Object.entries(offerings.all)) {
171
+ all[key] = {
172
+ identifier: offering.identifier,
173
+ metadata: offering.metadata || null,
174
+ availablePackages: offering.availablePackages.map(convertPackage),
175
+ };
176
+ }
177
+ return {
178
+ all,
179
+ current: offerings.current
180
+ ? {
181
+ identifier: offerings.current.identifier,
182
+ metadata: offerings.current.metadata || null,
183
+ availablePackages: offerings.current.availablePackages.map(convertPackage),
184
+ }
185
+ : null,
186
+ };
187
+ }
188
+ catch (error) {
189
+ console.error('[revenuecat-web] Failed to get offerings:', error);
190
+ return { all: {}, current: null };
191
+ }
192
+ },
193
+ async getCustomerInfo() {
194
+ // Return empty customer info if no user is set
195
+ if (!currentUserId) {
196
+ return { activeSubscriptions: [], entitlements: { active: {} } };
197
+ }
198
+ try {
199
+ const purchases = await ensureInitialized();
200
+ const customerInfo = await purchases.getCustomerInfo();
201
+ const active = {};
202
+ for (const [id, entitlement] of Object.entries(customerInfo.entitlements.active)) {
203
+ active[id] = {
204
+ identifier: entitlement.identifier,
205
+ productIdentifier: entitlement.productIdentifier,
206
+ expirationDate: entitlement.expirationDate?.toISOString() || null,
207
+ willRenew: entitlement.willRenew,
208
+ };
209
+ }
210
+ // Get management URL from the customer info
211
+ // RevenueCat web SDK provides this for subscription management
212
+ const managementUrl = customerInfo.managementURL ?? undefined;
213
+ return {
214
+ activeSubscriptions: Array.from(customerInfo.activeSubscriptions),
215
+ entitlements: { active },
216
+ managementUrl,
217
+ };
218
+ }
219
+ catch (error) {
220
+ console.error('[revenuecat-web] Failed to get customer info:', error);
221
+ return { activeSubscriptions: [], entitlements: { active: {} } };
222
+ }
223
+ },
224
+ async purchase(params) {
225
+ const purchases = await ensureInitialized();
226
+ // Find the package across all offerings
227
+ const offerings = await purchases.getOfferings();
228
+ let packageToPurchase;
229
+ for (const offering of Object.values(offerings.all)) {
230
+ packageToPurchase = offering.availablePackages.find(pkg => pkg.identifier === params.packageId);
231
+ if (packageToPurchase)
232
+ break;
233
+ }
234
+ if (!packageToPurchase) {
235
+ throw new Error(`Package not found: ${params.packageId}`);
236
+ }
237
+ const result = await purchases.purchase({
238
+ rcPackage: packageToPurchase,
239
+ });
240
+ // Convert customer info
241
+ const active = {};
242
+ for (const [id, entitlement] of Object.entries(result.customerInfo.entitlements.active)) {
243
+ active[id] = {
244
+ identifier: entitlement.identifier,
245
+ productIdentifier: entitlement.productIdentifier,
246
+ expirationDate: entitlement.expirationDate?.toISOString() || null,
247
+ willRenew: entitlement.willRenew,
248
+ };
249
+ }
250
+ return {
251
+ customerInfo: {
252
+ activeSubscriptions: Array.from(result.customerInfo.activeSubscriptions),
253
+ entitlements: { active },
254
+ },
255
+ };
256
+ },
257
+ };
258
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/core/service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAGV,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,8BAA8B;IAC9B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAA6C;IAChE,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,qBAAqB,CAAS;gBAE1B,MAAM,EAAE,yBAAyB;IAS7C;;;;OAIG;IACG,aAAa,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlE;;OAEG;YACW,eAAe;IAe7B;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6DvC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAInD;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,sBAAsB,IAAI,mBAAmB,GAAG,IAAI;IAIpD;;OAEG;IACH,kBAAkB,IAAI,mBAAmB;IASzC;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACG,QAAQ,CACZ,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IASjC;;OAEG;IACH,kBAAkB,IAAI,OAAO;IAI7B;;OAEG;IACH,qBAAqB,IAAI,OAAO;IAIhC;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAQzB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,YAAY;IAgCpB,OAAO,CAAC,+BAA+B;CA6BxC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/core/service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAGV,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EAEpB,MAAM,uBAAuB,CAAC;AAG/B;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,8BAA8B;IAC9B,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,WAAW,CAA6C;IAChE,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,qBAAqB,CAAS;gBAE1B,MAAM,EAAE,yBAAyB;IAS7C;;;;OAIG;IACG,aAAa,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlE;;OAEG;YACW,eAAe;IAe7B;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DvC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAInD;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,sBAAsB,IAAI,mBAAmB,GAAG,IAAI;IAIpD;;OAEG;IACH,kBAAkB,IAAI,mBAAmB;IASzC;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACG,QAAQ,CACZ,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IASjC;;OAEG;IACH,kBAAkB,IAAI,OAAO;IAI7B;;OAEG;IACH,qBAAqB,IAAI,OAAO;IAIhC;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAQzB,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,YAAY;IAgCpB,OAAO,CAAC,+BAA+B;CA6BxC"}
@@ -132,6 +132,7 @@ export class SubscriptionService {
132
132
  ? new Date(firstEntitlement.expirationDate)
133
133
  : undefined,
134
134
  willRenew: firstEntitlement.willRenew,
135
+ managementUrl: customerInfo.managementUrl,
135
136
  };
136
137
  }
137
138
  finally {
package/dist/index.d.ts CHANGED
@@ -9,4 +9,5 @@ export { useSubscriptions, useUserSubscription, useSubscriptionPeriods, useSubsc
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';
11
11
  export { parseISO8601Period, getPeriodRank, comparePeriods, isPeriodGreaterOrEqual, calculatePackageLevels, addLevelsToPackages, getPackageLevel, findUpgradeablePackages, } from './utils';
12
+ export { configureRevenueCatAdapter, createRevenueCatAdapter, setRevenueCatUser, clearRevenueCatUser, hasRevenueCatUser, } from './adapters';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -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,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"}
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;AAGjB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -11,3 +11,5 @@ export { useSubscriptions, useUserSubscription, useSubscriptionPeriods, useSubsc
11
11
  export { PERIOD_RANKS, ALL_PERIODS } from './types';
12
12
  // Utils
13
13
  export { parseISO8601Period, getPeriodRank, comparePeriods, isPeriodGreaterOrEqual, calculatePackageLevels, addLevelsToPackages, getPackageLevel, findUpgradeablePackages, } from './utils';
14
+ // Adapters (platform-specific)
15
+ export { configureRevenueCatAdapter, createRevenueCatAdapter, setRevenueCatUser, clearRevenueCatUser, hasRevenueCatUser, } from './adapters';
@@ -104,6 +104,8 @@ export interface AdapterCustomerInfo {
104
104
  /** Active entitlements map */
105
105
  active: Record<string, AdapterEntitlementInfo>;
106
106
  };
107
+ /** URL to manage subscription (upgrade/downgrade/cancel) */
108
+ managementUrl?: string;
107
109
  }
108
110
  /**
109
111
  * Parameters for making a purchase
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/types/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/types/adapter.ts"],"names":[],"mappings":"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"}
@@ -75,6 +75,8 @@ export interface CurrentSubscription {
75
75
  expirationDate?: Date;
76
76
  /** Whether subscription will auto-renew */
77
77
  willRenew?: boolean;
78
+ /** URL to manage subscription (upgrade/downgrade/cancel) */
79
+ managementUrl?: string;
78
80
  }
79
81
  /**
80
82
  * Configuration for the free tier
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/types/subscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,sDAAsD;IACtD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,6BAA6B;IAC7B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,mCAAmC;IACnC,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/types/subscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,mCAAmC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,sDAAsD;IACtD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,6BAA6B;IAC7B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,kCAAkC;IAClC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,mCAAmC;IACnC,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;CACf"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sudobility/subscription_lib",
3
- "version": "0.0.4",
3
+ "version": "0.0.7",
4
4
  "description": "Cross-platform subscription management with RevenueCat adapter pattern",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,9 +29,16 @@
29
29
  "prepublishOnly": "bun run build"
30
30
  },
31
31
  "peerDependencies": {
32
- "react": "^19.0.0"
32
+ "react": "^19.0.0",
33
+ "@revenuecat/purchases-js": "^1.0.0"
34
+ },
35
+ "peerDependenciesMeta": {
36
+ "@revenuecat/purchases-js": {
37
+ "optional": true
38
+ }
33
39
  },
34
40
  "devDependencies": {
41
+ "@revenuecat/purchases-js": "^1.1.3",
35
42
  "vitest": "^4.0.4",
36
43
  "@eslint/js": "^9.0.0",
37
44
  "@types/bun": "^1.2.8",