@uptrademedia/site-kit 1.0.3 → 1.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/SetupWizard-Cki06kB0.d.mts +12 -0
- package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
- package/dist/analytics/index.d.mts +87 -0
- package/dist/analytics/index.d.ts +87 -0
- package/dist/blog/index.d.mts +24 -0
- package/dist/blog/index.d.ts +24 -0
- package/dist/{chunk-6EXHT7PS.mjs → chunk-2IHTEKHU.mjs} +5 -3
- package/dist/chunk-2IHTEKHU.mjs.map +1 -0
- package/dist/{chunk-63JNO4QN.mjs → chunk-DOHML47I.mjs} +2 -2
- package/dist/chunk-DOHML47I.mjs.map +1 -0
- package/dist/{chunk-YKMCG3DS.js → chunk-GAJLEDRD.js} +5 -3
- package/dist/chunk-GAJLEDRD.js.map +1 -0
- package/dist/{chunk-PYYEPAHL.js → chunk-K2HWVOEO.js} +2 -2
- package/dist/chunk-K2HWVOEO.js.map +1 -0
- package/dist/{chunk-JG2K4S2I.js → chunk-O2OHHBUD.js} +9 -9
- package/dist/chunk-O2OHHBUD.js.map +1 -0
- package/dist/{chunk-P7LGOKGI.mjs → chunk-XQJX252G.mjs} +9 -9
- package/dist/chunk-XQJX252G.mjs.map +1 -0
- package/dist/commerce/index.d.mts +168 -0
- package/dist/commerce/index.d.ts +168 -0
- package/dist/commerce/index.js +38 -38
- package/dist/commerce/index.mjs +1 -1
- package/dist/commerce/server.d.mts +98 -0
- package/dist/commerce/server.d.ts +98 -0
- package/dist/engage/index.d.mts +27 -0
- package/dist/engage/index.d.ts +27 -0
- package/dist/forms/index.d.mts +437 -0
- package/dist/forms/index.d.ts +437 -0
- package/dist/images/index.d.mts +133 -0
- package/dist/images/index.d.ts +133 -0
- package/dist/images/index.js +8 -8
- package/dist/images/index.mjs +1 -1
- package/dist/index.d.mts +649 -0
- package/dist/index.d.ts +649 -0
- package/dist/index.js +46 -46
- package/dist/index.mjs +3 -3
- package/dist/redirects/index.d.mts +72 -0
- package/dist/redirects/index.d.ts +72 -0
- package/dist/routing-BWjUF7lp.d.ts +105 -0
- package/dist/routing-CgmRi9tD.d.mts +105 -0
- package/dist/seo/index.d.mts +273 -0
- package/dist/seo/index.d.ts +273 -0
- package/dist/seo/server.d.mts +89 -0
- package/dist/seo/server.d.ts +89 -0
- package/dist/setup/client.d.mts +60 -0
- package/dist/setup/client.d.ts +60 -0
- package/dist/setup/index.d.mts +5 -0
- package/dist/setup/index.d.ts +5 -0
- package/dist/setup/index.js +2 -2
- package/dist/setup/index.mjs +1 -1
- package/dist/setup/server.d.mts +14 -0
- package/dist/setup/server.d.ts +14 -0
- package/dist/setup/server.js +2 -2
- package/dist/setup/server.mjs +1 -1
- package/dist/sitemap/index.d.mts +78 -0
- package/dist/sitemap/index.d.ts +78 -0
- package/dist/types-BDojCvvL.d.mts +156 -0
- package/dist/types-BDojCvvL.d.ts +156 -0
- package/dist/types-BmzutFwy.d.mts +227 -0
- package/dist/types-BmzutFwy.d.ts +227 -0
- package/dist/types-C0pJGfbH.d.mts +155 -0
- package/dist/types-C0pJGfbH.d.ts +155 -0
- package/dist/types-DA_Kocle.d.mts +127 -0
- package/dist/types-DA_Kocle.d.ts +127 -0
- package/dist/types-lFLKKn0G.d.mts +163 -0
- package/dist/types-lFLKKn0G.d.ts +163 -0
- package/dist/types-nB206tPK.d.mts +309 -0
- package/dist/types-nB206tPK.d.ts +309 -0
- package/dist/useEventModal-6U1pF3_g.d.mts +209 -0
- package/dist/useEventModal-BA8g-1-P.d.ts +209 -0
- package/package.json +1 -1
- package/dist/chunk-63JNO4QN.mjs.map +0 -1
- package/dist/chunk-6EXHT7PS.mjs.map +0 -1
- package/dist/chunk-JG2K4S2I.js.map +0 -1
- package/dist/chunk-P7LGOKGI.mjs.map +0 -1
- package/dist/chunk-PYYEPAHL.js.map +0 -1
- package/dist/chunk-YKMCG3DS.js.map +0 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface SetupWizardProps {
|
|
4
|
+
config?: {
|
|
5
|
+
url?: string;
|
|
6
|
+
anonKey?: string;
|
|
7
|
+
portalApiUrl?: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
declare function SetupWizard({ config }?: SetupWizardProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
export { SetupWizard as S };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface SetupWizardProps {
|
|
4
|
+
config?: {
|
|
5
|
+
url?: string;
|
|
6
|
+
anonKey?: string;
|
|
7
|
+
portalApiUrl?: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
declare function SetupWizard({ config }?: SetupWizardProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
export { SetupWizard as S };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
import { A as AnalyticsContextValue, T as TrackEventOptions, a as TrackConversionOptions } from '../types-DA_Kocle.mjs';
|
|
4
|
+
export { c as AnalyticsConfig, b as AnalyticsEvent, C as Conversion, P as PageView, S as Session, W as WebVitalsData } from '../types-DA_Kocle.mjs';
|
|
5
|
+
|
|
6
|
+
interface AnalyticsProviderProps {
|
|
7
|
+
children: React__default.ReactNode;
|
|
8
|
+
apiUrl?: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
trackPageViews?: boolean;
|
|
11
|
+
trackWebVitals?: boolean;
|
|
12
|
+
trackScrollDepth?: boolean;
|
|
13
|
+
trackClicks?: boolean;
|
|
14
|
+
trackJourneys?: boolean;
|
|
15
|
+
sessionTimeout?: number;
|
|
16
|
+
excludePaths?: string[];
|
|
17
|
+
validateAgainstSitemap?: boolean;
|
|
18
|
+
debug?: boolean;
|
|
19
|
+
}
|
|
20
|
+
declare function AnalyticsProvider({ children, apiUrl: propApiUrl, apiKey: propApiKey, trackPageViews, trackWebVitals, trackScrollDepth, trackClicks, trackJourneys, // NEW: Enable journey tracking by default
|
|
21
|
+
sessionTimeout, excludePaths, validateAgainstSitemap, debug, }: AnalyticsProviderProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
declare function useAnalytics(): AnalyticsContextValue;
|
|
23
|
+
declare function useTrackEvent(): {
|
|
24
|
+
trackEvent: (options: TrackEventOptions) => void;
|
|
25
|
+
trackConversion: (options: TrackConversionOptions) => void;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @uptrade/site-kit/analytics - Web Vitals Component
|
|
30
|
+
*
|
|
31
|
+
* Automatically reports Core Web Vitals via Portal API
|
|
32
|
+
*/
|
|
33
|
+
interface WebVitalsProps {
|
|
34
|
+
apiUrl?: string;
|
|
35
|
+
apiKey?: string;
|
|
36
|
+
debug?: boolean;
|
|
37
|
+
}
|
|
38
|
+
declare function WebVitals({ apiUrl: propApiUrl, apiKey: propApiKey, debug }: WebVitalsProps): null;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @uptrade/site-kit/analytics - Contact Tracking Hook
|
|
42
|
+
*
|
|
43
|
+
* Tracks phone calls and email clicks as conversions.
|
|
44
|
+
* Use this hook to automatically track tel: and mailto: links,
|
|
45
|
+
* or manually track contact interactions.
|
|
46
|
+
*/
|
|
47
|
+
interface UseContactTrackingOptions {
|
|
48
|
+
/** Automatically track all tel: and mailto: links (default: true) */
|
|
49
|
+
autoTrack?: boolean;
|
|
50
|
+
/** Debug mode - logs events to console */
|
|
51
|
+
debug?: boolean;
|
|
52
|
+
}
|
|
53
|
+
interface ContactTrackingReturn {
|
|
54
|
+
/** Manually track a phone call click */
|
|
55
|
+
trackPhoneClick: (phoneNumber: string, metadata?: Record<string, unknown>) => void;
|
|
56
|
+
/** Manually track an email click */
|
|
57
|
+
trackEmailClick: (email: string, metadata?: Record<string, unknown>) => void;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Hook for tracking phone and email contact interactions as conversions.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* // Auto-track all tel: and mailto: links
|
|
65
|
+
* useContactTracking()
|
|
66
|
+
*
|
|
67
|
+
* // Manual tracking
|
|
68
|
+
* const { trackPhoneClick, trackEmailClick } = useContactTracking()
|
|
69
|
+
* trackPhoneClick('513-555-1234')
|
|
70
|
+
* trackEmailClick('hello@example.com')
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
declare function useContactTracking(options?: UseContactTrackingOptions): ContactTrackingReturn;
|
|
74
|
+
/**
|
|
75
|
+
* Component wrapper for contact tracking
|
|
76
|
+
* Simply include this component to auto-track all tel: and mailto: links
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* <ContactTracking />
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
declare function ContactTracking({ debug }: {
|
|
84
|
+
debug?: boolean;
|
|
85
|
+
}): null;
|
|
86
|
+
|
|
87
|
+
export { AnalyticsContextValue, AnalyticsProvider, ContactTracking, TrackConversionOptions, TrackEventOptions, WebVitals, useAnalytics, useContactTracking, useTrackEvent };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import React__default from 'react';
|
|
3
|
+
import { A as AnalyticsContextValue, T as TrackEventOptions, a as TrackConversionOptions } from '../types-DA_Kocle.js';
|
|
4
|
+
export { c as AnalyticsConfig, b as AnalyticsEvent, C as Conversion, P as PageView, S as Session, W as WebVitalsData } from '../types-DA_Kocle.js';
|
|
5
|
+
|
|
6
|
+
interface AnalyticsProviderProps {
|
|
7
|
+
children: React__default.ReactNode;
|
|
8
|
+
apiUrl?: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
trackPageViews?: boolean;
|
|
11
|
+
trackWebVitals?: boolean;
|
|
12
|
+
trackScrollDepth?: boolean;
|
|
13
|
+
trackClicks?: boolean;
|
|
14
|
+
trackJourneys?: boolean;
|
|
15
|
+
sessionTimeout?: number;
|
|
16
|
+
excludePaths?: string[];
|
|
17
|
+
validateAgainstSitemap?: boolean;
|
|
18
|
+
debug?: boolean;
|
|
19
|
+
}
|
|
20
|
+
declare function AnalyticsProvider({ children, apiUrl: propApiUrl, apiKey: propApiKey, trackPageViews, trackWebVitals, trackScrollDepth, trackClicks, trackJourneys, // NEW: Enable journey tracking by default
|
|
21
|
+
sessionTimeout, excludePaths, validateAgainstSitemap, debug, }: AnalyticsProviderProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
declare function useAnalytics(): AnalyticsContextValue;
|
|
23
|
+
declare function useTrackEvent(): {
|
|
24
|
+
trackEvent: (options: TrackEventOptions) => void;
|
|
25
|
+
trackConversion: (options: TrackConversionOptions) => void;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @uptrade/site-kit/analytics - Web Vitals Component
|
|
30
|
+
*
|
|
31
|
+
* Automatically reports Core Web Vitals via Portal API
|
|
32
|
+
*/
|
|
33
|
+
interface WebVitalsProps {
|
|
34
|
+
apiUrl?: string;
|
|
35
|
+
apiKey?: string;
|
|
36
|
+
debug?: boolean;
|
|
37
|
+
}
|
|
38
|
+
declare function WebVitals({ apiUrl: propApiUrl, apiKey: propApiKey, debug }: WebVitalsProps): null;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @uptrade/site-kit/analytics - Contact Tracking Hook
|
|
42
|
+
*
|
|
43
|
+
* Tracks phone calls and email clicks as conversions.
|
|
44
|
+
* Use this hook to automatically track tel: and mailto: links,
|
|
45
|
+
* or manually track contact interactions.
|
|
46
|
+
*/
|
|
47
|
+
interface UseContactTrackingOptions {
|
|
48
|
+
/** Automatically track all tel: and mailto: links (default: true) */
|
|
49
|
+
autoTrack?: boolean;
|
|
50
|
+
/** Debug mode - logs events to console */
|
|
51
|
+
debug?: boolean;
|
|
52
|
+
}
|
|
53
|
+
interface ContactTrackingReturn {
|
|
54
|
+
/** Manually track a phone call click */
|
|
55
|
+
trackPhoneClick: (phoneNumber: string, metadata?: Record<string, unknown>) => void;
|
|
56
|
+
/** Manually track an email click */
|
|
57
|
+
trackEmailClick: (email: string, metadata?: Record<string, unknown>) => void;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Hook for tracking phone and email contact interactions as conversions.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```tsx
|
|
64
|
+
* // Auto-track all tel: and mailto: links
|
|
65
|
+
* useContactTracking()
|
|
66
|
+
*
|
|
67
|
+
* // Manual tracking
|
|
68
|
+
* const { trackPhoneClick, trackEmailClick } = useContactTracking()
|
|
69
|
+
* trackPhoneClick('513-555-1234')
|
|
70
|
+
* trackEmailClick('hello@example.com')
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
declare function useContactTracking(options?: UseContactTrackingOptions): ContactTrackingReturn;
|
|
74
|
+
/**
|
|
75
|
+
* Component wrapper for contact tracking
|
|
76
|
+
* Simply include this component to auto-track all tel: and mailto: links
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* <ContactTracking />
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
declare function ContactTracking({ debug }: {
|
|
84
|
+
debug?: boolean;
|
|
85
|
+
}): null;
|
|
86
|
+
|
|
87
|
+
export { AnalyticsContextValue, AnalyticsProvider, ContactTracking, TrackConversionOptions, TrackEventOptions, WebVitals, useAnalytics, useContactTracking, useTrackEvent };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { B as BlogPostProps, a as BlogListProps, A as AuthorCardProps, b as BlogPost$1, T as TableOfContentsProps } from '../types-BDojCvvL.mjs';
|
|
3
|
+
export { k as BlogAnalytics, c as BlogAuthor, d as BlogCategory, f as BlogListOptions, i as BlogListRenderProps, g as BlogListResult, h as BlogPostRenderProps, e as BlogTag, R as RelatedPostsProps, j as TocItem } from '../types-BDojCvvL.mjs';
|
|
4
|
+
import React__default from 'react';
|
|
5
|
+
|
|
6
|
+
declare function BlogPost({ projectId, slug, children }: BlogPostProps): Promise<react_jsx_runtime.JSX.Element>;
|
|
7
|
+
|
|
8
|
+
declare function BlogList({ projectId, options, children }: BlogListProps): Promise<react_jsx_runtime.JSX.Element>;
|
|
9
|
+
|
|
10
|
+
declare function AuthorCard({ author, showBio, showSocial, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
interface RelatedPostsServerProps {
|
|
13
|
+
apiUrl?: string;
|
|
14
|
+
apiKey?: string;
|
|
15
|
+
currentPostId: string;
|
|
16
|
+
limit?: number;
|
|
17
|
+
className?: string;
|
|
18
|
+
renderItem?: (post: BlogPost$1) => React__default.ReactNode;
|
|
19
|
+
}
|
|
20
|
+
declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className, renderItem, }: RelatedPostsServerProps): Promise<react_jsx_runtime.JSX.Element | null>;
|
|
21
|
+
|
|
22
|
+
declare function TableOfContents({ content, className, maxDepth, }: TableOfContentsProps): react_jsx_runtime.JSX.Element | null;
|
|
23
|
+
|
|
24
|
+
export { AuthorCard, AuthorCardProps, BlogList, BlogListProps, BlogPost, BlogPostProps, RelatedPosts, TableOfContents, TableOfContentsProps };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { B as BlogPostProps, a as BlogListProps, A as AuthorCardProps, b as BlogPost$1, T as TableOfContentsProps } from '../types-BDojCvvL.js';
|
|
3
|
+
export { k as BlogAnalytics, c as BlogAuthor, d as BlogCategory, f as BlogListOptions, i as BlogListRenderProps, g as BlogListResult, h as BlogPostRenderProps, e as BlogTag, R as RelatedPostsProps, j as TocItem } from '../types-BDojCvvL.js';
|
|
4
|
+
import React__default from 'react';
|
|
5
|
+
|
|
6
|
+
declare function BlogPost({ projectId, slug, children }: BlogPostProps): Promise<react_jsx_runtime.JSX.Element>;
|
|
7
|
+
|
|
8
|
+
declare function BlogList({ projectId, options, children }: BlogListProps): Promise<react_jsx_runtime.JSX.Element>;
|
|
9
|
+
|
|
10
|
+
declare function AuthorCard({ author, showBio, showSocial, className }: AuthorCardProps): react_jsx_runtime.JSX.Element;
|
|
11
|
+
|
|
12
|
+
interface RelatedPostsServerProps {
|
|
13
|
+
apiUrl?: string;
|
|
14
|
+
apiKey?: string;
|
|
15
|
+
currentPostId: string;
|
|
16
|
+
limit?: number;
|
|
17
|
+
className?: string;
|
|
18
|
+
renderItem?: (post: BlogPost$1) => React__default.ReactNode;
|
|
19
|
+
}
|
|
20
|
+
declare function RelatedPosts({ apiUrl, apiKey, currentPostId, limit, className, renderItem, }: RelatedPostsServerProps): Promise<react_jsx_runtime.JSX.Element | null>;
|
|
21
|
+
|
|
22
|
+
declare function TableOfContents({ content, className, maxDepth, }: TableOfContentsProps): react_jsx_runtime.JSX.Element | null;
|
|
23
|
+
|
|
24
|
+
export { AuthorCard, AuthorCardProps, BlogList, BlogListProps, BlogPost, BlogPostProps, RelatedPosts, TableOfContents, TableOfContentsProps };
|
|
@@ -177,7 +177,9 @@ async function handleMigrate(req) {
|
|
|
177
177
|
const { item, projectId } = await req.json();
|
|
178
178
|
const { migrateFiles } = await import('./migrator-V6KS75EA.mjs');
|
|
179
179
|
try {
|
|
180
|
-
|
|
180
|
+
const scanResults = { forms: [item], metadata: [], widgets: [], sitemaps: [] };
|
|
181
|
+
const options = { projectId, apiKey: authSession.accessToken || "" };
|
|
182
|
+
await migrateFiles(scanResults, options);
|
|
181
183
|
return NextResponse.json({ success: true });
|
|
182
184
|
} catch (err) {
|
|
183
185
|
return NextResponse.json({ error: err.message }, { status: 500 });
|
|
@@ -326,5 +328,5 @@ async function handleRequest(req, route) {
|
|
|
326
328
|
}
|
|
327
329
|
|
|
328
330
|
export { handleRequest };
|
|
329
|
-
//# sourceMappingURL=chunk-
|
|
330
|
-
//# sourceMappingURL=chunk-
|
|
331
|
+
//# sourceMappingURL=chunk-2IHTEKHU.mjs.map
|
|
332
|
+
//# sourceMappingURL=chunk-2IHTEKHU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/setup/api-handlers.ts"],"names":[],"mappings":"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","file":"chunk-2IHTEKHU.mjs","sourcesContent":["/**\n * Setup Wizard API Handlers\n * \n * These are Next.js API route handlers that the SetupWizard component calls.\n * They run on the server and have access to fs for code generation.\n * \n * Usage: Copy these to your app/_uptrade/api/ folder\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\n\n// ============================================\n// Configuration\n// ============================================\n\nconst PORTAL_URL = process.env.UPTRADE_PORTAL_URL || 'https://portal.uptrademedia.com'\nconst API_URL = process.env.UPTRADE_API_URL || 'https://api.uptrademedia.com'\n\n// In-memory session store (for dev server only)\nlet authSession: {\n accessToken?: string\n userId?: string\n email?: string\n pendingCode?: string\n} = {}\n\n// ============================================\n// Status Handler\n// ============================================\n\nexport async function handleStatus(): Promise<NextResponse> {\n const configured = !!(\n process.env.NEXT_PUBLIC_UPTRADE_PROJECT_ID &&\n process.env.NEXT_PUBLIC_SUPABASE_URL\n )\n\n return NextResponse.json({\n configured,\n authenticated: !!authSession.accessToken,\n email: authSession.email\n })\n}\n\n// ============================================\n// Auth Handlers\n// ============================================\n\nexport async function handleAuthStart(): Promise<NextResponse> {\n const state = Math.random().toString(36).substring(7)\n const redirectUri = 'http://localhost:3000/_uptrade/api/auth/callback'\n \n const authUrl = `${PORTAL_URL}/auth/cli?` + new URLSearchParams({\n redirect_uri: redirectUri,\n state\n })\n\n return NextResponse.json({ authUrl, state })\n}\n\nexport async function handleAuthCallback(req: NextRequest): Promise<NextResponse> {\n const { searchParams } = new URL(req.url)\n const code = searchParams.get('code')\n const error = searchParams.get('error')\n\n if (error) {\n return new NextResponse(errorHtml('Authentication Failed', error), {\n headers: { 'Content-Type': 'text/html' }\n })\n }\n\n if (!code) {\n return new NextResponse(errorHtml('Missing Code', 'No authorization code received'), {\n headers: { 'Content-Type': 'text/html' }\n })\n }\n\n try {\n // Exchange code for token\n const tokenResponse = await fetch(`${API_URL}/auth/cli-token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n code,\n redirect_uri: 'http://localhost:3000/_uptrade/api/auth/callback'\n })\n })\n\n if (!tokenResponse.ok) {\n throw new Error('Failed to exchange code for token')\n }\n\n const { access_token, user_id, email } = await tokenResponse.json()\n \n authSession = {\n accessToken: access_token,\n userId: user_id,\n email\n }\n\n return new NextResponse(successHtml(), {\n headers: { 'Content-Type': 'text/html' }\n })\n } catch (err) {\n return new NextResponse(errorHtml('Token Exchange Failed', (err as Error).message), {\n headers: { 'Content-Type': 'text/html' }\n })\n }\n}\n\nexport async function handleAuthStatus(): Promise<NextResponse> {\n return NextResponse.json({\n authenticated: !!authSession.accessToken,\n email: authSession.email\n })\n}\n\nexport async function handleApiKeyAuth(req: NextRequest): Promise<NextResponse> {\n const { apiKey } = await req.json()\n\n try {\n const response = await fetch(`${API_URL}/auth/verify-api-key`, {\n headers: { 'Authorization': `Bearer ${apiKey}` }\n })\n\n if (!response.ok) {\n return NextResponse.json({ error: 'Invalid API key' }, { status: 401 })\n }\n\n const { user_id, email } = await response.json()\n \n authSession = {\n accessToken: apiKey,\n userId: user_id,\n email\n }\n\n return NextResponse.json({ email })\n } catch {\n return NextResponse.json({ error: 'Authentication failed' }, { status: 500 })\n }\n}\n\n// ============================================\n// Organization & Project Handlers\n// ============================================\n\nexport async function handleGetOrganizations(): Promise<NextResponse> {\n if (!authSession.accessToken) {\n return NextResponse.json({ error: 'Not authenticated' }, { status: 401 })\n }\n\n try {\n const response = await fetch(`${API_URL}/organizations`, {\n headers: { 'Authorization': `Bearer ${authSession.accessToken}` }\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch organizations')\n }\n\n const organizations = await response.json()\n return NextResponse.json({ organizations })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\nexport async function handleCreateProject(req: NextRequest): Promise<NextResponse> {\n if (!authSession.accessToken) {\n return NextResponse.json({ error: 'Not authenticated' }, { status: 401 })\n }\n\n const { orgId, name, domain } = await req.json()\n\n try {\n const response = await fetch(`${API_URL}/organizations/${orgId}/projects`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${authSession.accessToken}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ name, domain })\n })\n\n if (!response.ok) {\n throw new Error('Failed to create project')\n }\n\n const project = await response.json()\n return NextResponse.json(project)\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// Scan Handler\n// ============================================\n\nexport async function handleScan(): Promise<NextResponse> {\n const { scanCodebase } = await import('../cli/scanner')\n \n try {\n const results = await scanCodebase(process.cwd())\n \n return NextResponse.json({\n forms: results.forms.map(f => ({\n type: 'form',\n form_library: f.formLibrary,\n file: f.filePath,\n component_name: f.componentName,\n line: f.startLine,\n fields: f.fields,\n complexity: f.complexity,\n suggested_action: f.suggestedAction,\n has_validation: f.hasValidation,\n submits_to: f.submitsTo,\n })),\n widgets: results.widgets.map(w => ({\n type: 'widget',\n widget_type: w.widgetType,\n file: w.filePath,\n line: w.startLine,\n })),\n metadata: results.metadata.map(m => ({\n type: 'metadata',\n metadata_type: m.type,\n file: m.filePath,\n title: m.title,\n description: m.description,\n })),\n sitemaps: results.sitemaps.map(s => ({\n type: 'sitemap',\n sitemap_type: s.type,\n file: s.filePath,\n line: s.startLine,\n generator: s.generator,\n })),\n })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// Migrate Handler\n// ============================================\n\nexport async function handleMigrate(req: NextRequest): Promise<NextResponse> {\n if (!authSession.accessToken) {\n return NextResponse.json({ error: 'Not authenticated' }, { status: 401 })\n }\n\n const { item, projectId } = await req.json()\n const { migrateFiles } = await import('../cli/migrator')\n\n try {\n // Wrap item into ScanResults format\n const scanResults = { forms: [item], metadata: [], widgets: [], sitemaps: [] }\n const options = { projectId, apiKey: authSession.accessToken || '' }\n await migrateFiles(scanResults, options)\n return NextResponse.json({ success: true })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// Configure Handler\n// ============================================\n\nexport async function handleConfigure(req: NextRequest): Promise<NextResponse> {\n if (!authSession.accessToken) {\n return NextResponse.json({ error: 'Not authenticated' }, { status: 401 })\n }\n\n const { projectId } = await req.json()\n const { generateEnvFile, generateProvider } = await import('../cli/generators')\n\n try {\n // Get Supabase config from API\n const configResponse = await fetch(`${API_URL}/projects/${projectId}/config`, {\n headers: { 'Authorization': `Bearer ${authSession.accessToken}` }\n })\n\n if (!configResponse.ok) {\n throw new Error('Failed to fetch project config')\n }\n\n const config = await configResponse.json()\n\n // Generate API key\n const keyResponse = await fetch(`${API_URL}/projects/${projectId}/api-keys`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${authSession.accessToken}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ name: 'Site-Kit Setup' })\n })\n\n let apiKey = 'ut_xxx'\n if (keyResponse.ok) {\n const keyData = await keyResponse.json()\n // Portal API returns { key: string, apiKey: {...} }\n apiKey = keyData.key\n }\n\n // Generate env file\n await generateEnvFile({\n projectId,\n supabaseUrl: config.supabase_url,\n supabaseAnonKey: config.supabase_anon_key,\n apiKey\n })\n\n // Generate provider in layout\n await generateProvider({ projectId })\n\n return NextResponse.json({ success: true })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// Self-Destruct Handler\n// ============================================\n\nexport async function handleSelfDestruct(): Promise<NextResponse> {\n const { selfDestruct } = await import('../cli/generators')\n\n try {\n await selfDestruct()\n return NextResponse.json({ success: true })\n } catch (err) {\n return NextResponse.json({ error: (err as Error).message }, { status: 500 })\n }\n}\n\n// ============================================\n// HTML Templates\n// ============================================\n\nfunction successHtml(): string {\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>Uptrade - Authenticated</title>\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n display: flex; justify-content: center; align-items: center;\n height: 100vh; margin: 0;\n background: linear-gradient(135deg, #1a1a2e 0%, #0f0f1a 100%);\n color: white;\n }\n .container {\n text-align: center; padding: 3rem;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 1rem; border: 1px solid rgba(255, 255, 255, 0.1);\n }\n .icon { font-size: 4rem; margin-bottom: 1rem; }\n h1 { margin: 0 0 0.5rem; }\n p { color: rgba(255, 255, 255, 0.7); margin: 0; }\n </style>\n <script>setTimeout(() => window.close(), 2000)</script>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"icon\">✓</div>\n <h1>Authenticated!</h1>\n <p>This window will close automatically...</p>\n </div>\n</body>\n</html>`\n}\n\nfunction errorHtml(title: string, message: string): string {\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>Uptrade - Error</title>\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n display: flex; justify-content: center; align-items: center;\n height: 100vh; margin: 0;\n background: linear-gradient(135deg, #2e1a1a 0%, #1a0f0f 100%);\n color: white;\n }\n .container {\n text-align: center; padding: 3rem;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 1rem; border: 1px solid rgba(255, 100, 100, 0.2);\n }\n .icon { font-size: 4rem; margin-bottom: 1rem; }\n h1 { margin: 0 0 0.5rem; color: #ff6b6b; }\n p { color: rgba(255, 255, 255, 0.7); margin: 0; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"icon\">✗</div>\n <h1>${title}</h1>\n <p>${message}</p>\n </div>\n</body>\n</html>`\n}\n\n// ============================================\n// Unified Route Handler\n// ============================================\n\nexport async function handleRequest(\n req: NextRequest,\n route: string\n): Promise<NextResponse> {\n switch (route) {\n case 'status':\n return handleStatus()\n case 'auth/start':\n return handleAuthStart()\n case 'auth/callback':\n return handleAuthCallback(req)\n case 'auth/status':\n return handleAuthStatus()\n case 'auth/apikey':\n return handleApiKeyAuth(req)\n case 'organizations':\n return handleGetOrganizations()\n case 'projects':\n return handleCreateProject(req)\n case 'scan':\n return handleScan()\n case 'migrate':\n return handleMigrate(req)\n case 'configure':\n return handleConfigure(req)\n case 'self-destruct':\n return handleSelfDestruct()\n default:\n return NextResponse.json({ error: 'Not found' }, { status: 404 })\n }\n}\n"]}
|
|
@@ -3675,5 +3675,5 @@ function getApiKey() {
|
|
|
3675
3675
|
}
|
|
3676
3676
|
|
|
3677
3677
|
export { CalendarView, CheckoutForm, EventCalendar, EventEmbed, EventModal, EventTile, EventsWidget, OfferingCard, OfferingList, ProductDetail, ProductEmbed, ProductGrid, ProductPage, RegistrationForm, UpcomingEvents, createCheckoutSession, fetchCategories, fetchLatestOffering, fetchNextEvent, fetchOffering, fetchOfferings, fetchProductBySlug, fetchProducts, fetchProductsPublic, fetchServices, fetchUpcomingEvents, formatDate, formatDateRange, formatDateTime, formatPrice, formatTime, getOfferingUrl, getRelativeTimeUntil, getSpotsRemaining, isEventSoldOut, registerForEvent, useEventModal };
|
|
3678
|
-
//# sourceMappingURL=chunk-
|
|
3679
|
-
//# sourceMappingURL=chunk-
|
|
3678
|
+
//# sourceMappingURL=chunk-DOHML47I.mjs.map
|
|
3679
|
+
//# sourceMappingURL=chunk-DOHML47I.mjs.map
|