@codaijs/keel 0.2.3 → 0.2.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/__tests__/sail-installer.test.js +25 -25
- package/dist/sail-installer.js +174 -174
- package/dist/scaffold.js +68 -68
- package/package.json +58 -58
- package/sails/_template/addon.json +20 -20
- package/sails/_template/install.ts +402 -402
- package/sails/admin-dashboard/README.md +117 -117
- package/sails/admin-dashboard/addon.json +28 -28
- package/sails/admin-dashboard/files/backend/middleware/admin.ts +34 -34
- package/sails/admin-dashboard/files/backend/routes/admin.ts +243 -243
- package/sails/admin-dashboard/files/frontend/components/admin/StatsCard.tsx +40 -40
- package/sails/admin-dashboard/files/frontend/components/admin/UsersTable.tsx +240 -240
- package/sails/admin-dashboard/files/frontend/hooks/useAdmin.ts +149 -149
- package/sails/admin-dashboard/files/frontend/pages/admin/Dashboard.tsx +173 -173
- package/sails/admin-dashboard/files/frontend/pages/admin/UserDetail.tsx +203 -203
- package/sails/admin-dashboard/install.ts +305 -305
- package/sails/analytics/README.md +178 -178
- package/sails/analytics/addon.json +27 -27
- package/sails/analytics/files/frontend/components/AnalyticsProvider.tsx +58 -58
- package/sails/analytics/files/frontend/hooks/useAnalytics.ts +64 -64
- package/sails/analytics/files/frontend/lib/analytics.ts +103 -103
- package/sails/analytics/install.ts +297 -297
- package/sails/file-uploads/addon.json +30 -30
- package/sails/file-uploads/files/backend/routes/files.ts +198 -198
- package/sails/file-uploads/files/backend/schema/files.ts +36 -36
- package/sails/file-uploads/files/backend/services/file-storage.ts +128 -128
- package/sails/file-uploads/files/frontend/components/FileList.tsx +248 -248
- package/sails/file-uploads/files/frontend/components/FileUploadButton.tsx +147 -147
- package/sails/file-uploads/files/frontend/hooks/useFileUpload.ts +106 -106
- package/sails/file-uploads/files/frontend/hooks/useFiles.ts +118 -118
- package/sails/file-uploads/files/frontend/pages/Files.tsx +37 -37
- package/sails/file-uploads/install.ts +466 -466
- package/sails/gdpr/README.md +174 -174
- package/sails/gdpr/addon.json +27 -27
- package/sails/gdpr/files/backend/routes/gdpr.ts +140 -140
- package/sails/gdpr/files/backend/services/gdpr.ts +293 -293
- package/sails/gdpr/files/frontend/components/auth/ConsentCheckboxes.tsx +97 -97
- package/sails/gdpr/files/frontend/components/gdpr/AccountDeletionRequest.tsx +192 -192
- package/sails/gdpr/files/frontend/components/gdpr/DataExportButton.tsx +75 -75
- package/sails/gdpr/files/frontend/pages/PrivacyPolicy.tsx +186 -186
- package/sails/gdpr/install.ts +756 -756
- package/sails/google-oauth/README.md +121 -121
- package/sails/google-oauth/addon.json +22 -22
- package/sails/google-oauth/files/GoogleButton.tsx +50 -50
- package/sails/google-oauth/install.ts +252 -252
- package/sails/i18n/README.md +193 -193
- package/sails/i18n/addon.json +30 -30
- package/sails/i18n/files/frontend/components/LanguageSwitcher.tsx +108 -108
- package/sails/i18n/files/frontend/hooks/useLanguage.ts +31 -31
- package/sails/i18n/files/frontend/lib/i18n.ts +32 -32
- package/sails/i18n/files/frontend/locales/de/common.json +44 -44
- package/sails/i18n/files/frontend/locales/en/common.json +44 -44
- package/sails/i18n/install.ts +407 -407
- package/sails/push-notifications/README.md +163 -163
- package/sails/push-notifications/addon.json +31 -31
- package/sails/push-notifications/files/backend/routes/notifications.ts +153 -153
- package/sails/push-notifications/files/backend/schema/notifications.ts +31 -31
- package/sails/push-notifications/files/backend/services/notifications.ts +117 -117
- package/sails/push-notifications/files/frontend/components/PushNotificationInit.tsx +12 -12
- package/sails/push-notifications/files/frontend/hooks/usePushNotifications.ts +154 -154
- package/sails/push-notifications/install.ts +384 -384
- package/sails/r2-storage/addon.json +29 -29
- package/sails/r2-storage/files/backend/services/storage.ts +71 -71
- package/sails/r2-storage/files/frontend/components/ProfilePictureUpload.tsx +167 -167
- package/sails/r2-storage/install.ts +412 -412
- package/sails/rate-limiting/addon.json +20 -20
- package/sails/rate-limiting/files/backend/middleware/rate-limit-store.ts +104 -104
- package/sails/rate-limiting/files/backend/middleware/rate-limit.ts +137 -137
- package/sails/rate-limiting/install.ts +300 -300
- package/sails/registry.json +107 -107
- package/sails/stripe/README.md +214 -214
- package/sails/stripe/addon.json +24 -24
- package/sails/stripe/files/backend/routes/stripe.ts +154 -154
- package/sails/stripe/files/backend/schema/stripe.ts +74 -74
- package/sails/stripe/files/backend/services/stripe.ts +224 -224
- package/sails/stripe/files/frontend/components/SubscriptionStatus.tsx +135 -135
- package/sails/stripe/files/frontend/hooks/useSubscription.ts +86 -86
- package/sails/stripe/files/frontend/pages/Checkout.tsx +116 -116
- package/sails/stripe/files/frontend/pages/Pricing.tsx +226 -226
- package/sails/stripe/install.ts +378 -378
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
import posthog from "posthog-js";
|
|
2
|
-
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
// PostHog Analytics Service
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
|
|
7
|
-
const POSTHOG_KEY = import.meta.env.VITE_POSTHOG_KEY as string | undefined;
|
|
8
|
-
const POSTHOG_HOST = import.meta.env.VITE_POSTHOG_HOST as string | undefined;
|
|
9
|
-
|
|
10
|
-
/** Whether PostHog is configured and initialized. */
|
|
11
|
-
let isInitialized = false;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Initialize PostHog analytics.
|
|
15
|
-
*
|
|
16
|
-
* If VITE_POSTHOG_KEY is not set (common in local dev), all calls become
|
|
17
|
-
* no-ops so analytics never interfere with development.
|
|
18
|
-
*/
|
|
19
|
-
export function initAnalytics(): void {
|
|
20
|
-
if (isInitialized) return;
|
|
21
|
-
|
|
22
|
-
if (!POSTHOG_KEY) {
|
|
23
|
-
if (import.meta.env.DEV) {
|
|
24
|
-
console.log("[analytics] VITE_POSTHOG_KEY not set — analytics disabled in dev");
|
|
25
|
-
}
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
posthog.init(POSTHOG_KEY, {
|
|
30
|
-
api_host: POSTHOG_HOST || "https://us.i.posthog.com",
|
|
31
|
-
autocapture: true,
|
|
32
|
-
capture_pageview: false, // We handle page views manually for SPA routing
|
|
33
|
-
capture_pageleave: true,
|
|
34
|
-
persistence: "localStorage",
|
|
35
|
-
person_profiles: "identified_only",
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
isInitialized = true;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Identify a user after login. Associates all future events with this user.
|
|
43
|
-
*
|
|
44
|
-
* @param userId - The user's unique ID
|
|
45
|
-
* @param traits - Optional user properties (email, name, plan, etc.)
|
|
46
|
-
*/
|
|
47
|
-
export function identify(
|
|
48
|
-
userId: string,
|
|
49
|
-
traits?: Record<string, string | number | boolean>,
|
|
50
|
-
): void {
|
|
51
|
-
if (!isInitialized) return;
|
|
52
|
-
posthog.identify(userId, traits);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Reset analytics identity after logout.
|
|
57
|
-
* Creates a new anonymous ID for subsequent events.
|
|
58
|
-
*/
|
|
59
|
-
export function reset(): void {
|
|
60
|
-
if (!isInitialized) return;
|
|
61
|
-
posthog.reset();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Track a custom event.
|
|
66
|
-
*
|
|
67
|
-
* @param name - Event name (e.g., "subscription_started", "feature_used")
|
|
68
|
-
* @param properties - Optional event properties
|
|
69
|
-
*/
|
|
70
|
-
export function trackEvent(
|
|
71
|
-
name: string,
|
|
72
|
-
properties?: Record<string, string | number | boolean>,
|
|
73
|
-
): void {
|
|
74
|
-
if (!isInitialized) return;
|
|
75
|
-
posthog.capture(name, properties);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Track a page view. Call this on every route change in an SPA.
|
|
80
|
-
*/
|
|
81
|
-
export function trackPageView(): void {
|
|
82
|
-
if (!isInitialized) return;
|
|
83
|
-
posthog.capture("$pageview");
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Get the PostHog instance for advanced usage.
|
|
88
|
-
* Returns null if not initialized.
|
|
89
|
-
*/
|
|
90
|
-
export function getPostHog(): typeof posthog | null {
|
|
91
|
-
return isInitialized ? posthog : null;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export const analytics = {
|
|
95
|
-
init: initAnalytics,
|
|
96
|
-
identify,
|
|
97
|
-
reset,
|
|
98
|
-
trackEvent,
|
|
99
|
-
trackPageView,
|
|
100
|
-
getPostHog,
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
export default analytics;
|
|
1
|
+
import posthog from "posthog-js";
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// PostHog Analytics Service
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
|
|
7
|
+
const POSTHOG_KEY = import.meta.env.VITE_POSTHOG_KEY as string | undefined;
|
|
8
|
+
const POSTHOG_HOST = import.meta.env.VITE_POSTHOG_HOST as string | undefined;
|
|
9
|
+
|
|
10
|
+
/** Whether PostHog is configured and initialized. */
|
|
11
|
+
let isInitialized = false;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Initialize PostHog analytics.
|
|
15
|
+
*
|
|
16
|
+
* If VITE_POSTHOG_KEY is not set (common in local dev), all calls become
|
|
17
|
+
* no-ops so analytics never interfere with development.
|
|
18
|
+
*/
|
|
19
|
+
export function initAnalytics(): void {
|
|
20
|
+
if (isInitialized) return;
|
|
21
|
+
|
|
22
|
+
if (!POSTHOG_KEY) {
|
|
23
|
+
if (import.meta.env.DEV) {
|
|
24
|
+
console.log("[analytics] VITE_POSTHOG_KEY not set — analytics disabled in dev");
|
|
25
|
+
}
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
posthog.init(POSTHOG_KEY, {
|
|
30
|
+
api_host: POSTHOG_HOST || "https://us.i.posthog.com",
|
|
31
|
+
autocapture: true,
|
|
32
|
+
capture_pageview: false, // We handle page views manually for SPA routing
|
|
33
|
+
capture_pageleave: true,
|
|
34
|
+
persistence: "localStorage",
|
|
35
|
+
person_profiles: "identified_only",
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
isInitialized = true;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Identify a user after login. Associates all future events with this user.
|
|
43
|
+
*
|
|
44
|
+
* @param userId - The user's unique ID
|
|
45
|
+
* @param traits - Optional user properties (email, name, plan, etc.)
|
|
46
|
+
*/
|
|
47
|
+
export function identify(
|
|
48
|
+
userId: string,
|
|
49
|
+
traits?: Record<string, string | number | boolean>,
|
|
50
|
+
): void {
|
|
51
|
+
if (!isInitialized) return;
|
|
52
|
+
posthog.identify(userId, traits);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Reset analytics identity after logout.
|
|
57
|
+
* Creates a new anonymous ID for subsequent events.
|
|
58
|
+
*/
|
|
59
|
+
export function reset(): void {
|
|
60
|
+
if (!isInitialized) return;
|
|
61
|
+
posthog.reset();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Track a custom event.
|
|
66
|
+
*
|
|
67
|
+
* @param name - Event name (e.g., "subscription_started", "feature_used")
|
|
68
|
+
* @param properties - Optional event properties
|
|
69
|
+
*/
|
|
70
|
+
export function trackEvent(
|
|
71
|
+
name: string,
|
|
72
|
+
properties?: Record<string, string | number | boolean>,
|
|
73
|
+
): void {
|
|
74
|
+
if (!isInitialized) return;
|
|
75
|
+
posthog.capture(name, properties);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Track a page view. Call this on every route change in an SPA.
|
|
80
|
+
*/
|
|
81
|
+
export function trackPageView(): void {
|
|
82
|
+
if (!isInitialized) return;
|
|
83
|
+
posthog.capture("$pageview");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Get the PostHog instance for advanced usage.
|
|
88
|
+
* Returns null if not initialized.
|
|
89
|
+
*/
|
|
90
|
+
export function getPostHog(): typeof posthog | null {
|
|
91
|
+
return isInitialized ? posthog : null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export const analytics = {
|
|
95
|
+
init: initAnalytics,
|
|
96
|
+
identify,
|
|
97
|
+
reset,
|
|
98
|
+
trackEvent,
|
|
99
|
+
trackPageView,
|
|
100
|
+
getPostHog,
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export default analytics;
|