feat: add protection lease concept for time-limited clone protection

Summary

This MR implements a protection lease concept for database clones, replacing infinite deletion protection with time-limited protection.

Closes #669 (closed)

Key features

  • Variable protection duration: Users can select from preset durations (1h, 12h, 1-7d, 14d, 30d, or "forever" if allowed)
  • Admin-configurable maximum: Admins can set protectionMaxDurationMinutes to cap the maximum duration users can select
  • UI dropdown filtering: Options are automatically filtered based on admin's max duration setting
  • CLI support: Modified the --protection flag to process duration (1440, 0) and boolean (true/false) values to clone create and clone update commands
  • API support: Added protectionDurationMinutes parameter to create/update clone endpoints
  • Webhook events: Added clone_protection_expiring and clone_protection_expired events for enterprise notifications
  • Background monitoring: Protection leases are checked every 5 minutes

Configuration

cloning:
  protectionLeaseDurationMinutes: 1440    # Default protection (1 day)
  protectionMaxDurationMinutes: 10080     # Max allowed (7 days); 0 = no limit
  protectionExpiryWarningMinutes: 1440    # Warning 24h before expiry

API

  • POST /clone - accepts protectionDurationMinutes (0 = forever, omit for default)
  • PATCH /clone/{id} - accepts protectionDurationMinutes to extend/modify protection

CLI

# Create protected clone for 2 days
dblab clone create --protected 2880 ...

# Update clone protection to 7 days  
dblab clone update --protected 10080 clone-id

# Create protected clone forever
dblab clone create --protected 0 ...

OR 

dblab clone create --protected true ...
Edited by Artyom Kartasov

Merge request reports

Loading