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
protectionMaxDurationMinutesto 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
--protectionflag to process duration (1440, 0) and boolean (true/false) values toclone createandclone updatecommands -
API support: Added
protectionDurationMinutesparameter to create/update clone endpoints -
Webhook events: Added
clone_protection_expiringandclone_protection_expiredevents 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- acceptsprotectionDurationMinutes(0 = forever, omit for default) -
PATCH /clone/{id}- acceptsprotectionDurationMinutesto 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