Security & Data Integrity: - Centralized transaction helper with deadlock retry (exponential backoff) - SafeQueryBuilder for safe parameterized queries - Zod-based input validation middleware - Audit logging to Outline's events table Performance: - Cursor-based pagination for large datasets - Pool monitoring with configurable alerts - Database index migrations for optimal query performance Changes: - Refactored bulk-operations, desk-sync, export-import to use centralized transaction helper - Added 7 new utility modules (audit, monitoring, pagination, query-builder, transaction, validation) - Created migrations/001_indexes.sql with 40+ recommended indexes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9.3 KiB
Changelog
All notable changes to this project will be documented in this file.
[1.2.2] - 2026-01-31
Security
-
SQL Injection Prevention: Fixed 21 SQL injection vulnerabilities across analytics, advanced-search, and search-queries modules
- Replaced string interpolation with parameterized queries for all user inputs
- Added
validateDaysInterval()function for safe interval validation - Added
isValidISODate()function for date format validation - Added
validatePeriod()function for period parameter validation - All UUID validations now occur BEFORE string construction
- Using
make_interval(days => N)for safe interval expressions
-
Transaction Support: Added atomic operations for bulk operations
bulk-operations.ts: All 6 bulk operations now use transactionsdesk-sync.ts: Create project doc and link task use transactionsexport-import.ts: Import markdown folder uses transactions
-
Rate Limiting: Added automatic cleanup of expired entries (every 5 minutes)
Added
-
Transaction Helper (
src/utils/transaction.ts): Centralized transaction management with advanced featureswithTransaction(): Execute operations with automatic retry for deadlocks (exponential backoff + jitter)withTransactionNoRetry(): Execute without retry for operations with side effectswithReadOnlyTransaction(): Read-only transactions with SERIALIZABLE isolationSavepointclass: Support for nested transaction-like behavior- Configurable retry (maxRetries, baseDelayMs, maxDelayMs, timeoutMs)
- Automatic detection of retryable PostgreSQL errors (40001, 40P01, 55P03)
-
SafeQueryBuilder (
src/utils/query-builder.ts): Helper class for building parameterized queries- Automatic parameter index management
- Built-in UUID validation (
buildUUIDEquals,buildUUIDIn) - ILIKE helpers for case-insensitive search (
buildILike,buildILikePrefix) - Comparison operators (
buildEquals,buildBetween,buildGreaterThan, etc.) - Array operators (
buildIn,buildNotIn) - NULL checks (
buildIsNull,buildIsNotNull) - Condition builder with
addCondition()andaddConditionIf()
-
Input Validation (
src/utils/validation.ts): Zod-based validation system- Common schemas: uuid, email, pagination, isoDate, permission, userRole
withValidation()middleware for automatic tool input validation- Helper functions:
validateUUIDs(),validateEnum(),validateStringLength(),validateNumberRange() toolSchemaswith pre-built schemas for common operations
-
Audit Logging (
src/utils/audit.ts): Automatic logging of write operationslogAudit(): Log single audit event to Outline's events tablelogAuditBatch(): Batch logging for bulk operationswithAuditLog()middleware for automatic logging on toolsAuditEventsconstants for all operation typescreateTeamAuditLogger(): Team-scoped audit logger factory
-
Database Indexes (
migrations/001_indexes.sql): Performance optimization indexes- Full-text search GIN index for documents (10-100x faster searches)
- Collection and membership lookup indexes (10x faster permission checks)
- Event/audit log indexes (5-20x faster analytics)
- User interaction indexes (stars, pins, views)
- Composite indexes for common query patterns
- See
migrations/README.mdfor usage instructions
-
Pool Monitoring (
src/utils/monitoring.ts): Connection pool health monitoringPoolMonitorclass: Continuous monitoring with configurable alertsmonitorPool(): Quick setup function to start monitoringcheckPoolHealth(): One-time health check with issues listlogPoolStats(): Debug helper for current pool status- Configurable thresholds (warning at 80%, critical at 95%)
- Automatic alerting for saturation and waiting connections
- Statistics history with averages over time
-
Cursor-Based Pagination (
src/utils/pagination.ts): Efficient pagination for large datasetspaginateWithCursor(): High-level pagination helperbuildCursorQuery(): Build query parts for cursor paginationprocessCursorResults(): Process results with cursor generationencodeCursor()/decodeCursor(): Base64url cursor encoding- Compound cursors with secondary field for stable sorting
- Bidirectional pagination (next/prev cursors)
- Optional total count with extra query
- Configurable limits (default 25, max 100)
Changed
- Refactored security utilities with new validation functions
- Improved error messages for invalid input parameters
- Consolidated transaction helpers from individual tool files to centralized module
- Updated utils/index.ts to export all new modules
[1.2.1] - 2026-01-31
Added
- Export/Import (2 tools): export_collection_to_markdown, import_markdown_folder - Advanced Markdown export/import with hierarchy
- Desk Sync (2 tools): create_desk_project_doc, link_desk_task - Desk CRM integration for project documentation
Changed
- Total tools increased from 160 to 164
[1.2.0] - 2026-01-31
Added
- Teams (5 tools): get, update, stats, domains, settings - Team/workspace management
- Integrations (6 tools): list, get, create, update, delete, sync - External integrations (Slack, embeds)
- Notifications (4 tools): list, mark read, mark all read, settings - User notification management
- Subscriptions (4 tools): list, subscribe, unsubscribe, settings - Document subscription management
- Templates (5 tools): list, get, create from, convert to/from - Document template management
- Imports (4 tools): list, status, create, cancel - Import job management
- Emojis (3 tools): list, create, delete - Custom emoji management
- User Permissions (3 tools): list, grant, revoke - Document/collection permission management
- Bulk Operations (6 tools): archive, delete, move, restore documents; add/remove users from collection
- Advanced Search (6 tools): advanced search, facets, recent, user activity, orphaned, duplicates
- Analytics (6 tools): overview, user activity, content insights, collection stats, growth metrics, search analytics
Changed
- Total tools increased from 108 to 160
- Updated module exports and index files
- Improved database schema compatibility
[1.1.0] - 2026-01-31
Added
- Stars (3 tools): list, create, delete - Bookmark documents/collections for quick access
- Pins (3 tools): list, create, delete - Pin important documents to collection tops
- Views (2 tools): list, create - Track document views and view counts
- Reactions (3 tools): list, create, delete - Emoji reactions on comments
- API Keys (4 tools): list, create, update, delete - Manage programmatic access
- Webhooks (4 tools): list, create, update, delete - Event notification subscriptions
- Backlinks (1 tool): list - View document link references (read-only view)
- Search Queries (2 tools): list, stats - Search analytics and popular queries
Changed
- Total tools increased from 86 to 108
[1.0.1] - 2026-01-31
Fixed
- Users: Adapted to Outline schema - use
roleenum instead ofisAdmin/isViewer/isSuspendedbooleans - Users: Removed non-existent
usernamecolumn - Groups: Fixed
group_userstable queries - nodeletedAtcolumn, composite PK - Groups: Fixed ambiguous column references in subqueries
- Attachments: Removed non-existent
urlanddeletedAtcolumns - Attachments: Changed delete to hard delete (no soft delete support)
- Auth: Use
suspendedAt IS NOT NULLfor suspended count, returnroleinstead ofisAdmin - Comments: Use
role='admin'for admin user queries - Documents: Use
suspendedAt IS NULLfor active user checks - Events: Return
actorRoleinstead ofactorIsAdmin - Shares: Use
role='admin'for admin user queries
Changed
- Users suspend/activate now use
suspendedAtcolumn instead of boolean - Groups member count uses correct join without deletedAt filter
- All modules validated against Outline v0.78 PostgreSQL schema
[1.0.0] - 2026-01-31
Added
- Initial release of MCP Outline PostgreSQL
- 86 tools across 12 modules for direct PostgreSQL access to Outline Wiki
- Documents (19 tools): CRUD, search, archive, move, templates, memberships
- Collections (14 tools): CRUD, user/group memberships, export
- Users (9 tools): CRUD, suspend, activate, promote, demote
- Groups (8 tools): CRUD, memberships management
- Comments (6 tools): CRUD, resolve functionality
- Shares (5 tools): CRUD, revoke public links
- Revisions (3 tools): list, info, compare versions
- Events (3 tools): audit log, statistics
- Attachments (5 tools): CRUD, storage statistics
- File Operations (4 tools): import/export job management
- OAuth (8 tools): OAuth clients and authentications
- Auth (2 tools): authentication info and config
- PostgreSQL client with connection pooling
- Rate limiting and security utilities
- Full TypeScript implementation with type safety
- MCP SDK v1.0.0 compatibility
Technical
- Direct SQL access (not Outline API) for better performance
- Parameterized queries for SQL injection protection
- Soft delete support across all entities
- Full-text search using PostgreSQL tsvector
- Pagination and sorting on all list operations
Developed by Descomplicar® | descomplicar.pt