@parhelia/core 0.1.12112 → 0.1.12175
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/components/ActionButton.d.ts +1 -1
- package/dist/components/ActionButton.js.map +1 -1
- package/dist/components/ui/button.d.ts +2 -2
- package/dist/components/ui/button.js +1 -0
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/dialog.js +1 -1
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/editor/ConcurrentUserLimitDialog.d.ts +11 -0
- package/dist/editor/ConcurrentUserLimitDialog.js +72 -0
- package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -0
- package/dist/editor/ContentTree.js +17 -15
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/Editor.js +25 -4
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/MainLayout.js +1 -1
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/QuickItemSwitcher.js +21 -21
- package/dist/editor/QuickItemSwitcher.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +256 -81
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/AgentTerminalStatusBar.d.ts +1 -3
- package/dist/editor/ai/AgentTerminalStatusBar.js +3 -15
- package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/ContextInfoBar.d.ts +1 -3
- package/dist/editor/ai/ContextInfoBar.js +6 -148
- package/dist/editor/ai/ContextInfoBar.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +46 -2
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/client/AboutDialog.js +4 -2
- package/dist/editor/client/AboutDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.js +30 -5
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/hooks/useEditorWebSocket.d.ts +6 -0
- package/dist/editor/client/hooks/useEditorWebSocket.js +80 -3
- package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
- package/dist/editor/field-types/RichTextEditor.js +4 -2
- package/dist/editor/field-types/RichTextEditor.js.map +1 -1
- package/dist/editor/field-types/RichTextEditorComponent.js +37 -3
- package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
- package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +2 -0
- package/dist/editor/field-types/richtext/components/ReactSlate.js +15 -2
- package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
- package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +13 -0
- package/dist/editor/field-types/richtext/contextMenuFactory.js +108 -3
- package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
- package/dist/editor/field-types/richtext/types.d.ts +1 -0
- package/dist/editor/field-types/richtext/types.js.map +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js +1 -1
- package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
- package/dist/editor/menubar/GenericToolbar.js +1 -1
- package/dist/editor/menubar/GenericToolbar.js.map +1 -1
- package/dist/editor/reviews/Comment.js +11 -1
- package/dist/editor/reviews/Comment.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +3 -1
- package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDetailsStep.d.ts +3 -1
- package/dist/editor/reviews/CreateReviewDetailsStep.js +2 -2
- package/dist/editor/reviews/CreateReviewDetailsStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +4 -1
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +6 -4
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/services/contentService.d.ts +1 -1
- package/dist/editor/services/contentService.js +2 -1
- package/dist/editor/services/contentService.js.map +1 -1
- package/dist/editor/services/editService.d.ts +12 -1
- package/dist/editor/services/editService.js +31 -2
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/reviewsService.d.ts +1 -1
- package/dist/editor/services/reviewsService.js +2 -1
- package/dist/editor/services/reviewsService.js.map +1 -1
- package/dist/editor/services/serviceHelper.js +38 -0
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/settings/About.js +260 -3
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/status/coreStatusChecks.js +10 -2
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
- package/dist/editor/ui/SimpleTabs.js +1 -1
- package/dist/editor/ui/SimpleTabs.js.map +1 -1
- package/dist/editor/views/MediaFolderEditView.js +1 -1
- package/dist/editor/views/MediaFolderEditView.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/licensing/EmailEntry.d.ts +6 -0
- package/dist/licensing/EmailEntry.js +30 -0
- package/dist/licensing/EmailEntry.js.map +1 -0
- package/dist/licensing/FeatureGate.d.ts +75 -0
- package/dist/licensing/FeatureGate.js +114 -0
- package/dist/licensing/FeatureGate.js.map +1 -0
- package/dist/licensing/LicenseActivationForm.d.ts +8 -0
- package/dist/licensing/LicenseActivationForm.js +27 -0
- package/dist/licensing/LicenseActivationForm.js.map +1 -0
- package/dist/licensing/LicenseCodeEntry.d.ts +8 -0
- package/dist/licensing/LicenseCodeEntry.js +70 -0
- package/dist/licensing/LicenseCodeEntry.js.map +1 -0
- package/dist/licensing/LicenseContext.d.ts +45 -0
- package/dist/licensing/LicenseContext.js +287 -0
- package/dist/licensing/LicenseContext.js.map +1 -0
- package/dist/licensing/LicenseOverlay.d.ts +1 -0
- package/dist/licensing/LicenseOverlay.js +17 -0
- package/dist/licensing/LicenseOverlay.js.map +1 -0
- package/dist/licensing/index.d.ts +7 -0
- package/dist/licensing/index.js +8 -0
- package/dist/licensing/index.js.map +1 -0
- package/dist/licensing/licenseService.d.ts +28 -0
- package/dist/licensing/licenseService.js +110 -0
- package/dist/licensing/licenseService.js.map +1 -0
- package/dist/licensing/types.d.ts +85 -0
- package/dist/licensing/types.js +12 -0
- package/dist/licensing/types.js.map +1 -0
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/splash-screen/ModernSplashScreen.js +2 -4
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/NewPage.js +13 -31
- package/dist/splash-screen/NewPage.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +12 -1
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, useState, useEffect, useCallback, useRef, } from "react";
|
|
4
|
+
import { getLicenseStatus, requestLicense, verifyActivationCode, storeLicense, clearLicenseCache, hasFeature, } from "./licenseService";
|
|
5
|
+
const LicenseContext = createContext(null);
|
|
6
|
+
export function useLicense() {
|
|
7
|
+
const context = useContext(LicenseContext);
|
|
8
|
+
if (!context) {
|
|
9
|
+
throw new Error("useLicense must be used within a LicenseProvider");
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
}
|
|
13
|
+
export function useLicenseOptional() {
|
|
14
|
+
return useContext(LicenseContext);
|
|
15
|
+
}
|
|
16
|
+
export function LicenseProvider({ children, }) {
|
|
17
|
+
const [licenseStatus, setLicenseStatus] = useState(null);
|
|
18
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
19
|
+
const [activationState, setActivationState] = useState("idle");
|
|
20
|
+
const [error, setError] = useState();
|
|
21
|
+
const [activationEmail, setActivationEmail] = useState();
|
|
22
|
+
const activationStateRef = useRef(activationState);
|
|
23
|
+
activationStateRef.current = activationState;
|
|
24
|
+
// Fetch license status on mount
|
|
25
|
+
const refreshLicenseStatus = useCallback(async () => {
|
|
26
|
+
try {
|
|
27
|
+
setIsLoading(true);
|
|
28
|
+
const status = await getLicenseStatus();
|
|
29
|
+
setLicenseStatus(status);
|
|
30
|
+
// When licensing is disabled, treat as licensed; no overlay, no license server calls
|
|
31
|
+
if (status.licensingDisabled) {
|
|
32
|
+
setActivationState("idle");
|
|
33
|
+
setIsLoading(false);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// If no license or license is expired/invalid, start the activation flow
|
|
37
|
+
if (!status.isValid) {
|
|
38
|
+
if (status.status === "no_license") {
|
|
39
|
+
console.log("No license found, showing email entry");
|
|
40
|
+
setActivationState("email_entry");
|
|
41
|
+
}
|
|
42
|
+
else if (status.status === "expired") {
|
|
43
|
+
console.log("License expired, showing email entry");
|
|
44
|
+
setActivationState("email_entry");
|
|
45
|
+
setError(status.message || "Your license has expired. Please reactivate.");
|
|
46
|
+
}
|
|
47
|
+
else if (status.status === "build_too_new") {
|
|
48
|
+
console.log("Build too new for license, showing email entry");
|
|
49
|
+
setActivationState("email_entry");
|
|
50
|
+
setError(status.message || "This Parhelia version is newer than allowed by your license. Please update your license.");
|
|
51
|
+
}
|
|
52
|
+
else if (status.status === "invalid") {
|
|
53
|
+
// License exists but is invalid - show overlay so user can fix it
|
|
54
|
+
console.log("License invalid, showing email entry");
|
|
55
|
+
setActivationState("email_entry");
|
|
56
|
+
setError(status.message || "License validation failed. Please reactivate.");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
console.error("Failed to get license status:", err);
|
|
62
|
+
setError("Failed to check license status");
|
|
63
|
+
setActivationState("email_entry");
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
setIsLoading(false);
|
|
67
|
+
}
|
|
68
|
+
}, []);
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
refreshLicenseStatus();
|
|
71
|
+
}, [refreshLicenseStatus]);
|
|
72
|
+
// Listen for license validation failures from API calls (e.g. 403 on an action)
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
const handleLicenseValidationFailed = () => {
|
|
75
|
+
setActivationState("email_entry");
|
|
76
|
+
// Only show the error when the user was actually using the app (idle = had valid license).
|
|
77
|
+
// If we're already in email_entry (e.g. no license on load), don't show the error so the
|
|
78
|
+
// overlay stays neutral until the user does something that requires a license.
|
|
79
|
+
if (activationStateRef.current === "idle") {
|
|
80
|
+
setError("License validation failed. Please reactivate your license.");
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
window.addEventListener("license:validation-failed", handleLicenseValidationFailed);
|
|
84
|
+
return () => {
|
|
85
|
+
window.removeEventListener("license:validation-failed", handleLicenseValidationFailed);
|
|
86
|
+
};
|
|
87
|
+
}, []);
|
|
88
|
+
const startActivation = useCallback(() => {
|
|
89
|
+
setActivationState("email_entry");
|
|
90
|
+
setError(undefined);
|
|
91
|
+
setActivationEmail(undefined);
|
|
92
|
+
}, []);
|
|
93
|
+
const closeActivation = useCallback(() => {
|
|
94
|
+
if (licenseStatus?.isValid) {
|
|
95
|
+
setActivationState("idle");
|
|
96
|
+
}
|
|
97
|
+
}, [licenseStatus?.isValid]);
|
|
98
|
+
const checkEmail = useCallback(async (email) => {
|
|
99
|
+
setActivationState("loading");
|
|
100
|
+
setError(undefined);
|
|
101
|
+
setActivationEmail(email);
|
|
102
|
+
try {
|
|
103
|
+
// Submit email with placeholder name/company to check license availability
|
|
104
|
+
const response = await requestLicense({
|
|
105
|
+
email,
|
|
106
|
+
name: "Temporary", // Placeholder - will be replaced when trial form is submitted
|
|
107
|
+
companyName: "Temporary", // Placeholder - will be replaced when trial form is submitted
|
|
108
|
+
parheliaBuildDate: licenseStatus?.buildDate || "",
|
|
109
|
+
});
|
|
110
|
+
switch (response.status) {
|
|
111
|
+
case "trial":
|
|
112
|
+
// Need to show trial form to get name and company
|
|
113
|
+
setActivationState("trial_form");
|
|
114
|
+
break;
|
|
115
|
+
case "code_sent":
|
|
116
|
+
// One-time code sent, show code entry form
|
|
117
|
+
setActivationState("code_entry");
|
|
118
|
+
break;
|
|
119
|
+
case "trial_expired":
|
|
120
|
+
setActivationState("trial_expired");
|
|
121
|
+
break;
|
|
122
|
+
case "rate_limited":
|
|
123
|
+
setError(`Too many requests. Please try again in ${response.retryAfterSeconds || 60} seconds.`);
|
|
124
|
+
setActivationState("error");
|
|
125
|
+
break;
|
|
126
|
+
case "error":
|
|
127
|
+
setError(response.message || "An error occurred");
|
|
128
|
+
setActivationState("error");
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
console.error("Email check failed:", err);
|
|
134
|
+
setError("Failed to contact license server");
|
|
135
|
+
setActivationState("error");
|
|
136
|
+
}
|
|
137
|
+
}, [licenseStatus]);
|
|
138
|
+
const submitLicenseRequest = useCallback(async (email, name, companyName) => {
|
|
139
|
+
setActivationState("loading");
|
|
140
|
+
setError(undefined);
|
|
141
|
+
setActivationEmail(email);
|
|
142
|
+
try {
|
|
143
|
+
const response = await requestLicense({
|
|
144
|
+
email,
|
|
145
|
+
name,
|
|
146
|
+
companyName,
|
|
147
|
+
parheliaBuildDate: licenseStatus?.buildDate || "",
|
|
148
|
+
});
|
|
149
|
+
switch (response.status) {
|
|
150
|
+
case "trial":
|
|
151
|
+
// Got a trial license, store it
|
|
152
|
+
if (response.license) {
|
|
153
|
+
const storeResult = await storeLicense(response.license);
|
|
154
|
+
if (storeResult.success) {
|
|
155
|
+
// Clear the backend cache and refresh status
|
|
156
|
+
try {
|
|
157
|
+
await clearLicenseCache();
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
console.warn("Failed to clear license cache:", err);
|
|
161
|
+
}
|
|
162
|
+
// Wait a bit for the backend to process
|
|
163
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
164
|
+
await refreshLicenseStatus();
|
|
165
|
+
setActivationState("success");
|
|
166
|
+
// Auto-close after success
|
|
167
|
+
setTimeout(() => {
|
|
168
|
+
setActivationState("idle");
|
|
169
|
+
}, 2000);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
setError(storeResult.message || "Failed to store license");
|
|
173
|
+
setActivationState("error");
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
case "code_sent":
|
|
178
|
+
// One-time code sent, show code entry form
|
|
179
|
+
setActivationState("code_entry");
|
|
180
|
+
break;
|
|
181
|
+
case "trial_expired":
|
|
182
|
+
setActivationState("trial_expired");
|
|
183
|
+
break;
|
|
184
|
+
case "rate_limited":
|
|
185
|
+
setError(`Too many requests. Please try again in ${response.retryAfterSeconds || 60} seconds.`);
|
|
186
|
+
setActivationState("error");
|
|
187
|
+
break;
|
|
188
|
+
case "error":
|
|
189
|
+
setError(response.message || "An error occurred");
|
|
190
|
+
setActivationState("error");
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
console.error("License request failed:", err);
|
|
196
|
+
setError("Failed to contact license server");
|
|
197
|
+
setActivationState("error");
|
|
198
|
+
}
|
|
199
|
+
}, [licenseStatus, refreshLicenseStatus]);
|
|
200
|
+
const submitActivationCode = useCallback(async (code) => {
|
|
201
|
+
if (!activationEmail) {
|
|
202
|
+
setError("Email is required");
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
setActivationState("loading");
|
|
206
|
+
setError(undefined);
|
|
207
|
+
try {
|
|
208
|
+
const response = await verifyActivationCode({
|
|
209
|
+
email: activationEmail,
|
|
210
|
+
code,
|
|
211
|
+
});
|
|
212
|
+
switch (response.status) {
|
|
213
|
+
case "purchased":
|
|
214
|
+
// Got the purchased license, store it
|
|
215
|
+
if (response.license) {
|
|
216
|
+
const storeResult = await storeLicense(response.license);
|
|
217
|
+
if (storeResult.success) {
|
|
218
|
+
// Clear the backend cache and refresh status
|
|
219
|
+
try {
|
|
220
|
+
await clearLicenseCache();
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
console.warn("Failed to clear license cache:", err);
|
|
224
|
+
}
|
|
225
|
+
// Wait a bit for the backend to process
|
|
226
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
227
|
+
await refreshLicenseStatus();
|
|
228
|
+
setActivationState("success");
|
|
229
|
+
setTimeout(() => {
|
|
230
|
+
setActivationState("idle");
|
|
231
|
+
}, 2000);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
setError(storeResult.message || "Failed to store license");
|
|
235
|
+
setActivationState("error");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
break;
|
|
239
|
+
case "invalid_code":
|
|
240
|
+
setError("Invalid or expired activation code");
|
|
241
|
+
setActivationState("code_entry");
|
|
242
|
+
break;
|
|
243
|
+
case "error":
|
|
244
|
+
setError(response.message || "Verification failed");
|
|
245
|
+
setActivationState("error");
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
console.error("Code verification failed:", err);
|
|
251
|
+
setError("Failed to verify activation code");
|
|
252
|
+
setActivationState("error");
|
|
253
|
+
}
|
|
254
|
+
}, [licenseStatus, activationEmail, refreshLicenseStatus]);
|
|
255
|
+
const isLicensed = licenseStatus?.isValid ?? false;
|
|
256
|
+
const licenseType = licenseStatus?.licenseType ?? null;
|
|
257
|
+
// When licensing is disabled, treat as full features so all functionality is available
|
|
258
|
+
const features = licenseStatus?.licensingDisabled
|
|
259
|
+
? ["full"]
|
|
260
|
+
: (licenseStatus?.features ?? []);
|
|
261
|
+
const daysRemaining = licenseStatus?.daysRemaining;
|
|
262
|
+
const expiresAt = licenseStatus?.expiresAt
|
|
263
|
+
? new Date(licenseStatus.expiresAt)
|
|
264
|
+
: undefined;
|
|
265
|
+
const checkFeature = useCallback((feature) => hasFeature(features, feature), [features]);
|
|
266
|
+
const value = {
|
|
267
|
+
licenseStatus,
|
|
268
|
+
isLoading,
|
|
269
|
+
isLicensed,
|
|
270
|
+
licenseType,
|
|
271
|
+
features,
|
|
272
|
+
hasFeature: checkFeature,
|
|
273
|
+
daysRemaining,
|
|
274
|
+
expiresAt,
|
|
275
|
+
activationState,
|
|
276
|
+
error,
|
|
277
|
+
startActivation,
|
|
278
|
+
checkEmail,
|
|
279
|
+
submitLicenseRequest,
|
|
280
|
+
submitActivationCode,
|
|
281
|
+
refreshLicenseStatus,
|
|
282
|
+
closeActivation,
|
|
283
|
+
activationEmail,
|
|
284
|
+
};
|
|
285
|
+
return (_jsx(LicenseContext.Provider, { value: value, children: children }));
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=LicenseContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LicenseContext.js","sourceRoot":"","sources":["../../src/licensing/LicenseContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function LicenseOverlay(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useLicense } from "./LicenseContext";
|
|
4
|
+
import { EmailEntry } from "./EmailEntry";
|
|
5
|
+
import { LicenseActivationForm } from "./LicenseActivationForm";
|
|
6
|
+
import { LicenseCodeEntry } from "./LicenseCodeEntry";
|
|
7
|
+
export function LicenseOverlay() {
|
|
8
|
+
const { activationState, error, isLoading, licenseType, daysRemaining, activationEmail, checkEmail, submitLicenseRequest, submitActivationCode, startActivation, } = useLicense();
|
|
9
|
+
// Don't render if idle or just checking
|
|
10
|
+
if (activationState === "idle") {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
return (_jsxs("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-gradient-to-br from-slate-900 via-slate-800 to-slate-900", children: [_jsx("div", { className: "absolute inset-0 opacity-10", children: _jsx("div", { className: "absolute inset-0", style: {
|
|
14
|
+
backgroundImage: `url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fillRule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.4'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")`,
|
|
15
|
+
} }) }), _jsx("div", { className: "absolute top-1/4 left-1/4 h-96 w-96 rounded-full bg-blue-500/20 blur-3xl" }), _jsx("div", { className: "absolute bottom-1/4 right-1/4 h-96 w-96 rounded-full bg-purple-500/20 blur-3xl" }), _jsxs("div", { className: "relative z-10 w-full max-w-md px-4", children: [_jsxs("div", { className: "mb-8 text-center", children: [_jsx("h1", { className: "text-4xl font-bold text-white tracking-tight", children: "Parhelia" }), _jsx("p", { className: "mt-2 text-slate-400", children: "AI-Powered Sitecore Editor" })] }), _jsxs("div", { className: "rounded-2xl border border-slate-700/50 bg-slate-800/50 p-8 shadow-2xl backdrop-blur-xl", children: [activationState === "loading" && (_jsxs("div", { className: "flex flex-col items-center py-8", children: [_jsx("div", { className: "h-12 w-12 animate-spin rounded-full border-4 border-blue-500 border-t-transparent" }), _jsx("p", { className: "mt-4 text-slate-300", children: "Processing..." })] })), activationState === "email_entry" && (_jsx(EmailEntry, { onSubmit: checkEmail, error: error })), activationState === "trial_form" && activationEmail && (_jsx(LicenseActivationForm, { email: activationEmail, onSubmit: submitLicenseRequest, onBack: () => startActivation(), error: error })), activationState === "code_entry" && (_jsx(LicenseCodeEntry, { email: activationEmail || "", onSubmit: submitActivationCode, onBack: () => startActivation(), error: error })), activationState === "trial_expired" && (_jsxs("div", { className: "text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-amber-500/20", children: _jsx("svg", { className: "h-8 w-8 text-amber-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }) }), _jsx("h2", { className: "text-xl font-semibold text-white", children: "Trial Expired" }), _jsx("p", { className: "mt-2 text-slate-400", children: "Your trial period has ended. Please contact us to purchase a license." }), _jsx("a", { href: "mailto:sales@parhelia.ai?subject=License%20Inquiry", className: "mt-6 inline-block rounded-lg bg-blue-600 px-6 py-3 font-medium text-white transition-colors hover:bg-blue-700", children: "Contact Sales" })] })), activationState === "success" && (_jsxs("div", { className: "text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-green-500/20", children: _jsx("svg", { className: "h-8 w-8 text-green-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }) }), _jsx("h2", { className: "text-xl font-semibold text-white", children: "License Activated!" }), _jsx("p", { className: "mt-2 text-slate-400", children: licenseType === "trial" ? (_jsxs(_Fragment, { children: ["Your trial is now active.", " ", daysRemaining && `${daysRemaining} days remaining.`] })) : ("Your license has been activated successfully.") })] })), activationState === "error" && (_jsxs("div", { className: "text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-red-500/20", children: _jsx("svg", { className: "h-8 w-8 text-red-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }), _jsx("h2", { className: "text-xl font-semibold text-white", children: "Error" }), _jsx("p", { className: "mt-2 text-slate-400", children: error || "An error occurred" }), _jsx("button", { onClick: () => startActivation(), className: "mt-6 rounded-lg bg-slate-700 px-6 py-3 font-medium text-white transition-colors hover:bg-slate-600", children: "Try Again" })] }))] }), _jsxs("p", { className: "mt-6 text-center text-sm text-slate-500", children: ["\u00A9 ", new Date().getFullYear(), " Parhelia. All rights reserved."] })] })] }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=LicenseOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LicenseOverlay.js","sourceRoot":"","sources":["../../src/licensing/LicenseOverlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./types";
|
|
2
|
+
export * from "./licenseService";
|
|
3
|
+
export * from "./LicenseContext";
|
|
4
|
+
export * from "./LicenseOverlay";
|
|
5
|
+
export * from "./LicenseActivationForm";
|
|
6
|
+
export * from "./LicenseCodeEntry";
|
|
7
|
+
export * from "./FeatureGate";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/licensing/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { LicenseData, LicenseRequest, LicenseRequestResponse, LicenseStatus, VerifyCodeRequest, VerifyCodeResponse } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Fetches the current license status from the Parhelia backend
|
|
4
|
+
*/
|
|
5
|
+
export declare function getLicenseStatus(): Promise<LicenseStatus>;
|
|
6
|
+
/**
|
|
7
|
+
* Requests a license from the license server (proxied through Sitecore)
|
|
8
|
+
*/
|
|
9
|
+
export declare function requestLicense(request: LicenseRequest): Promise<LicenseRequestResponse>;
|
|
10
|
+
/**
|
|
11
|
+
* Verifies an activation code with the license server (proxied through Sitecore)
|
|
12
|
+
*/
|
|
13
|
+
export declare function verifyActivationCode(request: VerifyCodeRequest): Promise<VerifyCodeResponse>;
|
|
14
|
+
/**
|
|
15
|
+
* Stores a license in the Parhelia backend
|
|
16
|
+
*/
|
|
17
|
+
export declare function storeLicense(license: LicenseData): Promise<{
|
|
18
|
+
success: boolean;
|
|
19
|
+
message?: string;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Clears the license cache in the Parhelia backend
|
|
23
|
+
*/
|
|
24
|
+
export declare function clearLicenseCache(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Checks if a specific feature is available
|
|
27
|
+
*/
|
|
28
|
+
export declare function hasFeature(features: string[] | undefined, feature: string): boolean;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetches the current license status from the Parhelia backend
|
|
3
|
+
*/
|
|
4
|
+
export async function getLicenseStatus() {
|
|
5
|
+
const response = await fetch("/parhelia/license-status", {
|
|
6
|
+
method: "GET",
|
|
7
|
+
headers: {
|
|
8
|
+
Accept: "application/json",
|
|
9
|
+
},
|
|
10
|
+
credentials: "include",
|
|
11
|
+
});
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
throw new Error(`Failed to get license status: ${response.status}`);
|
|
14
|
+
}
|
|
15
|
+
return response.json();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Requests a license from the license server (proxied through Sitecore)
|
|
19
|
+
*/
|
|
20
|
+
export async function requestLicense(request) {
|
|
21
|
+
// Proxy through Sitecore to avoid CORS issues and hide license server URL
|
|
22
|
+
const response = await fetch("/parhelia/license-request", {
|
|
23
|
+
method: "POST",
|
|
24
|
+
headers: {
|
|
25
|
+
"Content-Type": "application/json",
|
|
26
|
+
Accept: "application/json",
|
|
27
|
+
},
|
|
28
|
+
credentials: "include",
|
|
29
|
+
body: JSON.stringify(request),
|
|
30
|
+
});
|
|
31
|
+
if (response.status === 429) {
|
|
32
|
+
const data = await response.json();
|
|
33
|
+
return {
|
|
34
|
+
status: "rate_limited",
|
|
35
|
+
message: data.message || "Too many requests",
|
|
36
|
+
retryAfterSeconds: data.retryAfterSeconds,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
return {
|
|
41
|
+
status: "error",
|
|
42
|
+
message: `Request failed: ${response.status}`,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return response.json();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Verifies an activation code with the license server (proxied through Sitecore)
|
|
49
|
+
*/
|
|
50
|
+
export async function verifyActivationCode(request) {
|
|
51
|
+
// Proxy through Sitecore to avoid CORS issues and hide license server URL
|
|
52
|
+
const response = await fetch("/parhelia/license-verify-code", {
|
|
53
|
+
method: "POST",
|
|
54
|
+
headers: {
|
|
55
|
+
"Content-Type": "application/json",
|
|
56
|
+
Accept: "application/json",
|
|
57
|
+
},
|
|
58
|
+
credentials: "include",
|
|
59
|
+
body: JSON.stringify(request),
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
return {
|
|
63
|
+
status: "error",
|
|
64
|
+
message: `Verification failed: ${response.status}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return response.json();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Stores a license in the Parhelia backend
|
|
71
|
+
*/
|
|
72
|
+
export async function storeLicense(license) {
|
|
73
|
+
const response = await fetch("/parhelia/license-store", {
|
|
74
|
+
method: "POST",
|
|
75
|
+
headers: {
|
|
76
|
+
"Content-Type": "application/json",
|
|
77
|
+
Accept: "application/json",
|
|
78
|
+
},
|
|
79
|
+
credentials: "include",
|
|
80
|
+
body: JSON.stringify(license),
|
|
81
|
+
});
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
const errorText = await response.text();
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
message: errorText || `Failed to store license: ${response.status}`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
return response.json();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Clears the license cache in the Parhelia backend
|
|
93
|
+
*/
|
|
94
|
+
export async function clearLicenseCache() {
|
|
95
|
+
await fetch("/parhelia/license-clear-cache", {
|
|
96
|
+
method: "POST",
|
|
97
|
+
credentials: "include",
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Checks if a specific feature is available
|
|
102
|
+
*/
|
|
103
|
+
export function hasFeature(features, feature) {
|
|
104
|
+
if (!features || features.length === 0) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return features.some((f) => f.toLowerCase() === feature.toLowerCase() ||
|
|
108
|
+
f.toLowerCase() === "full");
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=licenseService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"licenseService.js","sourceRoot":"","sources":["../../src/licensing/licenseService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License data structure received from the license server
|
|
3
|
+
* Note: Email and Name are stored in Customer table but not included in license data for privacy
|
|
4
|
+
*/
|
|
5
|
+
export interface LicenseData {
|
|
6
|
+
licenseId: string;
|
|
7
|
+
companyName: string;
|
|
8
|
+
type: "trial" | "purchased";
|
|
9
|
+
features: string[];
|
|
10
|
+
issuedAt: string;
|
|
11
|
+
expiresAt?: string;
|
|
12
|
+
maxBuildDate?: string;
|
|
13
|
+
maxConcurrentUsers?: number;
|
|
14
|
+
signature: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* License status from the Parhelia backend
|
|
18
|
+
* Note: Email and Name are not exposed for privacy - stored in Customer table only
|
|
19
|
+
*/
|
|
20
|
+
export interface LicenseStatus {
|
|
21
|
+
isValid: boolean;
|
|
22
|
+
status: LicenseStatusType;
|
|
23
|
+
message?: string;
|
|
24
|
+
licenseType?: "trial" | "purchased";
|
|
25
|
+
companyName?: string;
|
|
26
|
+
features?: string[];
|
|
27
|
+
expiresAt?: string;
|
|
28
|
+
daysRemaining?: number;
|
|
29
|
+
maxConcurrentUsers?: number;
|
|
30
|
+
buildDate: string;
|
|
31
|
+
/** When true, licensing is disabled (no key/URL configured); do not show overlay or call license server. */
|
|
32
|
+
licensingDisabled?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export type LicenseStatusType = "valid" | "trial" | "purchased" | "expired" | "invalid" | "no_license" | "build_too_new" | "disabled" | "error";
|
|
35
|
+
/**
|
|
36
|
+
* Response from the license server's /request endpoint
|
|
37
|
+
*/
|
|
38
|
+
export interface LicenseRequestResponse {
|
|
39
|
+
status: "trial" | "code_sent" | "trial_expired" | "rate_limited" | "error";
|
|
40
|
+
message?: string;
|
|
41
|
+
license?: LicenseData;
|
|
42
|
+
expiresAt?: string;
|
|
43
|
+
expiredAt?: string;
|
|
44
|
+
codeExpiresInMinutes?: number;
|
|
45
|
+
retryAfterSeconds?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Response from the license server's /verify-code endpoint
|
|
49
|
+
*/
|
|
50
|
+
export interface VerifyCodeResponse {
|
|
51
|
+
status: "purchased" | "invalid_code" | "error";
|
|
52
|
+
message?: string;
|
|
53
|
+
license?: LicenseData;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Request to the license server
|
|
57
|
+
*/
|
|
58
|
+
export interface LicenseRequest {
|
|
59
|
+
email: string;
|
|
60
|
+
name: string;
|
|
61
|
+
companyName: string;
|
|
62
|
+
parheliaBuildDate?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Request to verify an activation code
|
|
66
|
+
*/
|
|
67
|
+
export interface VerifyCodeRequest {
|
|
68
|
+
email: string;
|
|
69
|
+
code: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Activation flow state
|
|
73
|
+
*/
|
|
74
|
+
export type ActivationState = "idle" | "loading" | "email_entry" | "trial_form" | "code_entry" | "trial_expired" | "success" | "error";
|
|
75
|
+
/**
|
|
76
|
+
* Known feature flags
|
|
77
|
+
*/
|
|
78
|
+
export declare const LicenseFeatures: {
|
|
79
|
+
readonly FULL: "full";
|
|
80
|
+
readonly AI: "ai";
|
|
81
|
+
readonly TRANSLATION: "translation";
|
|
82
|
+
readonly PAGE_WIZARD: "page-wizard";
|
|
83
|
+
readonly REVIEWS: "reviews";
|
|
84
|
+
readonly MINIMAL: "minimal";
|
|
85
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/licensing/types.ts"],"names":[],"mappings":"AAmGA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,IAAI;IACR,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACV,CAAC"}
|
package/dist/revision.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.1.
|
|
2
|
-
export declare const buildDate = "2026-
|
|
1
|
+
export declare const version = "0.1.12175";
|
|
2
|
+
export declare const buildDate = "2026-03-03 20:09:41";
|
package/dist/revision.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export const version = "0.1.
|
|
2
|
-
export const buildDate = "2026-
|
|
1
|
+
export const version = "0.1.12175";
|
|
2
|
+
export const buildDate = "2026-03-03 20:09:41";
|
|
3
3
|
//# sourceMappingURL=revision.js.map
|
|
@@ -159,11 +159,9 @@ export function ModernSplashScreen() {
|
|
|
159
159
|
}, children: _jsx(RecentPages, {}) }), returnWorkspace && (_jsx("div", { className: "animate-content-entrance mt-8 flex flex-col gap-3 md:mt-12", style: {
|
|
160
160
|
animationDelay: "1.7s",
|
|
161
161
|
viewTransitionName: "splash-footer",
|
|
162
|
-
}, children: _jsxs(ActionButton, { variant: "
|
|
162
|
+
}, children: _jsxs(ActionButton, { variant: "defaultInverted", onClick: () => {
|
|
163
163
|
switchWorkspace?.(returnWorkspace.id);
|
|
164
|
-
}, className:
|
|
165
|
-
? "text-slate-400 hover:text-white"
|
|
166
|
-
: "text-slate-400 hover:text-slate-900"), children: [_jsx(Layers, { strokeWidth: 1, className: "mr-2 h-4 w-4" }), "Return to ", returnWorkspaceLabel] }) }))] })] }));
|
|
164
|
+
}, children: [_jsx(Layers, { strokeWidth: 2, className: "mr-0.5 h-4 w-4" }), "Return to ", returnWorkspaceLabel] }) }))] })] }));
|
|
167
165
|
}
|
|
168
166
|
const ActionCard = ({ icon, title, description, onClick, dataTestId, isDark, }) => {
|
|
169
167
|
return (_jsxs("button", { onClick: onClick, "data-testid": dataTestId, className: cn("group relative flex cursor-pointer flex-col items-center gap-3 rounded-2xl border p-5 transition-all duration-500 active:scale-[0.98] md:p-6", isDark
|