@hexclave/next 1.0.51 → 1.0.53
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/{admin-app-impl-BGNL1KyZ.d.ts → admin-app-impl-Bga0o6cL.d.ts} +11 -8
- package/dist/{admin-app-impl-BGNL1KyZ.d.ts.map → admin-app-impl-Bga0o6cL.d.ts.map} +1 -1
- package/dist/clickmap/clickmap-core.d.ts +1 -1
- package/dist/clickmap/index.d.ts +1 -1
- package/dist/{client-app-Majjw8Xp.d.ts → client-app-B0kBC67Z.d.ts} +2 -1
- package/dist/{client-app-Majjw8Xp.d.ts.map → client-app-B0kBC67Z.d.ts.map} +1 -1
- package/dist/common-BK_sydxF.d.ts.map +1 -1
- package/dist/components/api-key-dialogs.d.ts +1 -1
- package/dist/components/selected-team-switcher.d.ts +1 -1
- package/dist/components/team-icon.d.ts +1 -1
- package/dist/components/team-switcher.d.ts +1 -1
- package/dist/components-page/account-settings/payments/payments-page.d.ts +1 -1
- package/dist/components-page/account-settings/teams/leave-team-section.d.ts +1 -1
- package/dist/components-page/account-settings/teams/team-api-keys-section.d.ts +1 -1
- package/dist/components-page/account-settings/teams/team-display-name-section.d.ts +1 -1
- package/dist/components-page/account-settings/teams/team-member-invitation-section.d.ts +1 -1
- package/dist/components-page/account-settings/teams/team-member-list-section.d.ts +1 -1
- package/dist/components-page/account-settings/teams/team-page.d.ts +1 -1
- package/dist/components-page/account-settings/teams/team-profile-image-section.d.ts +1 -1
- package/dist/components-page/account-settings/teams/team-profile-user-section.d.ts +1 -1
- package/dist/components-page/hexclave-handler-client.d.ts +1 -1
- package/dist/components-page/hexclave-handler.d.ts +1 -1
- package/dist/components-page/sign-out.js +11 -2
- package/dist/components-page/sign-out.js.map +1 -1
- package/dist/components-page/sign-out.test.d.ts +1 -0
- package/dist/components-page/sign-out.test.js +157 -0
- package/dist/components-page/sign-out.test.js.map +1 -0
- package/dist/dev-tool/dev-tool-core.d.ts +1 -1
- package/dist/dev-tool/dev-tool-core.d.ts.map +1 -1
- package/dist/dev-tool/dev-tool-core.js +58 -28
- package/dist/dev-tool/dev-tool-core.js.map +1 -1
- package/dist/dev-tool/dev-tool-styles.js +35 -0
- package/dist/dev-tool/dev-tool-styles.js.map +1 -1
- package/dist/dev-tool/index.d.ts +1 -1
- package/dist/esm/components/api-key-dialogs.d.ts +1 -1
- package/dist/esm/components-page/sign-out.d.ts.map +1 -1
- package/dist/esm/components-page/sign-out.js +12 -3
- package/dist/esm/components-page/sign-out.js.map +1 -1
- package/dist/esm/components-page/sign-out.test.d.ts +1 -0
- package/dist/esm/components-page/sign-out.test.js +156 -0
- package/dist/esm/components-page/sign-out.test.js.map +1 -0
- package/dist/esm/dev-tool/dev-tool-core.d.ts.map +1 -1
- package/dist/esm/dev-tool/dev-tool-core.js +58 -28
- package/dist/esm/dev-tool/dev-tool-core.js.map +1 -1
- package/dist/esm/dev-tool/dev-tool-styles.js +35 -0
- package/dist/esm/dev-tool/dev-tool-styles.js.map +1 -1
- package/dist/esm/generated/global-css.d.ts +1 -1
- package/dist/esm/generated/global-css.js +1 -1
- package/dist/esm/generated/global-css.js.map +1 -1
- package/dist/esm/generated/quetzal-translations.d.ts +2 -2
- package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +5 -4
- package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js +97 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +3 -2
- package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js +26 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/common.d.ts.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/common.js +21 -4
- package/dist/esm/lib/hexclave-app/apps/implementations/common.js.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-back-state.d.ts +37 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-back-state.d.ts.map +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-back-state.js +89 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-back-state.js.map +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-back-state.test.d.ts +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-back-state.test.js +134 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-back-state.test.js.map +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-loop-breaker.d.ts +8 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-loop-breaker.d.ts.map +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-loop-breaker.js +73 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-loop-breaker.js.map +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-loop-breaker.test.d.ts +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-loop-breaker.test.js +92 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/redirect-loop-breaker.test.js.map +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +1 -0
- package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js +27 -6
- package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts +1 -0
- package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -1
- package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -1
- package/dist/esm/pushed-config-error-overlay/index.js +1 -1
- package/dist/esm/pushed-config-error-overlay/index.js.map +1 -1
- package/dist/esm/utils/session-storage.d.ts +12 -0
- package/dist/esm/utils/session-storage.d.ts.map +1 -0
- package/dist/esm/utils/session-storage.js +30 -0
- package/dist/esm/utils/session-storage.js.map +1 -0
- package/dist/generated/global-css.d.ts +1 -1
- package/dist/generated/global-css.js +1 -1
- package/dist/generated/global-css.js.map +1 -1
- package/dist/generated/quetzal-translations.d.ts +1 -1
- package/dist/{hexclave-provider-IAd7nlbi.d.ts → hexclave-provider-SQbs9rmZ.d.ts} +3 -3
- package/dist/{hexclave-provider-IAd7nlbi.d.ts.map → hexclave-provider-SQbs9rmZ.d.ts.map} +1 -1
- package/dist/{hooks-BKXOF6jh.d.ts → hooks-ykQ7Wsco.d.ts} +2 -2
- package/dist/{hooks-BKXOF6jh.d.ts.map → hooks-ykQ7Wsco.d.ts.map} +1 -1
- package/dist/{index-Ck1qKoin.d.ts → index-DwE1cNLH.d.ts} +2 -2
- package/dist/{index-Ck1qKoin.d.ts.map → index-DwE1cNLH.d.ts.map} +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +1 -1
- package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js +97 -0
- package/dist/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.js.map +1 -1
- package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +1 -1
- package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js +26 -1
- package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
- package/dist/lib/hexclave-app/apps/implementations/common.js +21 -4
- package/dist/lib/hexclave-app/apps/implementations/common.js.map +1 -1
- package/dist/lib/hexclave-app/apps/implementations/index.d.ts +1 -1
- package/dist/lib/hexclave-app/apps/implementations/redirect-back-state.d.ts +37 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-back-state.d.ts.map +1 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-back-state.js +92 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-back-state.js.map +1 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-back-state.test.d.ts +1 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-back-state.test.js +133 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-back-state.test.js.map +1 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-loop-breaker.d.ts +8 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-loop-breaker.d.ts.map +1 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-loop-breaker.js +74 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-loop-breaker.js.map +1 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-loop-breaker.test.d.ts +1 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-loop-breaker.test.js +91 -0
- package/dist/lib/hexclave-app/apps/implementations/redirect-loop-breaker.test.js.map +1 -0
- package/dist/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +1 -1
- package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js +27 -6
- package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -1
- package/dist/lib/hexclave-app/apps/index.d.ts +1 -1
- package/dist/lib/hexclave-app/apps/interfaces/admin-app.d.ts +1 -1
- package/dist/lib/hexclave-app/apps/interfaces/client-app.d.ts +1 -1
- package/dist/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -1
- package/dist/lib/hexclave-app/apps/interfaces/server-app.d.ts +1 -1
- package/dist/lib/hexclave-app/index.d.ts +1 -1
- package/dist/lib/hexclave-app/projects/index.d.ts +1 -1
- package/dist/lib/hexclave-app/teams/index.d.ts +1 -1
- package/dist/lib/hexclave-app/users/index.d.ts +1 -1
- package/dist/lib/hooks.d.ts +1 -1
- package/dist/providers/hexclave-context.d.ts +1 -1
- package/dist/providers/hexclave-provider-client.d.ts +1 -1
- package/dist/providers/hexclave-provider.d.ts +1 -1
- package/dist/providers/translation-provider.d.ts +1 -1
- package/dist/pushed-config-error-overlay/index.d.ts +1 -1
- package/dist/pushed-config-error-overlay/index.js +1 -1
- package/dist/pushed-config-error-overlay/index.js.map +1 -1
- package/dist/{quetzal-translations-XeH3zQ9l.d.ts → quetzal-translations-CK45_4Dm.d.ts} +3 -3
- package/dist/{quetzal-translations-XeH3zQ9l.d.ts.map → quetzal-translations-CK45_4Dm.d.ts.map} +1 -1
- package/dist/sign-out-DBnSkfDz.d.ts.map +1 -1
- package/dist/{translation-provider-WOaZXqAz.d.ts → translation-provider-DQ3BJepJ.d.ts} +2 -2
- package/dist/{translation-provider-WOaZXqAz.d.ts.map → translation-provider-DQ3BJepJ.d.ts.map} +1 -1
- package/dist/utils/session-storage.d.ts +12 -0
- package/dist/utils/session-storage.d.ts.map +1 -0
- package/dist/utils/session-storage.js +33 -0
- package/dist/utils/session-storage.js.map +1 -0
- package/package.json +4 -4
- package/src/components-page/sign-out.test.tsx +190 -0
- package/src/components-page/sign-out.tsx +22 -3
- package/src/dev-tool/dev-tool-core.ts +100 -35
- package/src/dev-tool/dev-tool-styles.ts +35 -0
- package/src/lib/hexclave-app/apps/implementations/client-app-impl.cross-domain.test.ts +127 -0
- package/src/lib/hexclave-app/apps/implementations/client-app-impl.ts +34 -1
- package/src/lib/hexclave-app/apps/implementations/common.ts +18 -1
- package/src/lib/hexclave-app/apps/implementations/redirect-back-state.test.ts +134 -0
- package/src/lib/hexclave-app/apps/implementations/redirect-back-state.ts +140 -0
- package/src/lib/hexclave-app/apps/implementations/redirect-loop-breaker.test.ts +127 -0
- package/src/lib/hexclave-app/apps/implementations/redirect-loop-breaker.ts +117 -0
- package/src/lib/hexclave-app/apps/implementations/server-app-impl.ts +31 -5
- package/src/lib/hexclave-app/apps/interfaces/client-app.ts +1 -0
- package/src/pushed-config-error-overlay/index.ts +1 -1
- package/src/utils/session-storage.ts +45 -0
|
@@ -4,7 +4,6 @@ import { getGlobalUiInstance, h, hasAppendChild, setGlobalUiInstance, setHtml }
|
|
|
4
4
|
import { hexclaveAppInternalsSymbol } from "../lib/hexclave-app/common.js";
|
|
5
5
|
import { isLocalhost } from "@hexclave/shared/dist/utils/urls";
|
|
6
6
|
import { getPagePrompt } from "../lib/hexclave-app/url-targets.js";
|
|
7
|
-
import { envVars } from "../generated/env.js";
|
|
8
7
|
import { getBaseUrl } from "../lib/hexclave-app/apps/implementations/common.js";
|
|
9
8
|
import { devToolCSS } from "./dev-tool-styles.js";
|
|
10
9
|
import { clampTriggerPosition, getSnappedTriggerPlacement, resolveTriggerPosition } from "./dev-tool-trigger-position.js";
|
|
@@ -17,6 +16,8 @@ const MAX_LOG_ENTRIES = 500;
|
|
|
17
16
|
const CONSOLE_LOG_BATCH_SIZE = 100;
|
|
18
17
|
const DRAG_THRESHOLD = 5;
|
|
19
18
|
const DOCS_URL = "https://docs.hexclave.com";
|
|
19
|
+
const LOCAL_DASHBOARD_ORIGIN = "http://localhost:26700";
|
|
20
|
+
const HOSTED_DASHBOARD_URL = "https://app.hexclave.com";
|
|
20
21
|
const TABS = [
|
|
21
22
|
{
|
|
22
23
|
id: "overview",
|
|
@@ -136,33 +137,35 @@ function nextId() {
|
|
|
136
137
|
function resolveApiBaseUrl(app) {
|
|
137
138
|
return getBaseUrl(app[hexclaveAppInternalsSymbol].getConstructorOptions().baseUrl);
|
|
138
139
|
}
|
|
139
|
-
function
|
|
140
|
-
return
|
|
140
|
+
function localDashboardProjectUrl(app) {
|
|
141
|
+
return `${LOCAL_DASHBOARD_ORIGIN}/projects/${encodeURIComponent(app.projectId)}`;
|
|
141
142
|
}
|
|
142
|
-
function
|
|
143
|
-
if (
|
|
144
|
-
return
|
|
143
|
+
function parseProjectAvailabilityResponse(body) {
|
|
144
|
+
if (typeof body !== "object" || body === null) return false;
|
|
145
|
+
return "project_available" in body && body.project_available === true;
|
|
145
146
|
}
|
|
146
|
-
|
|
147
|
+
const LOCAL_DASHBOARD_PROBE_TIMEOUT_MS = 3e3;
|
|
148
|
+
function canReachLocalDashboard() {
|
|
149
|
+
return isLocalhost(window.location.href) && window.location.protocol === "http:";
|
|
150
|
+
}
|
|
151
|
+
async function isLocalDashboardProjectAvailable(app) {
|
|
152
|
+
if (!canReachLocalDashboard()) return false;
|
|
153
|
+
const url = `${LOCAL_DASHBOARD_ORIGIN}/api/development-environment/project-availability?project_id=${encodeURIComponent(app.projectId)}`;
|
|
154
|
+
const controller = new AbortController();
|
|
155
|
+
const timeout = setTimeout(() => controller.abort(), LOCAL_DASHBOARD_PROBE_TIMEOUT_MS);
|
|
147
156
|
try {
|
|
148
|
-
const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
if (url.hostname.startsWith("api.")) {
|
|
155
|
-
url.hostname = "app." + url.hostname.slice(4);
|
|
156
|
-
return url.origin;
|
|
157
|
-
}
|
|
158
|
-
return url.origin;
|
|
157
|
+
const response = await fetch(url, {
|
|
158
|
+
method: "GET",
|
|
159
|
+
signal: controller.signal
|
|
160
|
+
});
|
|
161
|
+
if (!response.ok) return false;
|
|
162
|
+
return parseProjectAvailabilityResponse(await response.json());
|
|
159
163
|
} catch {
|
|
160
|
-
return
|
|
164
|
+
return false;
|
|
165
|
+
} finally {
|
|
166
|
+
clearTimeout(timeout);
|
|
161
167
|
}
|
|
162
168
|
}
|
|
163
|
-
function resolveDashboardUrl(app) {
|
|
164
|
-
return `${deriveDashboardBaseUrl(resolveApiBaseUrl(app))}/projects/${encodeURIComponent(app.projectId)}`;
|
|
165
|
-
}
|
|
166
169
|
function formatTimestamp(ts) {
|
|
167
170
|
return new Date(ts).toLocaleTimeString([], {
|
|
168
171
|
hour: "2-digit",
|
|
@@ -427,8 +430,8 @@ function createTabBar(tabs, activeTab, onTabChange, opts) {
|
|
|
427
430
|
setActive
|
|
428
431
|
};
|
|
429
432
|
}
|
|
430
|
-
function
|
|
431
|
-
|
|
433
|
+
function populateIframeTab(container, src, title, loadingMsg = "Loading…", errorMsg = "Unable to load content", errorDetail, openExternallyLabel) {
|
|
434
|
+
container.innerHTML = "";
|
|
432
435
|
if (openExternallyLabel != null) container.appendChild(h("div", { className: "sdt-iframe-toolbar" }, h("a", {
|
|
433
436
|
href: src,
|
|
434
437
|
target: "_blank",
|
|
@@ -457,7 +460,7 @@ function createIframeTab(src, title, loadingMsg = "Loading…", errorMsg = "Unab
|
|
|
457
460
|
} }, errorDetail));
|
|
458
461
|
const retryBtn = h("button", { className: "sdt-iframe-error-btn" }, "Retry");
|
|
459
462
|
retryBtn.addEventListener("click", () => {
|
|
460
|
-
container
|
|
463
|
+
populateIframeTab(container, src, title, loadingMsg, errorMsg, errorDetail, openExternallyLabel);
|
|
461
464
|
});
|
|
462
465
|
errDiv.appendChild(retryBtn);
|
|
463
466
|
const link = h("a", {
|
|
@@ -474,7 +477,6 @@ function createIframeTab(src, title, loadingMsg = "Loading…", errorMsg = "Unab
|
|
|
474
477
|
container.appendChild(errDiv);
|
|
475
478
|
});
|
|
476
479
|
container.appendChild(iframe);
|
|
477
|
-
return container;
|
|
478
480
|
}
|
|
479
481
|
function hasPersistentTokenStoreForDevTool(app) {
|
|
480
482
|
return app[hexclaveAppInternalsSymbol].getConstructorOptions().tokenStore !== null;
|
|
@@ -1420,7 +1422,35 @@ function createAITab(app) {
|
|
|
1420
1422
|
return container;
|
|
1421
1423
|
}
|
|
1422
1424
|
function createDashboardTab(app) {
|
|
1423
|
-
|
|
1425
|
+
const container = h("div", { className: "sdt-iframe-container" });
|
|
1426
|
+
function showChecking() {
|
|
1427
|
+
container.innerHTML = "";
|
|
1428
|
+
container.appendChild(h("div", { className: "sdt-iframe-loading" }, "Checking development environment…"));
|
|
1429
|
+
}
|
|
1430
|
+
function showUnavailable() {
|
|
1431
|
+
container.innerHTML = "";
|
|
1432
|
+
const message = h("div", { className: "sdt-dashboard-unavailable" });
|
|
1433
|
+
const text = h("div", { className: "sdt-dashboard-unavailable-text" });
|
|
1434
|
+
text.appendChild(document.createTextNode("Navigate to "));
|
|
1435
|
+
text.appendChild(h("a", {
|
|
1436
|
+
className: "sdt-dashboard-unavailable-link",
|
|
1437
|
+
href: HOSTED_DASHBOARD_URL,
|
|
1438
|
+
target: "_blank",
|
|
1439
|
+
rel: "noopener noreferrer"
|
|
1440
|
+
}, HOSTED_DASHBOARD_URL));
|
|
1441
|
+
text.appendChild(document.createTextNode(" to view this project's dashboard"));
|
|
1442
|
+
message.appendChild(text);
|
|
1443
|
+
container.appendChild(message);
|
|
1444
|
+
}
|
|
1445
|
+
async function check() {
|
|
1446
|
+
showChecking();
|
|
1447
|
+
const available = await isLocalDashboardProjectAvailable(app);
|
|
1448
|
+
if (!container.isConnected) return;
|
|
1449
|
+
if (available) populateIframeTab(container, localDashboardProjectUrl(app), "Hexclave Dashboard", "Loading dashboard…", "Unable to load dashboard", "The dashboard may require authentication or block framing", "Open in New Tab");
|
|
1450
|
+
else showUnavailable();
|
|
1451
|
+
}
|
|
1452
|
+
runAsynchronously(check);
|
|
1453
|
+
return container;
|
|
1424
1454
|
}
|
|
1425
1455
|
function createSupportTab(app) {
|
|
1426
1456
|
const container = h("div", { className: "sdt-support-tab" });
|
|
@@ -1816,7 +1846,7 @@ function createPanel(app, state, logStore, onClose) {
|
|
|
1816
1846
|
panel.style.width = state.get().panelWidth + "px";
|
|
1817
1847
|
panel.style.height = state.get().panelHeight + "px";
|
|
1818
1848
|
}
|
|
1819
|
-
const tabs =
|
|
1849
|
+
const tabs = TABS;
|
|
1820
1850
|
const storedActiveTab = state.get().activeTab;
|
|
1821
1851
|
const activeTab = tabs.some((tab) => tab.id === storedActiveTab) ? storedActiveTab : DEFAULT_STATE.activeTab;
|
|
1822
1852
|
applyPanelMode(activeTab);
|