mirror of
https://github.com/willchen96/mike.git
synced 2026-07-24 23:41:04 +02:00
Ported from the amal66 fork (see index Open-Legal-Products/mike#205) onto current main, adapted to this repo's backend/ layout (apps/api/src/lib -> backend/src/lib), plus a v8 coverage ratchet. Suites ported (51 new tests, verified locally): - access.test.ts (7): owner/shared/private project access, doc access, review sharing, document-ID filtering. Dropped the fork's "org RBAC" describe block (7 cases) — org_id/org_members multi-tenancy and the role/canManage fields do not exist in this repo's access.ts. - storage.test.ts (25): filename normalization/sanitization, RFC 5987 encoding, Content-Disposition, storage key helpers. Dropped the fork's vi.mock of lib/env — this repo has no env module; storage reads process.env directly and the tested helpers are pure. - userApiKeys.test.ts (10): normalizeApiKeyProvider + hasEnvApiKey. Added a beforeEach env clear so shell-exported API keys can't leak into assertions. - chatTypes.test.ts (9): resolveDoc/resolveDocLabel, which live in lib/chat/types.ts here (the fork's lib/chatTools.ts equivalent). Dropped generateSpotlightNonce cases (2) — no such export here. Suites dropped entirely (subject not present in this repo): - upload.test.ts — tested hasMagicBytes; this repo's lib/upload.ts is only the multer middleware and exports no magic-byte checker. - userSettings.test.ts — tested resolveTabularModel (fork-only keyed- provider fallback); this repo resolves tabular_model via resolveModel with a static default. Coverage ratchet: vitest.config.mts adds v8 coverage over src/lib/** with floors measured against this tree (2.58% stmts, 2.00% branches, 4.61% funcs, 2.58% lines -> floors 2/2/4/2). Full suite: 5 files, 63 tests passing (incl. the pre-existing 12 in downloadTokens.test.ts); npm run test:coverage and npm run build both pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
48 lines
1.3 KiB
JSON
48 lines
1.3 KiB
JSON
{
|
|
"name": "mike-backend",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "tsx watch src/index.ts",
|
|
"build": "tsc",
|
|
"start": "node dist/index.js",
|
|
"test": "vitest run",
|
|
"test:coverage": "vitest run --coverage"
|
|
},
|
|
"dependencies": {
|
|
"@anthropic-ai/sdk": "^0.90.0",
|
|
"@aws-sdk/client-s3": "^3.787.0",
|
|
"@aws-sdk/s3-request-presigner": "^3.787.0",
|
|
"@google/genai": "^1.50.1",
|
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
"@supabase/supabase-js": "^2.49.4",
|
|
"cors": "^2.8.5",
|
|
"docx": "^9.5.0",
|
|
"dotenv": "^17.4.1",
|
|
"express": "^4.21.2",
|
|
"express-rate-limit": "^8.5.1",
|
|
"fast-diff": "^1.3.0",
|
|
"fast-xml-parser": "^5.7.1",
|
|
"helmet": "^8.1.0",
|
|
"jszip": "^3.10.1",
|
|
"libreoffice-convert": "^1.6.0",
|
|
"mammoth": "^1.9.0",
|
|
"multer": "^1.4.5-lts.2",
|
|
"pdfjs-dist": "^4.10.38",
|
|
"resend": "^4.5.1",
|
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
|
|
"zod": "^3.25.76"
|
|
},
|
|
"devDependencies": {
|
|
"@types/cors": "^2.8.17",
|
|
"@types/express": "^4.17.21",
|
|
"@types/multer": "^1.4.12",
|
|
"@types/node": "^22.14.1",
|
|
"@vitest/coverage-v8": "^4.1.9",
|
|
"prettier": "^3.8.1",
|
|
"tsx": "^4.19.3",
|
|
"typescript": "^5.8.3",
|
|
"vitest": "^4.1.9"
|
|
},
|
|
"license": "AGPL-3.0-only"
|
|
}
|