@hiai-gg/docsmint 0.4.5 → 0.4.7
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/backend/src/lib/api-key-facade.ts +15 -0
- package/backend/src/lib/lifecycle-service.ts +191 -0
- package/dist/backend/index.js +1 -1
- package/dist/frontend/{HiaiDocsExtensionProvider-DHWLzRUu.js → HiaiDocsExtensionProvider-CMiTXi2J.js} +1 -1
- package/dist/frontend/{SettingsDialog-LyZUxxku.js → SettingsDialog-BB7h7GWw.js} +1 -1
- package/dist/frontend/{Sidebar-BsJsD1mJ.js → Sidebar-fbtYC3qs.js} +241 -225
- package/dist/frontend/app-shell.js +4 -4
- package/dist/frontend/components/settings.js +1 -1
- package/dist/frontend/components/sidebar.js +1 -1
- package/dist/frontend/{context-BMD6XTPe.js → context-KLiM3QQ0.js} +1 -0
- package/dist/frontend/dashboard.js +1 -1
- package/dist/frontend/extension.d.ts +2 -1
- package/dist/frontend/extension.js +1 -1
- package/dist/frontend/search.js +1 -1
- package/dist/frontend/shared-document.js +1 -1
- package/dist/frontend-ssr/app-shell.js +4 -4
- package/dist/frontend-ssr/assets/{HiaiDocsExtensionProvider-DAM-lX4R.js → HiaiDocsExtensionProvider-B_MrN08c.js} +1 -1
- package/dist/frontend-ssr/assets/{SettingsDialog-Dg97vv83.js → SettingsDialog-C2SMWJL8.js} +1 -1
- package/dist/frontend-ssr/assets/{Sidebar-CrDk_HYY.js → Sidebar-DKqmwreh.js} +38 -11
- package/dist/frontend-ssr/assets/{context-jz1GGEUi.js → context-BtCMqdVe.js} +1 -0
- package/dist/frontend-ssr/components/settings.js +1 -1
- package/dist/frontend-ssr/components/sidebar.js +1 -1
- package/dist/frontend-ssr/dashboard.js +1 -1
- package/dist/frontend-ssr/extension.js +1 -1
- package/dist/frontend-ssr/search.js +1 -1
- package/dist/frontend-ssr/shared-document.js +1 -1
- package/dist/lifecycle-runtime.js +88 -0
- package/package.json +6 -1
- package/packages/cli/src/index.ts +1 -1
- package/packages/mcp-server/src/index.ts +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as e } from "./Icon-CooFj4Ee.js";
|
|
2
|
-
import { n as t, r as n } from "./SettingsDialog-
|
|
3
|
-
import { t as r } from "./Sidebar-
|
|
2
|
+
import { n as t, r as n } from "./SettingsDialog-BB7h7GWw.js";
|
|
3
|
+
import { t as r } from "./Sidebar-fbtYC3qs.js";
|
|
4
4
|
import { E as i } from "./messages-C5Q890i2.js";
|
|
5
5
|
import { a, i as o } from "./route-context-BqQQ5c4i.js";
|
|
6
|
-
import { t as s } from "./HiaiDocsExtensionProvider-
|
|
6
|
+
import { t as s } from "./HiaiDocsExtensionProvider-CMiTXi2J.js";
|
|
7
7
|
import "svelte/internal/disclose-version";
|
|
8
8
|
import * as c from "svelte/internal/client";
|
|
9
9
|
import "svelte/internal/flags/legacy";
|
|
@@ -179,7 +179,7 @@ function v(e, t) {
|
|
|
179
179
|
c.delegate(["click"]);
|
|
180
180
|
//#endregion
|
|
181
181
|
//#region src/lib/hosts/DocsmintAppShellHost.svelte
|
|
182
|
-
var y = c.from_html("<button type=\"button\" tabindex=\"-1\" aria-label=\"Close navigation menu\" class=\"fixed inset-0 z-40 bg-black/50\"></button>"), b = c.from_html("<div class=\"flex h-screen\" data-docsmint-app-shell-host=\"\"><!> <main id=\"main-content\" class=\"relative
|
|
182
|
+
var y = c.from_html("<button type=\"button\" tabindex=\"-1\" aria-label=\"Close navigation menu\" class=\"fixed inset-0 z-40 bg-black/50\"></button>"), b = c.from_html("<div class=\"flex h-screen\" data-docsmint-app-shell-host=\"\"><!> <main id=\"main-content\" class=\"relative flex-1 overflow-auto\"><!></main></div> <!> <!>", 1), x = c.from_html("<!> <!>", 1);
|
|
183
183
|
function S(e, i) {
|
|
184
184
|
c.push(i, !0);
|
|
185
185
|
let l = c.prop(i, "request", 19, () => ({ fetch })), u = c.prop(i, "extensions", 19, () => ({}));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../SettingsDialog-
|
|
1
|
+
import { t as e } from "../SettingsDialog-BB7h7GWw.js";
|
|
2
2
|
export { e as SettingsDialog };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../Sidebar-
|
|
1
|
+
import { t as e } from "../Sidebar-fbtYC3qs.js";
|
|
2
2
|
export { e as Sidebar };
|
|
@@ -2,6 +2,7 @@ import { createContext as e } from "svelte";
|
|
|
2
2
|
//#region src/lib/extensions/context.ts
|
|
3
3
|
function t(e = {}) {
|
|
4
4
|
return {
|
|
5
|
+
sidebarTop: [...e.sidebarTop ?? []],
|
|
5
6
|
navigation: [...e.navigation ?? []],
|
|
6
7
|
dashboardWidgets: [...e.dashboardWidgets ?? []],
|
|
7
8
|
searchWidgets: [...e.searchWidgets ?? []],
|
|
@@ -18,7 +18,7 @@ import { a as Ne, i as Pe, n as Fe, o as B, r as Ie, t as Le } from "./dialog-Be
|
|
|
18
18
|
import { t as V } from "./label-C2HfJNQ2.js";
|
|
19
19
|
import { n as Re } from "./client-GbtOH90i.js";
|
|
20
20
|
import { i as ze } from "./categories-Drnns7N6.js";
|
|
21
|
-
import { t as Be } from "./context-
|
|
21
|
+
import { t as Be } from "./context-KLiM3QQ0.js";
|
|
22
22
|
import { t as Ve } from "./resolve-BG4HgzpN.js";
|
|
23
23
|
import { a as He, i as Ue, n as We, r as Ge, t as Ke } from "./select-value-GXwx90Pr.js";
|
|
24
24
|
import { c as H, i as qe, o as Je } from "./documents-Bc7b_MSZ.js";
|
|
@@ -10,6 +10,7 @@ export type ExtensionIcon = ComponentType<SvelteComponent>;
|
|
|
10
10
|
export interface DocTabPanelProps { documentId: string; content: string; contentJson: object | undefined; }
|
|
11
11
|
export interface DocTabDefinition { id: string; label: string; component: Component<DocTabPanelProps>; order?: number; icon?: ExtensionIcon; disabled?: boolean; }
|
|
12
12
|
export interface NavigationExtension { id: string; label: string; href?: string; icon?: ExtensionIcon; order?: number; badge?: string | number; disabled?: boolean; visible?: ExtensionVisibility; }
|
|
13
|
+
export interface SidebarTopExtension { id: string; component: Component<{ collapsed: boolean }>; order?: number; visible?: ExtensionVisibility; }
|
|
13
14
|
export interface DashboardWidgetProps { userId?: string; }
|
|
14
15
|
export interface DashboardWidgetExtension { id: string; title?: string; component: Component<DashboardWidgetProps>; order?: number; colSpan?: 1 | 2 | 3 | 4 | 6 | 12; visible?: ExtensionVisibility; }
|
|
15
16
|
export interface SearchWidgetProps { query: string; loading: boolean; total?: number; }
|
|
@@ -28,7 +29,7 @@ export interface CommandPaletteActionExtension { id: string; label: string; keyw
|
|
|
28
29
|
export interface SharedDocumentExtensionCapability { id: string; expiresAt: string; }
|
|
29
30
|
export interface SharedDocumentExtensionContext { documentId: string; title: string; content: string; contentJson?: object; role: "viewer" | "commenter" | "editor"; capability: SharedDocumentExtensionCapability; permissions: { read: true; annotate: boolean; edit: boolean; export: boolean; }; }
|
|
30
31
|
export interface SharedDocumentExtension { id: string; label: string; icon?: ExtensionIcon; order?: number; permission: "annotate" | "edit"; visible?: (context: SharedDocumentExtensionContext) => boolean; component: Component<{ context: SharedDocumentExtensionContext }>; }
|
|
31
|
-
export interface DocsmintFrontendExtensions { navigation: readonly NavigationExtension[]; dashboardWidgets: readonly DashboardWidgetExtension[]; searchWidgets: readonly SearchWidgetExtension[]; documentTabs: readonly DocTabDefinition[]; editorActions: readonly EditorActionExtension[]; documentMenuActions: readonly DocumentMenuActionExtension[]; settingsSections: readonly SettingsSectionExtension[]; commandPaletteActions: readonly CommandPaletteActionExtension[]; sharedDocumentHeaderActions: readonly SharedDocumentExtension[]; sharedDocumentTabs: readonly SharedDocumentExtension[]; sharedDocumentNotesModes: readonly SharedDocumentExtension[]; sharedDocumentEditorModes: readonly SharedDocumentExtension[]; }
|
|
32
|
+
export interface DocsmintFrontendExtensions { sidebarTop: readonly SidebarTopExtension[]; navigation: readonly NavigationExtension[]; dashboardWidgets: readonly DashboardWidgetExtension[]; searchWidgets: readonly SearchWidgetExtension[]; documentTabs: readonly DocTabDefinition[]; editorActions: readonly EditorActionExtension[]; documentMenuActions: readonly DocumentMenuActionExtension[]; settingsSections: readonly SettingsSectionExtension[]; commandPaletteActions: readonly CommandPaletteActionExtension[]; sharedDocumentHeaderActions: readonly SharedDocumentExtension[]; sharedDocumentTabs: readonly SharedDocumentExtension[]; sharedDocumentNotesModes: readonly SharedDocumentExtension[]; sharedDocumentEditorModes: readonly SharedDocumentExtension[]; }
|
|
32
33
|
/** @deprecated Use DocsmintFrontendExtensions. */
|
|
33
34
|
export type HiaiDocsFrontendExtensions = DocsmintFrontendExtensions;
|
|
34
35
|
export type FrontendExtensions = DocsmintFrontendExtensions;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "./HiaiDocsExtensionProvider-
|
|
1
|
+
import { t as e } from "./HiaiDocsExtensionProvider-CMiTXi2J.js";
|
|
2
2
|
export { e as DocsmintExtensionProvider };
|
package/dist/frontend/search.js
CHANGED
|
@@ -11,7 +11,7 @@ import { At as m, Ct as h, Dt as g, Et as _, Ft as v, Gr as y, Ii as b, It as x,
|
|
|
11
11
|
import { n as Ce, o as we, r as j, t as Te } from "./route-context-BqQQ5c4i.js";
|
|
12
12
|
import { n as M } from "./client-GbtOH90i.js";
|
|
13
13
|
import { i as Ee } from "./categories-Drnns7N6.js";
|
|
14
|
-
import { t as De } from "./context-
|
|
14
|
+
import { t as De } from "./context-KLiM3QQ0.js";
|
|
15
15
|
import { t as Oe } from "./resolve-BG4HgzpN.js";
|
|
16
16
|
import { i as ke } from "./search-preferences-B1GdbdUc.js";
|
|
17
17
|
import { a as Ae, i as je, n as Me, r as Ne, t as Pe } from "./select-value-GXwx90Pr.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { T as scroll_to_top_aria } from "./assets/messages-CvqpZNJe.js";
|
|
2
2
|
import { t as Icon } from "./assets/Icon-B0Zqppjo.js";
|
|
3
|
-
import { n as searchPreferences, r as editorPreferences } from "./assets/SettingsDialog-
|
|
4
|
-
import { t as Sidebar } from "./assets/Sidebar-
|
|
3
|
+
import { n as searchPreferences, r as editorPreferences } from "./assets/SettingsDialog-C2SMWJL8.js";
|
|
4
|
+
import { t as Sidebar } from "./assets/Sidebar-DKqmwreh.js";
|
|
5
5
|
import { a as provideDocsmintRouteAdapter, i as provideDocsmintRequestAdapter } from "./assets/route-context-uca_b2Px.js";
|
|
6
|
-
import { t as HiaiDocsExtensionProvider } from "./assets/HiaiDocsExtensionProvider-
|
|
6
|
+
import { t as HiaiDocsExtensionProvider } from "./assets/HiaiDocsExtensionProvider-B_MrN08c.js";
|
|
7
7
|
import * as $ from "svelte/internal/server";
|
|
8
8
|
import { onDestroy } from "svelte";
|
|
9
9
|
//#region ../node_modules/.bun/lucide-svelte@1.0.1+ff5f301bb2db9a0d/node_modules/lucide-svelte/dist/icons/arrow-up.svelte
|
|
@@ -263,7 +263,7 @@ function DocsmintAppShellHost($$renderer, $$props) {
|
|
|
263
263
|
$$settled = false;
|
|
264
264
|
}
|
|
265
265
|
});
|
|
266
|
-
$$renderer.push(`<!----> <main id="main-content"${$.attr("inert", isMobile, true)} class="relative
|
|
266
|
+
$$renderer.push(`<!----> <main id="main-content"${$.attr("inert", isMobile, true)} class="relative flex-1 overflow-auto">`);
|
|
267
267
|
children($$renderer);
|
|
268
268
|
$$renderer.push(`<!----></main></div> `);
|
|
269
269
|
MobileSidebarToggle($$renderer, {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as provideFrontendExtensions } from "./context-
|
|
1
|
+
import { n as provideFrontendExtensions } from "./context-BtCMqdVe.js";
|
|
2
2
|
import "svelte/internal/server";
|
|
3
3
|
//#region src/lib/hosts/HiaiDocsExtensionProvider.svelte
|
|
4
4
|
function HiaiDocsExtensionProvider($$renderer, $$props) {
|
|
@@ -9,7 +9,7 @@ import { r as signOut } from "./auth-client-x26kqY8Z.js";
|
|
|
9
9
|
import { r as getProfile } from "./settings-Bk5Hk9Vq.js";
|
|
10
10
|
import { a as listApiKeys, i as createGlobalApiKey, n as categoryIdFromScopes, o as revealCategoryApiKey, s as revokeApiKey, t as apiKeyClipboardValue } from "./api-keys-DFqX39MT.js";
|
|
11
11
|
import { i as listCategories } from "./categories-CTCtdv7V.js";
|
|
12
|
-
import { t as getFrontendExtensions } from "./context-
|
|
12
|
+
import { t as getFrontendExtensions } from "./context-BtCMqdVe.js";
|
|
13
13
|
import { t as resolveExtensions } from "./resolve-BqHozBXl.js";
|
|
14
14
|
import { a as resolveOfflineIdentity, t as disableOfflineAccess } from "./identity-B3uHoDtf.js";
|
|
15
15
|
import { n as getOfflineDB, t as deleteOfflineDB } from "./db-CnxeO66n.js";
|
|
@@ -6,7 +6,7 @@ import { t as Chevron_right } from "./chevron-right-B4p7Sk6X.js";
|
|
|
6
6
|
import { t as Clock } from "./clock-IL-eX2di.js";
|
|
7
7
|
import { t as Copy } from "./copy-CjV57nGQ.js";
|
|
8
8
|
import { t as Folder } from "./folder-DChhG7qN.js";
|
|
9
|
-
import { t as SettingsDialog } from "./SettingsDialog-
|
|
9
|
+
import { t as SettingsDialog } from "./SettingsDialog-C2SMWJL8.js";
|
|
10
10
|
import { n as Search, t as Tag } from "./tag-GZEuGWk1.js";
|
|
11
11
|
import { a as Dropdown_menu, i as Dropdown_menu_content, o as Ellipsis_vertical, r as Dropdown_menu_item, t as Dropdown_menu_trigger } from "./dropdown-menu-Bj5rbqbB.js";
|
|
12
12
|
import { t as Loader_circle } from "./loader-circle-DZsrZ-er.js";
|
|
@@ -17,7 +17,7 @@ import { t as Input } from "./input-DezGsU3y.js";
|
|
|
17
17
|
import { t as Label } from "./label-Bj8-TfFN.js";
|
|
18
18
|
import { n as apiFetch } from "./client-DZMkDkDn.js";
|
|
19
19
|
import { i as listCategories, r as deleteCategory } from "./categories-CTCtdv7V.js";
|
|
20
|
-
import { t as getFrontendExtensions } from "./context-
|
|
20
|
+
import { t as getFrontendExtensions } from "./context-BtCMqdVe.js";
|
|
21
21
|
import { t as resolveExtensions } from "./resolve-BqHozBXl.js";
|
|
22
22
|
import { n as SHADOW_ITEM_MARKER_PROPERTY_NAME } from "./dndzone-DMvTO_Jz.js";
|
|
23
23
|
import { c as updateDocument, r as deleteDocument, s as listDocuments, t as clearDocumentsCache } from "./documents-PObdTOiT.js";
|
|
@@ -1898,6 +1898,7 @@ function Sidebar($$renderer, $$props) {
|
|
|
1898
1898
|
let width = 256;
|
|
1899
1899
|
let isResizing = false;
|
|
1900
1900
|
const frontendExtensions = getFrontendExtensions();
|
|
1901
|
+
const sidebarTopExtensions = $.derived(() => resolveExtensions(frontendExtensions.sidebarTop, { pathname: page.url.pathname }));
|
|
1901
1902
|
const navigationExtensions = $.derived(() => resolveExtensions(frontendExtensions.navigation, { pathname: page.url.pathname }));
|
|
1902
1903
|
let $$settled = true;
|
|
1903
1904
|
let $$inner_renderer;
|
|
@@ -1910,7 +1911,7 @@ function Sidebar($$renderer, $$props) {
|
|
|
1910
1911
|
$$renderer.push(`<!--]--> `);
|
|
1911
1912
|
if (!mobile) {
|
|
1912
1913
|
$$renderer.push("<!--[0-->");
|
|
1913
|
-
$$renderer.push(`<button class="absolute -right-3 top-4 z-40 flex size-6 items-center justify-center rounded-full border border-border bg-background shadow-sm hover:bg-accent">`);
|
|
1914
|
+
$$renderer.push(`<button class="sidebar-collapse-toggle absolute -right-3 top-4 z-40 flex size-6 items-center justify-center rounded-full border border-border bg-background shadow-sm hover:bg-accent">`);
|
|
1914
1915
|
if (isCollapsed()) {
|
|
1915
1916
|
$$renderer.push("<!--[0-->");
|
|
1916
1917
|
Panel_left_open($$renderer, { class: "size-3.5" });
|
|
@@ -1923,7 +1924,20 @@ function Sidebar($$renderer, $$props) {
|
|
|
1923
1924
|
$$renderer.push(`<!--]--> `);
|
|
1924
1925
|
if (!isCollapsed()) {
|
|
1925
1926
|
$$renderer.push("<!--[0-->");
|
|
1926
|
-
$$renderer.push(`<div class="flex flex-1 flex-col gap-4 overflow-y-auto p-3"
|
|
1927
|
+
$$renderer.push(`<div class="flex flex-1 flex-col gap-4 overflow-y-auto p-3"><!--[-->`);
|
|
1928
|
+
const each_array = $.ensure_array_like(sidebarTopExtensions());
|
|
1929
|
+
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
|
|
1930
|
+
const SidebarTop = each_array[$$index].component;
|
|
1931
|
+
if (SidebarTop) {
|
|
1932
|
+
$$renderer.push("<!--[-->");
|
|
1933
|
+
SidebarTop($$renderer, { collapsed: false });
|
|
1934
|
+
$$renderer.push("<!--]-->");
|
|
1935
|
+
} else {
|
|
1936
|
+
$$renderer.push("<!--[!-->");
|
|
1937
|
+
$$renderer.push("<!--]-->");
|
|
1938
|
+
}
|
|
1939
|
+
}
|
|
1940
|
+
$$renderer.push(`<!--]--> `);
|
|
1927
1941
|
SearchBar($$renderer, { class: "mr-5" });
|
|
1928
1942
|
$$renderer.push(`<!----> `);
|
|
1929
1943
|
$$renderer.push("<!--[0-->");
|
|
@@ -1940,9 +1954,9 @@ function Sidebar($$renderer, $$props) {
|
|
|
1940
1954
|
if (navigationExtensions().length > 0) {
|
|
1941
1955
|
$$renderer.push("<!--[0-->");
|
|
1942
1956
|
$$renderer.push(`<div class="h-px bg-border"></div> <nav class="space-y-1" aria-label="Product navigation"><!--[-->`);
|
|
1943
|
-
const
|
|
1944
|
-
for (let $$
|
|
1945
|
-
let extension =
|
|
1957
|
+
const each_array_1 = $.ensure_array_like(navigationExtensions());
|
|
1958
|
+
for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
|
|
1959
|
+
let extension = each_array_1[$$index_1];
|
|
1946
1960
|
const Icon = extension.icon;
|
|
1947
1961
|
$$renderer.push(`<a${$.attr("href", extension.href ? resolveDocsmintRoute(route, extension.href) : "#")}${$.attr("aria-disabled", extension.disabled)} class="flex items-center gap-2 rounded-md px-2 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground aria-disabled:pointer-events-none aria-disabled:opacity-50">`);
|
|
1948
1962
|
if (Icon) {
|
|
@@ -1968,7 +1982,20 @@ function Sidebar($$renderer, $$props) {
|
|
|
1968
1982
|
$$renderer.push(`<!--]--></div>`);
|
|
1969
1983
|
} else {
|
|
1970
1984
|
$$renderer.push("<!--[-1-->");
|
|
1971
|
-
$$renderer.push(`<div class="flex flex-1 flex-col items-center gap-1 pt-14"
|
|
1985
|
+
$$renderer.push(`<div class="flex flex-1 flex-col items-center gap-1 pt-14"><!--[-->`);
|
|
1986
|
+
const each_array_2 = $.ensure_array_like(sidebarTopExtensions());
|
|
1987
|
+
for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {
|
|
1988
|
+
const SidebarTop = each_array_2[$$index_2].component;
|
|
1989
|
+
if (SidebarTop) {
|
|
1990
|
+
$$renderer.push("<!--[-->");
|
|
1991
|
+
SidebarTop($$renderer, { collapsed: true });
|
|
1992
|
+
$$renderer.push("<!--]-->");
|
|
1993
|
+
} else {
|
|
1994
|
+
$$renderer.push("<!--[!-->");
|
|
1995
|
+
$$renderer.push("<!--]-->");
|
|
1996
|
+
}
|
|
1997
|
+
}
|
|
1998
|
+
$$renderer.push(`<!--]--> <button class="flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground"${$.attr("title", sidebar_folders())}${$.attr("aria-label", sidebar_folders())}>`);
|
|
1972
1999
|
Folder($$renderer, { class: "size-4" });
|
|
1973
2000
|
$$renderer.push(`<!----></button> <button class="flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground"${$.attr("title", search_title())}${$.attr("aria-label", search_title())}>`);
|
|
1974
2001
|
Search($$renderer, { class: "size-4" });
|
|
@@ -1977,9 +2004,9 @@ function Sidebar($$renderer, $$props) {
|
|
|
1977
2004
|
$$renderer.push(`<!----></button> <button class="flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground"${$.attr("title", doc_tags())}${$.attr("aria-label", doc_tags())}>`);
|
|
1978
2005
|
Tag($$renderer, { class: "size-4" });
|
|
1979
2006
|
$$renderer.push(`<!----></button> <!--[-->`);
|
|
1980
|
-
const
|
|
1981
|
-
for (let $$
|
|
1982
|
-
let extension =
|
|
2007
|
+
const each_array_3 = $.ensure_array_like(navigationExtensions());
|
|
2008
|
+
for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
|
|
2009
|
+
let extension = each_array_3[$$index_3];
|
|
1983
2010
|
const Icon = extension.icon;
|
|
1984
2011
|
$$renderer.push(`<a${$.attr("href", extension.href ? resolveDocsmintRoute(route, extension.href) : "#")}${$.attr("aria-disabled", extension.disabled)} class="flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground aria-disabled:pointer-events-none aria-disabled:opacity-50"${$.attr("title", extension.label)}${$.attr("aria-label", extension.label)}>`);
|
|
1985
2012
|
if (Icon) {
|
|
@@ -8,6 +8,7 @@ import { createContext } from "svelte";
|
|
|
8
8
|
*/
|
|
9
9
|
function createFrontendExtensions(initial = {}) {
|
|
10
10
|
return {
|
|
11
|
+
sidebarTop: [...initial.sidebarTop ?? []],
|
|
11
12
|
navigation: [...initial.navigation ?? []],
|
|
12
13
|
dashboardWidgets: [...initial.dashboardWidgets ?? []],
|
|
13
14
|
searchWidgets: [...initial.searchWidgets ?? []],
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SettingsDialog } from "../assets/SettingsDialog-
|
|
1
|
+
import { t as SettingsDialog } from "../assets/SettingsDialog-C2SMWJL8.js";
|
|
2
2
|
export { SettingsDialog };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Sidebar } from "../assets/Sidebar-
|
|
1
|
+
import { t as Sidebar } from "../assets/Sidebar-DKqmwreh.js";
|
|
2
2
|
export { Sidebar };
|
|
@@ -17,7 +17,7 @@ import { a as Dialog, i as Dialog_description, n as Dialog_header, o as Button,
|
|
|
17
17
|
import { t as Label } from "./assets/label-Bj8-TfFN.js";
|
|
18
18
|
import { n as apiFetch } from "./assets/client-DZMkDkDn.js";
|
|
19
19
|
import "./assets/categories-CTCtdv7V.js";
|
|
20
|
-
import { t as getFrontendExtensions } from "./assets/context-
|
|
20
|
+
import { t as getFrontendExtensions } from "./assets/context-BtCMqdVe.js";
|
|
21
21
|
import { t as resolveExtensions } from "./assets/resolve-BqHozBXl.js";
|
|
22
22
|
import { a as Select, i as Select_content, n as Select_trigger, r as Select_item, t as Select_value } from "./assets/select-value-6Lk0ToYd.js";
|
|
23
23
|
import { c as updateDocument, i as getDocument } from "./assets/documents-PObdTOiT.js";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as HiaiDocsExtensionProvider } from "./assets/HiaiDocsExtensionProvider-
|
|
1
|
+
import { t as HiaiDocsExtensionProvider } from "./assets/HiaiDocsExtensionProvider-B_MrN08c.js";
|
|
2
2
|
export { HiaiDocsExtensionProvider as DocsmintExtensionProvider };
|
|
@@ -7,7 +7,7 @@ import { t as Rotate_ccw } from "./assets/rotate-ccw-BlgWwaiq.js";
|
|
|
7
7
|
import { n as Search, t as Tag } from "./assets/tag-GZEuGWk1.js";
|
|
8
8
|
import { n as getDocsmintRouteAdapter, r as navigateDocsmintRoute, t as getDocsmintRequestAdapter } from "./assets/route-context-uca_b2Px.js";
|
|
9
9
|
import "./assets/categories-CTCtdv7V.js";
|
|
10
|
-
import { t as getFrontendExtensions } from "./assets/context-
|
|
10
|
+
import { t as getFrontendExtensions } from "./assets/context-BtCMqdVe.js";
|
|
11
11
|
import { t as resolveExtensions } from "./assets/resolve-BqHozBXl.js";
|
|
12
12
|
import "./assets/select-value-6Lk0ToYd.js";
|
|
13
13
|
import "./assets/tag-store.svelte-DvgUduhd.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as getFrontendExtensions } from "./assets/context-
|
|
1
|
+
import { t as getFrontendExtensions } from "./assets/context-BtCMqdVe.js";
|
|
2
2
|
import * as $ from "svelte/internal/server";
|
|
3
3
|
//#region src/lib/components/editor/shared-document.ts
|
|
4
4
|
var ATTACHMENT_PATH = /^\/api\/attachments\/[0-9a-f-]+\/raw$/i;
|
|
@@ -538,6 +538,10 @@ function tokenHash(token) {
|
|
|
538
538
|
function subjectHash(actorUserId) {
|
|
539
539
|
return new Bun.CryptoHasher("sha256").update(actorUserId).digest("hex");
|
|
540
540
|
}
|
|
541
|
+
function lifecycleTombstoneEmail(actorUserId) {
|
|
542
|
+
const hash = new Bun.CryptoHasher("sha256").update("docsmint:privacy-tombstone:v1\x00").update(actorUserId).digest("hex");
|
|
543
|
+
return `deleted-${hash}@invalid.local`;
|
|
544
|
+
}
|
|
541
545
|
function checksumLine(hash, record) {
|
|
542
546
|
hash.update(`${JSON.stringify(record)}
|
|
543
547
|
`, "utf8");
|
|
@@ -634,6 +638,77 @@ function createPersistentLifecycleService(runtime, database, hostSteps = []) {
|
|
|
634
638
|
checksumLine(hash, manifest);
|
|
635
639
|
recordCount += 1;
|
|
636
640
|
yield manifest;
|
|
641
|
+
const actor = await withActor(ctx.actorUserId, (tx) => tx.select({
|
|
642
|
+
id: users.id,
|
|
643
|
+
email: users.email,
|
|
644
|
+
name: users.name,
|
|
645
|
+
emailVerified: users.emailVerified,
|
|
646
|
+
image: users.image,
|
|
647
|
+
createdAt: users.createdAt,
|
|
648
|
+
updatedAt: users.updatedAt
|
|
649
|
+
}).from(users).where(eq(users.id, ctx.actorUserId)).limit(1));
|
|
650
|
+
for (const profile of actor) {
|
|
651
|
+
const record = {
|
|
652
|
+
type: "data",
|
|
653
|
+
domain: "account",
|
|
654
|
+
resourceType: "user",
|
|
655
|
+
resourceId: profile.id,
|
|
656
|
+
workspaceId: null,
|
|
657
|
+
payload: {
|
|
658
|
+
email: profile.email,
|
|
659
|
+
name: profile.name,
|
|
660
|
+
emailVerified: profile.emailVerified,
|
|
661
|
+
image: profile.image,
|
|
662
|
+
createdAt: profile.createdAt,
|
|
663
|
+
updatedAt: profile.updatedAt
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
checksumLine(hash, record);
|
|
667
|
+
recordCount += 1;
|
|
668
|
+
yield record;
|
|
669
|
+
}
|
|
670
|
+
const actorFolders = await withActor(ctx.actorUserId, (tx) => tx.select().from(folders).where(eq(folders.ownerId, ctx.actorUserId)));
|
|
671
|
+
for (const folder of actorFolders) {
|
|
672
|
+
const record = {
|
|
673
|
+
type: "data",
|
|
674
|
+
domain: "folders",
|
|
675
|
+
resourceType: "folder",
|
|
676
|
+
resourceId: folder.id,
|
|
677
|
+
workspaceId: folder.workspaceId,
|
|
678
|
+
payload: folder
|
|
679
|
+
};
|
|
680
|
+
checksumLine(hash, record);
|
|
681
|
+
recordCount += 1;
|
|
682
|
+
yield record;
|
|
683
|
+
}
|
|
684
|
+
const actorTags = await withActor(ctx.actorUserId, (tx) => tx.select().from(tags).where(eq(tags.ownerId, ctx.actorUserId)));
|
|
685
|
+
for (const tag of actorTags) {
|
|
686
|
+
const record = {
|
|
687
|
+
type: "data",
|
|
688
|
+
domain: "tags",
|
|
689
|
+
resourceType: "tag",
|
|
690
|
+
resourceId: tag.id,
|
|
691
|
+
workspaceId: tag.workspaceId,
|
|
692
|
+
payload: tag
|
|
693
|
+
};
|
|
694
|
+
checksumLine(hash, record);
|
|
695
|
+
recordCount += 1;
|
|
696
|
+
yield record;
|
|
697
|
+
}
|
|
698
|
+
const actorCategories = await withActor(ctx.actorUserId, (tx) => tx.select().from(categories).where(eq(categories.ownerId, ctx.actorUserId)));
|
|
699
|
+
for (const category of actorCategories) {
|
|
700
|
+
const record = {
|
|
701
|
+
type: "data",
|
|
702
|
+
domain: "categories",
|
|
703
|
+
resourceType: "category",
|
|
704
|
+
resourceId: category.id,
|
|
705
|
+
workspaceId: category.workspaceId,
|
|
706
|
+
payload: category
|
|
707
|
+
};
|
|
708
|
+
checksumLine(hash, record);
|
|
709
|
+
recordCount += 1;
|
|
710
|
+
yield record;
|
|
711
|
+
}
|
|
637
712
|
const ownedDocuments = await withActor(ctx.actorUserId, (tx) => tx.select().from(documents).where(eq(documents.ownerId, ctx.actorUserId)));
|
|
638
713
|
for (const document of ownedDocuments) {
|
|
639
714
|
throwIfAborted(ctx.signal);
|
|
@@ -733,12 +808,24 @@ function createPersistentLifecycleService(runtime, database, hostSteps = []) {
|
|
|
733
808
|
storageKey: attachments.storageKey
|
|
734
809
|
}).from(attachments).where(inArray(attachments.documentId, documentIds))) : [];
|
|
735
810
|
await runStep(operation, ctx.actorUserId, leaseOwner, "delete_attachment_objects", deletedByDomain, () => runtime.deleteObjects(objectRows.map((row) => row.storageKey), ctx.signal));
|
|
811
|
+
await runStep(operation, ctx.actorUserId, leaseOwner, "remove_subject_folders", deletedByDomain, () => dbDelete((tx) => tx.delete(folders).where(eq(folders.ownerId, ctx.actorUserId)).returning({ id: folders.id })));
|
|
812
|
+
await runStep(operation, ctx.actorUserId, leaseOwner, "remove_subject_tags", deletedByDomain, () => dbDelete((tx) => tx.delete(tags).where(eq(tags.ownerId, ctx.actorUserId)).returning({ id: tags.id })));
|
|
813
|
+
await runStep(operation, ctx.actorUserId, leaseOwner, "remove_subject_categories", deletedByDomain, () => dbDelete((tx) => tx.delete(categories).where(eq(categories.ownerId, ctx.actorUserId)).returning({ id: categories.id })));
|
|
736
814
|
await runStep(operation, ctx.actorUserId, leaseOwner, "remove_attachment_rows", deletedByDomain, () => objectRows.length ? dbDelete((tx) => tx.delete(attachments).where(inArray(attachments.id, objectRows.map((row) => row.id))).returning({ id: attachments.id })) : Promise.resolve(0));
|
|
737
815
|
await runStep(operation, ctx.actorUserId, leaseOwner, "remove_subject_documents", deletedByDomain, () => dbDelete((tx) => tx.delete(documents).where(eq(documents.ownerId, ctx.actorUserId)).returning({ id: documents.id })));
|
|
738
816
|
await runStep(operation, ctx.actorUserId, leaseOwner, "clear_redis_state", deletedByDomain, () => runtime.clearAccountRedisState(ctx.actorUserId, ctx.signal));
|
|
739
817
|
for (const step of orderedSteps)
|
|
740
818
|
if (step.purge)
|
|
741
819
|
await runStep(operation, ctx.actorUserId, leaseOwner, `host:${step.id}`, deletedByDomain, async () => (await step.purge?.(ctx))?.deletedCount ?? 0);
|
|
820
|
+
await runStep(operation, ctx.actorUserId, leaseOwner, "remove_auth_sessions", deletedByDomain, () => dbDelete((tx) => tx.delete(sessions).where(eq(sessions.userId, ctx.actorUserId)).returning({ id: sessions.id })));
|
|
821
|
+
await runStep(operation, ctx.actorUserId, leaseOwner, "remove_auth_accounts", deletedByDomain, () => dbDelete((tx) => tx.delete(accounts).where(eq(accounts.userId, ctx.actorUserId)).returning({ id: accounts.id })));
|
|
822
|
+
await runStep(operation, ctx.actorUserId, leaseOwner, "tombstone_subject_user", deletedByDomain, () => dbDelete((tx) => tx.update(users).set({
|
|
823
|
+
email: lifecycleTombstoneEmail(ctx.actorUserId),
|
|
824
|
+
name: null,
|
|
825
|
+
image: null,
|
|
826
|
+
emailVerified: false,
|
|
827
|
+
updatedAt: new Date
|
|
828
|
+
}).where(eq(users.id, ctx.actorUserId)).returning({ id: users.id })));
|
|
742
829
|
await runStep(operation, ctx.actorUserId, leaseOwner, "write_deletion_audit", deletedByDomain, async () => {
|
|
743
830
|
await withActor(ctx.actorUserId, (tx) => tx.insert(auditLog).values({
|
|
744
831
|
actorId: ctx.actorUserId,
|
|
@@ -803,6 +890,7 @@ function createPersistentLifecycleRuntime(options) {
|
|
|
803
890
|
}
|
|
804
891
|
export {
|
|
805
892
|
requireLeaseWrite,
|
|
893
|
+
lifecycleTombstoneEmail,
|
|
806
894
|
createPersistentLifecycleService,
|
|
807
895
|
createPersistentLifecycleRuntime,
|
|
808
896
|
bindPersistentLifecycle,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hiai-gg/docsmint",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"browser": {
|
|
6
6
|
"./dist/backend-launcher.js": false,
|
|
@@ -88,6 +88,10 @@
|
|
|
88
88
|
"import": "./dist/storage-quota.js",
|
|
89
89
|
"types": "./dist/storage-quota.d.ts"
|
|
90
90
|
},
|
|
91
|
+
"./backend/lib/api-key-facade": {
|
|
92
|
+
"import": "./backend/src/lib/api-key-facade.ts",
|
|
93
|
+
"types": "./backend/src/lib/api-key-facade.ts"
|
|
94
|
+
},
|
|
91
95
|
"./frontend/app-shell": {
|
|
92
96
|
"node": "./dist/frontend-ssr/app-shell.js",
|
|
93
97
|
"import": "./dist/frontend/app-shell.js",
|
|
@@ -336,6 +340,7 @@
|
|
|
336
340
|
"backend/src/lib/redis-factory.ts",
|
|
337
341
|
"backend/src/lib/storage-factory.ts",
|
|
338
342
|
"backend/src/lib/logger.ts",
|
|
343
|
+
"backend/src/lib/api-key-facade.ts",
|
|
339
344
|
"backend/src/lib/lifecycle-service.ts",
|
|
340
345
|
"README.md",
|
|
341
346
|
"LICENSE"
|
|
@@ -24,7 +24,7 @@ import { registerSearch } from "./commands/search.js";
|
|
|
24
24
|
import { registerSnapshot } from "./commands/snapshot.js";
|
|
25
25
|
import { registerUpdate } from "./commands/update.js";
|
|
26
26
|
|
|
27
|
-
const VERSION = "0.4.
|
|
27
|
+
const VERSION = "0.4.7";
|
|
28
28
|
|
|
29
29
|
const program = new Command();
|
|
30
30
|
program
|