@putkoff/abstract-securefiles 0.0.48 → 0.0.50
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/ConfirmButton.d.ts +5 -0
- package/dist/CopyButton.d.ts +4 -0
- package/dist/FolderSelect.d.ts +6 -0
- package/dist/SecureFiles.d.ts +3 -0
- package/dist/ServerFiles.d.ts +6 -0
- package/dist/ShareDialog.d.ts +6 -0
- package/dist/UploadPanel.d.ts +6 -0
- package/dist/api.d.ts +47 -0
- package/dist/index.cjs +529 -1004
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -8
- package/dist/index.js +522 -951
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +60 -0
- package/package.json +15 -11
- package/src/ConfirmButton.tsx +35 -0
- package/src/CopyButton.tsx +24 -0
- package/src/FolderSelect.tsx +68 -0
- package/src/SecureFiles.tsx +346 -0
- package/src/ServerFiles.tsx +339 -0
- package/src/ShareDialog.tsx +148 -0
- package/src/UploadPanel.tsx +217 -0
- package/src/api.ts +108 -0
- package/src/index.ts +4 -8
- package/src/styles.css +442 -0
- package/src/types.ts +56 -0
- package/css.d.ts +0 -2
- package/dist/App/SecureFiles.d.ts +0 -4
- package/dist/App/index.d.ts +0 -1
- package/dist/FileHandlers/FileRow/imports.d.ts +0 -2
- package/dist/FileHandlers/FileRow/index.d.ts +0 -1
- package/dist/FileHandlers/FileRow/src/index.d.ts +0 -1
- package/dist/FileHandlers/FileRow/src/row_utils.d.ts +0 -2
- package/dist/FileHandlers/FileTable/imports.d.ts +0 -4
- package/dist/FileHandlers/FileTable/index.d.ts +0 -1
- package/dist/FileHandlers/FileTable/src/index.d.ts +0 -1
- package/dist/FileHandlers/FileTable/src/table_utils.d.ts +0 -2
- package/dist/FileHandlers/ShareModal/imports.d.ts +0 -2
- package/dist/FileHandlers/ShareModal/index.d.ts +0 -1
- package/dist/FileHandlers/ShareModal/src/index.d.ts +0 -1
- package/dist/FileHandlers/ShareModal/src/share_utils.d.ts +0 -2
- package/dist/FileHandlers/Upload/imports.d.ts +0 -2
- package/dist/FileHandlers/Upload/index.d.ts +0 -1
- package/dist/FileHandlers/Upload/src/index.d.ts +0 -2
- package/dist/FileHandlers/Upload/src/upload_utils.d.ts +0 -2
- package/dist/FileHandlers/imports.d.ts +0 -4
- package/dist/FileHandlers/index.d.ts +0 -4
- package/dist/UI/index.d.ts +0 -28
- package/dist/file_utils/imports.d.ts +0 -2
- package/dist/file_utils/index.d.ts +0 -1
- package/dist/file_utils/src/cookieFetch.d.ts +0 -33
- package/dist/file_utils/src/delete_utils/imports.d.ts +0 -1
- package/dist/file_utils/src/delete_utils/index.d.ts +0 -1
- package/dist/file_utils/src/delete_utils/src/delete_row.d.ts +0 -2
- package/dist/file_utils/src/delete_utils/src/delete_select.d.ts +0 -4
- package/dist/file_utils/src/delete_utils/src/delete_selected.d.ts +0 -2
- package/dist/file_utils/src/delete_utils/src/index.d.ts +0 -3
- package/dist/file_utils/src/download_utils/imports.d.ts +0 -2
- package/dist/file_utils/src/download_utils/index.d.ts +0 -1
- package/dist/file_utils/src/download_utils/src/direct_download.d.ts +0 -3
- package/dist/file_utils/src/download_utils/src/download_file.d.ts +0 -6
- package/dist/file_utils/src/download_utils/src/download_select.d.ts +0 -2
- package/dist/file_utils/src/download_utils/src/index.d.ts +0 -5
- package/dist/file_utils/src/download_utils/src/target_downloads.d.ts +0 -4
- package/dist/file_utils/src/download_utils/src/trigger_download.d.ts +0 -2
- package/dist/file_utils/src/imports.d.ts +0 -2
- package/dist/file_utils/src/index.d.ts +0 -6
- package/dist/file_utils/src/list_utils/imports.d.ts +0 -1
- package/dist/file_utils/src/list_utils/index.d.ts +0 -1
- package/dist/file_utils/src/list_utils/src/index.d.ts +0 -1
- package/dist/file_utils/src/list_utils/src/list_utils.d.ts +0 -2
- package/dist/file_utils/src/select_utils/index.d.ts +0 -1
- package/dist/file_utils/src/select_utils/src/index.d.ts +0 -3
- package/dist/file_utils/src/select_utils/src/init_select_all.d.ts +0 -2
- package/dist/file_utils/src/select_utils/src/sync_header_checkbox.d.ts +0 -5
- package/dist/file_utils/src/select_utils/src/toggle_checkboxes.d.ts +0 -2
- package/dist/file_utils/src/share_utils/imports.d.ts +0 -1
- package/dist/file_utils/src/share_utils/index.d.ts +0 -1
- package/dist/file_utils/src/share_utils/src/index.d.ts +0 -1
- package/dist/file_utils/src/share_utils/src/share_utils.d.ts +0 -7
- package/dist/file_utils/src/upload_utils/imports.d.ts +0 -0
- package/dist/file_utils/src/upload_utils/index.d.ts +0 -1
- package/dist/file_utils/src/upload_utils/src/index.d.ts +0 -3
- package/dist/file_utils/src/upload_utils/src/patch_file_settings.d.ts +0 -2
- package/dist/file_utils/src/upload_utils/src/upload_file.d.ts +0 -2
- package/dist/file_utils/src/upload_utils/src/upload_files.d.ts +0 -5
- package/dist/hooks/imports.d.ts +0 -3
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/useFiles/imports.d.ts +0 -2
- package/dist/hooks/useFiles/index.d.ts +0 -1
- package/dist/hooks/useFiles/src/deleteFile.d.ts +0 -3
- package/dist/hooks/useFiles/src/index.d.ts +0 -6
- package/dist/hooks/useFiles/src/load.d.ts +0 -3
- package/dist/hooks/useFiles/src/patchShareSettings.d.ts +0 -3
- package/dist/hooks/useFiles/src/toggleShare.d.ts +0 -3
- package/dist/hooks/useFiles/src/useFiles.d.ts +0 -13
- package/dist/hooks/useFiles/src/useSaveShareSettings.d.ts +0 -7
- package/dist/imports.d.ts +0 -6
- package/dist/index.css +0 -1
- package/dist/styles/index.d.ts +0 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/types.d.ts +0 -75
- package/index.ts +0 -1
- package/postcss.config.cjs +0 -8
- package/rollup.config.js +0 -38
- package/rollup.config.mjs +0 -35
- package/src/App/SecureFiles.tsx +0 -45
- package/src/App/index.ts +0 -1
- package/src/FileHandlers/FileRow/imports.ts +0 -2
- package/src/FileHandlers/FileRow/index.ts +0 -1
- package/src/FileHandlers/FileRow/src/index.ts +0 -1
- package/src/FileHandlers/FileRow/src/row_utils.tsx +0 -143
- package/src/FileHandlers/FileTable/imports.ts +0 -15
- package/src/FileHandlers/FileTable/index.ts +0 -1
- package/src/FileHandlers/FileTable/src/index.ts +0 -1
- package/src/FileHandlers/FileTable/src/table_utils.tsx +0 -251
- package/src/FileHandlers/ShareModal/imports.ts +0 -2
- package/src/FileHandlers/ShareModal/index.ts +0 -1
- package/src/FileHandlers/ShareModal/src/index.ts +0 -1
- package/src/FileHandlers/ShareModal/src/share_utils.tsx +0 -155
- package/src/FileHandlers/Upload/imports.ts +0 -3
- package/src/FileHandlers/Upload/index.ts +0 -1
- package/src/FileHandlers/Upload/src/index.ts +0 -2
- package/src/FileHandlers/Upload/src/upload_utils.tsx +0 -369
- package/src/FileHandlers/imports.ts +0 -17
- package/src/FileHandlers/index.ts +0 -4
- package/src/UI/index.tsx +0 -122
- package/src/custom.d.ts +0 -7
- package/src/file_utils/imports.ts +0 -2
- package/src/file_utils/index.ts +0 -1
- package/src/file_utils/src/cookieFetch.ts +0 -109
- package/src/file_utils/src/delete_utils/imports.ts +0 -1
- package/src/file_utils/src/delete_utils/index.ts +0 -1
- package/src/file_utils/src/delete_utils/src/delete_row.ts +0 -11
- package/src/file_utils/src/delete_utils/src/delete_select.ts +0 -10
- package/src/file_utils/src/delete_utils/src/delete_selected.ts +0 -15
- package/src/file_utils/src/delete_utils/src/index.ts +0 -3
- package/src/file_utils/src/download_utils/imports.ts +0 -3
- package/src/file_utils/src/download_utils/index.ts +0 -1
- package/src/file_utils/src/download_utils/src/direct_download.ts +0 -22
- package/src/file_utils/src/download_utils/src/download_file.ts +0 -25
- package/src/file_utils/src/download_utils/src/download_select.ts +0 -25
- package/src/file_utils/src/download_utils/src/index.ts +0 -5
- package/src/file_utils/src/download_utils/src/target_downloads.ts +0 -21
- package/src/file_utils/src/download_utils/src/trigger_download.ts +0 -14
- package/src/file_utils/src/imports.ts +0 -3
- package/src/file_utils/src/index.ts +0 -6
- package/src/file_utils/src/list_utils/imports.ts +0 -2
- package/src/file_utils/src/list_utils/index.ts +0 -1
- package/src/file_utils/src/list_utils/src/index.ts +0 -1
- package/src/file_utils/src/list_utils/src/list_utils.ts +0 -28
- package/src/file_utils/src/select_utils/index.ts +0 -1
- package/src/file_utils/src/select_utils/src/index.ts +0 -3
- package/src/file_utils/src/select_utils/src/init_select_all.ts +0 -37
- package/src/file_utils/src/select_utils/src/sync_header_checkbox.ts +0 -18
- package/src/file_utils/src/select_utils/src/toggle_checkboxes.ts +0 -11
- package/src/file_utils/src/share_utils/imports.ts +0 -1
- package/src/file_utils/src/share_utils/index.ts +0 -1
- package/src/file_utils/src/share_utils/src/index.ts +0 -1
- package/src/file_utils/src/share_utils/src/share_utils.ts +0 -20
- package/src/file_utils/src/upload_utils/imports.ts +0 -1
- package/src/file_utils/src/upload_utils/index.ts +0 -1
- package/src/file_utils/src/upload_utils/src/index.ts +0 -3
- package/src/file_utils/src/upload_utils/src/patch_file_settings.ts +0 -20
- package/src/file_utils/src/upload_utils/src/upload_file.ts +0 -27
- package/src/file_utils/src/upload_utils/src/upload_files.ts +0 -19
- package/src/hooks/imports.ts +0 -3
- package/src/hooks/index.ts +0 -1
- package/src/hooks/useFiles/imports.ts +0 -3
- package/src/hooks/useFiles/index.ts +0 -1
- package/src/hooks/useFiles/src/deleteFile.ts +0 -23
- package/src/hooks/useFiles/src/index.ts +0 -6
- package/src/hooks/useFiles/src/load.ts +0 -39
- package/src/hooks/useFiles/src/logs/clipit_logs.log +0 -0
- package/src/hooks/useFiles/src/logs/routes_bp.log +0 -0
- package/src/hooks/useFiles/src/patchShareSettings.ts +0 -27
- package/src/hooks/useFiles/src/toggleShare.ts +0 -28
- package/src/hooks/useFiles/src/useFiles.ts +0 -35
- package/src/hooks/useFiles/src/useSaveShareSettings.ts +0 -31
- package/src/imports.ts +0 -18
- package/src/styles/SecureFiles/App.css +0 -42
- package/src/styles/SecureFiles/index.css +0 -10
- package/src/styles/SecureFiles/logs/clipit_logs.log +0 -0
- package/src/styles/SecureFiles/logs/routes_bp.log +0 -0
- package/src/styles/SecureFiles/tailwind.css +0 -3
- package/src/styles/SecureFiles/window-manager.css +0 -283
- package/src/styles/SecureFilesStyles.module.css +0 -287
- package/src/styles/index.ts +0 -1
- package/src/types/index.ts +0 -1
- package/src/types/src/index.ts +0 -1
- package/src/types/src/types.ts +0 -88
- package/tailwind.config.cjs +0 -7
- package/testit.mjs +0 -11
- package/testit.ts +0 -3
- package/tsconfig.json +0 -27
- /package/src/{global.d.ts → css.d.ts} +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/@heroicons/react/24/outline/esm/ClipboardIcon.js","../node_modules/@heroicons/react/24/outline/esm/CloudArrowUpIcon.js","../src/UI/index.tsx","../src/file_utils/src/download_utils/src/trigger_download.ts","../src/file_utils/src/download_utils/src/direct_download.ts","../src/file_utils/src/download_utils/src/download_file.ts","../src/file_utils/src/cookieFetch.ts","../src/file_utils/src/download_utils/src/download_select.ts","../src/file_utils/src/download_utils/src/target_downloads.ts","../src/file_utils/src/select_utils/src/sync_header_checkbox.ts","../src/file_utils/src/select_utils/src/init_select_all.ts","../src/file_utils/src/select_utils/src/toggle_checkboxes.ts","../src/file_utils/src/upload_utils/src/patch_file_settings.ts","../src/file_utils/src/upload_utils/src/upload_file.ts","../src/file_utils/src/upload_utils/src/upload_files.ts","../src/file_utils/src/delete_utils/src/delete_select.ts","../src/file_utils/src/delete_utils/src/delete_selected.ts","../src/file_utils/src/delete_utils/src/delete_row.ts","../src/file_utils/src/list_utils/src/list_utils.ts","../src/file_utils/src/share_utils/src/share_utils.ts","../src/hooks/useFiles/src/load.ts","../src/hooks/useFiles/src/toggleShare.ts","../src/hooks/useFiles/src/patchShareSettings.ts","../src/hooks/useFiles/src/useSaveShareSettings.ts","../src/hooks/useFiles/src/deleteFile.ts","../src/hooks/useFiles/src/useFiles.ts","../src/FileHandlers/FileRow/src/row_utils.tsx","../src/FileHandlers/ShareModal/src/share_utils.tsx","../src/FileHandlers/FileTable/src/table_utils.tsx","../src/FileHandlers/Upload/src/upload_utils.tsx","../src/App/SecureFiles.tsx"],"sourcesContent":["import * as React from \"react\";\nfunction ClipboardIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M15.666 3.888A2.25 2.25 0 0 0 13.5 2.25h-3c-1.03 0-1.9.693-2.166 1.638m7.332 0c.055.194.084.4.084.612v0a.75.75 0 0 1-.75.75H9a.75.75 0 0 1-.75-.75v0c0-.212.03-.418.084-.612m7.332 0c.646.049 1.288.11 1.927.184 1.1.128 1.907 1.077 1.907 2.185V19.5a2.25 2.25 0 0 1-2.25 2.25H6.75A2.25 2.25 0 0 1 4.5 19.5V6.257c0-1.108.806-2.057 1.907-2.185a48.208 48.208 0 0 1 1.927-.184\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(ClipboardIcon);\nexport default ForwardRef;","import * as React from \"react\";\nfunction CloudArrowUpIcon({\n title,\n titleId,\n ...props\n}, svgRef) {\n return /*#__PURE__*/React.createElement(\"svg\", Object.assign({\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n strokeWidth: 1.5,\n stroke: \"currentColor\",\n \"aria-hidden\": \"true\",\n \"data-slot\": \"icon\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n d: \"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\"\n }));\n}\nconst ForwardRef = /*#__PURE__*/ React.forwardRef(CloudArrowUpIcon);\nexport default ForwardRef;","import React from 'react';\n\nexport type String = string | undefined | null; \nexport type Astring = any[] | string | undefined | null; \nexport type Trailing = React.ReactNode\nexport type ImportElem = {\n reaxlEle?:React.InputHTMLAttributes<HTMLInputElement>;\n label?: String;\n checked?:boolean;\n type?:string;\n onChange?: any;\n value?: any;\n trailing?:Trailing;\n className?: String; \n classNames?:Astring;\n disabled?: any;\n placeholder?: any;\n error?: string;\n min?:any,\n readOnly?:boolean\n}\n\n// Utility to convert input to array\nfunction ensure_list(obj: Astring | null | undefined): string[] {\n if (Array.isArray(obj)) return obj.filter(Boolean);\n if (typeof obj === 'string') return obj.split(' ').filter(Boolean);\n return [];\n}\n\n// Get list and length safely\nfunction getListAndLen(obj: Astring | null | undefined): { return_obj: string[]; ob_len: number } {\n const return_obj = ensure_list(obj);\n const ob_len = return_obj.length;\n return { return_obj, ob_len };\n}\n\n// Combine class names with defaults\nfunction combineClassNames(classNames: Astring = [], defaultClasses: Astring = ['form-group', 'form-label', 'flex', 'gap-2']): string[] {\n const { return_obj: inputClasses } = getListAndLen(classNames);\n const { return_obj: defaultClassList } = getListAndLen(defaultClasses);\n \n // Combine and remove duplicates\n const combined = [...new Set([...defaultClassList, ...inputClasses])];\n \n console.log(`Combined classes (length: ${combined.length}): ${combined.join(' ')}`);\n return combined;\n}\n\nexport function Button({\n children,\n color = 'gray',\n variant = 'default',\n className = '',\n ...rest\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & {\n color?: 'gray' | 'green' | 'blue';\n variant?: 'default' | 'icon' | 'primary' | 'secondary';\n className?: string;\n}) {\n const variantClasses = {\n default: 'btn',\n icon: 'btn-icon',\n primary: 'btn-primary',\n secondary: 'btn-secondary',\n };\n\n const colorClasses = {\n gray: '',\n green: variant === 'primary' ? 'btn-success' : 'btn-secondary',\n blue: variant === 'primary' ? 'btn-primary' : 'btn-secondary',\n };\n\n const classes = combineClassNames([variantClasses[variant], colorClasses[color], className]);\n \n return (\n <button className={classes.join(' ')} {...rest}>\n {children}\n </button>\n );\n}\n\nexport function Checkbox({\n label,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['checkbox', 'wm-checkbox']);\n \n return (\n <label className={classes.join(' ')}>\n <input type=\"checkbox\" className=\"wm-checkbox\" {...rest} />\n {label && <span>{label}</span>}\n </label>\n );\n}\n\nexport function Input({\n label,\n trailing,\n className = '',\n classNames = [],\n ...rest\n}: ImportElem) {\n const classes = combineClassNames(classNames, ['form-group', 'flex', 'gap-2']);\n const inputClasses = combineClassNames(className, ['form-input']);\n \n return (\n <label className={classes.join(' ')}>\n {label && <span className=\"form-label\">{label}</span>}\n <div className=\"flex gap-2\">\n <input className={inputClasses.join(' ')} {...rest} />\n {trailing}\n </div>\n </label>\n );\n}\n\nexport function Spinner() {\n const classes = combineClassNames('animate-pulse');\n return <p className={classes.join(' ')}>Loading…</p>;\n}","/** Helper function to trigger file download */\nexport function triggerDownload(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = Object.assign(document.createElement(\"a\"), {\n href: url,\n download: filename,\n });\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n\n console.log(`✅ Successfully downloaded: ${filename}`);\n}\n","import {triggerDownload} from './trigger_download';\nimport {FileItem} from './../imports';\n/** Non-React “direct download” used by some old links (kept for parity) */\nexport async function directDownload(item: FileItem): Promise<void> {\n const token = localStorage.getItem(\"token\");\n if (!token) throw new Error(\"No auth token found\");\n\n const res = await fetch(\"https://abstractendeavors.com/api/secure-files/secure-download/\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/octet-stream\",\n },\n\n body: JSON.stringify(item),\n });\n\n if (!res.ok) throw new Error(`Download failed: ${res.status}`);\n const blob = await res.blob();\n triggerDownload(blob, item.filename);\n}\n","import type { FileItem } from './../imports';\nimport { triggerDownload } from './trigger_download';\n\n/**\n * Download a file using the current session cookie.\n * No JWT / localStorage token required.\n */\nexport async function downloadFile(item: FileItem): Promise<void> {\n const res = await fetch(\"/api/secure-files/download\", {\n method: \"POST\",\n credentials: \"include\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n id: item.id,\n filepath: item.filepath,\n filename: item.filename,\n }),\n });\n\n if (res.status === 401) throw new Error(\"Not authenticated – please log in.\");\n if (!res.ok) throw new Error(`Download failed: HTTP ${res.status}`);\n\n const blob = await res.blob();\n triggerDownload(blob, item.filename || \"download\");\n}\n","/**\n * Cookie-authenticated API helpers.\n * All requests include credentials: 'include' so the browser sends the\n * session cookie (auth_session) automatically. No JWT tokens are used.\n *\n * API base URL resolution order (first truthy value wins):\n * 1. window.__SECURE_FILES_API_BASE__ – runtime override (any bundler)\n * 2. VITE_SECURE_FILES_API_BASE – Vite env var\n * 3. REACT_APP_SECURE_FILES_API_BASE – Create React App env var\n * 4. /api/secure-files – same-origin default\n *\n * Subdomain API example (set one of the above to the full origin + path):\n * VITE_SECURE_FILES_API_BASE=https://api.example.com/secure-files\n */\n\nfunction resolveApiBase(): string {\n // 1. Runtime window config — works regardless of bundler\n if (typeof window !== \"undefined\" && (window as any).__SECURE_FILES_API_BASE__) {\n return String((window as any).__SECURE_FILES_API_BASE__).replace(/\\/+$/, \"\");\n }\n // 2. Vite (import.meta.env is replaced at build time; guard with try for non-Vite builds)\n try {\n const v = (import.meta as any).env?.VITE_SECURE_FILES_API_BASE;\n if (v) return String(v).replace(/\\/+$/, \"\");\n } catch { /* not a Vite build */ }\n // 3. Create React App / plain Node\n try {\n const v = (process as any).env?.REACT_APP_SECURE_FILES_API_BASE;\n if (v) return String(v).replace(/\\/+$/, \"\");\n } catch { /* process not defined */ }\n // 4. Same-origin default\n return \"/api/secure-files\";\n}\n\nconst API_BASE = resolveApiBase();\n\nfunction apiUrl(path: string): string {\n const p = path.startsWith(\"/\") ? path : `/${path}`;\n return `${API_BASE}${p}`;\n}\n\n/**\n * Generic JSON fetch with session-cookie auth.\n * Throws Error(\"UNAUTHENTICATED\") on 401 so callers can redirect to login.\n */\nexport async function cookieFetch<T = unknown>(\n path: string,\n body?: unknown,\n method?: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\",\n): Promise<T> {\n const m = method ?? (body !== undefined ? \"POST\" : \"GET\");\n const init: RequestInit = { method: m, credentials: \"include\" };\n\n if (body !== undefined && body !== null) {\n init.headers = { \"Content-Type\": \"application/json\" };\n init.body = JSON.stringify(body);\n }\n\n const res = await fetch(apiUrl(path), init);\n if (res.status === 401) throw new Error(\"UNAUTHENTICATED\");\n if (!res.ok) {\n const msg = await res.text().catch(() => res.statusText);\n throw new Error(`HTTP ${res.status}: ${msg}`);\n }\n\n const ct = res.headers.get(\"Content-Type\") ?? \"\";\n return (ct.includes(\"application/json\") ? res.json() : res.text()) as Promise<T>;\n}\n\n/**\n * Check whether the current session is valid.\n * Calls /userInfo which requires authentication; returns true if the user\n * is logged in, false otherwise (no exception thrown).\n */\nexport async function checkAuth(): Promise<boolean> {\n try {\n const res = await fetch(apiUrl(\"/userInfo\"), {\n method: \"GET\",\n credentials: \"include\",\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Upload a single file using multipart/form-data with session-cookie auth.\n * @param file The File object to upload.\n * @param relPath Optional relative path within the user's directory.\n */\nexport async function cookieUpload(file: File, relPath = \"\"): Promise<unknown> {\n const form = new FormData();\n form.append(\"file\", file);\n if (relPath) form.append(\"rel_path\", relPath);\n\n const res = await fetch(apiUrl(\"/upload\"), {\n method: \"POST\",\n credentials: \"include\",\n body: form,\n });\n\n if (res.status === 401) throw new Error(\"UNAUTHENTICATED\");\n if (!res.ok) throw new Error(`Upload failed: HTTP ${res.status}`);\n return res.json();\n}\n\n/** The resolved API base URL, exported for debugging / display purposes. */\nexport const SECURE_FILES_API_BASE = API_BASE;\n","import type { FileItem } from './../imports';\nimport { triggerDownload } from './trigger_download';\nimport { SECURE_FILES_API_BASE } from './../../cookieFetch';\n\nexport async function downloadSelect(item: FileItem): Promise<void> {\n const res = await fetch(`${SECURE_FILES_API_BASE}/download`, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/octet-stream\",\n },\n body: JSON.stringify(item),\n });\n\n if (res.status === 401) throw new Error(\"Not authenticated – please log in.\");\n if (!res.ok) throw new Error(`Download failed: HTTP ${res.status}`);\n\n const blob = await res.blob();\n if (!blob || blob.size === 0) {\n throw new Error(`Received empty file data for \"${item.filename}\"`);\n }\n\n triggerDownload(blob, item.filename);\n}","import {downloadSelect} from './download_select';\nimport type {FileItem} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function downloadRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n const filepath = cb.value;\n const filename = row?.children[1]?.textContent?.trim() || \"downloaded_file\";\n if (filepath) await downloadSelect({filepath,filename} as any);\n}\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function downloadSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n await downloadRow(cb);\n }\n}\n","/**\n * Classic “select all rows” logic (still handy in non-React views\n * such as the admin dashboard).\n */\nexport function syncHeaderCheckbox(): void {\n const all = document.querySelectorAll<HTMLInputElement>(\".file-checkbox\");\n const checked = document.querySelectorAll<HTMLInputElement>(\n \".file-checkbox:checked\"\n );\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n\n header.indeterminate =\n checked.length > 0 && checked.length < all.length;\n header.checked = checked.length === all.length;\n}\n\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Wire up header + row checkboxes once the table is in the DOM. */\nexport function initSelectAll(): void {\n const header = document.getElementById(\n \"select-all-checkbox\"\n ) as HTMLInputElement;\n const btn = document.getElementById(\"select-all\") as HTMLButtonElement;\n\n // 1) header → toggle all\n header.addEventListener(\"change\", (e) => {\n const on = (e.target as HTMLInputElement).checked;\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => (cb.checked = on));\n });\n\n // 2) button → toggle all\n btn.addEventListener(\"click\", () => {\n const cbs = Array.from(\n document.querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n );\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n });\n\n // 3) row boxes → keep header state\n document\n .querySelectorAll<HTMLInputElement>(\".file-checkbox\")\n .forEach((cb) => cb.addEventListener(\"change\", syncHeaderCheckbox));\n\n syncHeaderCheckbox();\n}\n","import {syncHeaderCheckbox} from './sync_header_checkbox';\n/** Utility for other screens: toggle a list of checkboxes on/off. */\nexport function toggleCheckboxes(cbs: HTMLInputElement[]): void {\n if (!cbs.length) {\n alert(\"No files to select.\");\n return;\n }\n const anyUnchecked = cbs.some((cb) => !cb.checked);\n cbs.forEach((cb) => (cb.checked = anyUnchecked));\n syncHeaderCheckbox();\n}\n","const API_BASE = '/api/secure-files';\n\n/** Generic PATCH helper for file-level admin settings. */\nexport async function patchFileSetting(\n fileId: string,\n field: string,\n value: unknown,\n): Promise<Record<string, unknown>> {\n const res = await fetch(`${API_BASE}/files/${fileId}/settings/${field}`, {\n method: 'PATCH',\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ value }),\n });\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error((err as any).error || res.statusText);\n }\n return (await res.json()) as Record<string, unknown>;\n}\n","import { cookieUpload } from './../../cookieFetch';\n\n/** File-upload helper (used by non-React fallback pages). */\nexport async function uploadFile(file: any, subdir: any): Promise<any> {\n const fileInput = file || document.getElementById('file-browser') as HTMLInputElement;\n const subdirInput = subdir || document.getElementById('subdir') as HTMLInputElement;\n const banner = document.getElementById('banner') as HTMLElement;\n\n if (!fileInput.files?.length) {\n alert('No file selected.');\n return;\n }\n\n const f = fileInput.files[0];\n const dir = (subdirInput?.value ?? '').trim();\n const relPath = dir ? `${dir}/${f.name}` : f.name;\n\n try {\n const json = await cookieUpload(f, relPath) as { filepath: string };\n if (banner) banner.textContent = `Uploaded: ${json.filepath}`;\n fileInput.value = '';\n if (subdirInput) subdirInput.value = '';\n window.location.reload();\n } catch (err: any) {\n console.error('Upload failed', err);\n }\n}\n","import { cookieUpload } from './../../cookieFetch';\n\ninterface UploadResponse {\n filepath: string;\n}\n\nexport async function uploadFiles(\n file: File,\n subdir: string = '',\n): Promise<UploadResponse> {\n if (!(file instanceof File)) throw new Error('Invalid file: must be a File object.');\n if (typeof subdir !== 'string') throw new Error('Invalid subdir: must be a string.');\n\n const relPath = subdir.trim() ? `${subdir.trim()}/${file.name}` : file.name;\n const json = await cookieUpload(file, relPath) as { filepath?: string };\n\n if (!json?.filepath) throw new Error('Server response missing filepath.');\n return { filepath: json.filepath };\n}\n","import { cookieFetch } from '../../cookieFetch';\n\nexport async function removeFile(\n item: { id?: number | string; filename?: string },\n): Promise<void> {\n const resp = await cookieFetch<unknown>(\"remove\", { id: item.id }, \"POST\");\n if (!resp || (resp as any) === false || (resp as any)?.result === false) {\n throw new Error(`Could not delete \"${item.filename ?? item.id}\"`);\n }\n}\n","import {removeFile} from './delete_select';\n\n\n/** Bulk download: pass a NodeList or array of checkboxes. */\nexport async function removeSelected(checkboxes: Iterable<HTMLInputElement>): Promise<void> {\n const list = Array.from(checkboxes);\n if (!list.length) {\n alert(\"No files selected.\");\n return;\n }\n for (const cb of list) {\n alert(cb);\n await removeFile(cb);\n }\n}","\nimport {removeFile} from './delete_select'\nimport {alertit} from './../imports'\n/** Given a checkbox inside a table-row → download that row’s file. */\nexport async function removeRow(cb: HTMLInputElement): Promise<void> {\n const row = cb.closest(\"tr\") as HTMLTableRowElement | null;\n alertit(row)\n if (row && row?.id) await removeFile(row);\n}\n\n\n","import { cookieFetch } from './../../cookieFetch';\nimport type { ApiRow, FileItem } from './../imports';\n\nexport async function listFiles(\n setFiles: ((rows: FileItem[]) => void) | null = null,\n): Promise<FileItem[]> {\n const result = await cookieFetch<ApiRow[] | { result: ApiRow[] }>(\"list\", undefined, \"GET\");\n const apiRows: ApiRow[] = Array.isArray(result)\n ? result\n : ((result as any)?.result ?? []);\n\n const rows: FileItem[] = apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n }));\n\n if (setFiles) setFiles(rows);\n return rows;\n}\n","import { cookieFetch } from './../../cookieFetch';\nimport type { FileItem } from './../imports';\n\n/**\n * Toggle sharing on a file.\n * Sends the updated settings to /api/secure-files/files/share.\n * Does NOT update local state – the caller is responsible for that.\n */\nexport async function toggleShare(file: FileItem): Promise<void> {\n const updated: FileItem = { ...file, shareable: !file.shareable };\n if (!updated.shareable) updated.needsPassword = false;\n\n await cookieFetch(\"files/share\", {\n id: updated.id,\n shareable: updated.shareable,\n share_password: updated.share_password ?? null,\n password_str: updated.password_str ?? null,\n download_limit: updated.download_limit ?? null,\n }, \"POST\");\n}\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport type { FileItem, ApiRow } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\n\nexport const useLoadFiles = (\n setLoading: React.Dispatch<React.SetStateAction<boolean>>,\n setError: React.Dispatch<React.SetStateAction<Error | null>>,\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>,\n) => {\n return useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await cookieFetch<ApiRow[] | { result: ApiRow[] }>(\"list\", undefined, \"GET\");\n const apiRows: ApiRow[] = Array.isArray(result)\n ? result\n : ((result as any)?.result ?? []);\n\n setFiles(apiRows.map((r: ApiRow) => ({\n id: r.id,\n filename: r.filename,\n uploader_id: r.uploader_id,\n filepath: r.filepath,\n created_at: r.created_at,\n download_count: r.download_count,\n download_limit: r.download_limit,\n shareable: Boolean(r.shareable),\n needsPassword: !!r.share_password,\n share_password: r.share_password,\n password_str: r.password_str,\n })));\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to load files'));\n } finally {\n setLoading(false);\n }\n }, [setLoading, setError, setFiles]);\n};\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport type { FileItem } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\n\nexport const useToggleShare = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>,\n) => {\n return useCallback(\n async (file: FileItem) => {\n const updated: FileItem = { ...file, shareable: !file.shareable };\n if (!updated.shareable) updated.needsPassword = false;\n try {\n await cookieFetch(\"files/share\", {\n id: updated.id,\n shareable: updated.shareable,\n share_password: updated.share_password ?? null,\n password_str: updated.password_str ?? null,\n download_limit: updated.download_limit ?? null,\n }, \"POST\");\n setFiles(curr => curr.map(f => f.id === file.id ? updated : f));\n } catch (err) {\n console.error('Failed to toggle share:', err);\n }\n },\n [setFiles],\n );\n};\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\n\nexport const usePatchShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<any[]>>,\n) => {\n return useCallback(\n async (file: any) => {\n const body = {\n id: file.id,\n shareable: file.shareable,\n share_password: file.share_password ?? null,\n password_str: file.password_str ?? null,\n download_limit: file.download_limit ?? null,\n };\n try {\n await cookieFetch(\"files/share\", body, \"POST\");\n setFiles(curr => curr.map(f => f.id === body.id ? { ...f, ...body } : f));\n } catch (err) {\n console.error('Failed to update share settings:', err);\n }\n },\n [setFiles],\n );\n};\nexport default usePatchShareSettings;\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\n\n/**\n * Hook alias used by useFiles.ts. Patches share settings via the session-cookie\n * authenticated /files/share endpoint.\n */\nexport const useSaveShareSettings = (\n setFiles: React.Dispatch<React.SetStateAction<any[]>>,\n) => {\n return useCallback(\n async (file: any) => {\n const body = {\n id: file.id,\n shareable: file.shareable,\n share_password: file.share_password ?? null,\n password_str: file.password_str ?? null,\n download_limit: file.download_limit ?? null,\n };\n try {\n await cookieFetch(\"files/share\", body, \"POST\");\n setFiles(curr => curr.map(f => f.id === body.id ? { ...f, ...body } : f));\n } catch (err) {\n console.error('Failed to save share settings:', err);\n }\n },\n [setFiles],\n );\n};\nexport default useSaveShareSettings;\n","import React from 'react';\nimport { useCallback } from './../imports';\nimport type { FileItem } from './../imports';\nimport { cookieFetch } from '../../../file_utils/src/cookieFetch';\n\nexport const useDeleteFile = (\n setFiles: React.Dispatch<React.SetStateAction<FileItem[]>>,\n) => {\n return useCallback(\n async (file: FileItem | FileItem[]) => {\n const targets = Array.isArray(file) ? file : [file];\n for (const f of targets) {\n try {\n await cookieFetch(\"remove\", { id: f.id }, \"POST\");\n setFiles(curr => curr.filter(item => item.id !== f.id));\n } catch (err) {\n console.error(`Failed to delete \"${f.filename}\":`, err);\n }\n }\n },\n [setFiles],\n );\n};\n","import { useState, useEffect } from 'react';\nimport type {FileItem} from './../imports';\nimport { useLoadFiles } from './load';\nimport { useToggleShare } from './toggleShare';\nimport {useSaveShareSettings} from './useSaveShareSettings';\nimport { useDeleteFile } from './deleteFile';\n\nexport function useFiles() {\n const [files, setFiles] = useState<FileItem[]>([]);\n const [loading, setLoading] = useState<boolean>(false);\n const [error, setError] = useState<Error | null>(null);\n\n const loadCallback = useLoadFiles(setLoading, setError, setFiles);\n const toggleShareCallback = useToggleShare(setFiles);\n const patchShareSettingsCallback = useSaveShareSettings(setFiles);\n const deleteFileCallback = useDeleteFile(setFiles);\n\n useEffect(() => {\n loadCallback();\n }, [loadCallback]);\n\n return {\n files,\n loading,\n error,\n load: loadCallback,\n toggleShare: toggleShareCallback,\n patchShareSettings: patchShareSettingsCallback,\n deleteFile: deleteFileCallback,\n setFiles,\n setLoading,\n setError,\n \n };\n}\n","import type { FileRowProps } from './../imports';\nimport { useState, Button, currentUsername } from './../imports';\n\nexport default function FileRow({\n file,\n onDownload,\n onSettings,\n onToggleShare,\n onDelete,\n}: FileRowProps) {\n const isOwner =\n file.uploader_id?.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const downloadAllowed = isOwner || file.shareable;\n const [isDownloading, setIsDownloading] = useState(false);\n const [isTogglingShare, setIsTogglingShare] = useState(false);\n const [isDeleting, setIsDeleting] = useState(false);\n\n // Mimic WindowManagerApp's unsaved heuristic\n const looksUnsaved =\n file.filename.toLowerCase().startsWith('untitled') ||\n file.filename.includes('*');\n\n const handleDownload = async () => {\n setIsDownloading(true);\n try {\n await onDownload();\n } finally {\n setIsDownloading(false);\n }\n };\n\n const handleToggleShare = async () => {\n setIsTogglingShare(true);\n try {\n await onToggleShare();\n } finally {\n setIsTogglingShare(false);\n }\n };\n\n const handleDeleteFile = async () => {\n setIsDeleting(true);\n try {\n await onDelete();\n } finally {\n setIsDeleting(false);\n }\n };\n\n return (\n <tr className=\"wm-row transition-colors duration-75\">\n {/* Select checkbox */}\n <td className=\"wm-cell w-12 align-middle\">\n <input\n type=\"checkbox\"\n className=\"wm-checkbox\"\n aria-label={`Select ${file.filename}`}\n />\n </td>\n\n {/* Filename */}\n <td className={`wm-cell ${looksUnsaved ? 'unsaved' : ''}`}>\n {file.filename}\n </td>\n\n {/* Download button or lock */}\n <td className=\"wm-cell w-12 align-middle\">\n {downloadAllowed ? (\n <Button\n color=\"blue\"\n variant=\"secondary\"\n onClick={handleDownload}\n disabled={isDownloading}\n aria-label={`Download ${file.filename}`}\n className=\"wm-btn-link\"\n >\n {isDownloading ? 'Downloading...' : 'Download'}\n </Button>\n ) : (\n <span\n className=\"text-gray-500 text-lg\"\n aria-label=\"Download restricted\"\n >\n 🔒\n </span>\n )}\n </td>\n\n {/* Settings cog */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={() => {\n console.log('⚙︎ clicked', file.id);\n onSettings();\n }}\n aria-label=\"Open share settings\"\n className=\"wm-btn-icon text-lg\"\n >\n ⚙️\n </Button>\n )}\n </td>\n\n {/* Share toggle */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color={file.shareable ? 'blue' : 'gray'}\n variant={file.shareable ? 'primary' : 'secondary'}\n onClick={handleToggleShare}\n disabled={isTogglingShare}\n className=\"btn\"\n >\n {isTogglingShare\n ? 'Toggling...'\n : file.shareable\n ? 'Sharing'\n : 'Share'}\n </Button>\n )}\n </td>\n\n {/* Delete button */}\n <td className=\"wm-cell w-12 align-middle\">\n {isOwner && (\n <Button\n color=\"gray\"\n variant=\"icon\"\n onClick={handleDeleteFile}\n disabled={isDeleting}\n className=\"wm-btn-icon text-lg\"\n >\n 🗑\n </Button>\n )}\n </td>\n <td className=\"wm-cell\">{file.download_count} / {file.download_limit ?? \"∞\"}</td>\n </tr>\n );\n}","import type {\n ShareModalProps\n} from './../../imports';\nimport {\n Button,\n Checkbox,\n Input,\n ClipboardIcon,\n createPortal,\n useEffect,\n useRef,\n useState,\n} from './../imports';\n\nexport default function ShareModal({ file, onClose, onSave }: ShareModalProps) {\n const [fileId, setFileId] = useState<string | number | \"\">(\"\");\n const [enabled, setEnabled] = useState<any>(false);\n const [password, setPassword] = useState<any>(undefined);\n const [strPassword, setStrPassword] = useState<any>(\"\");\n const [download_limit, setDownloadLimit] = useState<number | \"\">(0);\n const [error, setError] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const modalRef = useRef<HTMLDivElement>(null);\n\n const shareLink =\n file && enabled\n ? `/api/secure-files/secure-download/${file.id}`\n : \"\";\n\n useEffect(() => {\n if (!file) return;\n setFileId(file.id);\n setEnabled(file.shareable);\n setPassword(file.share_password);\n setStrPassword(file.password_str ?? \"\");\n setDownloadLimit(file.download_limit ?? 0);\n setError(\"\");\n\n modalRef.current?.focus();\n }, [file]);\n\n\n useEffect(() => {\n const h = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\n window.addEventListener(\"keydown\", h);\n return () => window.removeEventListener(\"keydown\", h);\n }, [onClose]);\n\n if (!file) return null;\n\n async function handleSave() {\n if (strPassword && strPassword.length < 4) {\n setError(\"Password must be at least 4 characters\");\n return;\n }\n setBusy(true);\n const save_dict = {\n id: fileId,\n shareable: enabled,\n needsPassword: !!strPassword,\n share_password: strPassword || null,\n password_str: strPassword || null,\n download_limit: download_limit === \"\" ? null : Number(download_limit),\n }\n\n try {\n const resp = await onSave(save_dict);\n\n onClose();\n } catch (err) {\n setError(`${err} Failed to save settings. Please try again.`);\n } finally {\n setBusy(false);\n }\n }\n\n return createPortal(\n <>\n <div\n className=\"modal-backdrop z-100\"\n onClick={(e) => e.target === e.currentTarget && onClose()}\n />\n <div className=\"modal-wrapper z-110\">\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className=\"modal-panel\"\n >\n <h3 className=\"form-title\">\n Share settings for <span className=\"font-mono\">{file.filename}</span>\n </h3>\n\n {error && <p className=\"form-error\">{error}</p>}\n\n <Checkbox\n label=\"Enable sharing\"\n checked={enabled}\n onChange={(e:any) => setEnabled(e.target.checked)}\n className=\"checkbox\"\n />\n\n <Input\n label=\"Password (optional)\"\n type=\"text\"\n value={strPassword}\n onChange={(e:any) => setStrPassword(e.target.value)}\n disabled={!enabled}\n className=\"form-input\"\n />\n <Input\n label=\"Download limit (0 = ∞)\"\n type=\"number\"\n min={0}\n value={download_limit}\n onChange={(e:any) =>\n setDownloadLimit(e.target.value === \"\" ? \"\" : Number(e.target.value))\n }\n disabled={!enabled}\n className=\"form-input\"\n />\n\n {enabled && shareLink && (\n <Input\n label=\"Share link\"\n readOnly\n value={shareLink}\n className=\"form-input\"\n trailing={\n <Button\n variant=\"icon\"\n className=\"btn-icon\"\n onClick={() => navigator.clipboard.writeText(shareLink)}\n >\n <ClipboardIcon className=\"h-5 w-5\" />\n </Button>\n }\n />\n )}\n\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button color=\"green\" variant=\"primary\" onClick={handleSave} disabled={busy} className=\"btn-primary\">\n {busy ? \"Saving…\" : \"Save\"}\n </Button>\n <Button variant=\"secondary\" onClick={onClose} disabled={busy} className=\"btn-secondary\">\n Cancel\n </Button>\n </div>\n </div>\n </div>\n </>,\n document.body\n );\n}\n","import type { FileItem, FileTableProps } from './../imports';\nimport React, { useState, useMemo, ChangeEvent } from 'react';\nimport {\n useFiles,\n downloadFile,\n Spinner,\n ShareModal,\n Input,\n Button,\n currentUsername\n} from './../imports';\nimport { downloadSelected } from './../../../file_utils';\n\n// Tree node type\ninterface FileNode {\n name: string;\n path: string;\n children: Map<string, FileNode>;\n files: FileItem[];\n}\n\n// Build a directory tree from a flat file list\nfunction buildTree(files: FileItem[]): FileNode {\n const root: FileNode = { name: '', path: '', children: new Map(), files: [] };\n files.forEach(file => {\n const parts = file.filepath.split('/');\n let node = root;\n parts.slice(0, -1).forEach((seg, idx) => {\n const subPath = parts.slice(0, idx + 1).join('/');\n if (!node.children.has(seg)) {\n node.children.set(seg, { name: seg, path: subPath, children: new Map(), files: [] });\n }\n node = node.children.get(seg)!;\n });\n node.files.push(file);\n });\n return root;\n}\n\n// Collect all file IDs under a node (recursive)\nfunction collectNodeIds(node: FileNode): Array<number | string> {\n let ids: Array<number | string> = [];\n node.files.forEach(f => ids.push(f.id));\n node.children.forEach(child => {\n ids = ids.concat(collectNodeIds(child));\n });\n return ids;\n}\n\nexport default function FileTable({\n files,\n loading,\n error,\n onToggleShare,\n onPatchShare,\n onDelete\n}: FileTableProps) {\n const { load } = useFiles();\n const [search, setSearch] = useState('');\n const [modalFile, setModalFile] = useState<FileItem | null>(null);\n const [selected, setSelected] = useState<Set<number | string>>(new Set());\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n\n // Upload controls\n const [uploadDir, setUploadDir] = useState<string>('');\n const [uploadFile, setUploadFile] = useState<File | null>(null);\n const handleFileChange = (e: ChangeEvent<HTMLInputElement>) => setUploadFile(e.target.files?.[0] ?? null);\n const handleUpload = async () => {\n if (!uploadFile) return;\n const form = new FormData();\n form.append('file', uploadFile);\n const dirPart = uploadDir ? `${uploadDir}/` : '';\n const url = `/api/secure-files/upload/${dirPart}${encodeURIComponent(uploadFile.name)}`;\n await fetch(url, { method: 'POST', credentials: 'include', body: form });\n setUploadFile(null);\n load();\n };\n\n // Filter files by search term\n const filtered = useMemo(\n () => files.filter(f => f.filename.toLowerCase().includes(search.trim().toLowerCase())),\n [files, search]\n );\n // Build tree and directory paths list\n const tree = useMemo(() => buildTree(filtered), [filtered]);\n const allDirPaths = useMemo(() => {\n const paths: string[] = [''];\n function collect(node: FileNode) {\n node.children.forEach(child => {\n paths.push(child.path);\n collect(child);\n });\n }\n collect(tree);\n return paths;\n }, [tree]);\n\n // Selection & expand/collapse logic\n const allIds = filtered.map(f => f.id);\n const toggleAllSelection = () => selected.size < allIds.length ? setSelected(new Set(allIds)) : setSelected(new Set());\n const toggleDirOpen = (path: string) => setExpanded(prev => {\n const next = new Set(prev);\n next.has(path) ? next.delete(path) : next.add(path);\n return next;\n });\n const expandAll = () => setExpanded(new Set(allDirPaths));\n const collapseAll = () => setExpanded(new Set());\n\n // Recursive renderer: directory row with select-all checkbox, then its files, then subdirectories\n const renderNode = (node: FileNode, depth = 0): React.ReactNode[] => {\n const rows: React.ReactNode[] = [];\n if (node.path) {\n const isOpen = expanded.has(node.path);\n const nodeIds = collectNodeIds(node);\n const allSelected = nodeIds.every(id => selected.has(id));\n const someSelected = nodeIds.some(id => selected.has(id));\n rows.push(\n <tr key={node.path}>\n {/* Directory-level checkbox */}\n <td className=\"px-4 py-2 bg-gray-100\">\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={el => { if (el) el.indeterminate = !allSelected && someSelected; }}\n onChange={() => {\n setSelected(prev => {\n const next = new Set(prev);\n if (allSelected) {\n nodeIds.forEach(id => next.delete(id));\n } else {\n nodeIds.forEach(id => next.add(id));\n }\n return next;\n });\n }}\n />\n </td>\n {/* Directory label pushed left */}\n <td className=\"px-4 py-2 bg-gray-100 font-bold\" colSpan={5} style={{ textAlign: 'left' }}>\n {node.path}\n </td>\n {/* Expand/collapse ticker on right */}\n <td className=\"px-4 py-2 bg-gray-100 text-right\">\n <button onClick={() => toggleDirOpen(node.path)}>\n {isOpen ? '▾' : '▸'}\n </button>\n </td>\n </tr>\n );\n if (!isOpen) return rows;\n }\n // Render files in this directory\n node.files.sort((a, b) => a.filename.localeCompare(b.filename)).forEach(f => {\n const isOwner = f.uploader_id.toLowerCase() === (currentUsername() ?? '').toLowerCase();\n const canDownload = isOwner || f.shareable;\n rows.push(\n <tr key={f.id}>\n <td className=\"px-4 py-2\">\n <input\n type=\"checkbox\"\n checked={selected.has(f.id)}\n onChange={() => setSelected(prev => {\n const next = new Set(prev);\n next.has(f.id) ? next.delete(f.id) : next.add(f.id);\n return next;\n })}\n />\n </td>\n <td className=\"px-4 py-2\" style={{ paddingLeft: (depth + 1) * 20 }}>\n {f.filename}\n </td>\n <td className=\"px-4 py-2\">\n {canDownload ? <Button variant=\"secondary\" onClick={() => downloadFile(f)}>Download</Button> : <span>🔒</span>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => setModalFile(f)}>⚙️</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant={f.shareable ? 'primary' : 'secondary'} onClick={() => onToggleShare(f)}>{f.shareable ? 'Sharing' : 'Share'}</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {isOwner && <Button variant=\"icon\" onClick={() => onDelete(f).then(load)}>🗑</Button>}\n </td>\n <td className=\"px-4 py-2\">\n {f.download_count} / {f.download_limit ?? '∞'}\n </td>\n </tr>\n );\n });\n // Render subdirectories\n Array.from(node.children.values())\n .sort((a, b) => a.name.localeCompare(b.name))\n .forEach(child => rows.push(...renderNode(child, depth + 1)));\n return rows;\n };\n\n // Batch actions\n const handleDownloadAll = async () => {\n const inputs = filtered.filter(f => selected.has(f.id)).map(f => document.createElement('input'));\n inputs.forEach((cb, idx) => cb.value = filtered.filter(f => selected.has(f.id))[idx].filepath);\n await downloadSelected(inputs);\n };\n const handleDeleteAll = async () => { await onDelete(filtered.filter(f => selected.has(f.id))); setSelected(new Set()); await load(); };\n const handleShareAll = async () => { for (const f of filtered.filter(f => selected.has(f.id))) await onToggleShare(f); };\n\n if (loading) return <Spinner />;\n if (error) return <p className=\"text-red-600\">{error.message}</p>;\n\n return (\n <> \n\n\n {/* Search & actions */}\n <div className=\"mb-4 flex flex-col md:flex-row md:justify-between gap-4\">\n <Input label=\"Search files\" type=\"text\" value={search} onChange={(e:any) => setSearch(e.target.value)} placeholder=\"Enter filename…\" className=\"form-input flex-1\" />\n <div className=\"flex gap-2\">\n <Button onClick={expandAll} disabled={!allDirPaths.length}>Expand All</Button>\n <Button onClick={collapseAll} disabled={!allDirPaths.length}>Collapse All</Button>\n <Button onClick={handleDownloadAll} disabled={!selected.size}>Download Selected</Button>\n <Button color=\"gray\" onClick={handleDeleteAll} disabled={!selected.size}>Delete Selected</Button>\n <Button onClick={handleShareAll} disabled={!selected.size}>Share Selected</Button>\n </div>\n </div>\n\n {/* File tree table */}\n <div className=\"overflow-x-auto wm-container\">\n <table className=\"file-table w-full\">\n <thead className=\"wm-thead\">\n <tr>\n <th className=\"px-4 py-2 w-12\"><input type=\"checkbox\" checked={selected.size === filtered.length && filtered.length > 0} onChange={toggleAllSelection} /></th>\n <th className=\"px-4 py-2\">Filename</th>\n <th className=\"px-4 py-2\">Download</th>\n <th className=\"px-4 py-2\">Settings</th>\n <th className=\"px-4 py-2\">Share</th>\n <th className=\"px-4 py-2\">Delete</th>\n <th className=\"px-4 py-2\">Downloads</th>\n </tr>\n </thead>\n <tbody>{renderNode(tree)}</tbody>\n </table>\n </div>\n\n <ShareModal file={modalFile} onClose={() => setModalFile(null)} onSave={async patch => {\n if (!modalFile) return;\n const updated: FileItem = { ...modalFile, ...patch };\n await onPatchShare(updated);\n setModalFile(null);\n }} />\n </>\n );\n}\n","import React, {\n ChangeEvent,\n useRef,\n useState,\n useCallback,\n useEffect,\n} from 'react';\nimport {\n CloudArrowUpIcon,\n Button,\n uploadFiles,\n useFiles,\n currentUsername\n} from './../imports';\nimport type { QueuedFile, UploadProps } from './../imports';\n\n// ── helpers ─────────────────────────────────────────────────────────────────\n\n/** Strip filename from a webkitRelativePath, keep the trailing slash. */\nfunction deriveRelPath(f: File): string {\n const wrp = (f as any).webkitRelativePath as string | undefined;\n if (!wrp) return '';\n const idx = wrp.lastIndexOf('/');\n return idx >= 0 ? wrp.slice(0, idx + 1) : '';\n}\n\n/**\n * Drain a DirectoryReader completely. The browser only returns ~100 entries\n * per readEntries() call; you must call it repeatedly until it returns [].\n */\nfunction readAllEntries(reader: any): Promise<any[]> {\n return new Promise((resolve, reject) => {\n const all: any[] = [];\n const pump = () => {\n reader.readEntries(\n (batch: any[]) => {\n if (batch.length === 0) resolve(all);\n else { all.push(...batch); pump(); }\n },\n reject,\n );\n };\n pump();\n });\n}\n\n// ── component ───────────────────────────────────────────────────────────────\n\nexport default function Upload({ onUploaded }: UploadProps) {\n const [queue, setQueue] = useState<QueuedFile[]>([]);\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const [drag, setDrag] = useState(false);\n\n // Two refs: one for plain file picking, one for folder picking.\n const fileInputRef = useRef<HTMLInputElement>(null);\n const dirInputRef = useRef<HTMLInputElement>(null);\n const [pickMode, setPickMode] = useState<'files' | 'folder'>('files');\n\n const [dirs, setDirs] = useState<string[]>([]);\n\n // — existing files → directory list —\n const { files, load } = useFiles();\n\n useEffect(() => {\n const dirSet = new Set<string>();\n files.forEach(f => {\n const parts = f.filepath.split('/');\n if (parts.length > 1) {\n parts.pop();\n dirSet.add(parts.join('/') + '/');\n }\n });\n setDirs(Array.from(dirSet).sort());\n }, [files]);\n\n // — directory selection state —\n const [uploadDir, setUploadDir] = useState<string>('');\n const [creatingNew, setCreatingNew] = useState(false);\n const [newDirName, setNewDirName] = useState('');\n\n // — queue logic —\n const enqueue = useCallback((incoming: QueuedFile[]) => {\n setQueue(prev => {\n const map = new Map(prev.map(q => [`${q.file.name}-${q.file.size}`, q]));\n incoming.forEach(q => map.set(`${q.file.name}-${q.file.size}`, q));\n return Array.from(map.values());\n });\n }, []);\n\n const extractFromDataTransfer = useCallback(\n async (dt: DataTransfer): Promise<QueuedFile[]> => {\n const items = Array.from(dt.items ?? []);\n const hasEntryApi =\n items.length > 0 &&\n typeof (items[0] as any).webkitGetAsEntry === 'function';\n\n // Fallback: no entry API → flat files only, no folder traversal.\n if (!hasEntryApi) {\n return Array.from(dt.files ?? []).map(file => ({\n file,\n relPath: '',\n progress: 0,\n }));\n }\n\n const out: QueuedFile[] = [];\n\n const walk = async (entry: any, path = ''): Promise<void> => {\n if (!entry) return;\n if (entry.isFile) {\n const file: File = await new Promise((res, rej) =>\n entry.file(res, rej),\n );\n out.push({ file, relPath: path, progress: 0 });\n return;\n }\n if (entry.isDirectory) {\n const reader = entry.createReader();\n const entries = await readAllEntries(reader);\n await Promise.all(\n entries.map(e => walk(e, `${path}${entry.name}/`)),\n );\n }\n };\n\n await Promise.all(\n items.map(i => walk((i as any).webkitGetAsEntry?.())),\n );\n return out;\n },\n []\n );\n\n const handleSelect = (e: ChangeEvent<HTMLInputElement>) => {\n const picked = Array.from(e.target.files ?? []);\n const queued: QueuedFile[] = picked.map(f => ({\n file: f,\n relPath: deriveRelPath(f),\n progress: 0,\n }));\n enqueue(queued);\n e.target.value = '';\n };\n\n const handleDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const dropped = await extractFromDataTransfer(e.dataTransfer);\n if (dropped.length) enqueue(dropped);\n setDrag(false);\n };\n\n const openPicker = (e: React.MouseEvent) => {\n // Only fire when the dropzone background itself is clicked, not children.\n if (e.target !== e.currentTarget && !(e.target as HTMLElement).closest('[data-dz-passthrough]')) {\n // children opt in via data-dz-passthrough if they should still open the picker\n }\n const ref = pickMode === 'folder' ? dirInputRef : fileInputRef;\n ref.current?.click();\n };\n\n const handleUploadAll = async () => {\n if (!queue.length) {\n setMessage('No files queued.');\n return;\n }\n setBusy(true);\n setMessage(null);\n const targetDir = creatingNew\n ? (newDirName.trim().replace(/^\\/+|\\/+$/g, '') + '/')\n : uploadDir;\n try {\n for (const { file, relPath } of queue) {\n await uploadFiles(file, targetDir + relPath);\n setQueue(cur =>\n cur.map(item =>\n item.file === file ? { ...item, progress: 100 } : item\n )\n );\n }\n setQueue([]);\n await onUploaded(); // SecureFiles passes filesHook.load here\n setMessage('Upload complete');\n // (removed the duplicate load() — onUploaded already does it)\n } catch {\n setMessage('Upload failed');\n } finally {\n setBusy(false);\n }\n };\n\n // — directory selector handlers —\n const handleDirChange = (e: ChangeEvent<HTMLSelectElement>) => {\n const v = e.target.value;\n if (v === '__new__') {\n setCreatingNew(true);\n setNewDirName('');\n } else {\n setCreatingNew(false);\n setUploadDir(v);\n }\n };\n const acceptNewDir = () => {\n const cleanName = newDirName.trim().replace(/^\\/+|\\/+$/g, '');\n if (!cleanName) {\n setCreatingNew(false);\n return;\n }\n const normalized = `${uploadDir}${cleanName}/`;\n setDirs(prev => prev.includes(normalized) ? prev : [...prev, normalized].sort());\n setUploadDir(normalized);\n setCreatingNew(false);\n setNewDirName('');\n };\n\n return (\n <div className=\"form-container max-w-2xl mx-auto\">\n {/* pick-mode toggle */}\n <div className=\"flex gap-4 text-xs text-gray-700 mb-1\">\n <label className=\"flex items-center gap-1\">\n <input\n type=\"radio\"\n name=\"pick-mode\"\n checked={pickMode === 'files'}\n onChange={() => setPickMode('files')}\n />\n Files\n </label>\n <label className=\"flex items-center gap-1\">\n <input\n type=\"radio\"\n name=\"pick-mode\"\n checked={pickMode === 'folder'}\n onChange={() => setPickMode('folder')}\n />\n Folder\n </label>\n <span className=\"text-gray-400\">\n (drag-and-drop accepts either)\n </span>\n </div>\n\n {/* drop area */}\n <div\n className={`flex items-center border-2 border-dashed rounded-lg p-6 bg-white shadow-md space-x-4 transition-shadow duration-150\n ${drag ? 'border-indigo-500 bg-indigo-50 shadow-lg' : 'border-gray-300 hover:shadow-lg'}`}\n onClick={openPicker}\n onDragEnter={e => { e.preventDefault(); e.stopPropagation(); setDrag(true); }}\n onDragOver={e => { e.preventDefault(); e.stopPropagation(); }}\n onDragLeave={e => { e.preventDefault(); e.stopPropagation(); setDrag(false); }}\n onDrop={handleDrop}\n role=\"region\"\n aria-label=\"File upload area\"\n >\n <CloudArrowUpIcon\n style={{ width: 300, height: 300 }}\n className=\"text-gray-500 mb-3\"\n aria-hidden=\"true\"\n />\n <div className=\"flex-1\">\n <p className=\"text-base font-semibold text-gray-700\">\n Drag & drop files or folders here\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n Click to {pickMode === 'folder' ? 'choose a folder' : 'choose files'}\n </p>\n {queue.length > 0 && (\n <p className=\"mt-1 text-sm text-gray-600\">\n {queue.length} item{queue.length > 1 && 's'} queued\n </p>\n )}\n </div>\n </div>\n\n {/* hidden file input — plain multi-file pick, works everywhere */}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={handleSelect}\n />\n\n {/* hidden directory input — Chromium, Safari 11.1+, Firefox 50+ */}\n <input\n ref={dirInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n // non-standard attributes; both forms keep older Firefox happy\n {...({ webkitdirectory: '', directory: '' } as any)}\n onChange={handleSelect}\n />\n\n {/* bottom controls */}\n <div className=\"flex items-center justify-between mt-4\">\n <div className=\"flex-1 mr-4\">\n {!creatingNew ? (\n <select\n value={uploadDir}\n onChange={handleDirChange}\n className=\"form-select w-full\"\n >\n {dirs.map(d => (\n <option key={d} value={d}>{d}</option>\n ))}\n <option value=\"__new__\">+ Create new directory…</option>\n </select>\n ) : (\n <div className=\"flex\">\n <input\n type=\"text\"\n value={newDirName}\n placeholder=\"new-folder-name\"\n onChange={e => setNewDirName(e.target.value)}\n onBlur={acceptNewDir}\n onKeyDown={e => e.key === 'Enter' && acceptNewDir()}\n className=\"form-input flex-1\"\n />\n <Button onClick={acceptNewDir} className=\"ml-2\">\n OK\n </Button>\n </div>\n )}\n </div>\n\n <Button\n color=\"blue\"\n variant=\"primary\"\n onClick={handleUploadAll}\n disabled={busy || !queue.length}\n >\n {busy ? 'Uploading…' : `Upload ${queue.length}`}\n </Button>\n </div>\n\n {message && (\n <p\n className={`text-center text-sm ${message.includes('failed') ? 'text-red-600' : 'text-gray-600'}`}\n role=\"alert\"\n >\n {message}\n </p>\n )}\n\n {queue.length > 0 && (\n <div className=\"wm-container mt-4\">\n <h3 className=\"mb-2 text-sm font-semibold text-gray-700\">Queued Files</h3>\n <ul className=\"max-h-64 space-y-4 overflow-y-auto\">\n {queue.map(({ file, relPath, progress }) => (\n <li key={`${file.name}-${file.size}`} className=\"space-y-1\">\n <div className=\"flex justify-between items-center\">\n <span className=\"truncate text-sm text-gray-800\">\n {relPath}{file.name}\n </span>\n <span className=\"text-xs text-gray-500\">{progress}%</span>\n </div>\n <div className=\"w-full bg-gray-200 rounded-full h-2 overflow-hidden\">\n <div className=\"bg-indigo-600 h-2\" style={{ width: `${progress}%` }} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n}","import './../styles/SecureFiles/index.css';\nimport React, { useEffect, useState } from 'react';\nimport { FileTable, Upload } from './../FileHandlers';\nimport { useFiles } from './../hooks';\nimport { checkAuth } from '../file_utils/src/cookieFetch';\n\nconst SecureFiles: React.FC = () => {\n const [authChecked, setAuthChecked] = useState(false);\n const [loggedIn, setLoggedIn] = useState(false);\n const filesHook = useFiles();\n\n useEffect(() => {\n checkAuth().then(ok => {\n setLoggedIn(ok);\n setAuthChecked(true);\n });\n }, []);\n\n if (!authChecked) return null;\n\n if (!loggedIn) {\n return (\n <p style={{ textAlign: 'center', marginTop: '2rem', color: '#6b7280' }}>\n Please log in to access your files.\n </p>\n );\n }\n\n return (\n <>\n <Upload onUploaded={filesHook.load} />\n <FileTable\n files={filesHook.files}\n loading={filesHook.loading}\n error={filesHook.error}\n onDownload={filesHook.toggleShare}\n onToggleShare={filesHook.toggleShare}\n onPatchShare={filesHook.patchShareSettings}\n onDelete={filesHook.deleteFile}\n />\n </>\n );\n};\n\nexport default SecureFiles;\n"],"names":["ForwardRef","_jsx","_jsxs","API_BASE","_Fragment","ClipboardIcon","CloudArrowUpIcon"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/api.ts","../src/FolderSelect.tsx","../src/UploadPanel.tsx","../src/CopyButton.tsx","../src/ShareDialog.tsx","../src/ConfirmButton.tsx","../src/ServerFiles.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/SecureFiles.tsx"],"sourcesContent":["import type { BrowseResult, LinkRoot, RootChallenge, SecureFile, ShareUpdate } from \"./types\";\n\nexport const DEFAULT_API_BASE = \"https://api.abstractendeavors.com\";\n\nexport class ApiError extends Error {\n constructor(message: string, public status: number) {\n super(message);\n }\n}\n\nasync function errorFrom(res: Response): Promise<ApiError> {\n let message = `${res.status} ${res.statusText}`;\n try {\n const body = await res.json();\n message = body?.message || body?.error || message;\n } catch {\n /* non-JSON error body */\n }\n if (res.status === 401) message = \"Please log in to use Secure Files.\";\n return new ApiError(message, res.status);\n}\n\nexport function createApi(apiBase: string = DEFAULT_API_BASE) {\n const root = `${apiBase.replace(/\\/+$/, \"\")}/secure-files`;\n\n async function json<T>(path: string, init: RequestInit = {}): Promise<T> {\n const res = await fetch(`${root}${path}`, {\n credentials: \"include\",\n ...init,\n headers: { Accept: \"application/json\", ...(init.body ? { \"Content-Type\": \"application/json\" } : {}) },\n });\n if (!res.ok) throw await errorFrom(res);\n return res.json();\n }\n\n return {\n list: () => json<{ user_name: string; is_admin: boolean; files: SecureFile[] }>(\"/userInfo\"),\n\n roots: () => json<{ roots: LinkRoot[] }>(\"/admin/roots\"),\n\n requestRoot: (path: string) =>\n json<{ challenge: RootChallenge }>(\"/admin/roots\", { method: \"POST\", body: JSON.stringify({ path }) }),\n\n confirmRoot: (nonce: string, signature: string, label?: string) =>\n json<{ roots: LinkRoot[] }>(\"/admin/roots/confirm\", {\n method: \"POST\",\n body: JSON.stringify({ nonce, signature, label }),\n }),\n\n removeRoot: (id: number) => json<{ roots: LinkRoot[] }>(`/admin/roots/${id}`, { method: \"DELETE\" }),\n\n browse: (path: string) => json<BrowseResult>(`/admin/browse?path=${encodeURIComponent(path)}`),\n\n link: (paths: string[], folder: string) =>\n json<{ linked: string[]; errors: { path: string; error: string }[] }>(\"/admin/link\", {\n method: \"POST\",\n body: JSON.stringify({ paths, folder }),\n }),\n\n updateShare: (update: ShareUpdate) =>\n json<{ file: SecureFile }>(\"/files/share\", { method: \"PATCH\", body: JSON.stringify(update) }),\n\n remove: (ids: number[]) =>\n json<{ removed: number[]; errors: { id: number; error: string }[] }>(\"/remove\", {\n method: \"POST\",\n body: JSON.stringify({ ids }),\n }),\n\n /** Hand the download to the browser so it streams to disk (native progress + resume, no memory limit). */\n download(ids: number[]): void {\n const a = document.createElement(\"a\");\n a.href = `${root}/download?ids=${ids.join(\",\")}`;\n a.rel = \"noopener\";\n document.body.appendChild(a);\n a.click();\n a.remove();\n },\n\n upload(file: File, relPath: string, onProgress?: (fraction: number) => void): Promise<void> {\n return new Promise((resolve, reject) => {\n const form = new FormData();\n form.append(\"file\", file);\n form.append(\"rel_path\", relPath);\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", `${root}/upload`);\n xhr.withCredentials = true;\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable) onProgress?.(e.loaded / e.total);\n };\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) return resolve();\n let message = `Upload failed (${xhr.status})`;\n try {\n message = JSON.parse(xhr.responseText)?.message || message;\n } catch {\n /* non-JSON */\n }\n if (xhr.status === 401) message = \"Please log in to use Secure Files.\";\n reject(new ApiError(message, xhr.status));\n };\n xhr.onerror = () => reject(new ApiError(\"Network error during upload\", 0));\n xhr.send(form);\n });\n },\n };\n}\n\nexport type SecureFilesApi = ReturnType<typeof createApi>;\n","import React, { useState } from \"react\";\n\nconst NEW_FOLDER = \"__new__\";\n\nexport function FolderSelect({\n label,\n folders,\n value,\n onChange,\n}: {\n label: string;\n folders: string[];\n value: string;\n onChange: (folder: string) => void;\n}) {\n const [creating, setCreating] = useState(false);\n const [draft, setDraft] = useState(\"\");\n const [extra, setExtra] = useState<string[]>([]);\n const options = [...new Set([...folders, ...extra, ...(value ? [value] : [])])].sort();\n\n const accept = () => {\n const clean = draft.trim().replace(/^\\/+|\\/+$/g, \"\");\n if (clean) {\n setExtra((e) => (e.includes(clean) ? e : [...e, clean]));\n onChange(clean);\n }\n setCreating(false);\n setDraft(\"\");\n };\n\n return (\n <div className=\"sf-field\">\n <span>{label}</span>\n {creating ? (\n <div className=\"sf-row\">\n <input\n className=\"sf-input\"\n autoFocus\n value={draft}\n placeholder=\"new-folder-name (use / for subfolders)\"\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") accept();\n if (e.key === \"Escape\") setCreating(false);\n }}\n />\n <button type=\"button\" className=\"sf-btn\" onClick={accept}>\n OK\n </button>\n </div>\n ) : (\n <select\n className=\"sf-input\"\n value={value}\n onChange={(e) => (e.target.value === NEW_FOLDER ? setCreating(true) : onChange(e.target.value))}\n >\n <option value=\"\">/ (top level)</option>\n {options.map((d) => (\n <option key={d} value={d}>\n {d}/\n </option>\n ))}\n <option value={NEW_FOLDER}>+ Create new directory…</option>\n </select>\n )}\n </div>\n );\n}\n","import React, { useRef, useState } from \"react\";\nimport type { SecureFilesApi } from \"./api\";\nimport { FolderSelect } from \"./FolderSelect\";\n\ninterface Queued {\n file: File;\n relPath: string;\n progress: number;\n error?: string;\n done?: boolean;\n}\n\nfunction readEntries(reader: any): Promise<any[]> {\n return new Promise((resolve, reject) => reader.readEntries(resolve, reject));\n}\n\nasync function walkEntry(entry: any, prefix: string, out: { file: File; relPath: string }[]) {\n if (entry.isFile) {\n const file: File = await new Promise((resolve, reject) => entry.file(resolve, reject));\n out.push({ file, relPath: prefix + file.name });\n } else if (entry.isDirectory) {\n const reader = entry.createReader();\n let batch: any[];\n do {\n batch = await readEntries(reader);\n for (const child of batch) await walkEntry(child, `${prefix}${entry.name}/`, out);\n } while (batch.length > 0);\n }\n}\n\nasync function filesFromDrop(dt: DataTransfer) {\n const out: { file: File; relPath: string }[] = [];\n const entries = Array.from(dt.items || [])\n .map((item) => (item as any).webkitGetAsEntry?.())\n .filter(Boolean);\n if (entries.length) {\n for (const entry of entries) await walkEntry(entry, \"\", out);\n } else {\n for (const file of Array.from(dt.files)) out.push({ file, relPath: file.name });\n }\n return out;\n}\n\nfunction joinTarget(target: string, relPath: string) {\n const clean = target.trim().replace(/^\\/+|\\/+$/g, \"\");\n return clean ? `${clean}/${relPath}` : relPath;\n}\n\nfunction CloudIcon() {\n return (\n <svg className=\"sf-drop__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5} aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12 16.5V9.75m0 0 3 3m-3-3-3 3M6.75 19.5a4.5 4.5 0 0 1-1.41-8.775 5.25 5.25 0 0 1 10.233-2.33 3 3 0 0 1 3.758 3.848A3.752 3.752 0 0 1 18 19.5H6.75Z\"\n />\n </svg>\n );\n}\n\nexport function UploadPanel({\n api,\n folders,\n onUploaded,\n}: {\n api: SecureFilesApi;\n folders: string[];\n onUploaded: () => void;\n}) {\n const [queue, setQueue] = useState<Queued[]>([]);\n const [mode, setMode] = useState<\"files\" | \"folder\">(\"files\");\n const [target, setTarget] = useState(\"\");\n const [dragging, setDragging] = useState(false);\n const [busy, setBusy] = useState(false);\n const [message, setMessage] = useState<string | null>(null);\n const fileInput = useRef<HTMLInputElement>(null);\n const folderInput = useRef<HTMLInputElement>(null);\n\n const enqueue = (items: { file: File; relPath: string }[]) => {\n setMessage(null);\n setQueue((q) => {\n const kept = q.filter((x) => !x.done);\n const seen = new Set(kept.map((x) => x.relPath));\n return [...kept, ...items.filter((i) => !seen.has(i.relPath)).map((i) => ({ ...i, progress: 0 }))];\n });\n };\n\n const openPicker = () => (mode === \"folder\" ? folderInput : fileInput).current?.click();\n\n const fromInput = (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(e.target.files || []);\n enqueue(files.map((file) => ({ file, relPath: (file as any).webkitRelativePath || file.name })));\n e.target.value = \"\";\n };\n\n const uploadAll = async () => {\n setBusy(true);\n setMessage(null);\n let failed = 0;\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n if (item.done) continue;\n const set = (patch: Partial<Queued>) =>\n setQueue((q) => q.map((x, idx) => (idx === i ? { ...x, ...patch } : x)));\n try {\n await api.upload(item.file, joinTarget(target, item.relPath), (p) => set({ progress: p }));\n set({ progress: 1, done: true, error: undefined });\n } catch (err) {\n failed++;\n set({ error: err instanceof Error ? err.message : String(err) });\n }\n }\n setBusy(false);\n setMessage(failed ? `${failed} upload(s) failed` : \"Upload complete\");\n if (!failed) setQueue([]);\n onUploaded();\n };\n\n const pending = queue.filter((q) => !q.done);\n\n return (\n <section className=\"sf-upload\">\n <div className=\"sf-row sf-mode\" role=\"radiogroup\" aria-label=\"Choose what clicking the upload area picks\">\n <label className=\"sf-check sf-check--inline\">\n <input type=\"radio\" checked={mode === \"files\"} onChange={() => setMode(\"files\")} /> Files\n </label>\n <label className=\"sf-check sf-check--inline\">\n <input type=\"radio\" checked={mode === \"folder\"} onChange={() => setMode(\"folder\")} /> Folder\n </label>\n <span className=\"sf-muted\">(drag-and-drop accepts either)</span>\n </div>\n\n <div\n className={`sf-drop${dragging ? \" sf-drop--active\" : \"\"}`}\n role=\"button\"\n tabIndex={0}\n aria-label={`Upload area: click to choose ${mode === \"folder\" ? \"a folder\" : \"files\"}, or drop files or folders`}\n onClick={openPicker}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n openPicker();\n }\n }}\n onDragEnter={(e) => {\n e.preventDefault();\n setDragging(true);\n }}\n onDragOver={(e) => e.preventDefault()}\n onDragLeave={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) setDragging(false);\n }}\n onDrop={async (e) => {\n e.preventDefault();\n setDragging(false);\n enqueue(await filesFromDrop(e.dataTransfer));\n }}\n >\n <CloudIcon />\n <div>\n <p className=\"sf-drop__title\">Drag & drop files or folders here</p>\n <p className=\"sf-muted\">Click anywhere to choose {mode === \"folder\" ? \"a folder\" : \"files\"}</p>\n {pending.length > 0 && (\n <p className=\"sf-drop__count\">\n {pending.length} item{pending.length === 1 ? \"\" : \"s\"} queued\n </p>\n )}\n </div>\n </div>\n <input ref={fileInput} type=\"file\" multiple hidden onChange={fromInput} />\n <input\n ref={folderInput}\n type=\"file\"\n multiple\n hidden\n onChange={fromInput}\n {...({ webkitdirectory: \"\", directory: \"\" } as any)}\n />\n\n <div className=\"sf-row\">\n <FolderSelect label=\"Upload into\" folders={folders} value={target} onChange={setTarget} />\n <button type=\"button\" className=\"sf-btn sf-btn--primary\" disabled={busy || !pending.length} onClick={uploadAll}>\n {busy ? \"Uploading…\" : `Upload ${pending.length}`}\n </button>\n {queue.length > 0 && !busy && (\n <button type=\"button\" className=\"sf-btn\" onClick={() => setQueue([])}>\n Clear\n </button>\n )}\n </div>\n\n {message && (\n <p className={message.includes(\"failed\") ? \"sf-error\" : \"sf-muted\"} role=\"status\">\n {message}\n </p>\n )}\n\n {queue.length > 0 && (\n <ul className=\"sf-queue\">\n {queue.map((q, i) => (\n <li key={`${q.relPath}-${i}`}>\n <span className=\"sf-queue__name\">{joinTarget(target, q.relPath)}</span>\n {q.error ? (\n <span className=\"sf-error\">{q.error}</span>\n ) : (\n <span className=\"sf-row\">\n <progress max={1} value={q.progress} />\n <span className=\"sf-muted\">{Math.round(q.progress * 100)}%</span>\n </span>\n )}\n </li>\n ))}\n </ul>\n )}\n </section>\n );\n}\n","import React, { useState } from \"react\";\n\nexport function CopyButton({ text, label = \"Copy link\" }: { text: string; label?: string }) {\n const [copied, setCopied] = useState(false);\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(text);\n } catch {\n const ta = document.createElement(\"textarea\");\n ta.value = text;\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n return (\n <button type=\"button\" className=\"sf-btn\" onClick={copy}>\n {copied ? \"Copied\" : label}\n </button>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport type { SecureFile, ShareUpdate } from \"./types\";\nimport { CopyButton } from \"./CopyButton\";\n\ntype PasswordMode = \"keep\" | \"set\" | \"remove\";\n\nexport function ShareDialog({\n file,\n onClose,\n onSave,\n}: {\n file: SecureFile;\n onClose: () => void;\n onSave: (update: ShareUpdate) => Promise<void>;\n}) {\n const [shareable, setShareable] = useState(file.shareable);\n const [limit, setLimit] = useState(file.download_limit ? String(file.download_limit) : \"\");\n const [pwMode, setPwMode] = useState<PasswordMode>(file.has_password ? \"keep\" : \"remove\");\n const [password, setPassword] = useState(\"\");\n const [resetCount, setResetCount] = useState(false);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && onClose();\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onClose]);\n\n const limitValid = limit === \"\" || /^\\d+$/.test(limit);\n const passwordValid = pwMode !== \"set\" || password.length > 0;\n\n const save = async () => {\n setSaving(true);\n setError(null);\n try {\n const update: ShareUpdate = { id: file.id, shareable };\n if (shareable) {\n update.download_limit = limit === \"\" ? null : Number(limit);\n if (pwMode === \"set\") update.password = password;\n else if (pwMode === \"remove\" && file.has_password) update.password = \"\";\n if (resetCount) update.reset_count = true;\n }\n await onSave(update);\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <div className=\"sf-overlay\" onMouseDown={(e) => e.target === e.currentTarget && onClose()}>\n <div className=\"sf-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label={`Share settings for ${file.filename}`}>\n <header className=\"sf-dialog__head\">\n <h3>Share settings</h3>\n <button type=\"button\" className=\"sf-icon-btn\" aria-label=\"Close\" onClick={onClose}>\n ✕\n </button>\n </header>\n <p className=\"sf-muted\">{file.filepath}</p>\n\n <label className=\"sf-check\">\n <input type=\"checkbox\" checked={shareable} onChange={(e) => setShareable(e.target.checked)} />\n Anyone with the link can download\n </label>\n\n <fieldset disabled={!shareable} className=\"sf-fieldset\">\n <label className=\"sf-field\">\n <span>Download limit (blank = unlimited)</span>\n <input\n className=\"sf-input\"\n inputMode=\"numeric\"\n value={limit}\n onChange={(e) => setLimit(e.target.value.trim())}\n placeholder=\"unlimited\"\n />\n {!limitValid && <span className=\"sf-error\">Enter a whole number</span>}\n </label>\n <p className=\"sf-muted\">\n Downloaded {file.download_count} time{file.download_count === 1 ? \"\" : \"s\"}\n {file.download_limit ? ` of ${file.download_limit}` : \"\"}.{\" \"}\n <label className=\"sf-check sf-check--inline\">\n <input type=\"checkbox\" checked={resetCount} onChange={(e) => setResetCount(e.target.checked)} />\n reset count\n </label>\n </p>\n\n <div className=\"sf-field\">\n <span>Password</span>\n <div className=\"sf-row\">\n {file.has_password && (\n <label className=\"sf-check sf-check--inline\">\n <input type=\"radio\" checked={pwMode === \"keep\"} onChange={() => setPwMode(\"keep\")} />\n keep current\n </label>\n )}\n <label className=\"sf-check sf-check--inline\">\n <input type=\"radio\" checked={pwMode === \"set\"} onChange={() => setPwMode(\"set\")} />\n {file.has_password ? \"change\" : \"require password\"}\n </label>\n <label className=\"sf-check sf-check--inline\">\n <input type=\"radio\" checked={pwMode === \"remove\"} onChange={() => setPwMode(\"remove\")} />\n {file.has_password ? \"remove\" : \"none\"}\n </label>\n </div>\n {pwMode === \"set\" && (\n <input\n className=\"sf-input\"\n type=\"password\"\n autoComplete=\"new-password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"New password\"\n />\n )}\n </div>\n\n <div className=\"sf-field\">\n <span>Share link</span>\n <div className=\"sf-row\">\n <input className=\"sf-input\" readOnly value={file.share_url} onFocus={(e) => e.target.select()} />\n <CopyButton text={file.share_url} />\n </div>\n {!file.shareable && <span className=\"sf-muted\">The link works once you save with sharing on.</span>}\n </div>\n </fieldset>\n\n {error && <p className=\"sf-error\">{error}</p>}\n\n <footer className=\"sf-row sf-dialog__foot\">\n <button type=\"button\" className=\"sf-btn\" onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"sf-btn sf-btn--primary\"\n disabled={saving || !limitValid || !passwordValid}\n onClick={save}\n >\n {saving ? \"Saving…\" : \"Save\"}\n </button>\n </footer>\n </div>\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\n\nexport function ConfirmButton({\n label,\n onConfirm,\n disabled,\n}: {\n label: string;\n onConfirm: () => void;\n disabled?: boolean;\n}) {\n const [armed, setArmed] = useState(false);\n useEffect(() => {\n if (!armed) return;\n const t = setTimeout(() => setArmed(false), 3000);\n return () => clearTimeout(t);\n }, [armed]);\n return (\n <button\n type=\"button\"\n className={`sf-btn sf-btn--danger${armed ? \" sf-btn--armed\" : \"\"}`}\n disabled={disabled}\n onClick={() => {\n if (armed) {\n setArmed(false);\n onConfirm();\n } else {\n setArmed(true);\n }\n }}\n >\n {armed ? \"Confirm\" : label}\n </button>\n );\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport type { SecureFilesApi } from \"./api\";\nimport type { BrowseResult, LinkRoot, RootChallenge } from \"./types\";\nimport { ConfirmButton } from \"./ConfirmButton\";\nimport { CopyButton } from \"./CopyButton\";\nimport { FolderSelect } from \"./FolderSelect\";\n\nfunction formatSize(bytes: number) {\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n let n = bytes;\n let i = 0;\n while (n >= 1024 && i < units.length - 1) {\n n /= 1024;\n i++;\n }\n return `${n.toFixed(i ? 1 : 0)} ${units[i]}`;\n}\n\nconst errText = (err: unknown) => (err instanceof Error ? err.message : String(err));\n\nfunction AddRoot({ api, onAdded }: { api: SecureFilesApi; onAdded: (roots: LinkRoot[]) => void }) {\n const [path, setPath] = useState(\"\");\n const [label, setLabel] = useState(\"\");\n const [challenge, setChallenge] = useState<RootChallenge | null>(null);\n const [signature, setSignature] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n\n const request = async () => {\n setBusy(true);\n setError(null);\n try {\n setChallenge((await api.requestRoot(path.trim())).challenge);\n setSignature(\"\");\n } catch (err) {\n setError(errText(err));\n } finally {\n setBusy(false);\n }\n };\n\n const confirm = async () => {\n if (!challenge) return;\n setBusy(true);\n setError(null);\n try {\n onAdded((await api.confirmRoot(challenge.nonce, signature, label)).roots);\n setChallenge(null);\n setPath(\"\");\n setLabel(\"\");\n setSignature(\"\");\n } catch (err) {\n setError(errText(err));\n } finally {\n setBusy(false);\n }\n };\n\n const minutesLeft = challenge ? Math.max(0, Math.round((challenge.expires * 1000 - Date.now()) / 60000)) : 0;\n\n return (\n <div className=\"sf-card\">\n <h4>Allow a directory</h4>\n {!challenge ? (\n <div className=\"sf-row sf-row--bottom\">\n <label className=\"sf-field\">\n <span>Absolute path on the server</span>\n <input\n className=\"sf-input\"\n value={path}\n onChange={(e) => setPath(e.target.value)}\n placeholder=\"/srv/shared/docs\"\n onKeyDown={(e) => e.key === \"Enter\" && path.trim() && request()}\n />\n </label>\n <label className=\"sf-field sf-field--narrow\">\n <span>Label (optional)</span>\n <input className=\"sf-input\" value={label} onChange={(e) => setLabel(e.target.value)} />\n </label>\n <button type=\"button\" className=\"sf-btn sf-btn--primary\" disabled={busy || !path.trim()} onClick={request}>\n Request\n </button>\n </div>\n ) : (\n <div className=\"sf-stack\">\n <p>\n Allowing <code>{challenge.message.split(\"|\")[3]}</code> requires a signature from a trusted SSH key. Run\n this where that key lives (expires in about {minutesLeft} min):\n </p>\n <div className=\"sf-row\">\n <textarea className=\"sf-input sf-code\" readOnly rows={3} value={challenge.command} />\n <CopyButton text={challenge.command} label=\"Copy command\" />\n </div>\n <label className=\"sf-field\">\n <span>Paste the full output (BEGIN … END SSH SIGNATURE)</span>\n <textarea\n className=\"sf-input sf-code\"\n rows={6}\n value={signature}\n onChange={(e) => setSignature(e.target.value)}\n placeholder=\"-----BEGIN SSH SIGNATURE-----\"\n />\n </label>\n <div className=\"sf-row\">\n <button\n type=\"button\"\n className=\"sf-btn sf-btn--primary\"\n disabled={busy || !signature.includes(\"END SSH SIGNATURE\")}\n onClick={confirm}\n >\n Verify & allow\n </button>\n <button type=\"button\" className=\"sf-btn\" onClick={() => setChallenge(null)}>\n Cancel\n </button>\n </div>\n </div>\n )}\n {error && <p className=\"sf-error\">{error}</p>}\n </div>\n );\n}\n\nfunction Browser({\n api,\n roots,\n folders,\n onLinked,\n}: {\n api: SecureFilesApi;\n roots: LinkRoot[];\n folders: string[];\n onLinked: () => void;\n}) {\n const [listing, setListing] = useState<BrowseResult | null>(null);\n const [picked, setPicked] = useState<Set<string>>(new Set());\n const [target, setTarget] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const [result, setResult] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n\n const open = useCallback(\n async (path: string) => {\n setError(null);\n try {\n setListing(await api.browse(path));\n setPicked(new Set());\n } catch (err) {\n setError(errText(err));\n }\n },\n [api]\n );\n\n useEffect(() => {\n if (!listing && roots.length) open(roots[0].path);\n if (listing && !roots.some((r) => listing.path.startsWith(r.path))) setListing(null);\n }, [roots, listing, open]);\n\n const togglePick = (path: string, on: boolean) =>\n setPicked((p) => {\n const next = new Set(p);\n on ? next.add(path) : next.delete(path);\n return next;\n });\n\n const link = async () => {\n setBusy(true);\n setResult(null);\n try {\n const res = await api.link([...picked], target);\n const parts = [`Linked ${res.linked.length} file(s)`];\n if (res.errors.length) parts.push(`${res.errors.length} skipped: ${res.errors.map((e) => e.error).join(\"; \")}`);\n setResult(parts.join(\". \"));\n onLinked();\n if (listing) await open(listing.path);\n } catch (err) {\n setResult(errText(err));\n } finally {\n setBusy(false);\n }\n };\n\n if (!roots.length) return <p className=\"sf-muted\">Allow a directory above to browse and link its files.</p>;\n\n const linkable = [\n ...(listing?.dirs.filter((d) => !d.linked_id) ?? []),\n ...(listing?.files.filter((f) => !f.linked_id) ?? []),\n ];\n const relative = listing ? listing.path.slice(listing.root.length) || \"/\" : \"\";\n\n return (\n <div className=\"sf-card\">\n <h4>Link files or folders</h4>\n <div className=\"sf-row\">\n <select\n className=\"sf-input sf-root-select\"\n value={listing?.root ?? \"\"}\n onChange={(e) => open(e.target.value)}\n >\n {roots.map((r) => (\n <option key={r.id} value={r.path}>\n {r.label ? `${r.label} (${r.path})` : r.path}\n </option>\n ))}\n </select>\n {listing && <code className=\"sf-muted\">{relative}</code>}\n </div>\n {error && <p className=\"sf-error\">{error}</p>}\n {listing && (\n <div className=\"sf-browser\">\n {listing.parent && (\n <button type=\"button\" className=\"sf-browser__dir\" onClick={() => open(listing.parent!)}>\n ↩ ..\n </button>\n )}\n {listing.dirs.map((d) => (\n <div key={d.path} className={`sf-browser__row${d.linked_id ? \" sf-muted\" : \"\"}`}>\n <input\n type=\"checkbox\"\n aria-label={`Select folder ${d.name}`}\n disabled={!!d.linked_id}\n checked={picked.has(d.path)}\n onChange={(e) => togglePick(d.path, e.target.checked)}\n />\n <button type=\"button\" className=\"sf-browser__dir\" onClick={() => open(d.path)} title=\"Open folder\">\n 📁 {d.name}\n </button>\n <span className=\"sf-muted\">{d.linked_id ? \"already linked\" : \"folder → .tar\"}</span>\n </div>\n ))}\n {linkable.length > 0 && (\n <label className=\"sf-check sf-browser__all\">\n <input\n type=\"checkbox\"\n checked={linkable.length > 0 && linkable.every((f) => picked.has(f.path))}\n disabled={!linkable.length}\n onChange={(e) => setPicked(e.target.checked ? new Set(linkable.map((f) => f.path)) : new Set())}\n />\n Select everything here\n </label>\n )}\n {listing.files.map((f) => (\n <label key={f.path} className={`sf-check sf-browser__file${f.linked_id ? \" sf-muted\" : \"\"}`}>\n <input\n type=\"checkbox\"\n disabled={!!f.linked_id}\n checked={picked.has(f.path)}\n onChange={(e) => togglePick(f.path, e.target.checked)}\n />\n <span className=\"sf-browser__name\">{f.name}</span>\n <span className=\"sf-muted\">{f.linked_id ? \"already linked\" : formatSize(f.size)}</span>\n </label>\n ))}\n {!listing.dirs.length && !listing.files.length && <p className=\"sf-muted\">Empty directory</p>}\n {listing.truncated && <p className=\"sf-muted\">Showing the first 5000 entries.</p>}\n </div>\n )}\n <div className=\"sf-row sf-row--bottom\">\n <FolderSelect label=\"Show in Secure Files under\" folders={folders} value={target} onChange={setTarget} />\n <button type=\"button\" className=\"sf-btn sf-btn--primary\" disabled={busy || !picked.size} onClick={link}>\n {busy ? \"Linking…\" : `Link ${picked.size || \"\"}`.trim()}\n </button>\n </div>\n {result && <p className={result.includes(\"skipped\") ? \"sf-error\" : \"sf-muted\"}>{result}</p>}\n </div>\n );\n}\n\nexport function ServerFiles({\n api,\n folders,\n onLinked,\n}: {\n api: SecureFilesApi;\n folders: string[];\n onLinked: () => void;\n}) {\n const [roots, setRoots] = useState<LinkRoot[] | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const load = useCallback(async () => {\n try {\n setRoots((await api.roots()).roots);\n setError(null);\n } catch (err) {\n setError(errText(err));\n }\n }, [api]);\n\n return (\n <details className=\"sf-admin\" onToggle={(e) => (e.currentTarget as HTMLDetailsElement).open && !roots && load()}>\n <summary>Server files (admin)</summary>\n <div className=\"sf-stack\">\n <p className=\"sf-muted\">\n Link files or whole folders that already live on the server instead of uploading copies. A linked folder\n downloads as one uncompressed .tar with an exact size, and interrupted downloads can be resumed. Only\n items inside allowed directories can be linked; removing a directory immediately disables its links.\n Deleting a linked entry never touches the original. Available from the local network only.\n </p>\n {error && <p className=\"sf-error\">{error}</p>}\n {roots && (\n <>\n <div className=\"sf-card\">\n <h4>Allowed directories</h4>\n {roots.length === 0 ? (\n <p className=\"sf-muted\">None yet.</p>\n ) : (\n <ul className=\"sf-roots\">\n {roots.map((r) => (\n <li key={r.id}>\n <span>\n <code>{r.path}</code> {r.label && <span className=\"sf-muted\">— {r.label}</span>}\n {!r.exists && <span className=\"sf-error\"> (missing)</span>}\n </span>\n <ConfirmButton\n label=\"Remove\"\n onConfirm={async () => {\n try {\n setRoots((await api.removeRoot(r.id)).roots);\n onLinked();\n } catch (err) {\n setError(errText(err));\n }\n }}\n />\n </li>\n ))}\n </ul>\n )}\n </div>\n <AddRoot api={api} onAdded={setRoots} />\n <Browser api={api} roots={roots} folders={folders} onLinked={onLinked} />\n </>\n )}\n </div>\n </details>\n );\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { createApi } from \"./api\";\nimport type { SecureFile, SecureFilesProps, ShareUpdate } from \"./types\";\nimport { UploadPanel } from \"./UploadPanel\";\nimport { ShareDialog } from \"./ShareDialog\";\nimport { CopyButton } from \"./CopyButton\";\nimport { ConfirmButton } from \"./ConfirmButton\";\nimport { ServerFiles } from \"./ServerFiles\";\nimport \"./styles.css\";\n\ninterface FolderNode {\n name: string;\n path: string;\n folders: Map<string, FolderNode>;\n files: SecureFile[];\n}\n\nfunction buildTree(files: SecureFile[]): FolderNode {\n const root: FolderNode = { name: \"\", path: \"\", folders: new Map(), files: [] };\n for (const f of files) {\n const parts = f.filepath.split(\"/\");\n let node = root;\n parts.slice(0, -1).forEach((part, i) => {\n if (!node.folders.has(part)) {\n node.folders.set(part, { name: part, path: parts.slice(0, i + 1).join(\"/\"), folders: new Map(), files: [] });\n }\n node = node.folders.get(part)!;\n });\n node.files.push(f);\n }\n return root;\n}\n\nfunction allFiles(node: FolderNode): SecureFile[] {\n return [...node.files, ...[...node.folders.values()].flatMap(allFiles)];\n}\n\nexport default function SecureFiles({ apiBase }: SecureFilesProps) {\n const api = useMemo(() => createApi(apiBase), [apiBase]);\n const [files, setFiles] = useState<SecureFile[]>([]);\n const [user, setUser] = useState<string | null>(null);\n const [isAdmin, setIsAdmin] = useState(false);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [notice, setNotice] = useState<string | null>(null);\n const [search, setSearch] = useState(\"\");\n const [selected, setSelected] = useState<Set<number>>(new Set());\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set());\n const [editing, setEditing] = useState<SecureFile | null>(null);\n const [busyIds, setBusyIds] = useState<Set<number>>(new Set());\n\n const load = useCallback(async () => {\n setError(null);\n try {\n const data = await api.list();\n setUser(data.user_name);\n setIsAdmin(data.is_admin);\n setFiles(data.files);\n setSelected((prev) => new Set([...prev].filter((id) => data.files.some((f) => f.id === id))));\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setLoading(false);\n }\n }, [api]);\n\n useEffect(() => {\n load();\n const onVisible = () => document.visibilityState === \"visible\" && load();\n document.addEventListener(\"visibilitychange\", onVisible);\n window.addEventListener(\"focus\", onVisible);\n return () => {\n document.removeEventListener(\"visibilitychange\", onVisible);\n window.removeEventListener(\"focus\", onVisible);\n };\n }, [load]);\n\n const run = async (ids: number[], action: () => Promise<unknown>) => {\n setBusyIds((s) => new Set([...s, ...ids]));\n setNotice(null);\n try {\n await action();\n } catch (err) {\n setNotice(err instanceof Error ? err.message : String(err));\n } finally {\n setBusyIds((s) => new Set([...s].filter((id) => !ids.includes(id))));\n }\n };\n\n const replaceFile = (file: SecureFile) => setFiles((fs) => fs.map((f) => (f.id === file.id ? file : f)));\n\n const saveShare = async (update: ShareUpdate) => {\n const { file } = await api.updateShare(update);\n replaceFile(file);\n };\n\n const download = (items: SecureFile[]) => {\n const ready = items.filter((f) => f.available);\n if (!ready.length) return;\n api.download(ready.map((f) => f.id));\n };\n\n const setShared = (items: SecureFile[], shareable: boolean) =>\n run(\n items.map((f) => f.id),\n async () => {\n for (const f of items) await saveShare({ id: f.id, shareable });\n }\n );\n\n const remove = (items: SecureFile[]) =>\n run(\n items.map((f) => f.id),\n async () => {\n const res = await api.remove(items.map((f) => f.id));\n if (res.errors.length) setNotice(`${res.errors.length} file(s) could not be deleted`);\n await load();\n }\n );\n\n const filtered = useMemo(() => {\n const q = search.trim().toLowerCase();\n return q ? files.filter((f) => f.filepath.toLowerCase().includes(q)) : files;\n }, [files, search]);\n\n const tree = useMemo(() => buildTree(filtered), [filtered]);\n\n const folders = useMemo(() => {\n const set = new Set<string>();\n for (const f of files) {\n const parts = f.filepath.split(\"/\").slice(0, -1);\n parts.forEach((_, i) => set.add(parts.slice(0, i + 1).join(\"/\")));\n }\n return [...set];\n }, [files]);\n\n const selectedFiles = files.filter((f) => selected.has(f.id));\n const toggle = (ids: number[], on: boolean) =>\n setSelected((prev) => {\n const next = new Set(prev);\n ids.forEach((id) => (on ? next.add(id) : next.delete(id)));\n return next;\n });\n const toggleFolder = (path: string) =>\n setCollapsed((c) => {\n const next = new Set(c);\n next.has(path) ? next.delete(path) : next.add(path);\n return next;\n });\n const allVisibleSelected = filtered.length > 0 && filtered.every((f) => selected.has(f.id));\n const searching = search.trim().length > 0;\n\n const renderFile = (f: SecureFile, depth: number) => {\n const busy = busyIds.has(f.id);\n return (\n <tr key={f.id} className={busy ? \"sf-busy\" : undefined}>\n <td className=\"sf-col-check\">\n <input\n type=\"checkbox\"\n aria-label={`Select ${f.filename}`}\n checked={selected.has(f.id)}\n onChange={(e) => toggle([f.id], e.target.checked)}\n />\n </td>\n <td style={{ paddingLeft: 10 + depth * 20 }}>\n <span className={f.available ? undefined : \"sf-strike\"}>{f.filename}</span>\n {f.kind === \"folder\" && (\n <span className=\"sf-tag\" title=\"Downloads as one uncompressed, resumable .tar of the whole folder\">\n folder · .tar\n </span>\n )}\n {f.linked && (\n <span className=\"sf-tag\" title={f.source_path ?? undefined}>\n linked\n </span>\n )}\n {!f.available && (\n <span\n className=\"sf-tag sf-tag--warn\"\n title={f.linked ? \"Source file is gone or its directory is no longer allowed\" : \"File is missing on disk\"}\n >\n missing\n </span>\n )}\n </td>\n <td>\n <button\n type=\"button\"\n className={`sf-pill${f.shareable ? \" sf-pill--on\" : \"\"}`}\n disabled={busy || !f.available}\n onClick={() => setShared([f], !f.shareable)}\n title={f.shareable ? \"Click to stop sharing\" : \"Click to share\"}\n >\n {f.shareable ? \"Shared\" : \"Private\"}\n </button>\n {f.shareable && f.has_password && <span title=\"Password protected\"> 🔒</span>}\n </td>\n <td>\n {f.download_count} / {f.download_limit ?? \"∞\"}\n </td>\n <td className=\"sf-col-actions\">\n <div className=\"sf-row sf-row--end\">\n <button type=\"button\" className=\"sf-btn\" disabled={busy || !f.available} onClick={() => download([f])}>\n Download\n </button>\n {f.shareable && f.available && <CopyButton text={f.share_url} />}\n <button\n type=\"button\"\n className=\"sf-icon-btn\"\n aria-label={`Share settings for ${f.filename}`}\n title=\"Share settings\"\n onClick={() => setEditing(f)}\n >\n ⚙️\n </button>\n <ConfirmButton label={f.linked ? \"Unlink\" : \"Delete\"} disabled={busy} onConfirm={() => remove([f])} />\n </div>\n </td>\n </tr>\n );\n };\n\n const renderFolder = (node: FolderNode, depth: number): React.ReactNode[] => {\n const rows: React.ReactNode[] = [];\n const subFolders = [...node.folders.values()].sort((a, b) => a.name.localeCompare(b.name));\n const ownFiles = [...node.files].sort((a, b) => a.filename.localeCompare(b.filename));\n for (const folder of subFolders) {\n const contents = allFiles(folder);\n const ids = contents.map((f) => f.id);\n const open = searching || !collapsed.has(folder.path);\n rows.push(\n <tr key={`dir:${folder.path}`} className=\"sf-dir\">\n <td className=\"sf-col-check\">\n <input\n type=\"checkbox\"\n aria-label={`Select folder ${folder.path}`}\n checked={ids.length > 0 && ids.every((id) => selected.has(id))}\n onChange={(e) => toggle(ids, e.target.checked)}\n />\n </td>\n <td colSpan={4} style={{ paddingLeft: 10 + depth * 20 }}>\n <button type=\"button\" className=\"sf-dir__toggle\" onClick={() => toggleFolder(folder.path)}>\n {open ? \"▾\" : \"▸\"} 📁 {folder.name} <span className=\"sf-muted\">({contents.length})</span>\n </button>\n </td>\n </tr>\n );\n if (open) rows.push(...renderFolder(folder, depth + 1));\n }\n rows.push(...ownFiles.map((f) => renderFile(f, depth)));\n return rows;\n };\n\n return (\n <div className=\"sf-root\">\n <header className=\"sf-head\">\n <h2>Secure Files</h2>\n {user && <span className=\"sf-muted\">Signed in as {user}</span>}\n </header>\n\n <UploadPanel api={api} folders={folders} onUploaded={load} />\n\n {isAdmin && <ServerFiles api={api} folders={folders} onLinked={load} />}\n\n <section className=\"sf-toolbar\">\n <input\n className=\"sf-input sf-search\"\n type=\"search\"\n placeholder=\"Search files…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n />\n <div className=\"sf-row\">\n <span className=\"sf-muted\">{selected.size} selected</span>\n {folders.length > 0 && (\n <>\n <button type=\"button\" className=\"sf-btn\" onClick={() => setCollapsed(new Set())}>\n Expand all\n </button>\n <button type=\"button\" className=\"sf-btn\" onClick={() => setCollapsed(new Set(folders))}>\n Collapse all\n </button>\n </>\n )}\n <button type=\"button\" className=\"sf-btn\" disabled={!selected.size} onClick={() => download(selectedFiles)}>\n Download\n </button>\n <button type=\"button\" className=\"sf-btn\" disabled={!selected.size} onClick={() => setShared(selectedFiles, true)}>\n Share\n </button>\n <button type=\"button\" className=\"sf-btn\" disabled={!selected.size} onClick={() => setShared(selectedFiles, false)}>\n Unshare\n </button>\n <ConfirmButton label=\"Delete\" disabled={!selected.size} onConfirm={() => remove(selectedFiles)} />\n </div>\n </section>\n\n {notice && (\n <p className=\"sf-error\" role=\"alert\">\n {notice}\n </p>\n )}\n\n {loading ? (\n <p className=\"sf-muted\">Loading…</p>\n ) : error ? (\n <p className=\"sf-error\" role=\"alert\">\n {error}\n </p>\n ) : files.length === 0 ? (\n <p className=\"sf-muted\">No files yet — upload something above.</p>\n ) : (\n <div className=\"sf-table-wrap\">\n <table className=\"sf-table\">\n <thead>\n <tr>\n <th className=\"sf-col-check\">\n <input\n type=\"checkbox\"\n aria-label=\"Select all\"\n checked={allVisibleSelected}\n onChange={(e) => toggle(filtered.map((f) => f.id), e.target.checked)}\n />\n </th>\n <th>Name</th>\n <th>Sharing</th>\n <th>Downloads</th>\n <th className=\"sf-col-actions\">Actions</th>\n </tr>\n </thead>\n <tbody>{renderFolder(tree, 0)}</tbody>\n </table>\n </div>\n )}\n\n {editing && (\n <ShareDialog\n key={editing.id}\n file={files.find((f) => f.id === editing.id) ?? editing}\n onClose={() => setEditing(null)}\n onSave={saveShare}\n />\n )}\n </div>\n );\n}\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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","x_google_ignoreList":[7]}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface SecureFile {
|
|
2
|
+
id: number;
|
|
3
|
+
filename: string;
|
|
4
|
+
filepath: string;
|
|
5
|
+
uploader_id: string;
|
|
6
|
+
shareable: boolean;
|
|
7
|
+
has_password: boolean;
|
|
8
|
+
download_count: number;
|
|
9
|
+
download_limit: number | null;
|
|
10
|
+
created_at: string | null;
|
|
11
|
+
share_url: string;
|
|
12
|
+
/** true when the entry points at a file elsewhere on the server instead of an upload */
|
|
13
|
+
linked: boolean;
|
|
14
|
+
/** "folder" entries download as an uncompressed, resumable .tar of the whole directory */
|
|
15
|
+
kind: "file" | "folder";
|
|
16
|
+
source_path: string | null;
|
|
17
|
+
/** false when the file is missing on disk (or its allowed directory was removed) */
|
|
18
|
+
available: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface LinkRoot {
|
|
21
|
+
id: number;
|
|
22
|
+
path: string;
|
|
23
|
+
label: string | null;
|
|
24
|
+
exists: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface RootChallenge {
|
|
27
|
+
nonce: string;
|
|
28
|
+
message: string;
|
|
29
|
+
command: string;
|
|
30
|
+
expires: number;
|
|
31
|
+
}
|
|
32
|
+
export interface BrowseResult {
|
|
33
|
+
path: string;
|
|
34
|
+
root: string;
|
|
35
|
+
parent: string | null;
|
|
36
|
+
dirs: {
|
|
37
|
+
name: string;
|
|
38
|
+
path: string;
|
|
39
|
+
linked_id: number | null;
|
|
40
|
+
}[];
|
|
41
|
+
files: {
|
|
42
|
+
name: string;
|
|
43
|
+
path: string;
|
|
44
|
+
size: number;
|
|
45
|
+
linked_id: number | null;
|
|
46
|
+
}[];
|
|
47
|
+
truncated: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface ShareUpdate {
|
|
50
|
+
id: number;
|
|
51
|
+
shareable?: boolean;
|
|
52
|
+
download_limit?: number | null;
|
|
53
|
+
/** null/undefined = leave unchanged, "" = remove, otherwise the new password */
|
|
54
|
+
password?: string | null;
|
|
55
|
+
reset_count?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface SecureFilesProps {
|
|
58
|
+
/** API origin; defaults to https://api.abstractendeavors.com */
|
|
59
|
+
apiBase?: string;
|
|
60
|
+
}
|