this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Finalise v0.1.0.alpha

+17 -14
+1
.dockerignore
··· 1 + web/.crosslink
+1 -1
CHANGELOG.md
··· 4 4 5 5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). 6 6 7 - ## [Unreleased] 7 + ## 0.1.0-alpha - 2026-03-13 8 8 9 9 ### Security 10 10 - Fix ContentKey Debug impl to redact secret bytes [#49](https://issues.opake.app/issues/49.html)
+5 -2
Containerfile.web
··· 24 24 25 25 RUN bun run tsc && bun run vite build 26 26 27 - FROM node:22-slim 27 + FROM oven/bun:1-slim 28 28 29 29 RUN groupadd -g 1000 opake || true && useradd -u 1000 -g 1000 -m opake || true 30 30 31 31 WORKDIR /app 32 32 COPY --from=web-builder --chown=1000:1000 /build/web/dist/ ./dist/ 33 + COPY --from=web-builder --chown=1000:1000 /build/web/node_modules/ ./node_modules/ 34 + COPY --from=web-builder --chown=1000:1000 /build/web/package.json ./ 35 + COPY --from=web-builder --chown=1000:1000 /build/web/serve.ts ./ 33 36 34 37 USER 1000:1000 35 38 EXPOSE 3000 ··· 37 40 ENV NODE_ENV=production 38 41 ENV PORT=3000 39 42 40 - CMD ["node", "dist/server/server.js"] 43 + CMD ["bun", "run", "serve.ts"]
+1 -1
web/src/components/cabinet/DirectoryReadme.tsx
··· 5 5 import { CaretDownIcon, CaretUpIcon, FileTextIcon } from "@phosphor-icons/react"; 6 6 import { MarkdownPreview } from "./MarkdownPreview"; 7 7 import { decryptDocumentBlob } from "@/lib/preview"; 8 - import { useDocumentsStore } from "@/stores/documents"; 8 + import { useDocumentsStore } from "@/stores/documents/store"; 9 9 import { useAuthStore } from "@/stores/auth"; 10 10 import { base64ToUint8Array } from "@/lib/encoding"; 11 11 import type { PdsRecord, DocumentRecord, DocumentMetadata } from "@/lib/pdsTypes";
+1 -1
web/src/components/cabinet/MoveDialog.tsx
··· 3 3 import { forwardRef, useCallback, useImperativeHandle, useRef, useState } from "react"; 4 4 import { ArrowBendUpRightIcon, FolderIcon, HouseIcon } from "@phosphor-icons/react"; 5 5 import { MODAL_TRANSITION_MS } from "@/components/ConfirmDialog"; 6 - import { useDocumentsStore } from "@/stores/documents"; 6 + import { useDocumentsStore } from "@/stores/documents/store"; 7 7 import type { DirectoryTreeSnapshot } from "@/lib/pdsTypes"; 8 8 9 9 // ---------------------------------------------------------------------------
+1 -1
web/src/components/cabinet/PanelContent.tsx
··· 17 17 import { MoveDialog, type MoveDialogHandle } from "./MoveDialog"; 18 18 import { RenameDialog, type RenameDialogHandle } from "./RenameDialog"; 19 19 import { ShareDialog, type ShareDialogHandle } from "./ShareDialog"; 20 - import { useDocumentsStore } from "@/stores/documents"; 20 + import { useDocumentsStore } from "@/stores/documents/store"; 21 21 import { getCryptoWorker } from "@/lib/worker"; 22 22 import { isPreviewable, type FileItem } from "./types"; 23 23
+1 -1
web/src/components/cabinet/ShareDialog.tsx
··· 7 7 import { base64ToUint8Array } from "@/lib/encoding"; 8 8 import { authenticatedXrpc } from "@/lib/api"; 9 9 import { toastSuccess, toastError } from "@/stores/toast"; 10 - import { useDocumentsStore } from "@/stores/documents"; 10 + import { useDocumentsStore } from "@/stores/documents/store"; 11 11 import type { DocumentRecord, Encryption } from "@/lib/pdsTypes"; 12 12 import type { OAuthSession } from "@/lib/storageTypes"; 13 13 import { MODAL_TRANSITION_MS } from "@/components/ConfirmDialog";
+1 -1
web/src/lib/preview.ts
··· 4 4 import { base64ToUint8Array } from "@/lib/encoding"; 5 5 import { getCryptoWorker } from "@/lib/worker"; 6 6 import { unwrapDirectContentKey, decryptEnvelope } from "@/stores/documents/decrypt"; 7 - import { useDocumentsStore } from "@/stores/documents"; 7 + import { useDocumentsStore } from "@/stores/documents/store"; 8 8 import { useAuthStore } from "@/stores/auth"; 9 9 import { IndexedDbStorage } from "@/lib/indexeddbStorage"; 10 10 import type { PdsRecord, DocumentRecord, DocumentMetadata } from "@/lib/pdsTypes";
+1 -1
web/src/routes/cabinet/files/$.tsx
··· 4 4 import { PanelContent } from "@/components/cabinet/PanelContent"; 5 5 import { evictPreviewCache } from "@/components/cabinet/FilePreview"; 6 6 import { evictReadmeCache } from "@/components/cabinet/DirectoryReadme"; 7 - import { useDocumentsStore } from "@/stores/documents"; 7 + import { useDocumentsStore } from "@/stores/documents/store"; 8 8 import { useAuthStore } from "@/stores/auth"; 9 9 import { directoryUri, documentUri, rkeyFromUri } from "@/lib/atUri"; 10 10 import type { FileItem } from "@/components/cabinet/types";
+1 -1
web/src/routes/cabinet/files/index.tsx
··· 3 3 import { useShallow } from "zustand/react/shallow"; 4 4 import { PanelContent } from "@/components/cabinet/PanelContent"; 5 5 import { evictReadmeCache } from "@/components/cabinet/DirectoryReadme"; 6 - import { useDocumentsStore } from "@/stores/documents"; 6 + import { useDocumentsStore } from "@/stores/documents/store"; 7 7 import { rkeyFromUri } from "@/lib/atUri"; 8 8 import type { FileItem } from "@/components/cabinet/types"; 9 9
+1 -1
web/src/routes/cabinet/files/route.tsx
··· 24 24 import { decryptOwnDocument } from "@/lib/preview"; 25 25 import { TagFilterBar } from "@/components/cabinet/TagFilterBar"; 26 26 import { NewFolderDialog, type NewFolderDialogHandle } from "@/components/cabinet/NewFolderDialog"; 27 - import { useDocumentsStore } from "@/stores/documents"; 27 + import { useDocumentsStore } from "@/stores/documents/store"; 28 28 import { useAuthStore } from "@/stores/auth"; 29 29 import { useAppStore } from "@/stores/app"; 30 30 import { directoryUri, documentUri } from "@/lib/atUri";
+1 -1
web/src/routes/cabinet/route.tsx
··· 3 3 import { Sidebar } from "@/components/cabinet/Sidebar"; 4 4 import { TopBar } from "@/components/cabinet/TopBar"; 5 5 import { OpakeLogo } from "@/components/OpakeLogo"; 6 - import { useDocumentsStore } from "@/stores/documents"; 6 + import { useDocumentsStore } from "@/stores/documents/store"; 7 7 import { useAuthStore } from "@/stores/auth"; 8 8 import { useAppStore } from "@/stores/app"; 9 9
+1 -1
web/src/routes/cabinet/shared.tsx
··· 22 22 import type { ConfirmDialogHandle } from "@/components/ConfirmDialog"; 23 23 import { isPreviewable } from "@/components/cabinet/types"; 24 24 import { useAuthStore } from "@/stores/auth"; 25 - import { useDocumentsStore } from "@/stores/documents"; 25 + import { useDocumentsStore } from "@/stores/documents/store"; 26 26 import { decryptDocumentRecord } from "@/stores/documents/decrypt"; 27 27 import { IndexedDbStorage } from "@/lib/indexeddbStorage"; 28 28 import { truncateDid, formatRelativeDate, mimeTypeToFileType, formatFileSize } from "@/lib/format";
-1
web/src/stores/documents/index.ts
··· 1 - export { useDocumentsStore } from "./store";