@qwickapps/server 1.4.0 → 1.5.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/CHANGELOG.md +507 -0
- package/README.md +9 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/plugins/bans/bans-plugin.d.ts.map +1 -1
- package/dist/plugins/bans/bans-plugin.js +12 -3
- package/dist/plugins/bans/bans-plugin.js.map +1 -1
- package/dist/plugins/devices/__tests__/devices-plugin.test.d.ts +11 -0
- package/dist/plugins/devices/__tests__/devices-plugin.test.d.ts.map +1 -0
- package/dist/plugins/devices/__tests__/devices-plugin.test.js +410 -0
- package/dist/plugins/devices/__tests__/devices-plugin.test.js.map +1 -0
- package/dist/plugins/devices/__tests__/token-utils.test.d.ts +7 -0
- package/dist/plugins/devices/__tests__/token-utils.test.d.ts.map +1 -0
- package/dist/plugins/devices/__tests__/token-utils.test.js +197 -0
- package/dist/plugins/devices/__tests__/token-utils.test.js.map +1 -0
- package/dist/plugins/devices/adapters/compute-adapter.d.ts +36 -0
- package/dist/plugins/devices/adapters/compute-adapter.d.ts.map +1 -0
- package/dist/plugins/devices/adapters/compute-adapter.js +100 -0
- package/dist/plugins/devices/adapters/compute-adapter.js.map +1 -0
- package/dist/plugins/devices/adapters/index.d.ts +12 -0
- package/dist/plugins/devices/adapters/index.d.ts.map +1 -0
- package/dist/plugins/devices/adapters/index.js +10 -0
- package/dist/plugins/devices/adapters/index.js.map +1 -0
- package/dist/plugins/devices/adapters/mobile-adapter.d.ts +41 -0
- package/dist/plugins/devices/adapters/mobile-adapter.d.ts.map +1 -0
- package/dist/plugins/devices/adapters/mobile-adapter.js +131 -0
- package/dist/plugins/devices/adapters/mobile-adapter.js.map +1 -0
- package/dist/plugins/devices/devices-plugin.d.ts +70 -0
- package/dist/plugins/devices/devices-plugin.d.ts.map +1 -0
- package/dist/plugins/devices/devices-plugin.js +453 -0
- package/dist/plugins/devices/devices-plugin.js.map +1 -0
- package/dist/plugins/devices/index.d.ts +18 -0
- package/dist/plugins/devices/index.d.ts.map +1 -0
- package/dist/plugins/devices/index.js +18 -0
- package/dist/plugins/devices/index.js.map +1 -0
- package/dist/plugins/devices/stores/index.d.ts +9 -0
- package/dist/plugins/devices/stores/index.d.ts.map +1 -0
- package/dist/plugins/devices/stores/index.js +9 -0
- package/dist/plugins/devices/stores/index.js.map +1 -0
- package/dist/plugins/devices/stores/postgres-store.d.ts +26 -0
- package/dist/plugins/devices/stores/postgres-store.d.ts.map +1 -0
- package/dist/plugins/devices/stores/postgres-store.js +199 -0
- package/dist/plugins/devices/stores/postgres-store.js.map +1 -0
- package/dist/plugins/devices/token-utils.d.ts +100 -0
- package/dist/plugins/devices/token-utils.d.ts.map +1 -0
- package/dist/plugins/devices/token-utils.js +162 -0
- package/dist/plugins/devices/token-utils.js.map +1 -0
- package/dist/plugins/devices/types.d.ts +307 -0
- package/dist/plugins/devices/types.d.ts.map +1 -0
- package/dist/plugins/devices/types.js +10 -0
- package/dist/plugins/devices/types.js.map +1 -0
- package/dist/plugins/index.d.ts +14 -2
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +13 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/notifications/__tests__/notifications-manager.test.d.ts +5 -0
- package/dist/plugins/notifications/__tests__/notifications-manager.test.d.ts.map +1 -0
- package/dist/plugins/notifications/__tests__/notifications-manager.test.js +470 -0
- package/dist/plugins/notifications/__tests__/notifications-manager.test.js.map +1 -0
- package/dist/plugins/notifications/index.d.ts +71 -0
- package/dist/plugins/notifications/index.d.ts.map +1 -0
- package/dist/plugins/notifications/index.js +72 -0
- package/dist/plugins/notifications/index.js.map +1 -0
- package/dist/plugins/notifications/notifications-manager.d.ts +182 -0
- package/dist/plugins/notifications/notifications-manager.d.ts.map +1 -0
- package/dist/plugins/notifications/notifications-manager.js +610 -0
- package/dist/plugins/notifications/notifications-manager.js.map +1 -0
- package/dist/plugins/notifications/notifications-plugin.d.ts +83 -0
- package/dist/plugins/notifications/notifications-plugin.d.ts.map +1 -0
- package/dist/plugins/notifications/notifications-plugin.js +337 -0
- package/dist/plugins/notifications/notifications-plugin.js.map +1 -0
- package/dist/plugins/notifications/types.d.ts +164 -0
- package/dist/plugins/notifications/types.d.ts.map +1 -0
- package/dist/plugins/notifications/types.js +9 -0
- package/dist/plugins/notifications/types.js.map +1 -0
- package/dist/plugins/parental/__tests__/parental-plugin.test.d.ts +12 -0
- package/dist/plugins/parental/__tests__/parental-plugin.test.d.ts.map +1 -0
- package/dist/plugins/parental/__tests__/parental-plugin.test.js +349 -0
- package/dist/plugins/parental/__tests__/parental-plugin.test.js.map +1 -0
- package/dist/plugins/parental/adapters/index.d.ts +8 -0
- package/dist/plugins/parental/adapters/index.d.ts.map +1 -0
- package/dist/plugins/parental/adapters/index.js +7 -0
- package/dist/plugins/parental/adapters/index.js.map +1 -0
- package/dist/plugins/parental/adapters/kids-adapter.d.ts +24 -0
- package/dist/plugins/parental/adapters/kids-adapter.d.ts.map +1 -0
- package/dist/plugins/parental/adapters/kids-adapter.js +174 -0
- package/dist/plugins/parental/adapters/kids-adapter.js.map +1 -0
- package/dist/plugins/parental/index.d.ts +14 -0
- package/dist/plugins/parental/index.d.ts.map +1 -0
- package/dist/plugins/parental/index.js +15 -0
- package/dist/plugins/parental/index.js.map +1 -0
- package/dist/plugins/parental/parental-plugin.d.ts +88 -0
- package/dist/plugins/parental/parental-plugin.d.ts.map +1 -0
- package/dist/plugins/parental/parental-plugin.js +666 -0
- package/dist/plugins/parental/parental-plugin.js.map +1 -0
- package/dist/plugins/parental/stores/index.d.ts +7 -0
- package/dist/plugins/parental/stores/index.d.ts.map +1 -0
- package/dist/plugins/parental/stores/index.js +7 -0
- package/dist/plugins/parental/stores/index.js.map +1 -0
- package/dist/plugins/parental/stores/postgres-store.d.ts +10 -0
- package/dist/plugins/parental/stores/postgres-store.d.ts.map +1 -0
- package/dist/plugins/parental/stores/postgres-store.js +209 -0
- package/dist/plugins/parental/stores/postgres-store.js.map +1 -0
- package/dist/plugins/parental/types.d.ts +154 -0
- package/dist/plugins/parental/types.d.ts.map +1 -0
- package/dist/plugins/parental/types.js +10 -0
- package/dist/plugins/parental/types.js.map +1 -0
- package/dist/plugins/profiles/__tests__/profiles-plugin.test.d.ts +11 -0
- package/dist/plugins/profiles/__tests__/profiles-plugin.test.d.ts.map +1 -0
- package/dist/plugins/profiles/__tests__/profiles-plugin.test.js +243 -0
- package/dist/plugins/profiles/__tests__/profiles-plugin.test.js.map +1 -0
- package/dist/plugins/profiles/index.d.ts +12 -0
- package/dist/plugins/profiles/index.d.ts.map +1 -0
- package/dist/plugins/profiles/index.js +13 -0
- package/dist/plugins/profiles/index.js.map +1 -0
- package/dist/plugins/profiles/profiles-plugin.d.ts +71 -0
- package/dist/plugins/profiles/profiles-plugin.d.ts.map +1 -0
- package/dist/plugins/profiles/profiles-plugin.js +481 -0
- package/dist/plugins/profiles/profiles-plugin.js.map +1 -0
- package/dist/plugins/profiles/stores/index.d.ts +9 -0
- package/dist/plugins/profiles/stores/index.d.ts.map +1 -0
- package/dist/plugins/profiles/stores/index.js +9 -0
- package/dist/plugins/profiles/stores/index.js.map +1 -0
- package/dist/plugins/profiles/stores/postgres-store.d.ts +18 -0
- package/dist/plugins/profiles/stores/postgres-store.d.ts.map +1 -0
- package/dist/plugins/profiles/stores/postgres-store.js +310 -0
- package/dist/plugins/profiles/stores/postgres-store.js.map +1 -0
- package/dist/plugins/profiles/types.d.ts +289 -0
- package/dist/plugins/profiles/types.d.ts.map +1 -0
- package/dist/plugins/profiles/types.js +10 -0
- package/dist/plugins/profiles/types.js.map +1 -0
- package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.d.ts +11 -0
- package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.d.ts.map +1 -0
- package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.js +305 -0
- package/dist/plugins/subscriptions/__tests__/subscriptions-plugin.test.js.map +1 -0
- package/dist/plugins/subscriptions/index.d.ts +12 -0
- package/dist/plugins/subscriptions/index.d.ts.map +1 -0
- package/dist/plugins/subscriptions/index.js +13 -0
- package/dist/plugins/subscriptions/index.js.map +1 -0
- package/dist/plugins/subscriptions/stores/index.d.ts +9 -0
- package/dist/plugins/subscriptions/stores/index.d.ts.map +1 -0
- package/dist/plugins/subscriptions/stores/index.js +9 -0
- package/dist/plugins/subscriptions/stores/index.js.map +1 -0
- package/dist/plugins/subscriptions/stores/postgres-store.d.ts +14 -0
- package/dist/plugins/subscriptions/stores/postgres-store.d.ts.map +1 -0
- package/dist/plugins/subscriptions/stores/postgres-store.js +359 -0
- package/dist/plugins/subscriptions/stores/postgres-store.js.map +1 -0
- package/dist/plugins/subscriptions/subscriptions-plugin.d.ts +82 -0
- package/dist/plugins/subscriptions/subscriptions-plugin.d.ts.map +1 -0
- package/dist/plugins/subscriptions/subscriptions-plugin.js +449 -0
- package/dist/plugins/subscriptions/subscriptions-plugin.js.map +1 -0
- package/dist/plugins/subscriptions/types.d.ts +308 -0
- package/dist/plugins/subscriptions/types.d.ts.map +1 -0
- package/dist/plugins/subscriptions/types.js +10 -0
- package/dist/plugins/subscriptions/types.js.map +1 -0
- package/dist/plugins/usage/__tests__/usage-plugin.test.d.ts +11 -0
- package/dist/plugins/usage/__tests__/usage-plugin.test.d.ts.map +1 -0
- package/dist/plugins/usage/__tests__/usage-plugin.test.js +218 -0
- package/dist/plugins/usage/__tests__/usage-plugin.test.js.map +1 -0
- package/dist/plugins/usage/index.d.ts +12 -0
- package/dist/plugins/usage/index.d.ts.map +1 -0
- package/dist/plugins/usage/index.js +13 -0
- package/dist/plugins/usage/index.js.map +1 -0
- package/dist/plugins/usage/stores/index.d.ts +9 -0
- package/dist/plugins/usage/stores/index.d.ts.map +1 -0
- package/dist/plugins/usage/stores/index.js +9 -0
- package/dist/plugins/usage/stores/index.js.map +1 -0
- package/dist/plugins/usage/stores/postgres-store.d.ts +14 -0
- package/dist/plugins/usage/stores/postgres-store.d.ts.map +1 -0
- package/dist/plugins/usage/stores/postgres-store.js +146 -0
- package/dist/plugins/usage/stores/postgres-store.js.map +1 -0
- package/dist/plugins/usage/types.d.ts +195 -0
- package/dist/plugins/usage/types.d.ts.map +1 -0
- package/dist/plugins/usage/types.js +10 -0
- package/dist/plugins/usage/types.js.map +1 -0
- package/dist/plugins/usage/usage-plugin.d.ts +51 -0
- package/dist/plugins/usage/usage-plugin.d.ts.map +1 -0
- package/dist/plugins/usage/usage-plugin.js +412 -0
- package/dist/plugins/usage/usage-plugin.js.map +1 -0
- package/dist/plugins/users/__tests__/postgres-store.test.d.ts +10 -0
- package/dist/plugins/users/__tests__/postgres-store.test.d.ts.map +1 -0
- package/dist/plugins/users/__tests__/postgres-store.test.js +229 -0
- package/dist/plugins/users/__tests__/postgres-store.test.js.map +1 -0
- package/dist/plugins/users/__tests__/users-plugin.test.js +3 -0
- package/dist/plugins/users/__tests__/users-plugin.test.js.map +1 -1
- package/dist/plugins/users/index.d.ts +2 -2
- package/dist/plugins/users/index.d.ts.map +1 -1
- package/dist/plugins/users/index.js +1 -1
- package/dist/plugins/users/index.js.map +1 -1
- package/dist/plugins/users/stores/postgres-store.d.ts.map +1 -1
- package/dist/plugins/users/stores/postgres-store.js +76 -0
- package/dist/plugins/users/stores/postgres-store.js.map +1 -1
- package/dist/plugins/users/types.d.ts +74 -6
- package/dist/plugins/users/types.d.ts.map +1 -1
- package/dist/plugins/users/users-plugin.d.ts +15 -1
- package/dist/plugins/users/users-plugin.d.ts.map +1 -1
- package/dist/plugins/users/users-plugin.js +29 -0
- package/dist/plugins/users/users-plugin.js.map +1 -1
- package/dist-ui/assets/index-CynOqPkb.js +469 -0
- package/dist-ui/assets/index-CynOqPkb.js.map +1 -0
- package/dist-ui/index.html +1 -1
- package/dist-ui-lib/api/controlPanelApi.d.ts +46 -0
- package/dist-ui-lib/components/StatCard.d.ts +16 -0
- package/dist-ui-lib/dashboard/widgets/NotificationsStatsWidget.d.ts +12 -0
- package/dist-ui-lib/dashboard/widgets/index.d.ts +1 -0
- package/dist-ui-lib/index.js +1822 -1611
- package/dist-ui-lib/index.js.map +1 -1
- package/dist-ui-lib/pages/NotificationsPage.d.ts +9 -0
- package/dist-ui-lib/utils/formatters.d.ts +19 -0
- package/package.json +3 -2
- package/src/index.ts +178 -0
- package/src/plugins/bans/bans-plugin.ts +15 -3
- package/src/plugins/devices/__tests__/devices-plugin.test.ts +551 -0
- package/src/plugins/devices/__tests__/token-utils.test.ts +264 -0
- package/src/plugins/devices/adapters/compute-adapter.ts +139 -0
- package/src/plugins/devices/adapters/index.ts +13 -0
- package/src/plugins/devices/adapters/mobile-adapter.ts +179 -0
- package/src/plugins/devices/devices-plugin.ts +538 -0
- package/src/plugins/devices/index.ts +69 -0
- package/src/plugins/devices/stores/index.ts +9 -0
- package/src/plugins/devices/stores/postgres-store.ts +304 -0
- package/src/plugins/devices/token-utils.ts +213 -0
- package/src/plugins/devices/types.ts +351 -0
- package/src/plugins/index.ts +218 -0
- package/src/plugins/notifications/__tests__/notifications-manager.test.ts +637 -0
- package/src/plugins/notifications/index.ts +91 -0
- package/src/plugins/notifications/notifications-manager.ts +773 -0
- package/src/plugins/notifications/notifications-plugin.ts +398 -0
- package/src/plugins/notifications/types.ts +207 -0
- package/src/plugins/parental/__tests__/parental-plugin.test.ts +465 -0
- package/src/plugins/parental/adapters/index.ts +8 -0
- package/src/plugins/parental/adapters/kids-adapter.ts +206 -0
- package/src/plugins/parental/index.ts +55 -0
- package/src/plugins/parental/parental-plugin.ts +759 -0
- package/src/plugins/parental/stores/index.ts +7 -0
- package/src/plugins/parental/stores/postgres-store.ts +304 -0
- package/src/plugins/parental/types.ts +180 -0
- package/src/plugins/profiles/__tests__/profiles-plugin.test.ts +321 -0
- package/src/plugins/profiles/index.ts +49 -0
- package/src/plugins/profiles/profiles-plugin.ts +546 -0
- package/src/plugins/profiles/stores/index.ts +9 -0
- package/src/plugins/profiles/stores/postgres-store.ts +439 -0
- package/src/plugins/profiles/types.ts +338 -0
- package/src/plugins/subscriptions/__tests__/subscriptions-plugin.test.ts +404 -0
- package/src/plugins/subscriptions/index.ts +51 -0
- package/src/plugins/subscriptions/stores/index.ts +9 -0
- package/src/plugins/subscriptions/stores/postgres-store.ts +482 -0
- package/src/plugins/subscriptions/subscriptions-plugin.ts +530 -0
- package/src/plugins/subscriptions/types.ts +355 -0
- package/src/plugins/usage/__tests__/usage-plugin.test.ts +288 -0
- package/src/plugins/usage/index.ts +39 -0
- package/src/plugins/usage/stores/index.ts +9 -0
- package/src/plugins/usage/stores/postgres-store.ts +213 -0
- package/src/plugins/usage/types.ts +222 -0
- package/src/plugins/usage/usage-plugin.ts +484 -0
- package/src/plugins/users/__tests__/postgres-store.test.ts +326 -0
- package/src/plugins/users/__tests__/users-plugin.test.ts +3 -0
- package/src/plugins/users/index.ts +6 -0
- package/src/plugins/users/stores/postgres-store.ts +104 -0
- package/src/plugins/users/types.ts +82 -6
- package/src/plugins/users/users-plugin.ts +37 -0
- package/ui/src/App.tsx +5 -1
- package/ui/src/api/controlPanelApi.ts +103 -6
- package/ui/src/components/StatCard.tsx +58 -0
- package/ui/src/dashboard/builtInWidgets.tsx +3 -1
- package/ui/src/dashboard/widgets/NotificationsStatsWidget.tsx +167 -0
- package/ui/src/dashboard/widgets/index.ts +1 -0
- package/ui/src/pages/NotificationsPage.tsx +417 -0
- package/ui/src/utils/formatters.ts +33 -0
- package/dist-ui/assets/index-D7DoZ9rL.js +0 -478
- package/dist-ui/assets/index-D7DoZ9rL.js.map +0 -1
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subscriptions Plugin Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for subscription tier management and feature entitlements.
|
|
5
|
+
* Supports Stripe integration for paid subscriptions.
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Subscription status
|
|
11
|
+
*/
|
|
12
|
+
export type SubscriptionStatus = 'active' | 'canceled' | 'past_due' | 'trialing' | 'inactive';
|
|
13
|
+
/**
|
|
14
|
+
* Subscription tier definition (admin-managed)
|
|
15
|
+
*/
|
|
16
|
+
export interface SubscriptionTier {
|
|
17
|
+
/** Primary key - UUID */
|
|
18
|
+
id: string;
|
|
19
|
+
/** URL-safe identifier (e.g., 'free', 'premium', 'family') */
|
|
20
|
+
slug: string;
|
|
21
|
+
/** Display name */
|
|
22
|
+
name: string;
|
|
23
|
+
/** Description */
|
|
24
|
+
description?: string;
|
|
25
|
+
/** Monthly price in cents (null = free) */
|
|
26
|
+
price_monthly_cents?: number;
|
|
27
|
+
/** Yearly price in cents (null = free or monthly only) */
|
|
28
|
+
price_yearly_cents?: number;
|
|
29
|
+
/** Stripe price ID for monthly billing */
|
|
30
|
+
stripe_price_id_monthly?: string;
|
|
31
|
+
/** Stripe price ID for yearly billing */
|
|
32
|
+
stripe_price_id_yearly?: string;
|
|
33
|
+
/** Whether this tier is active (available for new subscriptions) */
|
|
34
|
+
is_active: boolean;
|
|
35
|
+
/** Sort order for display */
|
|
36
|
+
sort_order: number;
|
|
37
|
+
/** Additional metadata */
|
|
38
|
+
metadata: Record<string, unknown>;
|
|
39
|
+
/** When the tier was created */
|
|
40
|
+
created_at: Date;
|
|
41
|
+
/** When the tier was last updated */
|
|
42
|
+
updated_at: Date;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Feature entitlement per tier
|
|
46
|
+
*/
|
|
47
|
+
export interface SubscriptionEntitlement {
|
|
48
|
+
/** Primary key - UUID */
|
|
49
|
+
id: string;
|
|
50
|
+
/** Tier this entitlement belongs to */
|
|
51
|
+
tier_id: string;
|
|
52
|
+
/** Feature code (e.g., 'ai_messages_daily', 'vision_calls_daily') */
|
|
53
|
+
feature_code: string;
|
|
54
|
+
/** Limit value (-1 = unlimited, null = disabled, positive = limit) */
|
|
55
|
+
limit_value?: number;
|
|
56
|
+
/** Additional metadata */
|
|
57
|
+
metadata: Record<string, unknown>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* User subscription record
|
|
61
|
+
*/
|
|
62
|
+
export interface UserSubscription {
|
|
63
|
+
/** Primary key - UUID */
|
|
64
|
+
id: string;
|
|
65
|
+
/** User ID */
|
|
66
|
+
user_id: string;
|
|
67
|
+
/** Tier ID */
|
|
68
|
+
tier_id: string;
|
|
69
|
+
/** Stripe customer ID */
|
|
70
|
+
stripe_customer_id?: string;
|
|
71
|
+
/** Stripe subscription ID */
|
|
72
|
+
stripe_subscription_id?: string;
|
|
73
|
+
/** Subscription status */
|
|
74
|
+
status: SubscriptionStatus;
|
|
75
|
+
/** Current billing period start */
|
|
76
|
+
current_period_start?: Date;
|
|
77
|
+
/** Current billing period end */
|
|
78
|
+
current_period_end?: Date;
|
|
79
|
+
/** Whether to cancel at period end */
|
|
80
|
+
cancel_at_period_end: boolean;
|
|
81
|
+
/** Additional metadata */
|
|
82
|
+
metadata: Record<string, unknown>;
|
|
83
|
+
/** When the subscription was created */
|
|
84
|
+
created_at: Date;
|
|
85
|
+
/** When the subscription was last updated */
|
|
86
|
+
updated_at: Date;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* User subscription with tier details
|
|
90
|
+
*/
|
|
91
|
+
export interface UserSubscriptionWithTier extends UserSubscription {
|
|
92
|
+
tier: SubscriptionTier;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Feature limit check result
|
|
96
|
+
*/
|
|
97
|
+
export interface FeatureLimitResult {
|
|
98
|
+
/** Whether the feature is available */
|
|
99
|
+
available: boolean;
|
|
100
|
+
/** Limit value (-1 = unlimited) */
|
|
101
|
+
limit?: number;
|
|
102
|
+
/** Current usage (if tracked) */
|
|
103
|
+
current?: number;
|
|
104
|
+
/** Remaining quota (if tracked) */
|
|
105
|
+
remaining?: number;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Tier creation payload
|
|
109
|
+
*/
|
|
110
|
+
export interface CreateTierInput {
|
|
111
|
+
slug: string;
|
|
112
|
+
name: string;
|
|
113
|
+
description?: string;
|
|
114
|
+
price_monthly_cents?: number;
|
|
115
|
+
price_yearly_cents?: number;
|
|
116
|
+
stripe_price_id_monthly?: string;
|
|
117
|
+
stripe_price_id_yearly?: string;
|
|
118
|
+
is_active?: boolean;
|
|
119
|
+
sort_order?: number;
|
|
120
|
+
metadata?: Record<string, unknown>;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Tier update payload
|
|
124
|
+
*/
|
|
125
|
+
export interface UpdateTierInput {
|
|
126
|
+
name?: string;
|
|
127
|
+
description?: string;
|
|
128
|
+
price_monthly_cents?: number;
|
|
129
|
+
price_yearly_cents?: number;
|
|
130
|
+
stripe_price_id_monthly?: string;
|
|
131
|
+
stripe_price_id_yearly?: string;
|
|
132
|
+
is_active?: boolean;
|
|
133
|
+
sort_order?: number;
|
|
134
|
+
metadata?: Record<string, unknown>;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Entitlement creation payload
|
|
138
|
+
*/
|
|
139
|
+
export interface CreateEntitlementInput {
|
|
140
|
+
tier_id: string;
|
|
141
|
+
feature_code: string;
|
|
142
|
+
limit_value?: number;
|
|
143
|
+
metadata?: Record<string, unknown>;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* User subscription creation payload
|
|
147
|
+
*/
|
|
148
|
+
export interface CreateUserSubscriptionInput {
|
|
149
|
+
user_id: string;
|
|
150
|
+
tier_id: string;
|
|
151
|
+
stripe_customer_id?: string;
|
|
152
|
+
stripe_subscription_id?: string;
|
|
153
|
+
status?: SubscriptionStatus;
|
|
154
|
+
current_period_start?: Date;
|
|
155
|
+
current_period_end?: Date;
|
|
156
|
+
metadata?: Record<string, unknown>;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* User subscription update payload
|
|
160
|
+
*/
|
|
161
|
+
export interface UpdateUserSubscriptionInput {
|
|
162
|
+
tier_id?: string;
|
|
163
|
+
stripe_customer_id?: string;
|
|
164
|
+
stripe_subscription_id?: string;
|
|
165
|
+
status?: SubscriptionStatus;
|
|
166
|
+
current_period_start?: Date;
|
|
167
|
+
current_period_end?: Date;
|
|
168
|
+
cancel_at_period_end?: boolean;
|
|
169
|
+
metadata?: Record<string, unknown>;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Subscriptions store interface
|
|
173
|
+
*/
|
|
174
|
+
export interface SubscriptionsStore {
|
|
175
|
+
/** Store name (e.g., 'postgres') */
|
|
176
|
+
name: string;
|
|
177
|
+
/**
|
|
178
|
+
* Initialize the store (create tables, etc.)
|
|
179
|
+
*/
|
|
180
|
+
initialize(): Promise<void>;
|
|
181
|
+
/**
|
|
182
|
+
* Create a subscription tier
|
|
183
|
+
*/
|
|
184
|
+
createTier(input: CreateTierInput): Promise<SubscriptionTier>;
|
|
185
|
+
/**
|
|
186
|
+
* Get tier by ID
|
|
187
|
+
*/
|
|
188
|
+
getTierById(id: string): Promise<SubscriptionTier | null>;
|
|
189
|
+
/**
|
|
190
|
+
* Get tier by slug
|
|
191
|
+
*/
|
|
192
|
+
getTierBySlug(slug: string): Promise<SubscriptionTier | null>;
|
|
193
|
+
/**
|
|
194
|
+
* List all tiers
|
|
195
|
+
*/
|
|
196
|
+
listTiers(activeOnly?: boolean): Promise<SubscriptionTier[]>;
|
|
197
|
+
/**
|
|
198
|
+
* Update a tier
|
|
199
|
+
*/
|
|
200
|
+
updateTier(id: string, input: UpdateTierInput): Promise<SubscriptionTier | null>;
|
|
201
|
+
/**
|
|
202
|
+
* Delete a tier (soft delete)
|
|
203
|
+
*/
|
|
204
|
+
deleteTier(id: string): Promise<boolean>;
|
|
205
|
+
/**
|
|
206
|
+
* Create an entitlement
|
|
207
|
+
*/
|
|
208
|
+
createEntitlement(input: CreateEntitlementInput): Promise<SubscriptionEntitlement>;
|
|
209
|
+
/**
|
|
210
|
+
* Get entitlements for a tier
|
|
211
|
+
*/
|
|
212
|
+
getEntitlementsByTier(tierId: string): Promise<SubscriptionEntitlement[]>;
|
|
213
|
+
/**
|
|
214
|
+
* Update an entitlement
|
|
215
|
+
*/
|
|
216
|
+
updateEntitlement(id: string, limitValue: number | null): Promise<SubscriptionEntitlement | null>;
|
|
217
|
+
/**
|
|
218
|
+
* Delete an entitlement
|
|
219
|
+
*/
|
|
220
|
+
deleteEntitlement(id: string): Promise<boolean>;
|
|
221
|
+
/**
|
|
222
|
+
* Set multiple entitlements for a tier (upsert)
|
|
223
|
+
*/
|
|
224
|
+
setTierEntitlements(tierId: string, entitlements: Array<{
|
|
225
|
+
feature_code: string;
|
|
226
|
+
limit_value?: number;
|
|
227
|
+
}>): Promise<void>;
|
|
228
|
+
/**
|
|
229
|
+
* Create a user subscription
|
|
230
|
+
*/
|
|
231
|
+
createUserSubscription(input: CreateUserSubscriptionInput): Promise<UserSubscription>;
|
|
232
|
+
/**
|
|
233
|
+
* Get user subscription by ID
|
|
234
|
+
*/
|
|
235
|
+
getUserSubscriptionById(id: string): Promise<UserSubscription | null>;
|
|
236
|
+
/**
|
|
237
|
+
* Get active subscription for a user
|
|
238
|
+
*/
|
|
239
|
+
getActiveSubscription(userId: string): Promise<UserSubscriptionWithTier | null>;
|
|
240
|
+
/**
|
|
241
|
+
* Get subscription by Stripe subscription ID
|
|
242
|
+
*/
|
|
243
|
+
getByStripeSubscriptionId(stripeSubId: string): Promise<UserSubscription | null>;
|
|
244
|
+
/**
|
|
245
|
+
* Update user subscription
|
|
246
|
+
*/
|
|
247
|
+
updateUserSubscription(id: string, input: UpdateUserSubscriptionInput): Promise<UserSubscription | null>;
|
|
248
|
+
/**
|
|
249
|
+
* Cancel subscription (sets cancel_at_period_end)
|
|
250
|
+
*/
|
|
251
|
+
cancelSubscription(id: string): Promise<boolean>;
|
|
252
|
+
/**
|
|
253
|
+
* Get feature limit for a user
|
|
254
|
+
*/
|
|
255
|
+
getFeatureLimit(userId: string, featureCode: string): Promise<number | null>;
|
|
256
|
+
/**
|
|
257
|
+
* Check if user has a feature
|
|
258
|
+
*/
|
|
259
|
+
hasFeature(userId: string, featureCode: string): Promise<boolean>;
|
|
260
|
+
/**
|
|
261
|
+
* Shutdown the store
|
|
262
|
+
*/
|
|
263
|
+
shutdown(): Promise<void>;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* PostgreSQL subscriptions store configuration
|
|
267
|
+
*/
|
|
268
|
+
export interface PostgresSubscriptionsStoreConfig {
|
|
269
|
+
/** PostgreSQL pool instance or a function that returns one */
|
|
270
|
+
pool: unknown | (() => unknown);
|
|
271
|
+
/** Tiers table name (default: 'subscription_tiers') */
|
|
272
|
+
tiersTable?: string;
|
|
273
|
+
/** Entitlements table name (default: 'subscription_entitlements') */
|
|
274
|
+
entitlementsTable?: string;
|
|
275
|
+
/** User subscriptions table name (default: 'user_subscriptions') */
|
|
276
|
+
userSubscriptionsTable?: string;
|
|
277
|
+
/** Schema name (default: 'public') */
|
|
278
|
+
schema?: string;
|
|
279
|
+
/** Auto-create tables on init (default: true) */
|
|
280
|
+
autoCreateTables?: boolean;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* API configuration
|
|
284
|
+
*/
|
|
285
|
+
export interface SubscriptionsApiConfig {
|
|
286
|
+
/** API route prefix (default: '/subscriptions') */
|
|
287
|
+
prefix?: string;
|
|
288
|
+
/** Enable tier management endpoints */
|
|
289
|
+
tierManagement?: boolean;
|
|
290
|
+
/** Enable user subscription endpoints */
|
|
291
|
+
userSubscriptions?: boolean;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Subscriptions plugin configuration
|
|
295
|
+
*/
|
|
296
|
+
export interface SubscriptionsPluginConfig {
|
|
297
|
+
/** Subscriptions storage backend */
|
|
298
|
+
store: SubscriptionsStore;
|
|
299
|
+
/** Default tier slug for new users (default: 'free') */
|
|
300
|
+
defaultTierSlug?: string;
|
|
301
|
+
/** Whether to auto-create default subscription for new users */
|
|
302
|
+
autoCreateDefaultSubscription?: boolean;
|
|
303
|
+
/** API configuration */
|
|
304
|
+
api?: SubscriptionsApiConfig;
|
|
305
|
+
/** Enable debug logging */
|
|
306
|
+
debug?: boolean;
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/subscriptions/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAE9F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yCAAyC;IACzC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,gCAAgC;IAChC,UAAU,EAAE,IAAI,CAAC;IACjB,qCAAqC;IACrC,UAAU,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,6BAA6B;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,mCAAmC;IACnC,oBAAoB,CAAC,EAAE,IAAI,CAAC;IAC5B,iCAAiC;IACjC,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAC1B,sCAAsC;IACtC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,wCAAwC;IACxC,UAAU,EAAE,IAAI,CAAC;IACjB,6CAA6C;IAC7C,UAAU,EAAE,IAAI,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAChE,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,oBAAoB,CAAC,EAAE,IAAI,CAAC;IAC5B,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,oBAAoB,CAAC,EAAE,IAAI,CAAC;IAC5B,kBAAkB,CAAC,EAAE,IAAI,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAMD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5B;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE9D;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAE1D;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAE9D;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE7D;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAEjF;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAGzC;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEnF;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAE1E;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IAElG;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhD;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGxH;;OAEG;IACH,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEtF;;OAEG;IACH,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAEtE;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;IAEhF;;OAEG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAEjF;;OAEG;IACH,sBAAsB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAEzG;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE7E;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElE;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAMD;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,8DAA8D;IAC9D,IAAI,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IAChC,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yCAAyC;IACzC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,oCAAoC;IACpC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,wBAAwB;IACxB,GAAG,CAAC,EAAE,sBAAsB,CAAC;IAC7B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subscriptions Plugin Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for subscription tier management and feature entitlements.
|
|
5
|
+
* Supports Stripe integration for paid subscriptions.
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/plugins/subscriptions/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usage Plugin Tests
|
|
3
|
+
*
|
|
4
|
+
* Unit tests for the usage tracking plugin including:
|
|
5
|
+
* - Plugin lifecycle
|
|
6
|
+
* - Daily/monthly usage tracking
|
|
7
|
+
* - Increment and check limits
|
|
8
|
+
* - Cleanup operations
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=usage-plugin.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-plugin.test.d.ts","sourceRoot":"","sources":["../../../../src/plugins/usage/__tests__/usage-plugin.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usage Plugin Tests
|
|
3
|
+
*
|
|
4
|
+
* Unit tests for the usage tracking plugin including:
|
|
5
|
+
* - Plugin lifecycle
|
|
6
|
+
* - Daily/monthly usage tracking
|
|
7
|
+
* - Increment and check limits
|
|
8
|
+
* - Cleanup operations
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
11
|
+
import { createUsagePlugin, getUsageStore, getDailyUsage, incrementUsage, checkUsageLimit, resetUsage, } from '../usage-plugin.js';
|
|
12
|
+
// Mock the subscriptions plugin (usage plugin depends on it for limits)
|
|
13
|
+
vi.mock('../../subscriptions/subscriptions-plugin.js', () => ({
|
|
14
|
+
getFeatureLimit: vi.fn().mockResolvedValue(-1), // unlimited by default
|
|
15
|
+
hasFeature: vi.fn().mockResolvedValue(true),
|
|
16
|
+
}));
|
|
17
|
+
import { getFeatureLimit } from '../../subscriptions/subscriptions-plugin.js';
|
|
18
|
+
describe('Usage Plugin', () => {
|
|
19
|
+
// Mock usage data
|
|
20
|
+
const mockDailyUsage = {
|
|
21
|
+
id: 'usage-id-123',
|
|
22
|
+
user_id: 'user-123',
|
|
23
|
+
feature_code: 'ai_messages',
|
|
24
|
+
date: new Date().toISOString().split('T')[0],
|
|
25
|
+
count: 10,
|
|
26
|
+
metadata: {},
|
|
27
|
+
created_at: new Date(),
|
|
28
|
+
updated_at: new Date(),
|
|
29
|
+
};
|
|
30
|
+
const mockMonthlyUsage = {
|
|
31
|
+
id: 'monthly-id-123',
|
|
32
|
+
user_id: 'user-123',
|
|
33
|
+
feature_code: 'ai_messages',
|
|
34
|
+
year_month: new Date().toISOString().substring(0, 7),
|
|
35
|
+
count: 300,
|
|
36
|
+
metadata: {},
|
|
37
|
+
created_at: new Date(),
|
|
38
|
+
updated_at: new Date(),
|
|
39
|
+
};
|
|
40
|
+
// Mock store factory
|
|
41
|
+
const createMockStore = () => ({
|
|
42
|
+
name: 'mock',
|
|
43
|
+
initialize: vi.fn().mockResolvedValue(undefined),
|
|
44
|
+
getDailyUsage: vi.fn().mockResolvedValue(mockDailyUsage),
|
|
45
|
+
getMonthlyUsage: vi.fn().mockResolvedValue(mockMonthlyUsage),
|
|
46
|
+
incrementDaily: vi.fn().mockResolvedValue(11),
|
|
47
|
+
getAllDailyUsage: vi.fn().mockResolvedValue([mockDailyUsage]),
|
|
48
|
+
getAllMonthlyUsage: vi.fn().mockResolvedValue([mockMonthlyUsage]),
|
|
49
|
+
resetDailyUsage: vi.fn().mockResolvedValue(undefined),
|
|
50
|
+
cleanupOldDaily: vi.fn().mockResolvedValue(100),
|
|
51
|
+
cleanupOldMonthly: vi.fn().mockResolvedValue(12),
|
|
52
|
+
shutdown: vi.fn().mockResolvedValue(undefined),
|
|
53
|
+
});
|
|
54
|
+
// Mock registry factory
|
|
55
|
+
const createMockRegistry = () => ({
|
|
56
|
+
hasPlugin: vi.fn().mockReturnValue(false),
|
|
57
|
+
getPlugin: vi.fn().mockReturnValue(null),
|
|
58
|
+
listPlugins: vi.fn().mockReturnValue([]),
|
|
59
|
+
addRoute: vi.fn(),
|
|
60
|
+
addMenuItem: vi.fn(),
|
|
61
|
+
addPage: vi.fn(),
|
|
62
|
+
addWidget: vi.fn(),
|
|
63
|
+
getRoutes: vi.fn().mockReturnValue([]),
|
|
64
|
+
getMenuItems: vi.fn().mockReturnValue([]),
|
|
65
|
+
getPages: vi.fn().mockReturnValue([]),
|
|
66
|
+
getWidgets: vi.fn().mockReturnValue([]),
|
|
67
|
+
getConfig: vi.fn().mockReturnValue({}),
|
|
68
|
+
setConfig: vi.fn().mockResolvedValue(undefined),
|
|
69
|
+
subscribe: vi.fn().mockReturnValue(() => { }),
|
|
70
|
+
emit: vi.fn(),
|
|
71
|
+
registerHealthCheck: vi.fn(),
|
|
72
|
+
getApp: vi.fn().mockReturnValue({}),
|
|
73
|
+
getRouter: vi.fn().mockReturnValue({}),
|
|
74
|
+
getLogger: vi.fn().mockReturnValue({
|
|
75
|
+
debug: vi.fn(),
|
|
76
|
+
info: vi.fn(),
|
|
77
|
+
warn: vi.fn(),
|
|
78
|
+
error: vi.fn(),
|
|
79
|
+
}),
|
|
80
|
+
});
|
|
81
|
+
let mockStore;
|
|
82
|
+
let mockRegistry;
|
|
83
|
+
beforeEach(() => {
|
|
84
|
+
vi.clearAllMocks();
|
|
85
|
+
mockStore = createMockStore();
|
|
86
|
+
mockRegistry = createMockRegistry();
|
|
87
|
+
});
|
|
88
|
+
afterEach(async () => {
|
|
89
|
+
// Clean up
|
|
90
|
+
const store = getUsageStore();
|
|
91
|
+
if (store) {
|
|
92
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
93
|
+
await plugin.onStop?.();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
describe('createUsagePlugin', () => {
|
|
97
|
+
it('should create a plugin with correct id', () => {
|
|
98
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
99
|
+
expect(plugin.id).toBe('usage');
|
|
100
|
+
});
|
|
101
|
+
it('should create a plugin with correct name', () => {
|
|
102
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
103
|
+
expect(plugin.name).toBe('Usage');
|
|
104
|
+
});
|
|
105
|
+
it('should create a plugin with version', () => {
|
|
106
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
107
|
+
expect(plugin.version).toBe('1.0.0');
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
describe('onStart', () => {
|
|
111
|
+
it('should initialize store on start', async () => {
|
|
112
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
113
|
+
await plugin.onStart({}, mockRegistry);
|
|
114
|
+
expect(mockStore.initialize).toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
it('should register health check', async () => {
|
|
117
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
118
|
+
await plugin.onStart({}, mockRegistry);
|
|
119
|
+
expect(mockRegistry.registerHealthCheck).toHaveBeenCalledWith(expect.objectContaining({
|
|
120
|
+
name: 'usage-store',
|
|
121
|
+
type: 'custom',
|
|
122
|
+
}));
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('onStop', () => {
|
|
126
|
+
it('should shutdown store', async () => {
|
|
127
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
128
|
+
await plugin.onStart({}, mockRegistry);
|
|
129
|
+
await plugin.onStop?.();
|
|
130
|
+
expect(mockStore.shutdown).toHaveBeenCalled();
|
|
131
|
+
});
|
|
132
|
+
it('should clear store reference', async () => {
|
|
133
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
134
|
+
await plugin.onStart({}, mockRegistry);
|
|
135
|
+
await plugin.onStop?.();
|
|
136
|
+
expect(getUsageStore()).toBeNull();
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe('helper functions', () => {
|
|
140
|
+
describe('getUsageStore', () => {
|
|
141
|
+
it('should return null when plugin not started', () => {
|
|
142
|
+
expect(getUsageStore()).toBeNull();
|
|
143
|
+
});
|
|
144
|
+
it('should return store when plugin started', async () => {
|
|
145
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
146
|
+
await plugin.onStart({}, mockRegistry);
|
|
147
|
+
expect(getUsageStore()).toBe(mockStore);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
describe('getDailyUsage', () => {
|
|
151
|
+
it('should throw when plugin not initialized', async () => {
|
|
152
|
+
await expect(getDailyUsage('user-id', 'ai_messages')).rejects.toThrow('Usage plugin not initialized');
|
|
153
|
+
});
|
|
154
|
+
it('should return daily usage count', async () => {
|
|
155
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
156
|
+
await plugin.onStart({}, mockRegistry);
|
|
157
|
+
const result = await getDailyUsage('user-123', 'ai_messages');
|
|
158
|
+
expect(result).toBe(10); // count from mockDailyUsage
|
|
159
|
+
});
|
|
160
|
+
it('should return 0 when no usage', async () => {
|
|
161
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
162
|
+
await plugin.onStart({}, mockRegistry);
|
|
163
|
+
mockStore.getDailyUsage.mockResolvedValue(null);
|
|
164
|
+
const result = await getDailyUsage('user-123', 'unused_feature');
|
|
165
|
+
expect(result).toBe(0);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
describe('incrementUsage', () => {
|
|
169
|
+
it('should throw when plugin not initialized', async () => {
|
|
170
|
+
await expect(incrementUsage('user-id', 'ai_messages')).rejects.toThrow('Usage plugin not initialized');
|
|
171
|
+
});
|
|
172
|
+
it('should increment and return result', async () => {
|
|
173
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
174
|
+
await plugin.onStart({}, mockRegistry);
|
|
175
|
+
const result = await incrementUsage('user-123', 'ai_messages');
|
|
176
|
+
expect(result.allowed).toBe(true);
|
|
177
|
+
expect(result.current_count).toBeDefined();
|
|
178
|
+
expect(mockStore.incrementDaily).toHaveBeenCalled();
|
|
179
|
+
});
|
|
180
|
+
it('should increment by custom amount', async () => {
|
|
181
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
182
|
+
await plugin.onStart({}, mockRegistry);
|
|
183
|
+
mockStore.incrementDaily.mockResolvedValue(15);
|
|
184
|
+
const result = await incrementUsage('user-123', 'ai_messages', 5);
|
|
185
|
+
expect(result.allowed).toBe(true);
|
|
186
|
+
expect(result.current_count).toBe(15);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('checkUsageLimit', () => {
|
|
190
|
+
it('should throw when plugin not initialized', async () => {
|
|
191
|
+
await expect(checkUsageLimit('user-id', 'ai_messages', 50)).rejects.toThrow('Usage plugin not initialized');
|
|
192
|
+
});
|
|
193
|
+
it('should return usage limit result', async () => {
|
|
194
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
195
|
+
await plugin.onStart({}, mockRegistry);
|
|
196
|
+
// Reset mock to return -1 (unlimited)
|
|
197
|
+
getFeatureLimit.mockResolvedValue(-1);
|
|
198
|
+
const result = await checkUsageLimit('user-123', 'ai_messages', -1);
|
|
199
|
+
// Should return a result object with usage info
|
|
200
|
+
expect(result).toHaveProperty('allowed');
|
|
201
|
+
expect(result).toHaveProperty('current_count');
|
|
202
|
+
expect(result).toHaveProperty('limit');
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
describe('resetUsage', () => {
|
|
206
|
+
it('should throw when plugin not initialized', async () => {
|
|
207
|
+
await expect(resetUsage('user-id', 'ai_messages')).rejects.toThrow('Usage plugin not initialized');
|
|
208
|
+
});
|
|
209
|
+
it('should reset usage', async () => {
|
|
210
|
+
const plugin = createUsagePlugin({ store: mockStore });
|
|
211
|
+
await plugin.onStart({}, mockRegistry);
|
|
212
|
+
await resetUsage('user-123', 'ai_messages');
|
|
213
|
+
expect(mockStore.resetDailyUsage).toHaveBeenCalledWith('user-123', 'ai_messages');
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
//# sourceMappingURL=usage-plugin.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage-plugin.test.js","sourceRoot":"","sources":["../../../../src/plugins/usage/__tests__/usage-plugin.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usage Plugin
|
|
3
|
+
*
|
|
4
|
+
* Usage tracking with daily/monthly counters.
|
|
5
|
+
* Exports all usage-related functionality.
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
export { createUsagePlugin, getUsageStore, getDailyUsage, incrementUsage, checkUsageLimit, getFeatureUsageStatus, getDailyUsageSummary, resetUsage, getRemainingQuota, canUseFeature, } from './usage-plugin.js';
|
|
10
|
+
export type { DailyUsage, MonthlyUsage, UsageIncrementResult, UsageStatus, UsageSummary, UsageStore, UsagePluginConfig, UsageApiConfig, UsageCleanupConfig, PostgresUsageStoreConfig, } from './types.js';
|
|
11
|
+
export { postgresUsageStore } from './stores/index.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/usage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACV,UAAU,EACV,YAAY,EACZ,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usage Plugin
|
|
3
|
+
*
|
|
4
|
+
* Usage tracking with daily/monthly counters.
|
|
5
|
+
* Exports all usage-related functionality.
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
// Main plugin
|
|
10
|
+
export { createUsagePlugin, getUsageStore, getDailyUsage, incrementUsage, checkUsageLimit, getFeatureUsageStatus, getDailyUsageSummary, resetUsage, getRemainingQuota, canUseFeature, } from './usage-plugin.js';
|
|
11
|
+
// Stores
|
|
12
|
+
export { postgresUsageStore } from './stores/index.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/usage/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc;AACd,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAgB3B,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/usage/stores/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/usage/stores/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL Usage Store
|
|
3
|
+
*
|
|
4
|
+
* Usage tracking storage implementation using PostgreSQL.
|
|
5
|
+
* Tracks daily and monthly usage counters.
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
import type { UsageStore, PostgresUsageStoreConfig } from '../types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create a PostgreSQL usage store
|
|
12
|
+
*/
|
|
13
|
+
export declare function postgresUsageStore(config: PostgresUsageStoreConfig): UsageStore;
|
|
14
|
+
//# sourceMappingURL=postgres-store.d.ts.map
|