This repository has been archived on 2026-03-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
drive/deno.json
Sienna Meridian Satterwhite 58237d9e44 Initial commit — Drive, an S3 file browser with WOPI editing
Lightweight replacement for the upstream La Suite Numérique drive
(Django/Celery/Next.js) built as a single Deno binary.

Server (Deno + Hono):
- S3 file operations via AWS SigV4 (no SDK) with pre-signed URLs
- WOPI host for Collabora Online (CheckFileInfo, GetFile, PutFile, locks)
- Ory Kratos session auth + CSRF protection
- Ory Keto permission model (OPL namespaces, not yet wired to routes)
- PostgreSQL metadata with recursive folder sizes
- S3 backfill API for registering files uploaded outside the UI
- OpenTelemetry tracing + metrics (opt-in via OTEL_ENABLED)

Frontend (React 19 + Cunningham v4 + react-aria):
- File browser with GridList, keyboard nav, multi-select
- Collabora editor iframe (full-screen, form POST, postMessage)
- Profile menu, waffle menu, drag-drop upload, asset type badges
- La Suite integration service theming (runtime CSS)

Testing (549 tests):
- 235 server unit tests (Deno) — 90%+ coverage
- 278 UI unit tests (Vitest) — 90%+ coverage
- 11 E2E tests (Playwright)
- 12 integration service tests (Playwright)
- 13 WOPI integration tests (Playwright + Docker Compose + Collabora)

MIT licensed.
2026-03-25 18:28:37 +00:00

31 lines
1.6 KiB
JSON

{
"tasks": {
"dev": "deno task dev:server & deno task dev:ui",
"dev:server": "deno run -A --watch main.ts",
"dev:ui": "cd ui && npx vite",
"build:ui": "cd ui && npx vite build",
"build": "deno task build:ui && deno task compile",
"compile": "deno compile --allow-net --allow-read --allow-env --include ui/dist -o driver main.ts",
"test": "CSRF_COOKIE_SECRET=test-secret WOPI_JWT_SECRET=test-secret deno test -A --no-check tests/server/",
"test:ui": "cd ui && npx vitest run",
"test:e2e": "cd ui && npx playwright test e2e/driver.spec.ts",
"test:wopi": "cd ui && npx playwright test e2e/wopi.spec.ts",
"test:all": "deno task test && deno task test:ui && deno task test:e2e",
"migrate": "deno run -A server/migrate.ts"
},
"imports": {
"hono": "jsr:@hono/hono@^4",
"hono/deno": "jsr:@hono/hono/deno",
"postgres": "https://deno.land/x/postgresjs@v3.4.5/mod.js",
"@opentelemetry/api": "npm:@opentelemetry/api@1.9.0",
"@opentelemetry/sdk-node": "npm:@opentelemetry/sdk-node@0.57.2",
"@opentelemetry/exporter-trace-otlp-grpc": "npm:@opentelemetry/exporter-trace-otlp-grpc@0.57.2",
"@opentelemetry/exporter-metrics-otlp-grpc": "npm:@opentelemetry/exporter-metrics-otlp-grpc@0.57.2",
"@opentelemetry/sdk-metrics": "npm:@opentelemetry/sdk-metrics@1.30.1",
"@opentelemetry/sdk-trace-base": "npm:@opentelemetry/sdk-trace-base@1.30.1",
"@opentelemetry/resources": "npm:@opentelemetry/resources@1.30.1",
"@opentelemetry/semantic-conventions": "npm:@opentelemetry/semantic-conventions@1.28.0",
"@opentelemetry/core": "npm:@opentelemetry/core@1.30.1"
}
}