Added webhook idempotency via Cache-based event ID deduplication in BuilderWebhookController, preventing duplicate
event processing when the same webhook is delivered multiple times
Added pusher_active flag support in webhook payloads; builder events now use broadcastWhen() to conditionally skip
Pusher/Reverb broadcasting when the builder's own Pusher client already delivered the event, eliminating duplicate
messages on the frontend
Added SSL retry endpoint (POST /project/{project}/domain/retry-ssl) with throttle middleware, allowing users to
manually re-trigger failed SSL provisioning from the custom domain settings UI
Added SSL status polling in CustomDomainCard frontend component with jitter-based intervals, auto-expiry after
timeout, and real-time status feedback (active/failed/checking)
Added "Retry SSL Provisioning" button in CustomDomainCard when SSL status is failed, replacing the previous advice
to remove and re-add the domain
Added nginx config cleanup (sites-enabled, sites-available, reload) when removing a custom domain via
ProjectCustomDomainController::destroy
Added try_files directive to nginx custom-domain template for proper asset fallback routing
Added ShouldBeUnique interface to RecoverWorkspaceBuild job with 120-second uniqueness window per project,
preventing duplicate recovery attempts
Added frontend event deduplication in useBuilderChat: status events dedup by status+message key, thinking events
dedup by content, and complete events fire only once per session via completedSessionRef
Added shared pollStatus callback with 2-second debounce in useBuilderChat, consolidating duplicate polling logic
between the running-state fallback and visibility-change handlers
Added channel stability improvements in useUserChannel: tracks current channel name to prevent redundant
resubscriptions, properly unsubscribes when switching users, and adds dedicated unmount cleanup
Added broadcastConfigKey memoization in useUserChannel to prevent unnecessary Echo reconnections when config object
reference changes
Added CustomDomainCard test suite (329 lines) covering SSL polling, retry, and domain verification flows
Added BuilderWebhookTest cases for webhook idempotency and duplicate event rejection
Added ProvisionCustomDomainSsl unit test for nginx config path handling
Added useUserChannel test cases for channel stability and cleanup behavior
Fixed ProvisionCustomDomainSsl writing nginx config to wrong path — now correctly moves to
/etc/nginx/sites-available/ directory
Fixed Stripe plugin breaking on API version 2026-01-28+ where current_period_end moved from subscription to items;
added getSubscriptionPeriodEnd() helper that checks both locations with fallback
Fixed all payment gateway webhook handlers (Stripe, PayPal, Paystack, Razorpay, Crypto.com, YooKassa) catching only
\Exception instead of \Throwable, missing fatal errors; now catches \Throwable and returns 500 to enable gateway
retries instead of silently returning 200
Fixed PayPal and Crypto.com using config('app.name') for product/subscription names; now uses
SystemSetting::get('site_name') with config('app.name') as fallback
Updated translations across all 10 languages with new SSL retry/polling keys
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.